WebKit Bugzilla
Attachment 341241 Details for
Bug 185932
: Make a memory test where we can validate JSCs mini memory mode
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
a-backup.diff (text/plain), 1.60 MB, created by
Saam Barati
on 2018-05-24 19:58:42 PDT
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Saam Barati
Created:
2018-05-24 19:58:42 PDT
Size:
1.60 MB
patch
obsolete
>Index: PerformanceTests/ChangeLog >=================================================================== >--- PerformanceTests/ChangeLog (revision 232148) >+++ PerformanceTests/ChangeLog (working copy) >@@ -1,3 +1,27 @@ >+2018-05-24 Saam Barati <sbarati@apple.com> >+ >+ Have a memory test where we can validate JSCs mini memory mode >+ https://bugs.webkit.org/show_bug.cgi?id=185932 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ We add a directory here with the contents of the testmem benchmark. >+ To run it, use `Tools/Scripts/run-testmem`. To add new tests in the future, >+ you just need to add JS files to this directory. >+ >+ * testmem: Added. >+ * testmem/air.js: Added. >+ * testmem/base64.js: Added. >+ * testmem/basic.js: Added. >+ * testmem/box2d.js: Added. >+ * testmem/crypto-md5.js: Added. >+ * testmem/date-format-tofte.js: Added. >+ * testmem/earley-boyer.js: Added. >+ * testmem/hash-map.js: Added. >+ * testmem/regex-dna.js: Added. >+ * testmem/splay.js: Added. >+ * testmem/tagcloud.js: Added. >+ > 2018-05-22 Ryan Haddad <ryanhaddad@apple.com> > > Unreviewed, rolling out r232052. >Index: PerformanceTests/testmem/air.js >=================================================================== >--- PerformanceTests/testmem/air.js (nonexistent) >+++ PerformanceTests/testmem/air.js (working copy) >@@ -0,0 +1,14486 @@ >+'use strict';/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+// This file is for misc symbols. >+ >+// B3 types >+const Void = Symbol("Void"); >+const Int32 = Symbol("Int32"); >+const Int64 = Symbol("Int64"); >+const Float = Symbol("Float"); >+const Double = Symbol("Double"); >+ >+// Arg type >+const GP = Symbol("GP"); >+const FP = Symbol("FP"); >+ >+// Stack slot kind >+const Locked = Symbol("Locked"); >+const Spill = Symbol("Spill"); >+ >+// Frequency class >+const Normal = Symbol("Normal"); >+const Rare = Symbol("Rare"); >+ >+// Relational conditions >+const Equal = Symbol("Equal"); >+const NotEqual = Symbol("NotEqual"); >+const Above = Symbol("Above"); >+const AboveOrEqual = Symbol("AboveOrEqual"); >+const Below = Symbol("Below"); >+const BelowOrEqual = Symbol("BelowOrEqual"); >+const GreaterThan = Symbol("GreaterThan"); >+const GreaterThanOrEqual = Symbol("GreaterThanOrEqual"); >+const LessThan = Symbol("LessThan"); >+const LessThanOrEqual = Symbol("LessThanOrEqual"); >+ >+function relCondCode(cond) >+{ >+ switch (cond) { >+ case Equal: >+ return 4; >+ case NotEqual: >+ return 5; >+ case Above: >+ return 7; >+ case AboveOrEqual: >+ return 3; >+ case Below: >+ return 2; >+ case BelowOrEqual: >+ return 6; >+ case GreaterThan: >+ return 15; >+ case GreaterThanOrEqual: >+ return 13; >+ case LessThan: >+ return 12; >+ case LessThanOrEqual: >+ return 14; >+ default: >+ throw new Error("Bad rel cond"); >+ } >+} >+ >+// Result conditions >+const Overflow = Symbol("Overflow"); >+const Signed = Symbol("Signed"); >+const PositiveOrZero = Symbol("PositiveOrZero"); >+const Zero = Symbol("Zero"); >+const NonZero = Symbol("NonZero"); >+ >+function resCondCode(cond) >+{ >+ switch (cond) { >+ case Overflow: >+ return 0; >+ case Signed: >+ return 8; >+ case PositiveOrZero: >+ return 9; >+ case Zero: >+ return 4; >+ case NonZero: >+ return 5; >+ default: >+ throw new Error("Bad res cond: " + cond.toString()); >+ } >+} >+ >+// Double conditions >+const DoubleEqual = Symbol("DoubleEqual"); >+const DoubleNotEqual = Symbol("DoubleNotEqual"); >+const DoubleGreaterThan = Symbol("DoubleGreaterThan"); >+const DoubleGreaterThanOrEqual = Symbol("DoubleGreaterThanOrEqual"); >+const DoubleLessThan = Symbol("DoubleLessThan"); >+const DoubleLessThanOrEqual = Symbol("DoubleLessThanOrEqual"); >+const DoubleEqualOrUnordered = Symbol("DoubleEqualOrUnordered"); >+const DoubleNotEqualOrUnordered = Symbol("DoubleNotEqualOrUnordered"); >+const DoubleGreaterThanOrUnordered = Symbol("DoubleGreaterThanOrUnordered"); >+const DoubleGreaterThanOrEqualOrUnordered = Symbol("DoubleGreaterThanOrEqualOrUnordered"); >+const DoubleLessThanOrUnordered = Symbol("DoubleLessThanOrUnordered"); >+const DoubleLessThanOrEqualOrUnordered = Symbol("DoubleLessThanOrEqualOrUnordered"); >+ >+function doubleCondCode(cond) >+{ >+ const bitInvert = 0x10; >+ const bitSpecial = 0x20; >+ switch (cond) { >+ case DoubleEqual: >+ return 4 | bitSpecial; >+ case DoubleNotEqual: >+ return 5; >+ case DoubleGreaterThan: >+ return 7; >+ case DoubleGreaterThanOrEqual: >+ return 3; >+ case DoubleLessThan: >+ return 7 | bitInvert; >+ case DoubleLessThanOrEqual: >+ return 3 | bitInvert; >+ case DoubleEqualOrUnordered: >+ return 4; >+ case DoubleNotEqualOrUnordered: >+ return 5 | bitSpecial; >+ case DoubleGreaterThanOrUnordered: >+ return 2 | bitInvert; >+ case DoubleGreaterThanOrEqualOrUnordered: >+ return 6 | bitInvert; >+ case DoubleLessThanOrUnordered: >+ return 2; >+ case DoubleLessThanOrEqualOrUnordered: >+ return 6; >+ default: >+ throw new Error("Bad cond"); >+ } >+} >+ >+// Define pointerType() >+const Ptr = 64; >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class TmpBase { >+ get isGP() { return this.type == GP; } >+ get isFP() { return this.type == FP; } >+ >+ get isGPR() { return this.isReg && this.isGP; } >+ get isFPR() { return this.isReg && this.isFP; } >+ >+ get reg() >+ { >+ if (!this.isReg) >+ throw new Error("Called .reg on non-Reg"); >+ return this; >+ } >+ >+ get gpr() >+ { >+ if (!this.isGPR) >+ throw new Error("Called .gpr on non-GPR"); >+ return this; >+ } >+ >+ get fpr() >+ { >+ if (!this.isFPR) >+ throw new Error("Called .fpr on non-FPR"); >+ return this; >+ } >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class Arg { >+ constructor() >+ { >+ this._kind = Arg.Invalid; >+ } >+ >+ static isAnyUse(role) >+ { >+ switch (role) { >+ case Arg.Use: >+ case Arg.ColdUse: >+ case Arg.UseDef: >+ case Arg.UseZDef: >+ case Arg.LateUse: >+ case Arg.LateColdUse: >+ case Arg.Scratch: >+ return true; >+ case Arg.Def: >+ case Arg.ZDef: >+ case Arg.UseAddr: >+ case Arg.EarlyDef: >+ return false; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static isColdUse(role) >+ { >+ switch (role) { >+ case Arg.ColdUse: >+ case Arg.LateColdUse: >+ return true; >+ case Arg.Use: >+ case Arg.UseDef: >+ case Arg.UseZDef: >+ case Arg.LateUse: >+ case Arg.Def: >+ case Arg.ZDef: >+ case Arg.UseAddr: >+ case Arg.Scratch: >+ case Arg.EarlyDef: >+ return false; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static isWarmUse(role) >+ { >+ return Arg.isAnyUse(role) && !Arg.isColdUse(role); >+ } >+ >+ static cooled(role) >+ { >+ switch (role) { >+ case Arg.ColdUse: >+ case Arg.LateColdUse: >+ case Arg.UseDef: >+ case Arg.UseZDef: >+ case Arg.Def: >+ case Arg.ZDef: >+ case Arg.UseAddr: >+ case Arg.Scratch: >+ case Arg.EarlyDef: >+ return role; >+ case Arg.Use: >+ return Arg.ColdUse; >+ case Arg.LateUse: >+ return Arg.LateColdUse; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static isEarlyUse(role) >+ { >+ switch (role) { >+ case Arg.Use: >+ case Arg.ColdUse: >+ case Arg.UseDef: >+ case Arg.UseZDef: >+ return true; >+ case Arg.Def: >+ case Arg.ZDef: >+ case Arg.UseAddr: >+ case Arg.LateUse: >+ case Arg.LateColdUse: >+ case Arg.Scratch: >+ case Arg.EarlyDef: >+ return false; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static isLateUse(role) >+ { >+ switch (role) { >+ case Arg.LateUse: >+ case Arg.LateColdUse: >+ case Arg.Scratch: >+ return true; >+ case Arg.ColdUse: >+ case Arg.Use: >+ case Arg.UseDef: >+ case Arg.UseZDef: >+ case Arg.Def: >+ case Arg.ZDef: >+ case Arg.UseAddr: >+ case Arg.EarlyDef: >+ return false; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static isAnyDef(role) >+ { >+ switch (role) { >+ case Arg.Use: >+ case Arg.ColdUse: >+ case Arg.UseAddr: >+ case Arg.LateUse: >+ case Arg.LateColdUse: >+ return false; >+ case Arg.Def: >+ case Arg.UseDef: >+ case Arg.ZDef: >+ case Arg.UseZDef: >+ case Arg.EarlyDef: >+ case Arg.Scratch: >+ return true; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static isEarlyDef(role) >+ { >+ switch (role) { >+ case Arg.Use: >+ case Arg.ColdUse: >+ case Arg.UseAddr: >+ case Arg.LateUse: >+ case Arg.Def: >+ case Arg.UseDef: >+ case Arg.ZDef: >+ case Arg.UseZDef: >+ case Arg.LateColdUse: >+ return false; >+ case Arg.EarlyDef: >+ case Arg.Scratch: >+ return true; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static isLateDef(role) >+ { >+ switch (role) { >+ case Arg.Use: >+ case Arg.ColdUse: >+ case Arg.UseAddr: >+ case Arg.LateUse: >+ case Arg.EarlyDef: >+ case Arg.Scratch: >+ case Arg.LateColdUse: >+ return false; >+ case Arg.Def: >+ case Arg.UseDef: >+ case Arg.ZDef: >+ case Arg.UseZDef: >+ return true; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static isZDef(role) >+ { >+ switch (role) { >+ case Arg.Use: >+ case Arg.ColdUse: >+ case Arg.UseAddr: >+ case Arg.LateUse: >+ case Arg.Def: >+ case Arg.UseDef: >+ case Arg.EarlyDef: >+ case Arg.Scratch: >+ case Arg.LateColdUse: >+ return false; >+ case Arg.ZDef: >+ case Arg.UseZDef: >+ return true; >+ default: >+ throw new Error("Bad role"); >+ } >+ } >+ >+ static typeForB3Type(type) >+ { >+ switch (type) { >+ case Int32: >+ case Int64: >+ return GP; >+ case Float: >+ case Double: >+ return FP; >+ default: >+ throw new Error("Bad B3 type"); >+ } >+ } >+ >+ static widthForB3Type(type) >+ { >+ switch (type) { >+ case Int32: >+ case Float: >+ return 32; >+ case Int64: >+ case Double: >+ return 64; >+ default: >+ throw new Error("Bad B3 type"); >+ } >+ } >+ >+ static conservativeWidth(type) >+ { >+ return type == GP ? Ptr : 64; >+ } >+ >+ static minimumWidth(type) >+ { >+ return type == GP ? 8 : 32; >+ } >+ >+ static bytes(width) >+ { >+ return width / 8; >+ } >+ >+ static widthForBytes(bytes) >+ { >+ switch (bytes) { >+ case 0: >+ case 1: >+ return 8; >+ case 2: >+ return 16; >+ case 3: >+ case 4: >+ return 32; >+ default: >+ if (bytes > 8) >+ throw new Error("Bad number of bytes"); >+ return 64; >+ } >+ } >+ >+ static createTmp(tmp) >+ { >+ let result = new Arg(); >+ result._kind = Arg.Tmp; >+ result._tmp = tmp; >+ return result; >+ } >+ >+ static fromReg(reg) >+ { >+ return Arg.createTmp(reg); >+ } >+ >+ static createImm(value) >+ { >+ let result = new Arg(); >+ result._kind = Arg.Imm; >+ result._value = value; >+ return result; >+ } >+ >+ static createBigImm(lowValue, highValue = 0) >+ { >+ let result = new Arg(); >+ result._kind = Arg.BigImm; >+ result._lowValue = lowValue; >+ result._highValue = highValue; >+ return result; >+ } >+ >+ static createBitImm(value) >+ { >+ let result = new Arg(); >+ result._kind = Arg.BitImm; >+ result._value = value; >+ return result; >+ } >+ >+ static createBitImm64(lowValue, highValue = 0) >+ { >+ let result = new Arg(); >+ result._kind = Arg.BitImm64; >+ result._lowValue = lowValue; >+ result._highValue = highValue; >+ return result; >+ } >+ >+ static createAddr(base, offset = 0) >+ { >+ let result = new Arg(); >+ result._kind = Arg.Addr; >+ result._base = base; >+ result._offset = offset; >+ return result; >+ } >+ >+ static createStack(slot, offset = 0) >+ { >+ let result = new Arg(); >+ result._kind = Arg.Stack; >+ result._slot = slot; >+ result._offset = offset; >+ return result; >+ } >+ >+ static createCallArg(offset) >+ { >+ let result = new Arg(); >+ result._kind = Arg.CallArg; >+ result._offset = offset; >+ return result; >+ } >+ >+ static createStackAddr(offsetFromFP, frameSize, width) >+ { >+ let result = Arg.createAddr(Reg.callFrameRegister, offsetFromFP); >+ if (!result.isValidForm(width)) >+ result = Arg.createAddr(Reg.stackPointerRegister, offsetFromFP + frameSize); >+ return result; >+ } >+ >+ static isValidScale(scale, width) >+ { >+ switch (scale) { >+ case 1: >+ case 2: >+ case 4: >+ case 8: >+ return true; >+ default: >+ return false; >+ } >+ } >+ >+ static logScale(scale) >+ { >+ switch (scale) { >+ case 1: >+ return 0; >+ case 2: >+ return 1; >+ case 4: >+ return 2; >+ case 8: >+ return 3; >+ default: >+ throw new Error("Bad scale"); >+ } >+ } >+ >+ static createIndex(base, index, scale = 1, offset = 0) >+ { >+ let result = new Arg(); >+ result._kind = Arg.Index; >+ result._base = base; >+ result._index = index; >+ result._scale = scale; >+ result._offset = offset; >+ return result; >+ } >+ >+ static createRelCond(condition) >+ { >+ let result = new Arg(); >+ result._kind = Arg.RelCond; >+ result._condition = condition; >+ return result; >+ } >+ >+ static createResCond(condition) >+ { >+ let result = new Arg(); >+ result._kind = Arg.ResCond; >+ result._condition = condition; >+ return result; >+ } >+ >+ static createDoubleCond(condition) >+ { >+ let result = new Arg(); >+ result._kind = Arg.DoubleCond; >+ result._condition = condition; >+ return result; >+ } >+ >+ static createWidth(width) >+ { >+ let result = new Arg(); >+ result._kind = Arg.Width; >+ result._width = width; >+ return result; >+ } >+ >+ static createSpecial() >+ { >+ let result = new Arg(); >+ result._kind = Arg.Special; >+ return result; >+ } >+ >+ get kind() { return this._kind; } >+ get isTmp() { return this._kind == Arg.Tmp; } >+ get isImm() { return this._kind == Arg.Imm; } >+ get isBigImm() { return this._kind == Arg.BigImm; } >+ get isBitImm() { return this._kind == Arg.BitImm; } >+ get isBitImm64() { return this._kind == Arg.BitImm64; } >+ get isSomeImm() >+ { >+ switch (this._kind) { >+ case Arg.Imm: >+ case Arg.BitImm: >+ return true; >+ default: >+ return false; >+ } >+ } >+ get isSomeBigImm() >+ { >+ switch (this._kind) { >+ case Arg.BigImm: >+ case Arg.BitImm64: >+ return true; >+ default: >+ return false; >+ } >+ } >+ get isAddr() { return this._kind == Arg.Addr; } >+ get isStack() { return this._kind == Arg.Stack; } >+ get isCallArg() { return this._kind == Arg.CallArg; } >+ get isIndex() { return this._kind == Arg.Index; } >+ get isMemory() >+ { >+ switch (this._kind) { >+ case Arg.Addr: >+ case Arg.Stack: >+ case Arg.CallArg: >+ case Arg.Index: >+ return true; >+ default: >+ return false; >+ } >+ } >+ get isStackMemory() >+ { >+ switch (this._kind) { >+ case Arg.Addr: >+ return this._base == Reg.callFrameRegister >+ || this._base == Reg.stackPointerRegister; >+ case Arg.Stack: >+ case Arg.CallArg: >+ return true; >+ default: >+ return false; >+ } >+ } >+ get isRelCond() { return this._kind == Arg.RelCond; } >+ get isResCond() { return this._kind == Arg.ResCond; } >+ get isDoubleCond() { return this._kind == Arg.DoubleCond; } >+ get isCondition() >+ { >+ switch (this._kind) { >+ case Arg.RelCond: >+ case Arg.ResCond: >+ case Arg.DoubleCond: >+ return true; >+ default: >+ return false; >+ } >+ } >+ get isWidth() { return this._kind == Arg.Width; } >+ get isSpecial() { return this._kind == Arg.Special; } >+ get isAlive() { return this.isTmp || this.isStack; } >+ >+ get tmp() >+ { >+ if (this._kind != Arg.Tmp) >+ throw new Error("Called .tmp for non-tmp"); >+ return this._tmp; >+ } >+ >+ get value() >+ { >+ if (!this.isSomeImm) >+ throw new Error("Called .value for non-imm"); >+ return this._value; >+ } >+ >+ get lowValue() >+ { >+ if (!this.isSomeBigImm) >+ throw new Error("Called .lowValue for non-big-imm"); >+ return this._lowValue; >+ } >+ >+ get highValue() >+ { >+ if (!this.isSomeBigImm) >+ throw new Error("Called .highValue for non-big-imm"); >+ return this._highValue; >+ } >+ >+ get base() >+ { >+ switch (this._kind) { >+ case Arg.Addr: >+ case Arg.Index: >+ return this._base; >+ default: >+ throw new Error("Called .base for non-address"); >+ } >+ } >+ >+ get hasOffset() { return this.isMemory; } >+ >+ get offset() >+ { >+ switch (this._kind) { >+ case Arg.Addr: >+ case Arg.Index: >+ case Arg.Stack: >+ case Arg.CallArg: >+ return this._offset; >+ default: >+ throw new Error("Called .offset for non-address"); >+ } >+ } >+ >+ get stackSlot() >+ { >+ if (this._kind != Arg.Stack) >+ throw new Error("Called .stackSlot for non-address"); >+ return this._slot; >+ } >+ >+ get index() >+ { >+ if (this._kind != Arg.Index) >+ throw new Error("Called .index for non-Index"); >+ return this._index; >+ } >+ >+ get scale() >+ { >+ if (this._kind != Arg.Index) >+ throw new Error("Called .scale for non-Index"); >+ return this._scale; >+ } >+ >+ get logScale() >+ { >+ return Arg.logScale(this.scale); >+ } >+ >+ get width() >+ { >+ if (this._kind != Arg.Width) >+ throw new Error("Called .width for non-Width"); >+ return this._width; >+ } >+ >+ get isGPTmp() { return this.isTmp && this.tmp.isGP; } >+ get isFPTmp() { return this.isTmp && this.tmp.isFP; } >+ >+ get isGP() >+ { >+ switch (this._kind) { >+ case Arg.Imm: >+ case Arg.BigImm: >+ case Arg.BitImm: >+ case Arg.BitImm64: >+ case Arg.Addr: >+ case Arg.Index: >+ case Arg.Stack: >+ case Arg.CallArg: >+ case Arg.RelCond: >+ case Arg.ResCond: >+ case Arg.DoubleCond: >+ case Arg.Width: >+ case Arg.Special: >+ return true; >+ case Arg.Tmp: >+ return this.isGPTmp; >+ case Arg.Invalid: >+ return false; >+ default: >+ throw new Error("Bad kind"); >+ } >+ } >+ >+ get isFP() >+ { >+ switch (this._kind) { >+ case Arg.Imm: >+ case Arg.BitImm: >+ case Arg.BitImm64: >+ case Arg.RelCond: >+ case Arg.ResCond: >+ case Arg.DoubleCond: >+ case Arg.Width: >+ case Arg.Special: >+ case Arg.Invalid: >+ return false; >+ case Arg.Addr: >+ case Arg.Index: >+ case Arg.Stack: >+ case Arg.CallArg: >+ case Arg.BigImm: >+ return true; >+ case Arg.Tmp: >+ return this.isFPTmp; >+ default: >+ throw new Error("Bad kind"); >+ } >+ } >+ >+ get hasType() >+ { >+ switch (this._kind) { >+ case Arg.Imm: >+ case Arg.BitImm: >+ case Arg.BitImm64: >+ case Arg.Tmp: >+ return true; >+ default: >+ return false; >+ } >+ } >+ >+ get type() >+ { >+ return this.isGP ? GP : FP; >+ } >+ >+ isType(type) >+ { >+ switch (type) { >+ case Arg.GP: >+ return this.isGP; >+ case Arg.FP: >+ return this.isFP; >+ default: >+ throw new Error("Bad type"); >+ } >+ } >+ >+ isCompatibleType(other) >+ { >+ if (this.hasType) >+ return other.isType(this.type); >+ if (other.hasType) >+ return this.isType(other.type); >+ return true; >+ } >+ >+ get isGPR() { return this.isTmp && this.tmp.isGPR; } >+ get gpr() { return this.tmp.gpr; } >+ get isFPR() { return this.isTmp && this.tmp.isFPR; } >+ get fpr() { return this.tmp.fpr; } >+ get isReg() { return this.isTmp && this.tmp.isReg; } >+ get reg() { return this.tmp.reg; } >+ >+ static isValidImmForm(value) >+ { >+ return isRepresentableAsInt32(value); >+ } >+ static isValidBitImmForm(value) >+ { >+ return isRepresentableAsInt32(value); >+ } >+ static isValidBitImm64Form(value) >+ { >+ return isRepresentableAsInt32(value); >+ } >+ >+ static isValidAddrForm(offset, width) >+ { >+ return true; >+ } >+ >+ static isValidIndexForm(scale, offset, width) >+ { >+ if (!isValidScale(scale, width)) >+ return false; >+ return true; >+ } >+ >+ isValidForm(width) >+ { >+ switch (this._kind) { >+ case Arg.Invalid: >+ return false; >+ case Arg.Tmp: >+ return true; >+ case Arg.Imm: >+ return Arg.isValidImmForm(this.value); >+ case Arg.BigImm: >+ return true; >+ case Arg.BitImm: >+ return Arg.isValidBitImmForm(this.value); >+ case Arg.BitImm64: >+ return Arg.isValidBitImm64Form(this.value); >+ case Arg.Addr: >+ case Arg.Stack: >+ case Arg.CallArg: >+ return Arg.isValidAddrForm(this.offset, width); >+ case Arg.Index: >+ return Arg.isValidIndexForm(this.scale, this.offset, width); >+ case Arg.RelCond: >+ case Arg.ResCond: >+ case Arg.DoubleCond: >+ case Arg.Width: >+ case Arg.Special: >+ return true; >+ default: >+ throw new Error("Bad kind"); >+ } >+ } >+ >+ forEachTmpFast(func) >+ { >+ switch (this._kind) { >+ case Arg.Tmp: { >+ let replacement; >+ if (replacement = func(this._tmp)) >+ return Arg.createTmp(replacement); >+ break; >+ } >+ case Arg.Addr: { >+ let replacement; >+ if (replacement = func(this._base)) >+ return Arg.createAddr(replacement, this._offset); >+ break; >+ } >+ case Arg.Index: { >+ let baseReplacement = func(this._base); >+ let indexReplacement = func(this._index); >+ if (baseReplacement || indexReplacement) { >+ return Arg.createIndex( >+ baseReplacement ? baseReplacement : this._base, >+ indexReplacement ? indexReplacement : this._index, >+ this._scale, this._offset); >+ } >+ break; >+ } >+ default: >+ break; >+ } >+ } >+ >+ usesTmp(expectedTmp) >+ { >+ let usesTmp = false; >+ forEachTmpFast(tmp => { >+ usesTmp |= tmp == expectedTmp; >+ }); >+ return usesTmp; >+ } >+ >+ forEachTmp(role, type, width, func) >+ { >+ switch (this._kind) { >+ case Arg.Tmp: { >+ let replacement; >+ if (replacement = func(this._tmp, role, type, width)) >+ return Arg.createTmp(replacement); >+ break; >+ } >+ case Arg.Addr: { >+ let replacement; >+ if (replacement = func(this._base, Arg.Use, GP, role == Arg.UseAddr ? width : Ptr)) >+ return Arg.createAddr(replacement, this._offset); >+ break; >+ } >+ case Arg.Index: { >+ let baseReplacement = func(this._base, Arg.Use, GP, role == Arg.UseAddr ? width : Ptr); >+ let indexReplacement = func(this._index, Arg.Use, GP, role == Arg.UseAddr ? width : Ptr); >+ if (baseReplacement || indexReplacement) { >+ return Arg.createIndex( >+ baseReplacement ? baseReplacement : this._base, >+ indexReplacement ? indexReplacement : this._index, >+ this._scale, this._offset); >+ } >+ break; >+ } >+ default: >+ break; >+ } >+ } >+ >+ is(thing) { return !!thing.extract(this); } >+ as(thing) { return thing.extract(this); } >+ >+ // This lets you say things like: >+ // arg.forEach(Tmp | Reg | Arg | StackSlot, ...) >+ // >+ // It's used for abstract liveness analysis. >+ forEachFast(thing, func) >+ { >+ return thing.forEachFast(this, func); >+ } >+ forEach(thing, role, type, width, func) >+ { >+ return thing.forEach(this, role, type, width, func); >+ } >+ >+ static extract(arg) { return arg; } >+ static forEachFast(arg, func) { return func(arg); } >+ static forEach(arg, role, type, width, func) { return func(arg, role, type, width); } >+ >+ get condition() >+ { >+ switch (this._kind) { >+ case Arg.RelCond: >+ case Arg.ResCond: >+ case Arg.DoubleCond: >+ return this._condition; >+ default: >+ throw new Error("Called .condition for non-condition"); >+ } >+ } >+ >+ get isInvertible() >+ { >+ switch (this._kind) { >+ case Arg.RelCond: >+ case Arg.DoubleCold: >+ return true; >+ case Arg.ResCond: >+ switch (this._condition) { >+ case Zero: >+ case NonZero: >+ case Signed: >+ case PositiveOrZero: >+ return true; >+ default: >+ return false; >+ } >+ default: >+ return false; >+ } >+ } >+ >+ static kindCode(kind) >+ { >+ switch (kind) { >+ case Arg.Invalid: >+ return 0; >+ case Arg.Tmp: >+ return 1; >+ case Arg.Imm: >+ return 2; >+ case Arg.BigImm: >+ return 3; >+ case Arg.BitImm: >+ return 4; >+ case Arg.BitImm64: >+ return 5; >+ case Arg.Addr: >+ return 6; >+ case Arg.Stack: >+ return 7; >+ case Arg.CallArg: >+ return 8; >+ case Arg.Index: >+ return 9; >+ case Arg.RelCond: >+ return 10; >+ case Arg.ResCond: >+ return 11; >+ case Arg.DoubleCond: >+ return 12; >+ case Arg.Special: >+ return 13; >+ case Arg.WidthArg: >+ return 14; >+ default: >+ throw new Error("Bad kind"); >+ } >+ } >+ >+ hash() >+ { >+ let result = Arg.kindCode(this._kind); >+ >+ switch (this._kind) { >+ case Arg.Invalid: >+ case Arg.Special: >+ break; >+ case Arg.Tmp: >+ result += this._tmp.hash(); >+ result |= 0; >+ break; >+ case Arg.Imm: >+ case Arg.BitImm: >+ result += this._value; >+ result |= 0; >+ break; >+ case Arg.BigImm: >+ case Arg.BitImm64: >+ result += this._lowValue; >+ result |= 0; >+ result += this._highValue; >+ result |= 0; >+ break; >+ case Arg.CallArg: >+ result += this._offset; >+ result |= 0; >+ break; >+ case Arg.RelCond: >+ result += relCondCode(this._condition); >+ result |= 0; >+ break; >+ case Arg.ResCond: >+ result += resCondCode(this._condition); >+ result |= 0; >+ break; >+ case Arg.DoubleCond: >+ result += doubleCondCode(this._condition); >+ result |= 0; >+ break; >+ case Arg.WidthArg: >+ result += this._width; >+ result |= 0; >+ break; >+ case Arg.Addr: >+ result += this._offset; >+ result |= 0; >+ result += this._base.hash(); >+ result |= 0; >+ break; >+ case Arg.Index: >+ result += this._offset; >+ result |= 0; >+ result += this._scale; >+ result |= 0; >+ result += this._base.hash(); >+ result |= 0; >+ result += this._index.hash(); >+ result |= 0; >+ break; >+ case Arg.Stack: >+ result += this._offset; >+ result |= 0; >+ result += this.stackSlot.index; >+ result |= 0; >+ break; >+ } >+ >+ return result >>> 0; >+ } >+ >+ toString() >+ { >+ switch (this._kind) { >+ case Arg.Invalid: >+ return "<invalid>"; >+ case Arg.Tmp: >+ return this._tmp.toString(); >+ case Arg.Imm: >+ return "$" + this._value; >+ case Arg.BigImm: >+ case Arg.BitImm64: >+ return "$0x" + this._highValue.toString(16) + ":" + this._lowValue.toString(16); >+ case Arg.Addr: >+ return "" + (this._offset ? this._offset : "") + "(" + this._base + ")"; >+ case Arg.Index: >+ return "" + (this._offset ? this._offset : "") + "(" + this._base + >+ "," + this._index + (this._scale == 1 ? "" : "," + this._scale) + ")"; >+ case Arg.Stack: >+ return "" + (this._offset ? this._offset : "") + "(" + this._slot + ")"; >+ case Arg.CallArg: >+ return "" + (this._offset ? this._offset : "") + "(callArg)"; >+ case Arg.RelCond: >+ case Arg.ResCond: >+ case Arg.DoubleCond: >+ return symbolName(this._condition); >+ case Arg.Special: >+ return "special"; >+ case Arg.Width: >+ return "" + this._value; >+ default: >+ throw new Error("Bad kind"); >+ } >+ } >+} >+ >+// Arg kinds >+Arg.Invalid = Symbol("Invalid"); >+Arg.Tmp = Symbol("Tmp"); >+Arg.Imm = Symbol("Imm"); >+Arg.BigImm = Symbol("BigImm"); >+Arg.BitImm = Symbol("BitImm"); >+Arg.BitImm64 = Symbol("BitImm64"); >+Arg.Addr = Symbol("Addr"); >+Arg.Stack = Symbol("Stack"); >+Arg.CallArg = Symbol("CallArg"); >+Arg.Index = Symbol("Index"); >+Arg.RelCond = Symbol("RelCond"); >+Arg.ResCond = Symbol("ResCond"); >+Arg.DoubleCond = Symbol("DoubleCond"); >+Arg.Special = Symbol("Special"); >+Arg.Width = Symbol("Width"); >+ >+// Arg roles >+Arg.Use = Symbol("Use"); >+Arg.ColdUse = Symbol("ColdUse"); >+Arg.LateUse = Symbol("LateUse"); >+Arg.LateColdUse = Symbol("LateColdUse"); >+Arg.Def = Symbol("Def"); >+Arg.ZDef = Symbol("ZDef"); >+Arg.UseDef = Symbol("UseDef"); >+Arg.UseZDef = Symbol("UseZDef"); >+Arg.EarlyDef = Symbol("EarlyDef"); >+Arg.Scratch = Symbol("Scratch"); >+Arg.UseAddr = Symbol("UseAddr"); >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class BasicBlock { >+ constructor(index, frequency) >+ { >+ this._index = index; >+ this._frequency = frequency; >+ this._insts = []; >+ this._successors = []; >+ this._predecessors = []; >+ } >+ >+ get index() { return this._index; } >+ get size() { return this._insts.length; } >+ >+ [Symbol.iterator]() >+ { >+ return this._insts[Symbol.iterator](); >+ } >+ >+ at(index) >+ { >+ if (index >= this._insts.length) >+ throw new Error("Out of bounds access"); >+ return this._insts[index]; >+ } >+ >+ get(index) >+ { >+ if (index < 0 || index >= this._insts.length) >+ return null; >+ return this._insts[index]; >+ } >+ >+ get last() >+ { >+ return this._insts[this._insts.length - 1]; >+ } >+ >+ get insts() { return this._insts; } >+ >+ append(inst) { this._insts.push(inst); } >+ >+ get numSuccessors() { return this._successors.length; } >+ successor(index) { return this._successors[index]; } >+ get successors() { return this._successors; } >+ >+ successorBlock(index) { return this._successors[index].block; } >+ get successorBlocks() >+ { >+ return new Proxy(this._successors, { >+ get(target, property) { >+ if (typeof property == "string" >+ && (property | 0) == property) >+ return target[property].block; >+ return target[property]; >+ }, >+ >+ set(target, property, value) { >+ if (typeof property == "string" >+ && (property | 0) == property) { >+ var oldValue = target[property]; >+ target[property] = new FrequentedBlock( >+ value, oldValue ? oldValue.frequency : Normal); >+ return; >+ } >+ >+ target[property] = value; >+ } >+ }); >+ } >+ >+ get numPredecessors() { return this._predecessors.length; } >+ predecessor(index) { return this._predecessors[index]; } >+ get predecessors() { return this._predecessors; } >+ >+ get frequency() { return this._frequency; } >+ >+ toString() >+ { >+ return "#" + this._index; >+ } >+ >+ get headerString() >+ { >+ let result = ""; >+ result += `BB${this}: ; frequency = ${this._frequency}\n`; >+ if (this._predecessors.length) >+ result += " Predecessors: " + this._predecessors.join(", ") + "\n"; >+ return result; >+ } >+ >+ get footerString() >+ { >+ let result = ""; >+ if (this._successors.length) >+ result += " Successors: " + this._successors.join(", ") + "\n"; >+ return result; >+ } >+ >+ toStringDeep() >+ { >+ let result = ""; >+ result += this.headerString; >+ for (let inst of this) >+ result += ` ${inst}\n`; >+ result += this.footerString; >+ return result; >+ } >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class Code { >+ constructor() >+ { >+ this._blocks = []; >+ this._stackSlots = []; >+ this._gpTmps = []; >+ this._fpTmps = []; >+ this._callArgAreaSize = 0; >+ this._frameSize = 0; >+ } >+ >+ addBlock(frequency = 1) >+ { >+ return addIndexed(this._blocks, BasicBlock, frequency); >+ } >+ >+ addStackSlot(byteSize, kind) >+ { >+ return addIndexed(this._stackSlots, StackSlot, byteSize, kind); >+ } >+ >+ newTmp(type) >+ { >+ return addIndexed(this[`_${lowerSymbolName(type)}Tmps`], Tmp, type); >+ } >+ >+ get size() { return this._blocks.length; } >+ at(index) { return this._blocks[index]; } >+ >+ [Symbol.iterator]() >+ { >+ return this._blocks[Symbol.iterator](); >+ } >+ >+ get blocks() { return this._blocks; } >+ get stackSlots() { return this._stackSlots; } >+ >+ tmps(type) { return this[`_${lowerSymbolName(type)}Tmps`]; } >+ >+ get callArgAreaSize() { return this._callArgAreaSize; } >+ >+ requestCallArgAreaSize(size) >+ { >+ this._callArgAreaSize = Math.max(this._callArgAreaSize, roundUpToMultipleOf(stackAlignmentBytes, size)); >+ } >+ >+ get frameSize() { return this._frameSize; } >+ >+ setFrameSize(frameSize) { this._frameSize = frameSize; } >+ >+ hash() >+ { >+ let result = 0; >+ for (let block of this) { >+ result *= 1000001; >+ result |= 0; >+ for (let inst of block) { >+ result *= 97; >+ result |= 0; >+ result += inst.hash(); >+ result |= 0; >+ } >+ for (let successor of block.successorBlocks) { >+ result *= 7; >+ result |= 0; >+ result += successor.index; >+ result |= 0; >+ } >+ } >+ for (let slot of this.stackSlots) { >+ result *= 101; >+ result |= 0; >+ result += slot.hash(); >+ result |= 0; >+ } >+ return result >>> 0; >+ } >+ >+ toString() >+ { >+ let result = ""; >+ for (let block of this) { >+ result += block.toStringDeep(); >+ } >+ if (this.stackSlots.length) { >+ result += "Stack slots:\n"; >+ for (let slot of this.stackSlots) >+ result += ` ${slot}\n`; >+ } >+ if (this._frameSize) >+ result += `Frame size: ${this._frameSize}\n`; >+ if (this._callArgAreaSize) >+ result += `Call arg area size: ${this._callArgAreaSize}\n`; >+ return result; >+ } >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class FrequentedBlock { >+ constructor(block, frequency) >+ { >+ this.block = block; >+ this.frequency = frequency; >+ } >+ >+ toString() >+ { >+ return (this.frequency == Normal ? "" : "Rare:") + this.block; >+ } >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class Inst { >+ constructor(opcode, args = []) >+ { >+ this._opcode = opcode; >+ this._args = args; >+ } >+ >+ append(...args) >+ { >+ this._args.push(...args); >+ } >+ >+ clear() >+ { >+ this._opcode = Nop; >+ this._args = []; >+ } >+ >+ get opcode() { return this._opcode; } >+ get args() { return this._args; } >+ >+ visitArg(index, func, ...args) >+ { >+ let replacement = func(this._args[index], ...args); >+ if (replacement) >+ this._args[index] = replacement; >+ } >+ >+ forEachTmpFast(func) >+ { >+ for (let i = 0; i < this._args.length; ++i) { >+ let replacement; >+ if (replacement = this._args[i].forEachTmpFast(func)) >+ this._args[i] = replacement; >+ } >+ } >+ >+ forEachArg(func) >+ { >+ Inst_forEachArg(this, func); >+ } >+ >+ forEachTmp(func) >+ { >+ this.forEachArg((arg, role, type, width) => { >+ return arg.forEachTmp(role, type, width, func); >+ }); >+ } >+ >+ forEach(thing, func) >+ { >+ this.forEachArg((arg, role, type, width) => { >+ return arg.forEach(thing, role, type, width, func); >+ }); >+ } >+ >+ static forEachDef(thing, prevInst, nextInst, func) >+ { >+ if (prevInst) { >+ prevInst.forEach( >+ thing, >+ (value, role, type, width) => { >+ if (Arg.isLateDef(role)) >+ return func(value, role, type, width); >+ }); >+ } >+ >+ if (nextInst) { >+ nextInst.forEach( >+ thing, >+ (value, role, type, width) => { >+ if (Arg.isEarlyDef(role)) >+ return func(value, role, type, width); >+ }); >+ } >+ } >+ >+ static forEachDefWithExtraClobberedRegs(thing, prevInst, nextInst, func) >+ { >+ forEachDef(thing, prevInst, nextInst, func); >+ >+ let regDefRole; >+ >+ let reportReg = reg => { >+ let type = reg.isGPR ? GP : FP; >+ func(thing.fromReg(reg), regDefRole, type, Arg.conservativeWidth(type)); >+ }; >+ >+ if (prevInst && prevInst.opcode == Patch) { >+ regDefRole = Arg.Def; >+ prevInst.extraClobberedRegs.forEach(reportReg); >+ } >+ >+ if (nextInst && nextInst.opcode == Patch) { >+ regDefRole = Arg.EarlyDef; >+ nextInst.extraEarlyClobberedRegs.forEach(reportReg); >+ } >+ } >+ >+ get hasNonArgEffects() { return Inst_hasNonArgEffects(this); } >+ >+ hash() >+ { >+ let result = opcodeCode(this.opcode); >+ for (let arg of this.args) { >+ result += arg.hash(); >+ result |= 0; >+ } >+ return result >>> 0; >+ } >+ >+ toString() >+ { >+ return "" + symbolName(this._opcode) + " " + this._args.join(", "); >+ } >+} >+ >+"use strict"; >+// Generated by opcode_generator.rb from JavaScriptCore/b3/air/AirOpcode.opcodes -- do not edit! >+const Nop = Symbol("Nop"); >+const Add32 = Symbol("Add32"); >+const Add8 = Symbol("Add8"); >+const Add16 = Symbol("Add16"); >+const Add64 = Symbol("Add64"); >+const AddDouble = Symbol("AddDouble"); >+const AddFloat = Symbol("AddFloat"); >+const Sub32 = Symbol("Sub32"); >+const Sub64 = Symbol("Sub64"); >+const SubDouble = Symbol("SubDouble"); >+const SubFloat = Symbol("SubFloat"); >+const Neg32 = Symbol("Neg32"); >+const Neg64 = Symbol("Neg64"); >+const NegateDouble = Symbol("NegateDouble"); >+const Mul32 = Symbol("Mul32"); >+const Mul64 = Symbol("Mul64"); >+const MultiplyAdd32 = Symbol("MultiplyAdd32"); >+const MultiplyAdd64 = Symbol("MultiplyAdd64"); >+const MultiplySub32 = Symbol("MultiplySub32"); >+const MultiplySub64 = Symbol("MultiplySub64"); >+const MultiplyNeg32 = Symbol("MultiplyNeg32"); >+const MultiplyNeg64 = Symbol("MultiplyNeg64"); >+const Div32 = Symbol("Div32"); >+const Div64 = Symbol("Div64"); >+const MulDouble = Symbol("MulDouble"); >+const MulFloat = Symbol("MulFloat"); >+const DivDouble = Symbol("DivDouble"); >+const DivFloat = Symbol("DivFloat"); >+const X86ConvertToDoubleWord32 = Symbol("X86ConvertToDoubleWord32"); >+const X86ConvertToQuadWord64 = Symbol("X86ConvertToQuadWord64"); >+const X86Div32 = Symbol("X86Div32"); >+const X86Div64 = Symbol("X86Div64"); >+const Lea = Symbol("Lea"); >+const And32 = Symbol("And32"); >+const And64 = Symbol("And64"); >+const AndDouble = Symbol("AndDouble"); >+const AndFloat = Symbol("AndFloat"); >+const XorDouble = Symbol("XorDouble"); >+const XorFloat = Symbol("XorFloat"); >+const Lshift32 = Symbol("Lshift32"); >+const Lshift64 = Symbol("Lshift64"); >+const Rshift32 = Symbol("Rshift32"); >+const Rshift64 = Symbol("Rshift64"); >+const Urshift32 = Symbol("Urshift32"); >+const Urshift64 = Symbol("Urshift64"); >+const Or32 = Symbol("Or32"); >+const Or64 = Symbol("Or64"); >+const Xor32 = Symbol("Xor32"); >+const Xor64 = Symbol("Xor64"); >+const Not32 = Symbol("Not32"); >+const Not64 = Symbol("Not64"); >+const AbsDouble = Symbol("AbsDouble"); >+const AbsFloat = Symbol("AbsFloat"); >+const CeilDouble = Symbol("CeilDouble"); >+const CeilFloat = Symbol("CeilFloat"); >+const FloorDouble = Symbol("FloorDouble"); >+const FloorFloat = Symbol("FloorFloat"); >+const SqrtDouble = Symbol("SqrtDouble"); >+const SqrtFloat = Symbol("SqrtFloat"); >+const ConvertInt32ToDouble = Symbol("ConvertInt32ToDouble"); >+const ConvertInt64ToDouble = Symbol("ConvertInt64ToDouble"); >+const ConvertInt32ToFloat = Symbol("ConvertInt32ToFloat"); >+const ConvertInt64ToFloat = Symbol("ConvertInt64ToFloat"); >+const CountLeadingZeros32 = Symbol("CountLeadingZeros32"); >+const CountLeadingZeros64 = Symbol("CountLeadingZeros64"); >+const ConvertDoubleToFloat = Symbol("ConvertDoubleToFloat"); >+const ConvertFloatToDouble = Symbol("ConvertFloatToDouble"); >+const Move = Symbol("Move"); >+const Swap32 = Symbol("Swap32"); >+const Swap64 = Symbol("Swap64"); >+const Move32 = Symbol("Move32"); >+const StoreZero32 = Symbol("StoreZero32"); >+const SignExtend32ToPtr = Symbol("SignExtend32ToPtr"); >+const ZeroExtend8To32 = Symbol("ZeroExtend8To32"); >+const SignExtend8To32 = Symbol("SignExtend8To32"); >+const ZeroExtend16To32 = Symbol("ZeroExtend16To32"); >+const SignExtend16To32 = Symbol("SignExtend16To32"); >+const MoveFloat = Symbol("MoveFloat"); >+const MoveDouble = Symbol("MoveDouble"); >+const MoveZeroToDouble = Symbol("MoveZeroToDouble"); >+const Move64ToDouble = Symbol("Move64ToDouble"); >+const Move32ToFloat = Symbol("Move32ToFloat"); >+const MoveDoubleTo64 = Symbol("MoveDoubleTo64"); >+const MoveFloatTo32 = Symbol("MoveFloatTo32"); >+const Load8 = Symbol("Load8"); >+const Store8 = Symbol("Store8"); >+const Load8SignedExtendTo32 = Symbol("Load8SignedExtendTo32"); >+const Load16 = Symbol("Load16"); >+const Load16SignedExtendTo32 = Symbol("Load16SignedExtendTo32"); >+const Store16 = Symbol("Store16"); >+const Compare32 = Symbol("Compare32"); >+const Compare64 = Symbol("Compare64"); >+const Test32 = Symbol("Test32"); >+const Test64 = Symbol("Test64"); >+const CompareDouble = Symbol("CompareDouble"); >+const CompareFloat = Symbol("CompareFloat"); >+const Branch8 = Symbol("Branch8"); >+const Branch32 = Symbol("Branch32"); >+const Branch64 = Symbol("Branch64"); >+const BranchTest8 = Symbol("BranchTest8"); >+const BranchTest32 = Symbol("BranchTest32"); >+const BranchTest64 = Symbol("BranchTest64"); >+const BranchDouble = Symbol("BranchDouble"); >+const BranchFloat = Symbol("BranchFloat"); >+const BranchAdd32 = Symbol("BranchAdd32"); >+const BranchAdd64 = Symbol("BranchAdd64"); >+const BranchMul32 = Symbol("BranchMul32"); >+const BranchMul64 = Symbol("BranchMul64"); >+const BranchSub32 = Symbol("BranchSub32"); >+const BranchSub64 = Symbol("BranchSub64"); >+const BranchNeg32 = Symbol("BranchNeg32"); >+const BranchNeg64 = Symbol("BranchNeg64"); >+const MoveConditionally32 = Symbol("MoveConditionally32"); >+const MoveConditionally64 = Symbol("MoveConditionally64"); >+const MoveConditionallyTest32 = Symbol("MoveConditionallyTest32"); >+const MoveConditionallyTest64 = Symbol("MoveConditionallyTest64"); >+const MoveConditionallyDouble = Symbol("MoveConditionallyDouble"); >+const MoveConditionallyFloat = Symbol("MoveConditionallyFloat"); >+const MoveDoubleConditionally32 = Symbol("MoveDoubleConditionally32"); >+const MoveDoubleConditionally64 = Symbol("MoveDoubleConditionally64"); >+const MoveDoubleConditionallyTest32 = Symbol("MoveDoubleConditionallyTest32"); >+const MoveDoubleConditionallyTest64 = Symbol("MoveDoubleConditionallyTest64"); >+const MoveDoubleConditionallyDouble = Symbol("MoveDoubleConditionallyDouble"); >+const MoveDoubleConditionallyFloat = Symbol("MoveDoubleConditionallyFloat"); >+const Jump = Symbol("Jump"); >+const Ret32 = Symbol("Ret32"); >+const Ret64 = Symbol("Ret64"); >+const RetFloat = Symbol("RetFloat"); >+const RetDouble = Symbol("RetDouble"); >+const Oops = Symbol("Oops"); >+const Shuffle = Symbol("Shuffle"); >+const Patch = Symbol("Patch"); >+const CCall = Symbol("CCall"); >+const ColdCCall = Symbol("ColdCCall"); >+function Inst_forEachArg(inst, func) >+{ >+ let replacement; >+ switch (inst.opcode) { >+ case Nop: >+ break; >+ break; >+ case Add32: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Add8: >+ inst.visitArg(0, func, Arg.Use, GP, 8); >+ inst.visitArg(1, func, Arg.UseDef, GP, 8); >+ break; >+ break; >+ case Add16: >+ inst.visitArg(0, func, Arg.Use, GP, 16); >+ inst.visitArg(1, func, Arg.UseDef, GP, 16); >+ break; >+ break; >+ case Add64: >+ switch (inst.args.length) { >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Def, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case AddDouble: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Def, FP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.UseDef, FP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case AddFloat: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Def, FP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.UseDef, FP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Sub32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ break; >+ case Sub64: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ break; >+ case SubDouble: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Def, FP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.UseDef, FP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case SubFloat: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Def, FP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.UseDef, FP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Neg32: >+ inst.visitArg(0, func, Arg.UseZDef, GP, 32); >+ break; >+ break; >+ case Neg64: >+ inst.visitArg(0, func, Arg.UseDef, GP, 64); >+ break; >+ break; >+ case NegateDouble: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case Mul32: >+ switch (inst.args.length) { >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Mul64: >+ switch (inst.args.length) { >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Def, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case MultiplyAdd32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case MultiplyAdd64: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.Def, GP, 64); >+ break; >+ break; >+ case MultiplySub32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case MultiplySub64: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.Def, GP, 64); >+ break; >+ break; >+ case MultiplyNeg32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case MultiplyNeg64: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.ZDef, GP, 64); >+ break; >+ break; >+ case Div32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Div64: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Def, GP, 64); >+ break; >+ break; >+ case MulDouble: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Def, FP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.UseDef, FP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case MulFloat: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Def, FP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.UseDef, FP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case DivDouble: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Def, FP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.UseDef, FP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case DivFloat: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Def, FP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.UseDef, FP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case X86ConvertToDoubleWord32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case X86ConvertToQuadWord64: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Def, GP, 64); >+ break; >+ break; >+ case X86Div32: >+ inst.visitArg(0, func, Arg.UseZDef, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ break; >+ break; >+ case X86Div64: >+ inst.visitArg(0, func, Arg.UseZDef, GP, 64); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ break; >+ break; >+ case Lea: >+ inst.visitArg(0, func, Arg.UseAddr, GP, Ptr); >+ inst.visitArg(1, func, Arg.Def, GP, Ptr); >+ break; >+ break; >+ case And32: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case And64: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Def, GP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case AndDouble: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Def, FP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.UseDef, FP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case AndFloat: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Def, FP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.UseDef, FP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case XorDouble: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Def, FP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.UseDef, FP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case XorFloat: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Def, FP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.UseDef, FP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Lshift32: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Lshift64: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.ZDef, GP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Rshift32: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Rshift64: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.ZDef, GP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Urshift32: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Urshift64: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.ZDef, GP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Or32: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Or64: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Def, GP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Xor32: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.ZDef, GP, 32); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Xor64: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Def, GP, 64); >+ break; >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Not32: >+ switch (inst.args.length) { >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ case 1: >+ inst.visitArg(0, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case Not64: >+ switch (inst.args.length) { >+ case 2: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Def, GP, 64); >+ break; >+ case 1: >+ inst.visitArg(0, func, Arg.UseDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case AbsDouble: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case AbsFloat: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case CeilDouble: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case CeilFloat: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case FloorDouble: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case FloorFloat: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case SqrtDouble: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case SqrtFloat: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case ConvertInt32ToDouble: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case ConvertInt64ToDouble: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case ConvertInt32ToFloat: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case ConvertInt64ToFloat: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case CountLeadingZeros32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case CountLeadingZeros64: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Def, GP, 64); >+ break; >+ break; >+ case ConvertDoubleToFloat: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case ConvertFloatToDouble: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case Move: >+ inst.visitArg(0, func, Arg.Use, GP, Ptr); >+ inst.visitArg(1, func, Arg.Def, GP, Ptr); >+ break; >+ break; >+ case Swap32: >+ inst.visitArg(0, func, Arg.UseDef, GP, 32); >+ inst.visitArg(1, func, Arg.UseDef, GP, 32); >+ break; >+ break; >+ case Swap64: >+ inst.visitArg(0, func, Arg.UseDef, GP, 64); >+ inst.visitArg(1, func, Arg.UseDef, GP, 64); >+ break; >+ break; >+ case Move32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case StoreZero32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ break; >+ break; >+ case SignExtend32ToPtr: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Def, GP, Ptr); >+ break; >+ break; >+ case ZeroExtend8To32: >+ inst.visitArg(0, func, Arg.Use, GP, 8); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case SignExtend8To32: >+ inst.visitArg(0, func, Arg.Use, GP, 8); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case ZeroExtend16To32: >+ inst.visitArg(0, func, Arg.Use, GP, 16); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case SignExtend16To32: >+ inst.visitArg(0, func, Arg.Use, GP, 16); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case MoveFloat: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case MoveDouble: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case MoveZeroToDouble: >+ inst.visitArg(0, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case Move64ToDouble: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ inst.visitArg(1, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case Move32ToFloat: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Def, FP, 32); >+ break; >+ break; >+ case MoveDoubleTo64: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ inst.visitArg(1, func, Arg.Def, GP, 64); >+ break; >+ break; >+ case MoveFloatTo32: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ inst.visitArg(1, func, Arg.Def, GP, 32); >+ break; >+ break; >+ case Load8: >+ inst.visitArg(0, func, Arg.Use, GP, 8); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Store8: >+ inst.visitArg(0, func, Arg.Use, GP, 8); >+ inst.visitArg(1, func, Arg.Def, GP, 8); >+ break; >+ break; >+ case Load8SignedExtendTo32: >+ inst.visitArg(0, func, Arg.Use, GP, 8); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Load16: >+ inst.visitArg(0, func, Arg.Use, GP, 16); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Load16SignedExtendTo32: >+ inst.visitArg(0, func, Arg.Use, GP, 16); >+ inst.visitArg(1, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Store16: >+ inst.visitArg(0, func, Arg.Use, GP, 16); >+ inst.visitArg(1, func, Arg.Def, GP, 16); >+ break; >+ break; >+ case Compare32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Compare64: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Test32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Test64: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case CompareDouble: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Use, FP, 64); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case CompareFloat: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Use, FP, 32); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ break; >+ case Branch8: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 8); >+ inst.visitArg(2, func, Arg.Use, GP, 8); >+ break; >+ break; >+ case Branch32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ break; >+ break; >+ case Branch64: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ break; >+ break; >+ case BranchTest8: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 8); >+ inst.visitArg(2, func, Arg.Use, GP, 8); >+ break; >+ break; >+ case BranchTest32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ break; >+ break; >+ case BranchTest64: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ break; >+ break; >+ case BranchDouble: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Use, FP, 64); >+ break; >+ break; >+ case BranchFloat: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Use, FP, 32); >+ break; >+ break; >+ case BranchAdd32: >+ switch (inst.args.length) { >+ case 4: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.UseZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case BranchAdd64: >+ switch (inst.args.length) { >+ case 4: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.ZDef, GP, 64); >+ break; >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.UseDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case BranchMul32: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.UseZDef, GP, 32); >+ break; >+ case 4: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.ZDef, GP, 32); >+ break; >+ case 6: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.Scratch, GP, 32); >+ inst.visitArg(4, func, Arg.Scratch, GP, 32); >+ inst.visitArg(5, func, Arg.ZDef, GP, 32); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case BranchMul64: >+ switch (inst.args.length) { >+ case 3: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.UseZDef, GP, 64); >+ break; >+ case 6: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.Scratch, GP, 64); >+ inst.visitArg(4, func, Arg.Scratch, GP, 64); >+ inst.visitArg(5, func, Arg.ZDef, GP, 64); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case BranchSub32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.UseZDef, GP, 32); >+ break; >+ break; >+ case BranchSub64: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.UseDef, GP, 64); >+ break; >+ break; >+ case BranchNeg32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 32); >+ break; >+ break; >+ case BranchNeg64: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.UseZDef, GP, 64); >+ break; >+ break; >+ case MoveConditionally32: >+ switch (inst.args.length) { >+ case 5: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.UseDef, GP, Ptr); >+ break; >+ case 6: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.Use, GP, Ptr); >+ inst.visitArg(5, func, Arg.Def, GP, Ptr); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case MoveConditionally64: >+ switch (inst.args.length) { >+ case 5: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.UseDef, GP, Ptr); >+ break; >+ case 6: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.Use, GP, Ptr); >+ inst.visitArg(5, func, Arg.Def, GP, Ptr); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case MoveConditionallyTest32: >+ switch (inst.args.length) { >+ case 5: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.UseDef, GP, Ptr); >+ break; >+ case 6: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.Use, GP, Ptr); >+ inst.visitArg(5, func, Arg.Def, GP, Ptr); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case MoveConditionallyTest64: >+ switch (inst.args.length) { >+ case 5: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.UseDef, GP, Ptr); >+ break; >+ case 6: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.Use, GP, Ptr); >+ inst.visitArg(5, func, Arg.Def, GP, Ptr); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case MoveConditionallyDouble: >+ switch (inst.args.length) { >+ case 6: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Use, FP, 64); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.Use, GP, Ptr); >+ inst.visitArg(5, func, Arg.Def, GP, Ptr); >+ break; >+ case 5: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Use, FP, 64); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.UseDef, GP, Ptr); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case MoveConditionallyFloat: >+ switch (inst.args.length) { >+ case 6: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Use, FP, 32); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.Use, GP, Ptr); >+ inst.visitArg(5, func, Arg.Def, GP, Ptr); >+ break; >+ case 5: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Use, FP, 32); >+ inst.visitArg(3, func, Arg.Use, GP, Ptr); >+ inst.visitArg(4, func, Arg.UseDef, GP, Ptr); >+ break; >+ default: >+ throw new Error("Bad overload"); >+ break; >+ } >+ break; >+ case MoveDoubleConditionally32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.Use, FP, 64); >+ inst.visitArg(4, func, Arg.Use, FP, 64); >+ inst.visitArg(5, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case MoveDoubleConditionally64: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.Use, FP, 64); >+ inst.visitArg(4, func, Arg.Use, FP, 64); >+ inst.visitArg(5, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case MoveDoubleConditionallyTest32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 32); >+ inst.visitArg(2, func, Arg.Use, GP, 32); >+ inst.visitArg(3, func, Arg.Use, FP, 64); >+ inst.visitArg(4, func, Arg.Use, FP, 64); >+ inst.visitArg(5, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case MoveDoubleConditionallyTest64: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, GP, 64); >+ inst.visitArg(2, func, Arg.Use, GP, 64); >+ inst.visitArg(3, func, Arg.Use, FP, 64); >+ inst.visitArg(4, func, Arg.Use, FP, 64); >+ inst.visitArg(5, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case MoveDoubleConditionallyDouble: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 64); >+ inst.visitArg(2, func, Arg.Use, FP, 64); >+ inst.visitArg(3, func, Arg.Use, FP, 64); >+ inst.visitArg(4, func, Arg.Use, FP, 64); >+ inst.visitArg(5, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case MoveDoubleConditionallyFloat: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ inst.visitArg(1, func, Arg.Use, FP, 32); >+ inst.visitArg(2, func, Arg.Use, FP, 32); >+ inst.visitArg(3, func, Arg.Use, FP, 64); >+ inst.visitArg(4, func, Arg.Use, FP, 64); >+ inst.visitArg(5, func, Arg.Def, FP, 64); >+ break; >+ break; >+ case Jump: >+ break; >+ break; >+ case Ret32: >+ inst.visitArg(0, func, Arg.Use, GP, 32); >+ break; >+ break; >+ case Ret64: >+ inst.visitArg(0, func, Arg.Use, GP, 64); >+ break; >+ break; >+ case RetFloat: >+ inst.visitArg(0, func, Arg.Use, FP, 32); >+ break; >+ break; >+ case RetDouble: >+ inst.visitArg(0, func, Arg.Use, FP, 64); >+ break; >+ break; >+ case Oops: >+ break; >+ break; >+ case Shuffle: >+ ShuffleCustom.forEachArg(inst, func); >+ break; >+ case Patch: >+ PatchCustom.forEachArg(inst, func); >+ break; >+ case CCall: >+ CCallCustom.forEachArg(inst, func); >+ break; >+ case ColdCCall: >+ ColdCCallCustom.forEachArg(inst, func); >+ break; >+ default: >+ throw "Bad opcode"; >+ } >+} >+function Inst_hasNonArgEffects(inst) >+{ >+ switch (inst.opcode) { >+ case Branch8: >+ case Branch32: >+ case Branch64: >+ case BranchTest8: >+ case BranchTest32: >+ case BranchTest64: >+ case BranchDouble: >+ case BranchFloat: >+ case BranchAdd32: >+ case BranchAdd64: >+ case BranchMul32: >+ case BranchMul64: >+ case BranchSub32: >+ case BranchSub64: >+ case BranchNeg32: >+ case BranchNeg64: >+ case Jump: >+ case Ret32: >+ case Ret64: >+ case RetFloat: >+ case RetDouble: >+ case Oops: >+ return true; >+ case Shuffle: >+ return ShuffleCustom.hasNonArgNonControlEffects(inst); >+ case Patch: >+ return PatchCustom.hasNonArgNonControlEffects(inst); >+ case CCall: >+ return CCallCustom.hasNonArgNonControlEffects(inst); >+ case ColdCCall: >+ return ColdCCallCustom.hasNonArgNonControlEffects(inst); >+ default: >+ return false; >+ } >+} >+function opcodeCode(opcode) >+{ >+ switch (opcode) { >+ case AbsDouble: >+ return 0 >+ case AbsFloat: >+ return 1 >+ case Add16: >+ return 2 >+ case Add32: >+ return 3 >+ case Add64: >+ return 4 >+ case Add8: >+ return 5 >+ case AddDouble: >+ return 6 >+ case AddFloat: >+ return 7 >+ case And32: >+ return 8 >+ case And64: >+ return 9 >+ case AndDouble: >+ return 10 >+ case AndFloat: >+ return 11 >+ case Branch32: >+ return 12 >+ case Branch64: >+ return 13 >+ case Branch8: >+ return 14 >+ case BranchAdd32: >+ return 15 >+ case BranchAdd64: >+ return 16 >+ case BranchDouble: >+ return 17 >+ case BranchFloat: >+ return 18 >+ case BranchMul32: >+ return 19 >+ case BranchMul64: >+ return 20 >+ case BranchNeg32: >+ return 21 >+ case BranchNeg64: >+ return 22 >+ case BranchSub32: >+ return 23 >+ case BranchSub64: >+ return 24 >+ case BranchTest32: >+ return 25 >+ case BranchTest64: >+ return 26 >+ case BranchTest8: >+ return 27 >+ case CCall: >+ return 28 >+ case CeilDouble: >+ return 29 >+ case CeilFloat: >+ return 30 >+ case ColdCCall: >+ return 31 >+ case Compare32: >+ return 32 >+ case Compare64: >+ return 33 >+ case CompareDouble: >+ return 34 >+ case CompareFloat: >+ return 35 >+ case ConvertDoubleToFloat: >+ return 36 >+ case ConvertFloatToDouble: >+ return 37 >+ case ConvertInt32ToDouble: >+ return 38 >+ case ConvertInt32ToFloat: >+ return 39 >+ case ConvertInt64ToDouble: >+ return 40 >+ case ConvertInt64ToFloat: >+ return 41 >+ case CountLeadingZeros32: >+ return 42 >+ case CountLeadingZeros64: >+ return 43 >+ case Div32: >+ return 44 >+ case Div64: >+ return 45 >+ case DivDouble: >+ return 46 >+ case DivFloat: >+ return 47 >+ case FloorDouble: >+ return 48 >+ case FloorFloat: >+ return 49 >+ case Jump: >+ return 50 >+ case Lea: >+ return 51 >+ case Load16: >+ return 52 >+ case Load16SignedExtendTo32: >+ return 53 >+ case Load8: >+ return 54 >+ case Load8SignedExtendTo32: >+ return 55 >+ case Lshift32: >+ return 56 >+ case Lshift64: >+ return 57 >+ case Move: >+ return 58 >+ case Move32: >+ return 59 >+ case Move32ToFloat: >+ return 60 >+ case Move64ToDouble: >+ return 61 >+ case MoveConditionally32: >+ return 62 >+ case MoveConditionally64: >+ return 63 >+ case MoveConditionallyDouble: >+ return 64 >+ case MoveConditionallyFloat: >+ return 65 >+ case MoveConditionallyTest32: >+ return 66 >+ case MoveConditionallyTest64: >+ return 67 >+ case MoveDouble: >+ return 68 >+ case MoveDoubleConditionally32: >+ return 69 >+ case MoveDoubleConditionally64: >+ return 70 >+ case MoveDoubleConditionallyDouble: >+ return 71 >+ case MoveDoubleConditionallyFloat: >+ return 72 >+ case MoveDoubleConditionallyTest32: >+ return 73 >+ case MoveDoubleConditionallyTest64: >+ return 74 >+ case MoveDoubleTo64: >+ return 75 >+ case MoveFloat: >+ return 76 >+ case MoveFloatTo32: >+ return 77 >+ case MoveZeroToDouble: >+ return 78 >+ case Mul32: >+ return 79 >+ case Mul64: >+ return 80 >+ case MulDouble: >+ return 81 >+ case MulFloat: >+ return 82 >+ case MultiplyAdd32: >+ return 83 >+ case MultiplyAdd64: >+ return 84 >+ case MultiplyNeg32: >+ return 85 >+ case MultiplyNeg64: >+ return 86 >+ case MultiplySub32: >+ return 87 >+ case MultiplySub64: >+ return 88 >+ case Neg32: >+ return 89 >+ case Neg64: >+ return 90 >+ case NegateDouble: >+ return 91 >+ case Nop: >+ return 92 >+ case Not32: >+ return 93 >+ case Not64: >+ return 94 >+ case Oops: >+ return 95 >+ case Or32: >+ return 96 >+ case Or64: >+ return 97 >+ case Patch: >+ return 98 >+ case Ret32: >+ return 99 >+ case Ret64: >+ return 100 >+ case RetDouble: >+ return 101 >+ case RetFloat: >+ return 102 >+ case Rshift32: >+ return 103 >+ case Rshift64: >+ return 104 >+ case Shuffle: >+ return 105 >+ case SignExtend16To32: >+ return 106 >+ case SignExtend32ToPtr: >+ return 107 >+ case SignExtend8To32: >+ return 108 >+ case SqrtDouble: >+ return 109 >+ case SqrtFloat: >+ return 110 >+ case Store16: >+ return 111 >+ case Store8: >+ return 112 >+ case StoreZero32: >+ return 113 >+ case Sub32: >+ return 114 >+ case Sub64: >+ return 115 >+ case SubDouble: >+ return 116 >+ case SubFloat: >+ return 117 >+ case Swap32: >+ return 118 >+ case Swap64: >+ return 119 >+ case Test32: >+ return 120 >+ case Test64: >+ return 121 >+ case Urshift32: >+ return 122 >+ case Urshift64: >+ return 123 >+ case X86ConvertToDoubleWord32: >+ return 124 >+ case X86ConvertToQuadWord64: >+ return 125 >+ case X86Div32: >+ return 126 >+ case X86Div64: >+ return 127 >+ case Xor32: >+ return 128 >+ case Xor64: >+ return 129 >+ case XorDouble: >+ return 130 >+ case XorFloat: >+ return 131 >+ case ZeroExtend16To32: >+ return 132 >+ case ZeroExtend8To32: >+ return 133 >+ default: >+ throw new Error("bad opcode"); >+ } >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class Reg extends TmpBase { >+ constructor(index, type, name, isCalleeSave) >+ { >+ super(); >+ this._index = index; >+ this._type = type; >+ this._name = name; >+ this._isCalleeSave = !!isCalleeSave; >+ } >+ >+ static fromReg(reg) >+ { >+ return reg; >+ } >+ >+ get index() { return this._index; } >+ get type() { return this._type; } >+ get name() { return this._name; } >+ get isCalleeSave() { return this._isCalleeSave; } >+ >+ get isReg() { return true; } >+ >+ hash() >+ { >+ if (this.isGP) >+ return 1 + this._index; >+ return -1 - this._index; >+ } >+ >+ toString() >+ { >+ return `%${this._name}`; >+ } >+ >+ static extract(arg) >+ { >+ if (arg.isReg) >+ return arg.reg; >+ return null; >+ } >+ >+ static forEachFast(arg, func) >+ { >+ return arg.forEachTmpFast(tmp => { >+ if (!tmp.isReg) >+ return; >+ return func(tmp); >+ }); >+ } >+ >+ static forEach(arg, argRole, argType, argWidth, func) >+ { >+ return arg.forEachTmp( >+ argRole, argType, argWidth, >+ (tmp, role, type, width) => { >+ if (!tmp.isReg) >+ return; >+ return func(tmp, role, type, width); >+ }); >+ } >+} >+ >+{ >+ Reg.regs = []; >+ function newReg(...args) >+ { >+ let result = new Reg(...args); >+ Reg.regs.push(result); >+ return result; >+ } >+ >+ // Define X86_64 GPRs >+ { >+ let index = 0; >+ function newGPR(name, isCalleeSave) { return newReg(index++, GP, name, isCalleeSave); } >+ >+ Reg.rax = newGPR("rax"); >+ Reg.rcx = newGPR("rcx"); >+ Reg.rdx = newGPR("rdx"); >+ Reg.rbx = newGPR("rbx", true); >+ Reg.rsp = newGPR("rsp"); >+ Reg.rbp = newGPR("rbp", true); >+ Reg.rsi = newGPR("rsi"); >+ Reg.rdi = newGPR("rdi"); >+ for (let i = 8; i <= 15; ++i) >+ Reg[`r${i}`] = newGPR(`r${i}`, i >= 12); >+ } >+ >+ // Define X86_64 FPRs. >+ for (let i = 0; i <= 15; ++i) >+ Reg[`xmm${i}`] = newReg(i, FP, `xmm${i}`); >+ >+ Reg.gprs = [] >+ Reg.fprs = [] >+ Reg.calleeSaveGPRs = [] >+ Reg.calleeSaveFPRs = [] >+ Reg.calleeSaves = [] >+ for (let reg of Reg.regs) { >+ if (reg.isGP) { >+ Reg.gprs.push(reg); >+ if (reg.isCalleeSave) >+ Reg.calleeSaveGPRs.push(reg); >+ } else { >+ Reg.fprs.push(reg); >+ if (reg.isCalleeSave) >+ Reg.calleeSaveFPRS.push(reg); >+ } >+ if (reg.isCalleeSave) >+ Reg.calleeSaves.push(reg); >+ } >+ >+ Reg.callFrameRegister = Reg.rbp; >+ Reg.stackPointerRegister = Reg.rsp; >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class StackSlot { >+ constructor(index, byteSize, kind) >+ { >+ this._index = index; >+ this._byteSize = byteSize; >+ this._kind = kind; >+ } >+ >+ get byteSize() { return this._byteSize; } >+ get kind() { return this._kind; } >+ >+ get isLocked() { return this._kind == Locked; } >+ get isSpill() { return this._kind == Spill; } >+ >+ get index() { return this._index; } >+ >+ ensureSize(size) >+ { >+ if (this._offsetFromFP) >+ throw new Error("Stack slot already allocated"); >+ this._byteSize = Math.max(this._byteSize, size); >+ } >+ >+ get alignment() >+ { >+ if (this._byteSize <= 1) >+ return 1; >+ if (this._byteSize <= 2) >+ return 2; >+ if (this._byteSize <= 4) >+ return 4; >+ return 8; >+ } >+ >+ get offsetFromFP() { return this._offsetFromFP; } >+ >+ setOffsetFromFP(value) { this._offsetFromFP = value; } >+ >+ hash() >+ { >+ return ((this._kind == Spill ? 1 : 0) + this._byteSize * 3 + (this._offsetFromFP ? this._offsetFromFP * 7 : 0)) >>> 0; >+ } >+ >+ toString() >+ { >+ return "" + (this.isSpill ? "spill" : "stack") + this._index + "<" + this._byteSize + >+ (this._offsetFromFP ? ", offset = " + this._offsetFromFP : "") + ">"; >+ } >+ >+ static extract(arg) >+ { >+ if (arg.isStack) >+ return arg.stackSlot; >+ return null; >+ } >+ >+ static forEachFast(arg, func) >+ { >+ if (!arg.isStack) >+ return; >+ >+ let replacement; >+ if (replacement = func(arg.stackSlot)) >+ return Arg.createStack(replacement, this._offset); >+ } >+ >+ static forEach(arg, role, type, width, func) >+ { >+ if (!arg.isStack) >+ return; >+ >+ let replacement; >+ if (replacement = func(arg.stackSlot, role, type, width)) >+ return Arg.createStack(replacement, this._offset); >+ } >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class Tmp extends TmpBase { >+ constructor(index, type) >+ { >+ super(); >+ this._index = index; >+ this._type = type; >+ } >+ >+ static fromReg(reg) >+ { >+ return reg; >+ } >+ >+ get index() { return this._index; } >+ get type() { return this._type; } >+ >+ get isReg() { return false; } >+ >+ hash() >+ { >+ if (isGP) >+ return Reg.gprs[Reg.gprs.length - 1].hash() + 1 + this._index; >+ return Reg.fprs[Reg.fprs.length - 1].hash() - 1 - this._index; >+ } >+ >+ toString() >+ { >+ return "%" + (this.isGP ? "" : "f") + "tmp" + this._index; >+ } >+ >+ static extract(arg) >+ { >+ if (arg.isTmp) >+ return arg.tmp; >+ return null; >+ } >+ >+ static forEachFast(arg, func) { return arg.forEachTmpFast(func); } >+ static forEach(arg, role, type, width, func) { return arg.forEachTmp(role, type, width, func); } >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+function isRepresentableAsInt32(value) >+{ >+ return (value | 0) === value; >+} >+ >+function addIndexed(list, cons, ...args) >+{ >+ let result = new cons(list.length, ...args); >+ list.push(result); >+ return result; >+} >+ >+const stackAlignmentBytes = 16; >+ >+function roundUpToMultipleOf(amount, value) >+{ >+ return Math.ceil(value / amount) * amount; >+} >+ >+function symbolName(symbol) >+{ >+ let fullString = symbol.toString(); >+ return fullString.substring("Symbol(".length, fullString.length - ")".length); >+} >+ >+function lowerSymbolName(symbol) >+{ >+ return symbolName(symbol).toLowerCase(); >+} >+ >+function setToString(set) >+{ >+ let result = ""; >+ for (let value of set) { >+ if (result) >+ result += ", "; >+ result += value; >+ } >+ return result; >+} >+ >+function mergeIntoSet(target, source) >+{ >+ let didAdd = false; >+ for (let value of source) { >+ if (target.has(value)) >+ continue; >+ target.add(value); >+ didAdd = true; >+ } >+ return didAdd; >+} >+ >+function nonEmptyRangesOverlap(leftMin, leftMax, rightMin, rightMax) >+{ >+ if (leftMin >= leftMax) >+ throw new Error("Bad left range"); >+ if (rightMin >= rightMax) >+ throw new Error("Bad right range"); >+ >+ if (leftMin <= rightMin && leftMax > rightMin) >+ return true; >+ if (rightMin <= leftMin && rightMax > leftMin) >+ return true; >+ return false; >+} >+ >+function rangesOverlap(leftMin, leftMax, rightMin, rightMax) >+{ >+ if (leftMin > leftMax) >+ throw new Error("Bad left range"); >+ if (rightMin > rightMax) >+ throw new Error("Bad right range"); >+ >+ if (leftMin == leftMax) >+ return false; >+ if (rightMin == rightMax) >+ return false; >+ >+ return nonEmptyRangesOverlap(leftMin, leftMax, rightMin, rightMax); >+} >+ >+function removeAllMatching(array, func) >+{ >+ let srcIndex = 0; >+ let dstIndex = 0; >+ while (srcIndex < array.length) { >+ let value = array[srcIndex++]; >+ if (!func(value)) >+ array[dstIndex++] = value; >+ } >+ array.length = dstIndex; >+} >+ >+function bubbleSort(array, lessThan) >+{ >+ function swap(i, j) >+ { >+ var tmp = array[i]; >+ array[i] = array[j]; >+ array[j] = tmp; >+ } >+ >+ let begin = 0; >+ let end = array.length; >+ for (;;) { >+ let changed = false; >+ >+ function bubble(i, j) >+ { >+ if (lessThan(array[i], array[j])) { >+ swap(i, j); >+ changed = true; >+ } >+ } >+ >+ if (end < begin) >+ throw new Error("Begin and end are messed up"); >+ >+ let limit = end - begin; >+ for (let i = limit; i-- > 1;) >+ bubble(begin + i, begin + i - 1); >+ if (!changed) >+ return; >+ >+ // After one run, the first element in the list is guaranteed to be the smallest. >+ begin++; >+ >+ // Now go in the other direction. This eliminates most sorting pathologies. >+ changed = false; >+ >+ if (end < begin) >+ throw new Error("Begin and end are messed up"); >+ >+ limit = end - begin; >+ for (let i = 1; i < limit; ++i) >+ bubble(begin + i, begin + i - 1); >+ if (!changed) >+ return; >+ >+ // Now the last element is guaranteed to be the largest. >+ end--; >+ } >+} >+ >+let currentTime; >+if (this.performance && performance.now) >+ currentTime = function() { return performance.now() }; >+else if (this.preciseTime) >+ currentTime = function() { return preciseTime() * 1000; }; >+else >+ currentTime = function() { return +new Date(); }; >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+const ShuffleCustom = { >+ forEachArg(inst, func) >+ { >+ var limit = Math.floor(inst.args.length / 3) * 3; >+ for (let i = 0; i < limit; i += 3) { >+ let src = inst.args[i + 0]; >+ let dst = inst.args[i + 1]; >+ let widthArg = inst.args[i + 2]; >+ let width = widthArg.width; >+ let type = src.isGP && dst.isGP ? GP : FP; >+ inst.visitArg(i + 0, func, Arg.Use, type, width); >+ inst.visitArg(i + 1, func, Arg.Def, type, width); >+ inst.visitArg(i + 2, func, Arg.Use, GP, 8); >+ } >+ }, >+ >+ hasNonArgNonControlEffects(inst) >+ { >+ return false; >+ } >+}; >+ >+const PatchCustom = { >+ forEachArg(inst, func) >+ { >+ for (let i = 0; i < inst.args.length; ++i) { >+ let {type, role, width} = inst.patchArgData[i]; >+ inst.visitArg(i, func, role, type, width); >+ } >+ }, >+ >+ hasNonArgNonControlEffects(inst) >+ { >+ return inst.patchHasNonArgEffects; >+ } >+}; >+ >+const CCallCustom = { >+ forEachArg(inst, func) >+ { >+ let index = 0; >+ inst.visitArg(index++, func, Arg.Use, GP, Ptr); // callee >+ >+ if (inst.cCallType != Void) { >+ inst.visitArg( >+ index++, func, Arg.Def, Arg.typeForB3Type(inst.cCallType), >+ Arg.widthForB3Type(inst.cCallType)); >+ } >+ >+ for (let type of inst.cCallArgTypes) { >+ inst.visitArg( >+ index++, func, Arg.Use, Arg.typeForB3Type(type), Arg.widthForB3Type(type)); >+ } >+ }, >+ >+ hasNonArgNonControlEffects(inst) >+ { >+ return true; >+ } >+}; >+ >+const ColdCCallCustom = { >+ forEachArg(inst, func) >+ { >+ CCallCustom.forEachArg( >+ inst, >+ (arg, role, type, width) => { >+ return func(arg, Arg.cooled(role), type, width); >+ }); >+ }, >+ >+ hasNonArgNonControlEffects(inst) >+ { >+ return true; >+ } >+}; >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class Liveness { >+ constructor(thing, code) >+ { >+ this._thing = thing; >+ this._code = code; >+ >+ this._liveAtHead = new Map(); >+ this._liveAtTail = new Map(); >+ >+ for (let block of code) { >+ this._liveAtHead.set(block, new Set()); >+ >+ let liveAtTail = new Set(); >+ this._liveAtTail.set(block, liveAtTail); >+ >+ block.last.forEach( >+ thing, >+ (value, role, type, width) => { >+ if (Arg.isLateUse(role)) >+ liveAtTail.add(value); >+ }); >+ } >+ >+ let dirtyBlocks = new Set(code); >+ >+ let changed; >+ do { >+ changed = false; >+ >+ for (let blockIndex = code.size; blockIndex--;) { >+ let block = code.at(blockIndex); >+ if (!block) >+ continue; >+ >+ if (!dirtyBlocks.delete(block)) >+ continue; >+ >+ let localCalc = this.localCalc(block); >+ for (let instIndex = block.size; instIndex--;) >+ localCalc.execute(instIndex); >+ >+ // Handle the early def's of the first instruction. >+ block.at(0).forEach( >+ thing, >+ (value, role, type, width) => { >+ if (Arg.isEarlyDef(role)) >+ localCalc.liveSet.remove(value); >+ }); >+ >+ let liveAtHead = this._liveAtHead.get(block); >+ >+ if (!mergeIntoSet(liveAtHead, localCalc.liveSet)) >+ continue; >+ >+ for (let predecessor of block.predecessors) { >+ if (mergeIntoSet(this._liveAtTail.get(predecessor), liveAtHead)) { >+ dirtyBlocks.add(predecessor); >+ changed = true; >+ } >+ } >+ } >+ } while (changed); >+ } >+ >+ get thing() { return this._thing; } >+ get code() { return this._code; } >+ get liveAtHead() { return this._liveAtHead; } >+ get liveAtTail() { return this._liveAtTail; } >+ >+ localCalc(block) >+ { >+ let liveness = this; >+ class LocalCalc { >+ constructor() >+ { >+ this._liveSet = new Set(liveness.liveAtTail.get(block)); >+ } >+ >+ get liveSet() { return this._liveSet; } >+ >+ execute(instIndex) >+ { >+ let inst = block.at(instIndex); >+ >+ // First handle the early defs of the next instruction. >+ if (instIndex + 1 < block.size) { >+ block.at(instIndex + 1).forEach( >+ liveness.thing, >+ (value, role, type, width) => { >+ if (Arg.isEarlyDef(role)) >+ this._liveSet.delete(value); >+ }); >+ } >+ >+ // Then handle defs. >+ inst.forEach( >+ liveness.thing, >+ (value, role, type, width) => { >+ if (Arg.isLateDef(role)) >+ this._liveSet.delete(value); >+ }); >+ >+ // Then handle uses. >+ inst.forEach( >+ liveness.thing, >+ (value, role, type, width) => { >+ if (Arg.isEarlyUse(role)) >+ this._liveSet.add(value); >+ }); >+ >+ // Finally handle the late uses of the previous instruction. >+ if (instIndex - 1 >= 0) { >+ block.at(instIndex - 1).forEach( >+ liveness.thing, >+ (value, role, type, width) => { >+ if (Arg.isLateUse(role)) >+ this._liveSet.add(value); >+ }); >+ } >+ } >+ } >+ >+ return new LocalCalc(); >+ } >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class Insertion { >+ constructor(index, element) >+ { >+ this._index = index; >+ this._element = element; >+ } >+ >+ get index() { return this._index; } >+ get element() { return this._element; } >+ >+ lessThan(other) >+ { >+ return this._index < other._index; >+ } >+} >+ >+class InsertionSet { >+ constructor() >+ { >+ this._insertions = [] >+ } >+ >+ appendInsertion(insertion) >+ { >+ this._insertions.push(insertion); >+ } >+ >+ append(index, element) >+ { >+ this.appendInsertion(new Insertion(index, element)); >+ } >+ >+ execute(target) >+ { >+ // We bubble-sort because that's what the C++ code, and for the same reason as we do it: >+ // the stdlib doesn't have a stable sort and mergesort is slower in the common case of the >+ // array usually being sorted. This array is usually sorted. >+ bubbleSort(this._insertions, (a, b) => (a.lessThan(b))); >+ >+ let numInsertions = this._insertions.length; >+ if (!numInsertions) >+ return 0; >+ let originalTargetSize = target.length; >+ target.length += numInsertions; >+ let lastIndex = target.length; >+ for (let indexInInsertions = numInsertions; indexInInsertions--;) { >+ let insertion = this._insertions[indexInInsertions]; >+ if (indexInInsertions && insertion.index < this._insertions[indexInInsertions - 1].index) >+ throw new Error("Insertions out of order"); >+ if (insertion.index > originalTargetSize) >+ throw new Error("Out-of-bounds insertion"); >+ let firstIndex = insertion.index + indexInInsertions; >+ let indexOffset = indexInInsertions + 1; >+ for (let i = lastIndex; --i > firstIndex;) >+ target[i] = target[i - indexOffset]; >+ target[firstIndex] = insertion.element; >+ lastIndex = firstIndex; >+ } >+ this._insertions = []; >+ return numInsertions; >+ } >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+function allocateStack(code) >+{ >+ if (code.frameSize) >+ throw new Error("Frame size already determined"); >+ >+ function attemptAssignment(slot, offsetFromFP, otherSlots) >+ { >+ if (offsetFromFP > 0) >+ throw new Error("Expect negative offset"); >+ >+ offsetFromFP = -roundUpToMultipleOf(slot.alignment, -offsetFromFP); >+ >+ for (let otherSlot of otherSlots) { >+ if (!otherSlot.offsetFromFP) >+ continue; >+ let overlap = rangesOverlap( >+ offsetFromFP, >+ offsetFromFP + slot.byteSize, >+ otherSlot.offsetFromFP, >+ otherSlot.offsetFromFP + otherSlot.byteSize); >+ if (overlap) >+ return false; >+ } >+ >+ slot.setOffsetFromFP(offsetFromFP); >+ return true; >+ } >+ >+ function assign(slot, otherSlots) >+ { >+ if (attemptAssignment(slot, -slot.byteSize, otherSlots)) >+ return; >+ >+ for (let otherSlot of otherSlots) { >+ if (!otherSlot.offsetFromFP) >+ continue; >+ if (attemptAssignment(slot, otherSlot.offsetFromFP - slot.byteSize, otherSlots)) >+ return; >+ } >+ >+ throw new Error("Assignment failed"); >+ } >+ >+ // Allocate all of the escaped slots in order. This is kind of a crazy algorithm to allow for >+ // the possibility of stack slots being assigned frame offsets before we even get here. >+ let assignedEscapedStackSlots = []; >+ let escapedStackSlotsWorklist = []; >+ for (let slot of code.stackSlots) { >+ if (slot.isLocked) { >+ if (slot.offsetFromFP) >+ assignedEscapedStackSlots.push(slot); >+ else >+ escapedStackSlotsWorklist.push(slot); >+ } else { >+ if (slot.offsetFromFP) >+ throw new Error("Offset already assigned"); >+ } >+ } >+ >+ // This is a fairly espensive loop, but it's OK because we'll usually only have a handful of >+ // escaped stack slots. >+ while (escapedStackSlotsWorklist.length) { >+ let slot = escapedStackSlotsWorklist.pop(); >+ assign(slot, assignedEscapedStackSlots); >+ assignedEscapedStackSlots.push(slot); >+ } >+ >+ // Now we handle the spill slots. >+ let liveness = new Liveness(StackSlot, code); >+ let interference = new Map(); >+ for (let slot of code.stackSlots) >+ interference.set(slot, new Set()); >+ let slots = []; >+ >+ for (let block of code) { >+ let localCalc = liveness.localCalc(block); >+ >+ function interfere(instIndex) >+ { >+ Inst.forEachDef( >+ StackSlot, block.get(instIndex), block.get(instIndex + 1), >+ (slot, role, type, width) => { >+ if (!slot.isSpill) >+ return; >+ >+ for (let otherSlot of localCalc.liveSet) { >+ interference.get(slot).add(otherSlot); >+ interference.get(otherSlot).add(slot); >+ } >+ }); >+ } >+ >+ for (let instIndex = block.size; instIndex--;) { >+ // Kill dead stores. For simplicity we say that a store is killable if it has only late >+ // defs and those late defs are to things that are dead right now. We only do that >+ // because that's the only kind of dead stack store we will see here. >+ let inst = block.at(instIndex); >+ if (!inst.hasNonArgEffects) { >+ let ok = true; >+ inst.forEachArg((arg, role, type, width) => { >+ if (Arg.isEarlyDef(role)) { >+ ok = false; >+ return; >+ } >+ if (!Arg.isLateDef(role)) >+ return; >+ if (!arg.isStack) { >+ ok = false; >+ return; >+ } >+ >+ let slot = arg.stackSlot; >+ if (!slot.isSpill) { >+ ok = false; >+ return; >+ } >+ >+ if (localCalc.liveSet.has(slot)) { >+ ok = false; >+ return; >+ } >+ }); >+ if (ok) >+ inst.clear(); >+ } >+ >+ interfere(instIndex); >+ localCalc.execute(instIndex); >+ } >+ interfere(-1); >+ >+ removeAllMatching(block.insts, inst => inst.opcode == Nop); >+ } >+ >+ // Now we assign stack locations. At its heart this algorithm is just first-fit. For each >+ // StackSlot we just want to find the offsetFromFP that is closest to zero while ensuring no >+ // overlap with other StackSlots that this overlaps with. >+ for (let slot of code.stackSlots) { >+ if (slot.offsetFromFP) >+ continue; >+ >+ assign(slot, assignedEscapedStackSlots.concat(Array.from(interference.get(slot)))); >+ } >+ >+ // Figure out how much stack we're using for stack slots. >+ let frameSizeForStackSlots = 0; >+ for (let slot of code.stackSlots) { >+ frameSizeForStackSlots = Math.max( >+ frameSizeForStackSlots, >+ -slot.offsetFromFP); >+ } >+ >+ frameSizeForStackSlots = roundUpToMultipleOf(stackAlignmentBytes, frameSizeForStackSlots); >+ >+ // No we need to deduce how much argument area we need. >+ for (let block of code) { >+ for (let inst of block) { >+ for (let arg of inst.args) { >+ if (arg.isCallArg) { >+ // For now, we assume that we use 8 bytes of the call arg. But that's not >+ // such an awesome assumption. >+ // FIXME: https://bugs.webkit.org/show_bug.cgi?id=150454 >+ if (arg.offset < 0) >+ throw new Error("Did not expect negative offset for callArg"); >+ code.requestCallArgAreaSize(arg.offset + 8); >+ } >+ } >+ } >+ } >+ >+ code.setFrameSize(frameSizeForStackSlots + code.callArgAreaSize); >+ >+ // Finally transform the code to use Addrs instead of StackSlots. This is a lossless >+ // transformation since we can search the StackSlots array to figure out which StackSlot any >+ // offset-from-FP refers to. >+ >+ // FIXME: This may produce addresses that aren't valid if we end up with a ginormous stack frame. >+ // We would have to scavenge for temporaries if this happened. Fortunately, this case will be >+ // extremely rare so we can do crazy things when it arises. >+ // https://bugs.webkit.org/show_bug.cgi?id=152530 >+ >+ let insertionSet = new InsertionSet(); >+ for (let block of code) { >+ for (let instIndex = 0; instIndex < block.size; ++instIndex) { >+ let inst = block.at(instIndex); >+ inst.forEachArg((arg, role, type, width) => { >+ function stackAddr(offset) >+ { >+ return Arg.createStackAddr(offset, code.frameSize, width); >+ } >+ >+ switch (arg.kind) { >+ case Arg.Stack: { >+ let slot = arg.stackSlot; >+ if (Arg.isZDef(role) >+ && slot.isSpill >+ && slot.byteSize > Arg.bytes(width)) { >+ // Currently we only handle this simple case because it's the only one >+ // that arises: ZDef's are only 32-bit right now. So, when we hit these >+ // assertions it means that we need to implement those other kinds of >+ // zero fills. >+ if (slot.byteSize != 8) { >+ throw new Error( >+ `Bad spill slot size for ZDef: ${slot.byteSize}, width is ${width}`); >+ } >+ if (width != 32) >+ throw new Error("Bad width for ZDef"); >+ >+ insertionSet.insert( >+ instIndex + 1, >+ new Inst( >+ StoreZero32, >+ [stackAddr(arg.offset + 4 + slot.offsetFromFP)])); >+ } >+ return stackAddr(arg.offset + slot.offsetFromFP); >+ } >+ case Arg.CallArg: >+ return stackAddr(arg.offset - code.frameSize); >+ default: >+ break; >+ } >+ }); >+ } >+ insertionSet.execute(block.insts); >+ } >+} >+"use strict"; >+// Generated by Air::dumpAsJS from executeIteration#EVx8pJ in Octane/gbemu >+function createPayloadGbemuExecuteIteration() >+{ >+ let code = new Code(); >+ let bb0 = code.addBlock(); >+ let bb1 = code.addBlock(); >+ let bb2 = code.addBlock(); >+ let bb3 = code.addBlock(); >+ let bb4 = code.addBlock(); >+ let bb5 = code.addBlock(); >+ let bb6 = code.addBlock(); >+ let bb7 = code.addBlock(); >+ let bb8 = code.addBlock(); >+ let bb9 = code.addBlock(); >+ let bb10 = code.addBlock(); >+ let bb11 = code.addBlock(); >+ let bb12 = code.addBlock(); >+ let bb13 = code.addBlock(); >+ let bb14 = code.addBlock(); >+ let bb15 = code.addBlock(); >+ let bb16 = code.addBlock(); >+ let bb17 = code.addBlock(); >+ let bb18 = code.addBlock(); >+ let bb19 = code.addBlock(); >+ let bb20 = code.addBlock(); >+ let bb21 = code.addBlock(); >+ let bb22 = code.addBlock(); >+ let bb23 = code.addBlock(); >+ let bb24 = code.addBlock(); >+ let bb25 = code.addBlock(); >+ let bb26 = code.addBlock(); >+ let bb27 = code.addBlock(); >+ let bb28 = code.addBlock(); >+ let bb29 = code.addBlock(); >+ let bb30 = code.addBlock(); >+ let bb31 = code.addBlock(); >+ let bb32 = code.addBlock(); >+ let bb33 = code.addBlock(); >+ let bb34 = code.addBlock(); >+ let bb35 = code.addBlock(); >+ let bb36 = code.addBlock(); >+ let bb37 = code.addBlock(); >+ let bb38 = code.addBlock(); >+ let bb39 = code.addBlock(); >+ let bb40 = code.addBlock(); >+ let bb41 = code.addBlock(); >+ let bb42 = code.addBlock(); >+ let slot0 = code.addStackSlot(64, Locked); >+ let slot1 = code.addStackSlot(8, Spill); >+ let slot2 = code.addStackSlot(8, Spill); >+ let slot3 = code.addStackSlot(8, Spill); >+ let slot4 = code.addStackSlot(8, Spill); >+ let slot5 = code.addStackSlot(8, Spill); >+ let slot6 = code.addStackSlot(8, Spill); >+ let slot7 = code.addStackSlot(8, Spill); >+ let slot8 = code.addStackSlot(8, Spill); >+ let slot9 = code.addStackSlot(8, Spill); >+ let slot10 = code.addStackSlot(8, Spill); >+ let slot11 = code.addStackSlot(8, Spill); >+ let slot12 = code.addStackSlot(40, Locked); >+ slot12.setOffsetFromFP(-40); >+ let tmp190 = code.newTmp(GP); >+ let tmp189 = code.newTmp(GP); >+ let tmp188 = code.newTmp(GP); >+ let tmp187 = code.newTmp(GP); >+ let tmp186 = code.newTmp(GP); >+ let tmp185 = code.newTmp(GP); >+ let tmp184 = code.newTmp(GP); >+ let tmp183 = code.newTmp(GP); >+ let tmp182 = code.newTmp(GP); >+ let tmp181 = code.newTmp(GP); >+ let tmp180 = code.newTmp(GP); >+ let tmp179 = code.newTmp(GP); >+ let tmp178 = code.newTmp(GP); >+ let tmp177 = code.newTmp(GP); >+ let tmp176 = code.newTmp(GP); >+ let tmp175 = code.newTmp(GP); >+ let tmp174 = code.newTmp(GP); >+ let tmp173 = code.newTmp(GP); >+ let tmp172 = code.newTmp(GP); >+ let tmp171 = code.newTmp(GP); >+ let tmp170 = code.newTmp(GP); >+ let tmp169 = code.newTmp(GP); >+ let tmp168 = code.newTmp(GP); >+ let tmp167 = code.newTmp(GP); >+ let tmp166 = code.newTmp(GP); >+ let tmp165 = code.newTmp(GP); >+ let tmp164 = code.newTmp(GP); >+ let tmp163 = code.newTmp(GP); >+ let tmp162 = code.newTmp(GP); >+ let tmp161 = code.newTmp(GP); >+ let tmp160 = code.newTmp(GP); >+ let tmp159 = code.newTmp(GP); >+ let tmp158 = code.newTmp(GP); >+ let tmp157 = code.newTmp(GP); >+ let tmp156 = code.newTmp(GP); >+ let tmp155 = code.newTmp(GP); >+ let tmp154 = code.newTmp(GP); >+ let tmp153 = code.newTmp(GP); >+ let tmp152 = code.newTmp(GP); >+ let tmp151 = code.newTmp(GP); >+ let tmp150 = code.newTmp(GP); >+ let tmp149 = code.newTmp(GP); >+ let tmp148 = code.newTmp(GP); >+ let tmp147 = code.newTmp(GP); >+ let tmp146 = code.newTmp(GP); >+ let tmp145 = code.newTmp(GP); >+ let tmp144 = code.newTmp(GP); >+ let tmp143 = code.newTmp(GP); >+ let tmp142 = code.newTmp(GP); >+ let tmp141 = code.newTmp(GP); >+ let tmp140 = code.newTmp(GP); >+ let tmp139 = code.newTmp(GP); >+ let tmp138 = code.newTmp(GP); >+ let tmp137 = code.newTmp(GP); >+ let tmp136 = code.newTmp(GP); >+ let tmp135 = code.newTmp(GP); >+ let tmp134 = code.newTmp(GP); >+ let tmp133 = code.newTmp(GP); >+ let tmp132 = code.newTmp(GP); >+ let tmp131 = code.newTmp(GP); >+ let tmp130 = code.newTmp(GP); >+ let tmp129 = code.newTmp(GP); >+ let tmp128 = code.newTmp(GP); >+ let tmp127 = code.newTmp(GP); >+ let tmp126 = code.newTmp(GP); >+ let tmp125 = code.newTmp(GP); >+ let tmp124 = code.newTmp(GP); >+ let tmp123 = code.newTmp(GP); >+ let tmp122 = code.newTmp(GP); >+ let tmp121 = code.newTmp(GP); >+ let tmp120 = code.newTmp(GP); >+ let tmp119 = code.newTmp(GP); >+ let tmp118 = code.newTmp(GP); >+ let tmp117 = code.newTmp(GP); >+ let tmp116 = code.newTmp(GP); >+ let tmp115 = code.newTmp(GP); >+ let tmp114 = code.newTmp(GP); >+ let tmp113 = code.newTmp(GP); >+ let tmp112 = code.newTmp(GP); >+ let tmp111 = code.newTmp(GP); >+ let tmp110 = code.newTmp(GP); >+ let tmp109 = code.newTmp(GP); >+ let tmp108 = code.newTmp(GP); >+ let tmp107 = code.newTmp(GP); >+ let tmp106 = code.newTmp(GP); >+ let tmp105 = code.newTmp(GP); >+ let tmp104 = code.newTmp(GP); >+ let tmp103 = code.newTmp(GP); >+ let tmp102 = code.newTmp(GP); >+ let tmp101 = code.newTmp(GP); >+ let tmp100 = code.newTmp(GP); >+ let tmp99 = code.newTmp(GP); >+ let tmp98 = code.newTmp(GP); >+ let tmp97 = code.newTmp(GP); >+ let tmp96 = code.newTmp(GP); >+ let tmp95 = code.newTmp(GP); >+ let tmp94 = code.newTmp(GP); >+ let tmp93 = code.newTmp(GP); >+ let tmp92 = code.newTmp(GP); >+ let tmp91 = code.newTmp(GP); >+ let tmp90 = code.newTmp(GP); >+ let tmp89 = code.newTmp(GP); >+ let tmp88 = code.newTmp(GP); >+ let tmp87 = code.newTmp(GP); >+ let tmp86 = code.newTmp(GP); >+ let tmp85 = code.newTmp(GP); >+ let tmp84 = code.newTmp(GP); >+ let tmp83 = code.newTmp(GP); >+ let tmp82 = code.newTmp(GP); >+ let tmp81 = code.newTmp(GP); >+ let tmp80 = code.newTmp(GP); >+ let tmp79 = code.newTmp(GP); >+ let tmp78 = code.newTmp(GP); >+ let tmp77 = code.newTmp(GP); >+ let tmp76 = code.newTmp(GP); >+ let tmp75 = code.newTmp(GP); >+ let tmp74 = code.newTmp(GP); >+ let tmp73 = code.newTmp(GP); >+ let tmp72 = code.newTmp(GP); >+ let tmp71 = code.newTmp(GP); >+ let tmp70 = code.newTmp(GP); >+ let tmp69 = code.newTmp(GP); >+ let tmp68 = code.newTmp(GP); >+ let tmp67 = code.newTmp(GP); >+ let tmp66 = code.newTmp(GP); >+ let tmp65 = code.newTmp(GP); >+ let tmp64 = code.newTmp(GP); >+ let tmp63 = code.newTmp(GP); >+ let tmp62 = code.newTmp(GP); >+ let tmp61 = code.newTmp(GP); >+ let tmp60 = code.newTmp(GP); >+ let tmp59 = code.newTmp(GP); >+ let tmp58 = code.newTmp(GP); >+ let tmp57 = code.newTmp(GP); >+ let tmp56 = code.newTmp(GP); >+ let tmp55 = code.newTmp(GP); >+ let tmp54 = code.newTmp(GP); >+ let tmp53 = code.newTmp(GP); >+ let tmp52 = code.newTmp(GP); >+ let tmp51 = code.newTmp(GP); >+ let tmp50 = code.newTmp(GP); >+ let tmp49 = code.newTmp(GP); >+ let tmp48 = code.newTmp(GP); >+ let tmp47 = code.newTmp(GP); >+ let tmp46 = code.newTmp(GP); >+ let tmp45 = code.newTmp(GP); >+ let tmp44 = code.newTmp(GP); >+ let tmp43 = code.newTmp(GP); >+ let tmp42 = code.newTmp(GP); >+ let tmp41 = code.newTmp(GP); >+ let tmp40 = code.newTmp(GP); >+ let tmp39 = code.newTmp(GP); >+ let tmp38 = code.newTmp(GP); >+ let tmp37 = code.newTmp(GP); >+ let tmp36 = code.newTmp(GP); >+ let tmp35 = code.newTmp(GP); >+ let tmp34 = code.newTmp(GP); >+ let tmp33 = code.newTmp(GP); >+ let tmp32 = code.newTmp(GP); >+ let tmp31 = code.newTmp(GP); >+ let tmp30 = code.newTmp(GP); >+ let tmp29 = code.newTmp(GP); >+ let tmp28 = code.newTmp(GP); >+ let tmp27 = code.newTmp(GP); >+ let tmp26 = code.newTmp(GP); >+ let tmp25 = code.newTmp(GP); >+ let tmp24 = code.newTmp(GP); >+ let tmp23 = code.newTmp(GP); >+ let tmp22 = code.newTmp(GP); >+ let tmp21 = code.newTmp(GP); >+ let tmp20 = code.newTmp(GP); >+ let tmp19 = code.newTmp(GP); >+ let tmp18 = code.newTmp(GP); >+ let tmp17 = code.newTmp(GP); >+ let tmp16 = code.newTmp(GP); >+ let tmp15 = code.newTmp(GP); >+ let tmp14 = code.newTmp(GP); >+ let tmp13 = code.newTmp(GP); >+ let tmp12 = code.newTmp(GP); >+ let tmp11 = code.newTmp(GP); >+ let tmp10 = code.newTmp(GP); >+ let tmp9 = code.newTmp(GP); >+ let tmp8 = code.newTmp(GP); >+ let tmp7 = code.newTmp(GP); >+ let tmp6 = code.newTmp(GP); >+ let tmp5 = code.newTmp(GP); >+ let tmp4 = code.newTmp(GP); >+ let tmp3 = code.newTmp(GP); >+ let tmp2 = code.newTmp(GP); >+ let tmp1 = code.newTmp(GP); >+ let tmp0 = code.newTmp(GP); >+ let ftmp7 = code.newTmp(FP); >+ let ftmp6 = code.newTmp(FP); >+ let ftmp5 = code.newTmp(FP); >+ let ftmp4 = code.newTmp(FP); >+ let ftmp3 = code.newTmp(FP); >+ let ftmp2 = code.newTmp(FP); >+ let ftmp1 = code.newTmp(FP); >+ let ftmp0 = code.newTmp(FP); >+ let inst; >+ let arg; >+ bb0.successors.push(new FrequentedBlock(bb2, Normal)); >+ bb0.successors.push(new FrequentedBlock(bb1, Normal)); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286904960, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbp, 16); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbp); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Scratch, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbp, 40); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(2, -65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 5); >+ inst.args.push(arg); >+ arg = Arg.createImm(21); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createAddr(Reg.rbx, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286506544, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot10, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286455168, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot4, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287131344, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot6, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot3, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286474592, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot2, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287209728, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot11, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(0, -65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287112728, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot8, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(0, 65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot9, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287112720, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286506192, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot7, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(862); >+ inst.args.push(arg); >+ bb0.append(inst); >+ bb1.successors.push(new FrequentedBlock(bb41, Normal)); >+ bb1.successors.push(new FrequentedBlock(bb3, Normal)); >+ bb1.predecessors.push(bb0); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(881); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb1.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 224); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb1.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb1.append(inst); >+ bb2.successors.push(new FrequentedBlock(bb41, Normal)); >+ bb2.successors.push(new FrequentedBlock(bb3, Normal)); >+ bb2.predecessors.push(bb0); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 224); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb2.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb2.append(inst); >+ bb3.successors.push(new FrequentedBlock(bb5, Normal)); >+ bb3.successors.push(new FrequentedBlock(bb4, Normal)); >+ bb3.predecessors.push(bb1); >+ bb3.predecessors.push(bb40); >+ bb3.predecessors.push(bb39); >+ bb3.predecessors.push(bb2); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb3.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rsi, -1144); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb3.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ bb3.append(inst); >+ bb4.successors.push(new FrequentedBlock(bb6, Normal)); >+ bb4.successors.push(new FrequentedBlock(bb7, Normal)); >+ bb4.predecessors.push(bb3); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ bb4.append(inst); >+ bb5.successors.push(new FrequentedBlock(bb6, Normal)); >+ bb5.predecessors.push(bb3); >+ inst = new Inst(Move); >+ arg = Arg.createImm(7); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 232); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 256); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 248); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(And32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(And32); >+ arg = Arg.createImm(31); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 240); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Jump); >+ bb5.append(inst); >+ bb6.successors.push(new FrequentedBlock(bb7, Normal)); >+ bb6.predecessors.push(bb4); >+ bb6.predecessors.push(bb5); >+ inst = new Inst(Add32); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rsi, -1144); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Jump); >+ bb6.append(inst); >+ bb7.successors.push(new FrequentedBlock(bb8, Normal)); >+ bb7.successors.push(new FrequentedBlock(bb9, Normal)); >+ bb7.predecessors.push(bb4); >+ bb7.predecessors.push(bb6); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 240); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ bb7.append(inst); >+ bb8.successors.push(new FrequentedBlock(bb9, Normal)); >+ bb8.predecessors.push(bb7); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286455168, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286455168, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb8.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb8.append(inst); >+ inst = new Inst(Jump); >+ bb8.append(inst); >+ bb9.successors.push(new FrequentedBlock(bb12, Normal)); >+ bb9.successors.push(new FrequentedBlock(bb10, Normal)); >+ bb9.predecessors.push(bb7); >+ bb9.predecessors.push(bb8); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 304); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 128); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.r8, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(80); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb9.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r8, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rax, -8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb9.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createIndex(Reg.rax, Reg.rsi, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(MoveConditionallyTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb9.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rcx, 5); >+ inst.args.push(arg); >+ arg = Arg.createImm(23); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb9.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rcx, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Branch64); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot7, 0); >+ inst.args.push(arg); >+ bb9.append(inst); >+ bb10.successors.push(new FrequentedBlock(bb11, Normal)); >+ bb10.successors.push(new FrequentedBlock(bb13, Normal)); >+ bb10.predecessors.push(bb9); >+ inst = new Inst(Branch64); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot10, 0); >+ inst.args.push(arg); >+ bb10.append(inst); >+ bb11.successors.push(new FrequentedBlock(bb14, Normal)); >+ bb11.predecessors.push(bb10); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 0); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 344); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdi, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(502); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb11.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdi, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdi, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb11.append(inst); >+ inst = new Inst(Load8); >+ arg = Arg.createIndex(Reg.rsi, Reg.rax, 1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Jump); >+ bb11.append(inst); >+ bb12.successors.push(new FrequentedBlock(bb14, Normal)); >+ bb12.predecessors.push(bb9); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 0); >+ inst.args.push(arg); >+ bb12.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 336); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb12.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 456); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb12.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb12.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdi, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(502); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb12.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdi, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb12.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdi, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb12.append(inst); >+ inst = new Inst(Load8); >+ arg = Arg.createIndex(Reg.rsi, Reg.rax, 1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb12.append(inst); >+ inst = new Inst(Jump); >+ bb12.append(inst); >+ bb13.predecessors.push(bb10); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb13.append(inst); >+ inst = new Inst(Oops); >+ bb13.append(inst); >+ bb14.successors.push(new FrequentedBlock(bb15, Normal)); >+ bb14.successors.push(new FrequentedBlock(bb16, Normal)); >+ bb14.predecessors.push(bb11); >+ bb14.predecessors.push(bb12); >+ inst = new Inst(Add32); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(ZeroExtend16To32); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 128); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 216); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ bb14.append(inst); >+ bb15.predecessors.push(bb14); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb15.append(inst); >+ inst = new Inst(Oops); >+ bb15.append(inst); >+ bb16.successors.push(new FrequentedBlock(bb18, Normal)); >+ bb16.successors.push(new FrequentedBlock(bb17, Normal)); >+ bb16.predecessors.push(bb14); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, -1752); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdx, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdx, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Load8); >+ arg = Arg.createIndex(Reg.rax, Reg.rcx, 1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 272); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287112720, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(80); >+ inst.args.push(arg); >+ arg = Arg.createBigImm(287112720, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287112728, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rax, -8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createIndex(Reg.rax, Reg.rcx, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(MoveConditionallyTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287112720, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdx, -1088); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 272); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 280); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Rshift32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb16.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdx, -1088); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdx, -88); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdx, -1176); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rcx, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(80); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rcx, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rax, -8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb16.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createIndex(Reg.rax, Reg.rdx, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(MoveConditionallyTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rax, 5); >+ inst.args.push(arg); >+ arg = Arg.createImm(23); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 272); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 280); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Rshift32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rsi, -1048); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb16.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rsi, -1048); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rsi, -1072); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb16.append(inst); >+ inst = new Inst(Branch64); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ bb16.append(inst); >+ bb17.successors.push(new FrequentedBlock(bb19, Normal)); >+ bb17.predecessors.push(bb16); >+ inst = new Inst(ConvertInt32ToDouble); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb17.append(inst); >+ inst = new Inst(Jump); >+ bb17.append(inst); >+ bb18.successors.push(new FrequentedBlock(bb19, Normal)); >+ bb18.predecessors.push(bb16); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb18.append(inst); >+ inst = new Inst(Move64ToDouble); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb18.append(inst); >+ inst = new Inst(Jump); >+ bb18.append(inst); >+ bb19.successors.push(new FrequentedBlock(bb20, Normal)); >+ bb19.successors.push(new FrequentedBlock(bb32, Normal)); >+ bb19.predecessors.push(bb17); >+ bb19.predecessors.push(bb18); >+ inst = new Inst(ConvertInt32ToDouble); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(AddDouble); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(MoveDoubleTo64); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(0, 65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rsi, -1072); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rsi, -1080); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb19.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rsi, -1080); >+ inst.args.push(arg); >+ bb19.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rsi, -1104); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ bb19.append(inst); >+ bb20.successors.push(new FrequentedBlock(bb21, Normal)); >+ bb20.successors.push(new FrequentedBlock(bb32, Normal)); >+ bb20.predecessors.push(bb19); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rsi, -1096); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb20.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rsi, -1096); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rsi, -1112); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb20.append(inst); >+ bb21.successors.push(new FrequentedBlock(bb23, Normal)); >+ bb21.predecessors.push(bb20); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 344); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ bb21.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.r12, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(502); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb21.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r12, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb21.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createAddr(Reg.r12, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ bb21.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(BelowOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createImm(65286); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb21.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 232); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ bb21.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 256); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb21.append(inst); >+ inst = new Inst(Jump); >+ bb21.append(inst); >+ bb22.successors.push(new FrequentedBlock(bb23, Normal)); >+ bb22.predecessors.push(bb30); >+ bb22.predecessors.push(bb31); >+ bb22.predecessors.push(bb29); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb22.append(inst); >+ inst = new Inst(Jump); >+ bb22.append(inst); >+ bb23.successors.push(new FrequentedBlock(bb25, Normal)); >+ bb23.successors.push(new FrequentedBlock(bb24, Normal)); >+ bb23.predecessors.push(bb21); >+ bb23.predecessors.push(bb22); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb23.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rsi, -1096); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Load8); >+ arg = Arg.createAddr(Reg.rdi, 65285); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb23.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(BelowOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createImm(65285); >+ inst.args.push(arg); >+ bb23.append(inst); >+ bb24.successors.push(new FrequentedBlock(bb26, Normal)); >+ bb24.successors.push(new FrequentedBlock(bb30, Normal)); >+ bb24.predecessors.push(bb23); >+ inst = new Inst(Store8); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdi, 65285); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createImm(256); >+ inst.args.push(arg); >+ bb24.append(inst); >+ bb25.successors.push(new FrequentedBlock(bb26, Normal)); >+ bb25.successors.push(new FrequentedBlock(bb30, Normal)); >+ bb25.predecessors.push(bb23); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createImm(256); >+ inst.args.push(arg); >+ bb25.append(inst); >+ bb26.successors.push(new FrequentedBlock(bb28, Normal)); >+ bb26.successors.push(new FrequentedBlock(bb27, Normal)); >+ bb26.predecessors.push(bb24); >+ bb26.predecessors.push(bb25); >+ inst = new Inst(Load8); >+ arg = Arg.createAddr(Reg.rdi, 65286); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb26.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(BelowOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createImm(65285); >+ inst.args.push(arg); >+ bb26.append(inst); >+ bb27.successors.push(new FrequentedBlock(bb28, Normal)); >+ bb27.predecessors.push(bb26); >+ inst = new Inst(Store8); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdi, 65285); >+ inst.args.push(arg); >+ bb27.append(inst); >+ inst = new Inst(Jump); >+ bb27.append(inst); >+ bb28.successors.push(new FrequentedBlock(bb29, Normal)); >+ bb28.successors.push(new FrequentedBlock(bb31, Normal)); >+ bb28.predecessors.push(bb26); >+ bb28.predecessors.push(bb27); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 248); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb28.append(inst); >+ inst = new Inst(Or32); >+ arg = Arg.createImm(4); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb28.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb28.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb28.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 248); >+ inst.args.push(arg); >+ bb28.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb28.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb28.append(inst); >+ bb29.successors.push(new FrequentedBlock(bb22, Normal)); >+ bb29.successors.push(new FrequentedBlock(bb32, Normal)); >+ bb29.predecessors.push(bb28); >+ inst = new Inst(And32); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb29.append(inst); >+ inst = new Inst(And32); >+ arg = Arg.createImm(31); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb29.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb29.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 240); >+ inst.args.push(arg); >+ bb29.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb29.append(inst); >+ bb30.successors.push(new FrequentedBlock(bb22, Normal)); >+ bb30.successors.push(new FrequentedBlock(bb32, Normal)); >+ bb30.predecessors.push(bb24); >+ bb30.predecessors.push(bb25); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb30.append(inst); >+ bb31.successors.push(new FrequentedBlock(bb22, Normal)); >+ bb31.successors.push(new FrequentedBlock(bb32, Normal)); >+ bb31.predecessors.push(bb28); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb31.append(inst); >+ bb32.successors.push(new FrequentedBlock(bb33, Normal)); >+ bb32.successors.push(new FrequentedBlock(bb34, Normal)); >+ bb32.predecessors.push(bb19); >+ bb32.predecessors.push(bb20); >+ bb32.predecessors.push(bb30); >+ bb32.predecessors.push(bb31); >+ bb32.predecessors.push(bb29); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rsi, -1120); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb32.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ bb32.append(inst); >+ bb33.predecessors.push(bb32); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb33.append(inst); >+ inst = new Inst(Oops); >+ bb33.append(inst); >+ bb34.successors.push(new FrequentedBlock(bb36, Normal)); >+ bb34.successors.push(new FrequentedBlock(bb35, Normal)); >+ bb34.predecessors.push(bb32); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 136); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Branch64); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ bb34.append(inst); >+ bb35.successors.push(new FrequentedBlock(bb37, Normal)); >+ bb35.successors.push(new FrequentedBlock(bb38, Normal)); >+ bb35.predecessors.push(bb34); >+ inst = new Inst(ConvertInt32ToDouble); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb35.append(inst); >+ inst = new Inst(BranchDouble); >+ arg = Arg.createDoubleCond(DoubleGreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb35.append(inst); >+ bb36.successors.push(new FrequentedBlock(bb37, Normal)); >+ bb36.successors.push(new FrequentedBlock(bb38, Normal)); >+ bb36.predecessors.push(bb34); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb36.append(inst); >+ inst = new Inst(Move64ToDouble); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb36.append(inst); >+ inst = new Inst(BranchDouble); >+ arg = Arg.createDoubleCond(DoubleGreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb36.append(inst); >+ bb37.successors.push(new FrequentedBlock(bb38, Normal)); >+ bb37.predecessors.push(bb35); >+ bb37.predecessors.push(bb36); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286474592, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb37.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286474592, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb37.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb37.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb37.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb37.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb37.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb37.append(inst); >+ inst = new Inst(Jump); >+ bb37.append(inst); >+ bb38.successors.push(new FrequentedBlock(bb39, Normal)); >+ bb38.successors.push(new FrequentedBlock(bb40, Normal)); >+ bb38.predecessors.push(bb35); >+ bb38.predecessors.push(bb37); >+ bb38.predecessors.push(bb36); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(881); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb38.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb38.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdx, -1824); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb38.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb38.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb38.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb38.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb38.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdx, -1824); >+ inst.args.push(arg); >+ bb38.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdx, -1832); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb38.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb38.append(inst); >+ bb39.successors.push(new FrequentedBlock(bb42, Normal)); >+ bb39.successors.push(new FrequentedBlock(bb3, Normal)); >+ bb39.predecessors.push(bb38); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286474592, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(286474592, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb39.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 224); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Or32); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 224); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287131344, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287131344, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(287209728, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb39.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb39.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 224); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb39.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb39.append(inst); >+ bb40.successors.push(new FrequentedBlock(bb42, Normal)); >+ bb40.successors.push(new FrequentedBlock(bb3, Normal)); >+ bb40.predecessors.push(bb38); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 224); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb40.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb40.append(inst); >+ bb41.predecessors.push(bb1); >+ bb41.predecessors.push(bb2); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb41.append(inst); >+ inst = new Inst(Ret64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb41.append(inst); >+ bb42.predecessors.push(bb40); >+ bb42.predecessors.push(bb39); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb42.append(inst); >+ inst = new Inst(Ret64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb42.append(inst); >+ return code; >+} >+"use strict"; >+// Generated by Air::dumpAsJS from gaussianBlur#A8vcYg in Kraken/imaging-gaussian-blur >+function createPayloadImagingGaussianBlurGaussianBlur() >+{ >+ let code = new Code(); >+ let bb0 = code.addBlock(); >+ let bb1 = code.addBlock(); >+ let bb2 = code.addBlock(); >+ let bb3 = code.addBlock(); >+ let bb4 = code.addBlock(); >+ let bb5 = code.addBlock(); >+ let bb6 = code.addBlock(); >+ let bb7 = code.addBlock(); >+ let bb8 = code.addBlock(); >+ let bb9 = code.addBlock(); >+ let bb10 = code.addBlock(); >+ let bb11 = code.addBlock(); >+ let bb12 = code.addBlock(); >+ let bb13 = code.addBlock(); >+ let bb14 = code.addBlock(); >+ let bb15 = code.addBlock(); >+ let bb16 = code.addBlock(); >+ let bb17 = code.addBlock(); >+ let bb18 = code.addBlock(); >+ let bb19 = code.addBlock(); >+ let bb20 = code.addBlock(); >+ let bb21 = code.addBlock(); >+ let bb22 = code.addBlock(); >+ let bb23 = code.addBlock(); >+ let bb24 = code.addBlock(); >+ let bb25 = code.addBlock(); >+ let bb26 = code.addBlock(); >+ let bb27 = code.addBlock(); >+ let bb28 = code.addBlock(); >+ let bb29 = code.addBlock(); >+ let bb30 = code.addBlock(); >+ let bb31 = code.addBlock(); >+ let bb32 = code.addBlock(); >+ let bb33 = code.addBlock(); >+ let bb34 = code.addBlock(); >+ let bb35 = code.addBlock(); >+ let bb36 = code.addBlock(); >+ let slot0 = code.addStackSlot(40, Locked); >+ let slot1 = code.addStackSlot(8, Spill); >+ let slot2 = code.addStackSlot(8, Spill); >+ let slot3 = code.addStackSlot(4, Spill); >+ let slot4 = code.addStackSlot(8, Spill); >+ let slot5 = code.addStackSlot(8, Spill); >+ let slot6 = code.addStackSlot(40, Locked); >+ slot6.setOffsetFromFP(-40); >+ let tmp141 = code.newTmp(GP); >+ let tmp140 = code.newTmp(GP); >+ let tmp139 = code.newTmp(GP); >+ let tmp138 = code.newTmp(GP); >+ let tmp137 = code.newTmp(GP); >+ let tmp136 = code.newTmp(GP); >+ let tmp135 = code.newTmp(GP); >+ let tmp134 = code.newTmp(GP); >+ let tmp133 = code.newTmp(GP); >+ let tmp132 = code.newTmp(GP); >+ let tmp131 = code.newTmp(GP); >+ let tmp130 = code.newTmp(GP); >+ let tmp129 = code.newTmp(GP); >+ let tmp128 = code.newTmp(GP); >+ let tmp127 = code.newTmp(GP); >+ let tmp126 = code.newTmp(GP); >+ let tmp125 = code.newTmp(GP); >+ let tmp124 = code.newTmp(GP); >+ let tmp123 = code.newTmp(GP); >+ let tmp122 = code.newTmp(GP); >+ let tmp121 = code.newTmp(GP); >+ let tmp120 = code.newTmp(GP); >+ let tmp119 = code.newTmp(GP); >+ let tmp118 = code.newTmp(GP); >+ let tmp117 = code.newTmp(GP); >+ let tmp116 = code.newTmp(GP); >+ let tmp115 = code.newTmp(GP); >+ let tmp114 = code.newTmp(GP); >+ let tmp113 = code.newTmp(GP); >+ let tmp112 = code.newTmp(GP); >+ let tmp111 = code.newTmp(GP); >+ let tmp110 = code.newTmp(GP); >+ let tmp109 = code.newTmp(GP); >+ let tmp108 = code.newTmp(GP); >+ let tmp107 = code.newTmp(GP); >+ let tmp106 = code.newTmp(GP); >+ let tmp105 = code.newTmp(GP); >+ let tmp104 = code.newTmp(GP); >+ let tmp103 = code.newTmp(GP); >+ let tmp102 = code.newTmp(GP); >+ let tmp101 = code.newTmp(GP); >+ let tmp100 = code.newTmp(GP); >+ let tmp99 = code.newTmp(GP); >+ let tmp98 = code.newTmp(GP); >+ let tmp97 = code.newTmp(GP); >+ let tmp96 = code.newTmp(GP); >+ let tmp95 = code.newTmp(GP); >+ let tmp94 = code.newTmp(GP); >+ let tmp93 = code.newTmp(GP); >+ let tmp92 = code.newTmp(GP); >+ let tmp91 = code.newTmp(GP); >+ let tmp90 = code.newTmp(GP); >+ let tmp89 = code.newTmp(GP); >+ let tmp88 = code.newTmp(GP); >+ let tmp87 = code.newTmp(GP); >+ let tmp86 = code.newTmp(GP); >+ let tmp85 = code.newTmp(GP); >+ let tmp84 = code.newTmp(GP); >+ let tmp83 = code.newTmp(GP); >+ let tmp82 = code.newTmp(GP); >+ let tmp81 = code.newTmp(GP); >+ let tmp80 = code.newTmp(GP); >+ let tmp79 = code.newTmp(GP); >+ let tmp78 = code.newTmp(GP); >+ let tmp77 = code.newTmp(GP); >+ let tmp76 = code.newTmp(GP); >+ let tmp75 = code.newTmp(GP); >+ let tmp74 = code.newTmp(GP); >+ let tmp73 = code.newTmp(GP); >+ let tmp72 = code.newTmp(GP); >+ let tmp71 = code.newTmp(GP); >+ let tmp70 = code.newTmp(GP); >+ let tmp69 = code.newTmp(GP); >+ let tmp68 = code.newTmp(GP); >+ let tmp67 = code.newTmp(GP); >+ let tmp66 = code.newTmp(GP); >+ let tmp65 = code.newTmp(GP); >+ let tmp64 = code.newTmp(GP); >+ let tmp63 = code.newTmp(GP); >+ let tmp62 = code.newTmp(GP); >+ let tmp61 = code.newTmp(GP); >+ let tmp60 = code.newTmp(GP); >+ let tmp59 = code.newTmp(GP); >+ let tmp58 = code.newTmp(GP); >+ let tmp57 = code.newTmp(GP); >+ let tmp56 = code.newTmp(GP); >+ let tmp55 = code.newTmp(GP); >+ let tmp54 = code.newTmp(GP); >+ let tmp53 = code.newTmp(GP); >+ let tmp52 = code.newTmp(GP); >+ let tmp51 = code.newTmp(GP); >+ let tmp50 = code.newTmp(GP); >+ let tmp49 = code.newTmp(GP); >+ let tmp48 = code.newTmp(GP); >+ let tmp47 = code.newTmp(GP); >+ let tmp46 = code.newTmp(GP); >+ let tmp45 = code.newTmp(GP); >+ let tmp44 = code.newTmp(GP); >+ let tmp43 = code.newTmp(GP); >+ let tmp42 = code.newTmp(GP); >+ let tmp41 = code.newTmp(GP); >+ let tmp40 = code.newTmp(GP); >+ let tmp39 = code.newTmp(GP); >+ let tmp38 = code.newTmp(GP); >+ let tmp37 = code.newTmp(GP); >+ let tmp36 = code.newTmp(GP); >+ let tmp35 = code.newTmp(GP); >+ let tmp34 = code.newTmp(GP); >+ let tmp33 = code.newTmp(GP); >+ let tmp32 = code.newTmp(GP); >+ let tmp31 = code.newTmp(GP); >+ let tmp30 = code.newTmp(GP); >+ let tmp29 = code.newTmp(GP); >+ let tmp28 = code.newTmp(GP); >+ let tmp27 = code.newTmp(GP); >+ let tmp26 = code.newTmp(GP); >+ let tmp25 = code.newTmp(GP); >+ let tmp24 = code.newTmp(GP); >+ let tmp23 = code.newTmp(GP); >+ let tmp22 = code.newTmp(GP); >+ let tmp21 = code.newTmp(GP); >+ let tmp20 = code.newTmp(GP); >+ let tmp19 = code.newTmp(GP); >+ let tmp18 = code.newTmp(GP); >+ let tmp17 = code.newTmp(GP); >+ let tmp16 = code.newTmp(GP); >+ let tmp15 = code.newTmp(GP); >+ let tmp14 = code.newTmp(GP); >+ let tmp13 = code.newTmp(GP); >+ let tmp12 = code.newTmp(GP); >+ let tmp11 = code.newTmp(GP); >+ let tmp10 = code.newTmp(GP); >+ let tmp9 = code.newTmp(GP); >+ let tmp8 = code.newTmp(GP); >+ let tmp7 = code.newTmp(GP); >+ let tmp6 = code.newTmp(GP); >+ let tmp5 = code.newTmp(GP); >+ let tmp4 = code.newTmp(GP); >+ let tmp3 = code.newTmp(GP); >+ let tmp2 = code.newTmp(GP); >+ let tmp1 = code.newTmp(GP); >+ let tmp0 = code.newTmp(GP); >+ let ftmp74 = code.newTmp(FP); >+ let ftmp73 = code.newTmp(FP); >+ let ftmp72 = code.newTmp(FP); >+ let ftmp71 = code.newTmp(FP); >+ let ftmp70 = code.newTmp(FP); >+ let ftmp69 = code.newTmp(FP); >+ let ftmp68 = code.newTmp(FP); >+ let ftmp67 = code.newTmp(FP); >+ let ftmp66 = code.newTmp(FP); >+ let ftmp65 = code.newTmp(FP); >+ let ftmp64 = code.newTmp(FP); >+ let ftmp63 = code.newTmp(FP); >+ let ftmp62 = code.newTmp(FP); >+ let ftmp61 = code.newTmp(FP); >+ let ftmp60 = code.newTmp(FP); >+ let ftmp59 = code.newTmp(FP); >+ let ftmp58 = code.newTmp(FP); >+ let ftmp57 = code.newTmp(FP); >+ let ftmp56 = code.newTmp(FP); >+ let ftmp55 = code.newTmp(FP); >+ let ftmp54 = code.newTmp(FP); >+ let ftmp53 = code.newTmp(FP); >+ let ftmp52 = code.newTmp(FP); >+ let ftmp51 = code.newTmp(FP); >+ let ftmp50 = code.newTmp(FP); >+ let ftmp49 = code.newTmp(FP); >+ let ftmp48 = code.newTmp(FP); >+ let ftmp47 = code.newTmp(FP); >+ let ftmp46 = code.newTmp(FP); >+ let ftmp45 = code.newTmp(FP); >+ let ftmp44 = code.newTmp(FP); >+ let ftmp43 = code.newTmp(FP); >+ let ftmp42 = code.newTmp(FP); >+ let ftmp41 = code.newTmp(FP); >+ let ftmp40 = code.newTmp(FP); >+ let ftmp39 = code.newTmp(FP); >+ let ftmp38 = code.newTmp(FP); >+ let ftmp37 = code.newTmp(FP); >+ let ftmp36 = code.newTmp(FP); >+ let ftmp35 = code.newTmp(FP); >+ let ftmp34 = code.newTmp(FP); >+ let ftmp33 = code.newTmp(FP); >+ let ftmp32 = code.newTmp(FP); >+ let ftmp31 = code.newTmp(FP); >+ let ftmp30 = code.newTmp(FP); >+ let ftmp29 = code.newTmp(FP); >+ let ftmp28 = code.newTmp(FP); >+ let ftmp27 = code.newTmp(FP); >+ let ftmp26 = code.newTmp(FP); >+ let ftmp25 = code.newTmp(FP); >+ let ftmp24 = code.newTmp(FP); >+ let ftmp23 = code.newTmp(FP); >+ let ftmp22 = code.newTmp(FP); >+ let ftmp21 = code.newTmp(FP); >+ let ftmp20 = code.newTmp(FP); >+ let ftmp19 = code.newTmp(FP); >+ let ftmp18 = code.newTmp(FP); >+ let ftmp17 = code.newTmp(FP); >+ let ftmp16 = code.newTmp(FP); >+ let ftmp15 = code.newTmp(FP); >+ let ftmp14 = code.newTmp(FP); >+ let ftmp13 = code.newTmp(FP); >+ let ftmp12 = code.newTmp(FP); >+ let ftmp11 = code.newTmp(FP); >+ let ftmp10 = code.newTmp(FP); >+ let ftmp9 = code.newTmp(FP); >+ let ftmp8 = code.newTmp(FP); >+ let ftmp7 = code.newTmp(FP); >+ let ftmp6 = code.newTmp(FP); >+ let ftmp5 = code.newTmp(FP); >+ let ftmp4 = code.newTmp(FP); >+ let ftmp3 = code.newTmp(FP); >+ let ftmp2 = code.newTmp(FP); >+ let ftmp1 = code.newTmp(FP); >+ let ftmp0 = code.newTmp(FP); >+ let inst; >+ let arg; >+ bb0.successors.push(new FrequentedBlock(bb2, Normal)); >+ bb0.successors.push(new FrequentedBlock(bb1, Rare)); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(144305904, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbp, 16); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbp); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Scratch, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547168, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547184, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547192, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547200, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547208, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547216, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547224, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547232, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(142547240, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdi, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(0, -65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move64ToDouble); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(BranchDouble); >+ arg = Arg.createDoubleCond(DoubleEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ bb0.append(inst); >+ bb1.successors.push(new FrequentedBlock(bb2, Normal)); >+ bb1.predecessors.push(bb0); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb1.append(inst); >+ inst = new Inst(ConvertInt32ToDouble); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ bb1.append(inst); >+ inst = new Inst(Jump); >+ bb1.append(inst); >+ bb2.successors.push(new FrequentedBlock(bb4, Normal)); >+ bb2.successors.push(new FrequentedBlock(bb3, Rare)); >+ bb2.predecessors.push(bb0); >+ bb2.predecessors.push(bb1); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb2.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb2.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb2.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb2.append(inst); >+ inst = new Inst(Move64ToDouble); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ bb2.append(inst); >+ inst = new Inst(BranchDouble); >+ arg = Arg.createDoubleCond(DoubleEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ bb2.append(inst); >+ bb3.successors.push(new FrequentedBlock(bb4, Normal)); >+ bb3.predecessors.push(bb2); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb3.append(inst); >+ inst = new Inst(ConvertInt32ToDouble); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ bb3.append(inst); >+ inst = new Inst(Jump); >+ bb3.append(inst); >+ bb4.successors.push(new FrequentedBlock(bb6, Normal)); >+ bb4.successors.push(new FrequentedBlock(bb5, Rare)); >+ bb4.predecessors.push(bb2); >+ bb4.predecessors.push(bb3); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move64ToDouble); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(BranchDouble); >+ arg = Arg.createDoubleCond(DoubleEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ bb4.append(inst); >+ bb5.successors.push(new FrequentedBlock(bb6, Normal)); >+ bb5.predecessors.push(bb4); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb5.append(inst); >+ inst = new Inst(ConvertInt32ToDouble); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Jump); >+ bb5.append(inst); >+ bb6.successors.push(new FrequentedBlock(bb8, Normal)); >+ bb6.successors.push(new FrequentedBlock(bb7, Rare)); >+ bb6.predecessors.push(bb4); >+ bb6.predecessors.push(bb5); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb6.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move64ToDouble); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(BranchDouble); >+ arg = Arg.createDoubleCond(DoubleEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ bb6.append(inst); >+ bb7.successors.push(new FrequentedBlock(bb8, Normal)); >+ bb7.predecessors.push(bb6); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb7.append(inst); >+ inst = new Inst(ConvertInt32ToDouble); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Jump); >+ bb7.append(inst); >+ bb8.successors.push(new FrequentedBlock(bb10, Normal)); >+ bb8.successors.push(new FrequentedBlock(bb9, Rare)); >+ bb8.predecessors.push(bb6); >+ bb8.predecessors.push(bb7); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(117076488, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Move64ToDouble); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm6); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(BranchDouble); >+ arg = Arg.createDoubleCond(DoubleEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm6); >+ inst.args.push(arg); >+ bb8.append(inst); >+ bb9.successors.push(new FrequentedBlock(bb10, Normal)); >+ bb9.predecessors.push(bb8); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb9.append(inst); >+ inst = new Inst(ConvertInt32ToDouble); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm6); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Jump); >+ bb9.append(inst); >+ bb10.successors.push(new FrequentedBlock(bb18, Normal)); >+ bb10.predecessors.push(bb8); >+ bb10.predecessors.push(bb9); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(144506584, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdi, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createAddr(Reg.r9, -8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(144506544, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdi, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(80); >+ inst.args.push(arg); >+ arg = Arg.createBigImm(144506544, 1); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb10.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(144506552, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdi, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot2, 0); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createAddr(Reg.rdi, -8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot3, 0); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(MoveZeroToDouble); >+ arg = Arg.createTmp(Reg.xmm7); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot4, 0); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(2, -65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Jump); >+ bb10.append(inst); >+ bb11.successors.push(new FrequentedBlock(bb13, Normal)); >+ bb11.predecessors.push(bb35); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Jump); >+ bb11.append(inst); >+ bb12.successors.push(new FrequentedBlock(bb13, Normal)); >+ bb12.predecessors.push(bb34); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb12.append(inst); >+ inst = new Inst(Jump); >+ bb12.append(inst); >+ bb13.successors.push(new FrequentedBlock(bb15, Normal)); >+ bb13.predecessors.push(bb11); >+ bb13.predecessors.push(bb12); >+ inst = new Inst(Move); >+ arg = Arg.createImm(-6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb13.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createTmp(Reg.xmm7); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ bb13.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createTmp(Reg.xmm7); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ bb13.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createTmp(Reg.xmm7); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ bb13.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createTmp(Reg.xmm7); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ bb13.append(inst); >+ inst = new Inst(Jump); >+ bb13.append(inst); >+ bb14.successors.push(new FrequentedBlock(bb15, Normal)); >+ bb14.predecessors.push(bb31); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(Jump); >+ bb14.append(inst); >+ bb15.successors.push(new FrequentedBlock(bb28, Normal)); >+ bb15.successors.push(new FrequentedBlock(bb16, Normal)); >+ bb15.predecessors.push(bb13); >+ bb15.predecessors.push(bb14); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ bb15.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ bb15.append(inst); >+ bb16.successors.push(new FrequentedBlock(bb29, Normal)); >+ bb16.successors.push(new FrequentedBlock(bb17, Normal)); >+ bb16.predecessors.push(bb15); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(267); >+ inst.args.push(arg); >+ bb16.append(inst); >+ bb17.successors.push(new FrequentedBlock(bb18, Normal)); >+ bb17.predecessors.push(bb16); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb17.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(-6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb17.append(inst); >+ inst = new Inst(Jump); >+ bb17.append(inst); >+ bb18.successors.push(new FrequentedBlock(bb20, Normal)); >+ bb18.successors.push(new FrequentedBlock(bb19, Rare)); >+ bb18.predecessors.push(bb10); >+ bb18.predecessors.push(bb17); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ bb18.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ bb18.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(400); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ bb18.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb18.append(inst); >+ bb19.successors.push(new FrequentedBlock(bb20, Normal)); >+ bb19.predecessors.push(bb18); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb19.append(inst); >+ inst = new Inst(Jump); >+ bb19.append(inst); >+ bb20.successors.push(new FrequentedBlock(bb22, Normal)); >+ bb20.predecessors.push(bb18); >+ bb20.predecessors.push(bb19); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Rshift32); >+ arg = Arg.createImm(31); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Add32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Xor32); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb20.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot3, 0); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb20.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createStack(slot2, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createIndex(Reg.rsi, Reg.rdi, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(MoveConditionallyTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb20.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rdi, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(79); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb20.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rdi, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createAddr(Reg.r12, -8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb20.append(inst); >+ inst = new Inst(Jump); >+ bb20.append(inst); >+ bb21.successors.push(new FrequentedBlock(bb22, Normal)); >+ bb21.predecessors.push(bb27); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb21.append(inst); >+ inst = new Inst(Jump); >+ bb21.append(inst); >+ bb22.successors.push(new FrequentedBlock(bb25, Normal)); >+ bb22.successors.push(new FrequentedBlock(bb23, Normal)); >+ bb22.predecessors.push(bb20); >+ bb22.predecessors.push(bb21); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ bb22.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ bb22.append(inst); >+ bb23.successors.push(new FrequentedBlock(bb26, Normal)); >+ bb23.successors.push(new FrequentedBlock(bb24, Normal)); >+ bb23.predecessors.push(bb22); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(400); >+ inst.args.push(arg); >+ bb23.append(inst); >+ bb24.successors.push(new FrequentedBlock(bb27, Normal)); >+ bb24.predecessors.push(bb23); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb24.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createImm(4); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb24.append(inst); >+ inst = new Inst(Add32); >+ arg = Arg.createImm(3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb24.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb24.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createIndex(Reg.r9, Reg.r15, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Rshift32); >+ arg = Arg.createImm(31); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Add32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Xor32); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb24.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb24.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createIndex(Reg.r12, Reg.rbx, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm4); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(MulDouble); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm4); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(AddDouble); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Add32); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(MulDouble); >+ arg = Arg.createIndex(Reg.r9, Reg.rsi, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm4); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(AddDouble); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Add32); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(MulDouble); >+ arg = Arg.createIndex(Reg.r9, Reg.r15, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm4); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(AddDouble); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(MulDouble); >+ arg = Arg.createIndex(Reg.r9, Reg.r14, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm4); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm4); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(AddDouble); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm4); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ bb24.append(inst); >+ inst = new Inst(Jump); >+ bb24.append(inst); >+ bb25.successors.push(new FrequentedBlock(bb27, Normal)); >+ bb25.predecessors.push(bb22); >+ inst = new Inst(Jump); >+ bb25.append(inst); >+ bb26.successors.push(new FrequentedBlock(bb27, Normal)); >+ bb26.predecessors.push(bb23); >+ inst = new Inst(Jump); >+ bb26.append(inst); >+ bb27.successors.push(new FrequentedBlock(bb21, Normal)); >+ bb27.successors.push(new FrequentedBlock(bb30, Normal)); >+ bb27.predecessors.push(bb24); >+ bb27.predecessors.push(bb26); >+ bb27.predecessors.push(bb25); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb27.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ bb27.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(7); >+ inst.args.push(arg); >+ bb27.append(inst); >+ bb28.successors.push(new FrequentedBlock(bb31, Normal)); >+ bb28.predecessors.push(bb15); >+ inst = new Inst(Jump); >+ bb28.append(inst); >+ bb29.successors.push(new FrequentedBlock(bb31, Normal)); >+ bb29.predecessors.push(bb16); >+ inst = new Inst(Jump); >+ bb29.append(inst); >+ bb30.successors.push(new FrequentedBlock(bb31, Normal)); >+ bb30.predecessors.push(bb27); >+ inst = new Inst(Move); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb30.append(inst); >+ inst = new Inst(Jump); >+ bb30.append(inst); >+ bb31.successors.push(new FrequentedBlock(bb14, Normal)); >+ bb31.successors.push(new FrequentedBlock(bb32, Normal)); >+ bb31.predecessors.push(bb30); >+ bb31.predecessors.push(bb29); >+ bb31.predecessors.push(bb28); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb31.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ bb31.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(7); >+ inst.args.push(arg); >+ bb31.append(inst); >+ bb32.successors.push(new FrequentedBlock(bb34, Normal)); >+ bb32.successors.push(new FrequentedBlock(bb33, Rare)); >+ bb32.predecessors.push(bb31); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createImm(400); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ bb32.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb32.append(inst); >+ bb33.successors.push(new FrequentedBlock(bb34, Normal)); >+ bb33.predecessors.push(bb32); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createImm(0); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb33.append(inst); >+ inst = new Inst(Jump); >+ bb33.append(inst); >+ bb34.successors.push(new FrequentedBlock(bb12, Normal)); >+ bb34.successors.push(new FrequentedBlock(bb35, Normal)); >+ bb34.predecessors.push(bb32); >+ bb34.predecessors.push(bb33); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createImm(4); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb34.append(inst); >+ inst = new Inst(DivDouble); >+ arg = Arg.createTmp(Reg.xmm6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createDoubleCond(DoubleNotEqualOrUnordered); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createTmp(Reg.xmm1); >+ inst.args.push(arg); >+ arg = Arg.createIndex(Reg.r9, Reg.rsi, 8, 0); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb34.append(inst); >+ inst = new Inst(DivDouble); >+ arg = Arg.createTmp(Reg.xmm6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Add32); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Add32); >+ arg = Arg.createImm(3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createDoubleCond(DoubleNotEqualOrUnordered); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createTmp(Reg.xmm2); >+ inst.args.push(arg); >+ arg = Arg.createIndex(Reg.r9, Reg.rdi, 8, 0); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Add32); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(DivDouble); >+ arg = Arg.createTmp(Reg.xmm6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createDoubleCond(DoubleNotEqualOrUnordered); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createTmp(Reg.xmm3); >+ inst.args.push(arg); >+ arg = Arg.createIndex(Reg.r9, Reg.rsi, 8, 0); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(DivDouble); >+ arg = Arg.createTmp(Reg.xmm6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createDoubleCond(DoubleNotEqualOrUnordered); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: FP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(MoveDouble); >+ arg = Arg.createTmp(Reg.xmm5); >+ inst.args.push(arg); >+ arg = Arg.createIndex(Reg.r9, Reg.rax, 8, 0); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb34.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(400); >+ inst.args.push(arg); >+ bb34.append(inst); >+ bb35.successors.push(new FrequentedBlock(bb11, Normal)); >+ bb35.successors.push(new FrequentedBlock(bb36, Normal)); >+ bb35.predecessors.push(bb34); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb35.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb35.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(267); >+ inst.args.push(arg); >+ bb35.append(inst); >+ bb36.predecessors.push(bb35); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(144506576, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb36.append(inst); >+ inst = new Inst(Ret64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb36.append(inst); >+ return code; >+} >+"use strict"; >+// Generated by Air::dumpAsJS from #ACLj8C in Air.js >+function createPayloadAirJSACLj8C() >+{ >+ let code = new Code(); >+ let bb0 = code.addBlock(); >+ let bb1 = code.addBlock(); >+ let bb2 = code.addBlock(); >+ let bb3 = code.addBlock(); >+ let bb4 = code.addBlock(); >+ let bb5 = code.addBlock(); >+ let bb6 = code.addBlock(); >+ let bb7 = code.addBlock(); >+ let bb8 = code.addBlock(); >+ let bb9 = code.addBlock(); >+ let bb10 = code.addBlock(); >+ let bb11 = code.addBlock(); >+ let bb12 = code.addBlock(); >+ let bb13 = code.addBlock(); >+ let bb14 = code.addBlock(); >+ let bb15 = code.addBlock(); >+ let slot0 = code.addStackSlot(160, Locked); >+ let slot1 = code.addStackSlot(8, Spill); >+ let slot2 = code.addStackSlot(8, Spill); >+ let slot3 = code.addStackSlot(8, Spill); >+ let slot4 = code.addStackSlot(40, Locked); >+ slot4.setOffsetFromFP(-40); >+ let tmp61 = code.newTmp(GP); >+ let tmp60 = code.newTmp(GP); >+ let tmp59 = code.newTmp(GP); >+ let tmp58 = code.newTmp(GP); >+ let tmp57 = code.newTmp(GP); >+ let tmp56 = code.newTmp(GP); >+ let tmp55 = code.newTmp(GP); >+ let tmp54 = code.newTmp(GP); >+ let tmp53 = code.newTmp(GP); >+ let tmp52 = code.newTmp(GP); >+ let tmp51 = code.newTmp(GP); >+ let tmp50 = code.newTmp(GP); >+ let tmp49 = code.newTmp(GP); >+ let tmp48 = code.newTmp(GP); >+ let tmp47 = code.newTmp(GP); >+ let tmp46 = code.newTmp(GP); >+ let tmp45 = code.newTmp(GP); >+ let tmp44 = code.newTmp(GP); >+ let tmp43 = code.newTmp(GP); >+ let tmp42 = code.newTmp(GP); >+ let tmp41 = code.newTmp(GP); >+ let tmp40 = code.newTmp(GP); >+ let tmp39 = code.newTmp(GP); >+ let tmp38 = code.newTmp(GP); >+ let tmp37 = code.newTmp(GP); >+ let tmp36 = code.newTmp(GP); >+ let tmp35 = code.newTmp(GP); >+ let tmp34 = code.newTmp(GP); >+ let tmp33 = code.newTmp(GP); >+ let tmp32 = code.newTmp(GP); >+ let tmp31 = code.newTmp(GP); >+ let tmp30 = code.newTmp(GP); >+ let tmp29 = code.newTmp(GP); >+ let tmp28 = code.newTmp(GP); >+ let tmp27 = code.newTmp(GP); >+ let tmp26 = code.newTmp(GP); >+ let tmp25 = code.newTmp(GP); >+ let tmp24 = code.newTmp(GP); >+ let tmp23 = code.newTmp(GP); >+ let tmp22 = code.newTmp(GP); >+ let tmp21 = code.newTmp(GP); >+ let tmp20 = code.newTmp(GP); >+ let tmp19 = code.newTmp(GP); >+ let tmp18 = code.newTmp(GP); >+ let tmp17 = code.newTmp(GP); >+ let tmp16 = code.newTmp(GP); >+ let tmp15 = code.newTmp(GP); >+ let tmp14 = code.newTmp(GP); >+ let tmp13 = code.newTmp(GP); >+ let tmp12 = code.newTmp(GP); >+ let tmp11 = code.newTmp(GP); >+ let tmp10 = code.newTmp(GP); >+ let tmp9 = code.newTmp(GP); >+ let tmp8 = code.newTmp(GP); >+ let tmp7 = code.newTmp(GP); >+ let tmp6 = code.newTmp(GP); >+ let tmp5 = code.newTmp(GP); >+ let tmp4 = code.newTmp(GP); >+ let tmp3 = code.newTmp(GP); >+ let tmp2 = code.newTmp(GP); >+ let tmp1 = code.newTmp(GP); >+ let tmp0 = code.newTmp(GP); >+ let inst; >+ let arg; >+ bb0.successors.push(new FrequentedBlock(bb1, Normal)); >+ bb0.successors.push(new FrequentedBlock(bb15, Normal)); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(276424800, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbp, 16); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbp); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Scratch, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbp, 72); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbp, 64); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbp, 56); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbp, 48); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(2, -65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbp, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(0, -65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rcx, 32); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rcx, 40); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(276327648, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.r8, 5); >+ inst.args.push(arg); >+ arg = Arg.createImm(21); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.r12, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(372); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r12, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, -40); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(276321024, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 72); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 64); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 56); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 48); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 40); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Xor64); >+ arg = Arg.createImm(6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(-2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot2, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(-2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot3, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ bb1.successors.push(new FrequentedBlock(bb3, Normal)); >+ bb1.successors.push(new FrequentedBlock(bb2, Normal)); >+ bb1.predecessors.push(bb0); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.r8, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(468); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb1.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r8, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb1.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(276741160, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb1.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rcx, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb1.append(inst); >+ inst = new Inst(Branch64); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rax, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb1.append(inst); >+ bb2.predecessors.push(bb1); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb2.append(inst); >+ inst = new Inst(Oops); >+ bb2.append(inst); >+ bb3.successors.push(new FrequentedBlock(bb4, Normal)); >+ bb3.successors.push(new FrequentedBlock(bb7, Normal)); >+ bb3.predecessors.push(bb1); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r8, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb3.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 5); >+ inst.args.push(arg); >+ arg = Arg.createImm(23); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb3.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(275739616, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb3.append(inst); >+ inst = new Inst(Branch64); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb3.append(inst); >+ bb4.successors.push(new FrequentedBlock(bb5, Normal)); >+ bb4.successors.push(new FrequentedBlock(bb6, Normal)); >+ bb4.predecessors.push(bb3); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 0); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 32); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 32); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 24); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 16); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 8); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(276645872, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(276646496, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb4.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Xor64); >+ arg = Arg.createImm(6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(-2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb4.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb4.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb4.append(inst); >+ bb5.successors.push(new FrequentedBlock(bb8, Normal)); >+ bb5.predecessors.push(bb4); >+ inst = new Inst(Move); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); >+ bb5.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb5.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb5.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rcx, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(419); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(276168608, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb5.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Jump); >+ bb5.append(inst); >+ bb6.successors.push(new FrequentedBlock(bb8, Normal)); >+ bb6.predecessors.push(bb4); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Jump); >+ bb6.append(inst); >+ bb7.successors.push(new FrequentedBlock(bb12, Normal)); >+ bb7.successors.push(new FrequentedBlock(bb9, Normal)); >+ bb7.predecessors.push(bb3); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(5); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(40); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(48); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(56); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(40); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(48); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(56); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb7.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb7.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ bb7.append(inst); >+ bb8.successors.push(new FrequentedBlock(bb13, Normal)); >+ bb8.successors.push(new FrequentedBlock(bb10, Normal)); >+ bb8.predecessors.push(bb6); >+ bb8.predecessors.push(bb5); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ bb8.append(inst); >+ bb9.successors.push(new FrequentedBlock(bb11, Normal)); >+ bb9.predecessors.push(bb7); >+ inst = new Inst(Jump); >+ bb9.append(inst); >+ bb10.successors.push(new FrequentedBlock(bb11, Normal)); >+ bb10.predecessors.push(bb8); >+ inst = new Inst(Jump); >+ bb10.append(inst); >+ bb11.predecessors.push(bb9); >+ bb11.predecessors.push(bb10); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(Below); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rax, 5); >+ inst.args.push(arg); >+ arg = Arg.createImm(20); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb11.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb11.append(inst); >+ inst = new Inst(Oops); >+ bb11.append(inst); >+ bb12.successors.push(new FrequentedBlock(bb14, Normal)); >+ bb12.predecessors.push(bb7); >+ inst = new Inst(Jump); >+ bb12.append(inst); >+ bb13.successors.push(new FrequentedBlock(bb14, Normal)); >+ bb13.predecessors.push(bb8); >+ inst = new Inst(Jump); >+ bb13.append(inst); >+ bb14.predecessors.push(bb12); >+ bb14.predecessors.push(bb13); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(And64); >+ arg = Arg.createImm(-9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb14.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(Ret64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb14.append(inst); >+ bb15.predecessors.push(bb0); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Ret64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb15.append(inst); >+ return code; >+} >+"use strict"; >+// Generated by Air::dumpAsJS from scanIdentifier#EPcFQe in Octane/typescript >+function createPayloadTypescriptScanIdentifier() >+{ >+ let code = new Code(); >+ let bb0 = code.addBlock(); >+ let bb1 = code.addBlock(); >+ let bb2 = code.addBlock(); >+ let bb3 = code.addBlock(); >+ let bb4 = code.addBlock(); >+ let bb5 = code.addBlock(); >+ let bb6 = code.addBlock(); >+ let bb7 = code.addBlock(); >+ let bb8 = code.addBlock(); >+ let bb9 = code.addBlock(); >+ let bb10 = code.addBlock(); >+ let bb11 = code.addBlock(); >+ let bb12 = code.addBlock(); >+ let bb13 = code.addBlock(); >+ let bb14 = code.addBlock(); >+ let bb15 = code.addBlock(); >+ let bb16 = code.addBlock(); >+ let bb17 = code.addBlock(); >+ let bb18 = code.addBlock(); >+ let bb19 = code.addBlock(); >+ let bb20 = code.addBlock(); >+ let bb21 = code.addBlock(); >+ let bb22 = code.addBlock(); >+ let bb23 = code.addBlock(); >+ let bb24 = code.addBlock(); >+ let bb25 = code.addBlock(); >+ let bb26 = code.addBlock(); >+ let bb27 = code.addBlock(); >+ let bb28 = code.addBlock(); >+ let bb29 = code.addBlock(); >+ let bb30 = code.addBlock(); >+ let bb31 = code.addBlock(); >+ let bb32 = code.addBlock(); >+ let bb33 = code.addBlock(); >+ let bb34 = code.addBlock(); >+ let slot0 = code.addStackSlot(56, Locked); >+ let slot1 = code.addStackSlot(8, Spill); >+ let slot2 = code.addStackSlot(8, Spill); >+ let slot3 = code.addStackSlot(8, Spill); >+ let slot4 = code.addStackSlot(8, Spill); >+ let slot5 = code.addStackSlot(4, Spill); >+ let slot6 = code.addStackSlot(8, Spill); >+ let slot7 = code.addStackSlot(8, Spill); >+ let slot8 = code.addStackSlot(8, Spill); >+ let slot9 = code.addStackSlot(40, Locked); >+ slot9.setOffsetFromFP(-40); >+ let tmp98 = code.newTmp(GP); >+ let tmp97 = code.newTmp(GP); >+ let tmp96 = code.newTmp(GP); >+ let tmp95 = code.newTmp(GP); >+ let tmp94 = code.newTmp(GP); >+ let tmp93 = code.newTmp(GP); >+ let tmp92 = code.newTmp(GP); >+ let tmp91 = code.newTmp(GP); >+ let tmp90 = code.newTmp(GP); >+ let tmp89 = code.newTmp(GP); >+ let tmp88 = code.newTmp(GP); >+ let tmp87 = code.newTmp(GP); >+ let tmp86 = code.newTmp(GP); >+ let tmp85 = code.newTmp(GP); >+ let tmp84 = code.newTmp(GP); >+ let tmp83 = code.newTmp(GP); >+ let tmp82 = code.newTmp(GP); >+ let tmp81 = code.newTmp(GP); >+ let tmp80 = code.newTmp(GP); >+ let tmp79 = code.newTmp(GP); >+ let tmp78 = code.newTmp(GP); >+ let tmp77 = code.newTmp(GP); >+ let tmp76 = code.newTmp(GP); >+ let tmp75 = code.newTmp(GP); >+ let tmp74 = code.newTmp(GP); >+ let tmp73 = code.newTmp(GP); >+ let tmp72 = code.newTmp(GP); >+ let tmp71 = code.newTmp(GP); >+ let tmp70 = code.newTmp(GP); >+ let tmp69 = code.newTmp(GP); >+ let tmp68 = code.newTmp(GP); >+ let tmp67 = code.newTmp(GP); >+ let tmp66 = code.newTmp(GP); >+ let tmp65 = code.newTmp(GP); >+ let tmp64 = code.newTmp(GP); >+ let tmp63 = code.newTmp(GP); >+ let tmp62 = code.newTmp(GP); >+ let tmp61 = code.newTmp(GP); >+ let tmp60 = code.newTmp(GP); >+ let tmp59 = code.newTmp(GP); >+ let tmp58 = code.newTmp(GP); >+ let tmp57 = code.newTmp(GP); >+ let tmp56 = code.newTmp(GP); >+ let tmp55 = code.newTmp(GP); >+ let tmp54 = code.newTmp(GP); >+ let tmp53 = code.newTmp(GP); >+ let tmp52 = code.newTmp(GP); >+ let tmp51 = code.newTmp(GP); >+ let tmp50 = code.newTmp(GP); >+ let tmp49 = code.newTmp(GP); >+ let tmp48 = code.newTmp(GP); >+ let tmp47 = code.newTmp(GP); >+ let tmp46 = code.newTmp(GP); >+ let tmp45 = code.newTmp(GP); >+ let tmp44 = code.newTmp(GP); >+ let tmp43 = code.newTmp(GP); >+ let tmp42 = code.newTmp(GP); >+ let tmp41 = code.newTmp(GP); >+ let tmp40 = code.newTmp(GP); >+ let tmp39 = code.newTmp(GP); >+ let tmp38 = code.newTmp(GP); >+ let tmp37 = code.newTmp(GP); >+ let tmp36 = code.newTmp(GP); >+ let tmp35 = code.newTmp(GP); >+ let tmp34 = code.newTmp(GP); >+ let tmp33 = code.newTmp(GP); >+ let tmp32 = code.newTmp(GP); >+ let tmp31 = code.newTmp(GP); >+ let tmp30 = code.newTmp(GP); >+ let tmp29 = code.newTmp(GP); >+ let tmp28 = code.newTmp(GP); >+ let tmp27 = code.newTmp(GP); >+ let tmp26 = code.newTmp(GP); >+ let tmp25 = code.newTmp(GP); >+ let tmp24 = code.newTmp(GP); >+ let tmp23 = code.newTmp(GP); >+ let tmp22 = code.newTmp(GP); >+ let tmp21 = code.newTmp(GP); >+ let tmp20 = code.newTmp(GP); >+ let tmp19 = code.newTmp(GP); >+ let tmp18 = code.newTmp(GP); >+ let tmp17 = code.newTmp(GP); >+ let tmp16 = code.newTmp(GP); >+ let tmp15 = code.newTmp(GP); >+ let tmp14 = code.newTmp(GP); >+ let tmp13 = code.newTmp(GP); >+ let tmp12 = code.newTmp(GP); >+ let tmp11 = code.newTmp(GP); >+ let tmp10 = code.newTmp(GP); >+ let tmp9 = code.newTmp(GP); >+ let tmp8 = code.newTmp(GP); >+ let tmp7 = code.newTmp(GP); >+ let tmp6 = code.newTmp(GP); >+ let tmp5 = code.newTmp(GP); >+ let tmp4 = code.newTmp(GP); >+ let tmp3 = code.newTmp(GP); >+ let tmp2 = code.newTmp(GP); >+ let tmp1 = code.newTmp(GP); >+ let tmp0 = code.newTmp(GP); >+ let inst; >+ let arg; >+ bb0.successors.push(new FrequentedBlock(bb5, Normal)); >+ bb0.successors.push(new FrequentedBlock(bb4, Normal)); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(177329888, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbp, 16); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbp); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Scratch, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbp, 40); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(2, -65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 5); >+ inst.args.push(arg); >+ arg = Arg.createImm(21); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(2540); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 72); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Compare32); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(92); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(154991936, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(NotEqual); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rcx, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(80); >+ inst.args.push(arg); >+ arg = Arg.createBigImm(154991936, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(154991944, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rcx, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createAddr(Reg.r12, -8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb0.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createIndex(Reg.r12, Reg.rax, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(MoveConditionallyTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Xor64); >+ arg = Arg.createImm(6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(-2); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot2, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(-2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot1, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(129987312, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot4, 0); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(108418352, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(0, -65536); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb0.append(inst); >+ bb1.predecessors.push(bb6); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb1.append(inst); >+ inst = new Inst(Oops); >+ bb1.append(inst); >+ bb2.predecessors.push(bb23); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb2.append(inst); >+ inst = new Inst(Oops); >+ bb2.append(inst); >+ bb3.predecessors.push(bb32); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb3.append(inst); >+ inst = new Inst(Oops); >+ bb3.append(inst); >+ bb4.predecessors.push(bb0); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb4.append(inst); >+ inst = new Inst(Oops); >+ bb4.append(inst); >+ bb5.successors.push(new FrequentedBlock(bb8, Normal)); >+ bb5.successors.push(new FrequentedBlock(bb6, Rare)); >+ bb5.predecessors.push(bb0); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 56); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, -24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r10, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb5.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb5.append(inst); >+ bb6.successors.push(new FrequentedBlock(bb1, Rare)); >+ bb6.successors.push(new FrequentedBlock(bb7, Normal)); >+ bb6.predecessors.push(bb5); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbp, 36); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot8, 0); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot7, 0); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot6, 0); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbp); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createStack(slot8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createStack(slot7, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createStack(slot6, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(129987312, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb6.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rcx, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ bb6.append(inst); >+ bb7.successors.push(new FrequentedBlock(bb11, Normal)); >+ bb7.predecessors.push(bb6); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb7.append(inst); >+ inst = new Inst(Jump); >+ bb7.append(inst); >+ bb8.successors.push(new FrequentedBlock(bb11, Normal)); >+ bb8.predecessors.push(bb5); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb8.append(inst); >+ inst = new Inst(Jump); >+ bb8.append(inst); >+ bb9.successors.push(new FrequentedBlock(bb11, Normal)); >+ bb9.predecessors.push(bb15); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb9.append(inst); >+ inst = new Inst(Jump); >+ bb9.append(inst); >+ bb10.successors.push(new FrequentedBlock(bb11, Normal)); >+ bb10.predecessors.push(bb18); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb10.append(inst); >+ inst = new Inst(Jump); >+ bb10.append(inst); >+ bb11.successors.push(new FrequentedBlock(bb12, Normal)); >+ bb11.successors.push(new FrequentedBlock(bb16, Normal)); >+ bb11.predecessors.push(bb7); >+ bb11.predecessors.push(bb10); >+ bb11.predecessors.push(bb9); >+ bb11.predecessors.push(bb8); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r9); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 40); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb11.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 40); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 32); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(Overflow); >+ inst.args.push(arg); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32}); >+ bb11.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 32); >+ inst.args.push(arg); >+ bb11.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(LessThan); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb11.append(inst); >+ bb12.successors.push(new FrequentedBlock(bb13, Normal)); >+ bb12.successors.push(new FrequentedBlock(bb14, Normal)); >+ bb12.predecessors.push(bb11); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.r10, 12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb12.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r10, 16); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb12.append(inst); >+ inst = new Inst(BranchTest32); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rax, 16); >+ inst.args.push(arg); >+ arg = Arg.createImm(8); >+ inst.args.push(arg); >+ bb12.append(inst); >+ bb13.successors.push(new FrequentedBlock(bb15, Normal)); >+ bb13.predecessors.push(bb12); >+ inst = new Inst(Load8); >+ arg = Arg.createIndex(Reg.r9, Reg.rdx, 1, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb13.append(inst); >+ inst = new Inst(Jump); >+ bb13.append(inst); >+ bb14.successors.push(new FrequentedBlock(bb15, Normal)); >+ bb14.predecessors.push(bb12); >+ inst = new Inst(Load16); >+ arg = Arg.createIndex(Reg.r9, Reg.rdx, 2, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb14.append(inst); >+ inst = new Inst(Jump); >+ bb14.append(inst); >+ bb15.successors.push(new FrequentedBlock(bb9, Normal)); >+ bb15.successors.push(new FrequentedBlock(bb17, Normal)); >+ bb15.predecessors.push(bb14); >+ bb15.predecessors.push(bb13); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Add64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbx, 72); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createRelCond(AboveOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r8); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb15.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createIndex(Reg.r12, Reg.rax, 8, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(MoveConditionallyTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Xor64); >+ arg = Arg.createImm(6); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(-2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb15.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb15.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb15.append(inst); >+ bb16.predecessors.push(bb11); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb16.append(inst); >+ inst = new Inst(Oops); >+ bb16.append(inst); >+ bb17.successors.push(new FrequentedBlock(bb18, Normal)); >+ bb17.successors.push(new FrequentedBlock(bb19, Normal)); >+ bb17.predecessors.push(bb15); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(48); >+ inst.args.push(arg); >+ bb17.append(inst); >+ bb18.successors.push(new FrequentedBlock(bb10, Normal)); >+ bb18.successors.push(new FrequentedBlock(bb19, Normal)); >+ bb18.predecessors.push(bb17); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(LessThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(57); >+ inst.args.push(arg); >+ bb18.append(inst); >+ bb19.successors.push(new FrequentedBlock(bb20, Normal)); >+ bb19.successors.push(new FrequentedBlock(bb21, Normal)); >+ bb19.predecessors.push(bb17); >+ bb19.predecessors.push(bb18); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(GreaterThanOrEqual); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(128); >+ inst.args.push(arg); >+ bb19.append(inst); >+ bb20.predecessors.push(bb19); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb20.append(inst); >+ inst = new Inst(Oops); >+ bb20.append(inst); >+ bb21.successors.push(new FrequentedBlock(bb22, Normal)); >+ bb21.successors.push(new FrequentedBlock(bb23, Normal)); >+ bb21.predecessors.push(bb19); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ bb21.append(inst); >+ inst = new Inst(Branch32); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createImm(92); >+ inst.args.push(arg); >+ bb21.append(inst); >+ bb22.predecessors.push(bb21); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot5, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb22.append(inst); >+ inst = new Inst(Oops); >+ bb22.append(inst); >+ bb23.successors.push(new FrequentedBlock(bb2, Rare)); >+ bb23.successors.push(new FrequentedBlock(bb24, Normal)); >+ bb23.predecessors.push(bb21); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rbx, 48); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(155021568, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(3); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r10); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r11); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(40); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(40); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(155041288, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, 0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.rax, -1336); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createAddr(Reg.r13, 24); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot0, 0); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbp, 36); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(108356304, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createStack(slot3, 0); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbp); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb23.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(129987312, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb23.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rcx, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ bb23.append(inst); >+ bb24.successors.push(new FrequentedBlock(bb25, Normal)); >+ bb24.successors.push(new FrequentedBlock(bb26, Normal)); >+ bb24.predecessors.push(bb23); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r13); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb24.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ bb24.append(inst); >+ bb25.successors.push(new FrequentedBlock(bb27, Normal)); >+ bb25.successors.push(new FrequentedBlock(bb26, Normal)); >+ bb25.predecessors.push(bb24); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb25.append(inst); >+ inst = new Inst(And64); >+ arg = Arg.createImm(-9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb25.append(inst); >+ inst = new Inst(Branch64); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ bb25.append(inst); >+ bb26.successors.push(new FrequentedBlock(bb29, Normal)); >+ bb26.successors.push(new FrequentedBlock(bb28, Normal)); >+ bb26.predecessors.push(bb24); >+ bb26.predecessors.push(bb25); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ bb26.append(inst); >+ bb27.successors.push(new FrequentedBlock(bb30, Normal)); >+ bb27.predecessors.push(bb25); >+ inst = new Inst(Move); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb27.append(inst); >+ inst = new Inst(Jump); >+ bb27.append(inst); >+ bb28.successors.push(new FrequentedBlock(bb32, Normal)); >+ bb28.predecessors.push(bb26); >+ inst = new Inst(Jump); >+ bb28.append(inst); >+ bb29.successors.push(new FrequentedBlock(bb30, Normal)); >+ bb29.predecessors.push(bb26); >+ inst = new Inst(Jump); >+ bb29.append(inst); >+ bb30.successors.push(new FrequentedBlock(bb34, Normal)); >+ bb30.successors.push(new FrequentedBlock(bb31, Normal)); >+ bb30.predecessors.push(bb29); >+ bb30.predecessors.push(bb27); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb30.append(inst); >+ inst = new Inst(And64); >+ arg = Arg.createImm(-9); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb30.append(inst); >+ inst = new Inst(Branch64); >+ arg = Arg.createRelCond(Equal); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createImm(2); >+ inst.args.push(arg); >+ bb30.append(inst); >+ bb31.successors.push(new FrequentedBlock(bb32, Normal)); >+ bb31.predecessors.push(bb30); >+ inst = new Inst(Jump); >+ bb31.append(inst); >+ bb32.successors.push(new FrequentedBlock(bb3, Rare)); >+ bb32.successors.push(new FrequentedBlock(bb33, Normal)); >+ bb32.predecessors.push(bb28); >+ bb32.predecessors.push(bb31); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(3); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rbp, 36); >+ inst.args.push(arg); >+ bb32.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(154991632, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb32.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ bb32.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ bb32.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rbp); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ bb32.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createBigImm(108356304, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.xmm0); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rsi); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rdx); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: FP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb32.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(129987312, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rcx); >+ inst.args.push(arg); >+ bb32.append(inst); >+ inst = new Inst(BranchTest64); >+ arg = Arg.createResCond(NonZero); >+ inst.args.push(arg); >+ arg = Arg.createAddr(Reg.rcx, 0); >+ inst.args.push(arg); >+ arg = Arg.createImm(-1); >+ inst.args.push(arg); >+ bb32.append(inst); >+ bb33.predecessors.push(bb32); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb33.append(inst); >+ inst = new Inst(Ret64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb33.append(inst); >+ bb34.predecessors.push(bb30); >+ inst = new Inst(Move); >+ arg = Arg.createBigImm(153835296, 1); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Move32); >+ arg = Arg.createImm(3); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createTmp(Reg.r12); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Move); >+ arg = Arg.createImm(6); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(40); >+ inst.args.push(arg); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(8); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(16); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(24); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(32); >+ inst.args.push(arg); >+ arg = Arg.createCallArg(40); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r15); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.r14); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.extraEarlyClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.rcx); >+ inst.extraClobberedRegs.add(Reg.rdx); >+ inst.extraClobberedRegs.add(Reg.rsi); >+ inst.extraClobberedRegs.add(Reg.rdi); >+ inst.extraClobberedRegs.add(Reg.r8); >+ inst.extraClobberedRegs.add(Reg.r9); >+ inst.extraClobberedRegs.add(Reg.r10); >+ inst.extraClobberedRegs.add(Reg.r11); >+ inst.extraClobberedRegs.add(Reg.xmm0); >+ inst.extraClobberedRegs.add(Reg.xmm1); >+ inst.extraClobberedRegs.add(Reg.xmm2); >+ inst.extraClobberedRegs.add(Reg.xmm3); >+ inst.extraClobberedRegs.add(Reg.xmm4); >+ inst.extraClobberedRegs.add(Reg.xmm5); >+ inst.extraClobberedRegs.add(Reg.xmm6); >+ inst.extraClobberedRegs.add(Reg.xmm7); >+ inst.extraClobberedRegs.add(Reg.xmm8); >+ inst.extraClobberedRegs.add(Reg.xmm9); >+ inst.extraClobberedRegs.add(Reg.xmm10); >+ inst.extraClobberedRegs.add(Reg.xmm11); >+ inst.extraClobberedRegs.add(Reg.xmm12); >+ inst.extraClobberedRegs.add(Reg.xmm13); >+ inst.extraClobberedRegs.add(Reg.xmm14); >+ inst.extraClobberedRegs.add(Reg.xmm15); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(Patch); >+ arg = Arg.createSpecial(); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rbx); >+ inst.args.push(arg); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ inst.patchHasNonArgEffects = true; >+ inst.extraEarlyClobberedRegs = new Set(); >+ inst.extraClobberedRegs = new Set(); >+ inst.patchArgData = []; >+ inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); >+ bb34.append(inst); >+ inst = new Inst(Ret64); >+ arg = Arg.createTmp(Reg.rax); >+ inst.args.push(arg); >+ bb34.append(inst); >+ return code; >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class AirBenchmark { >+ constructor(verbose = 0) >+ { >+ this._verbose = verbose; >+ >+ this._payloads = [ >+ {generate: createPayloadGbemuExecuteIteration, earlyHash: 632653144, lateHash: 372715518}, >+ {generate: createPayloadImagingGaussianBlurGaussianBlur, earlyHash: 3677819581, lateHash: 1252116304}, >+ {generate: createPayloadTypescriptScanIdentifier, earlyHash: 1914852601, lateHash: 837339551}, >+ {generate: createPayloadAirJSACLj8C, earlyHash: 1373599940, lateHash: 3981283600} >+ ]; >+ } >+ >+ runIteration() >+ { >+ for (let payload of this._payloads) { >+ // Sadly about 17% of our time is in generate. I don't think that's really avoidable, >+ // and I don't mind testing VMs' ability to run such "data definition" code quickly. I >+ // would not have expected it to be so slow from first principles! >+ let code = payload.generate(); >+ >+ if (this._verbose) { >+ print("Before allocateStack:"); >+ print(code); >+ } >+ >+ let hash = code.hash(); >+ if (hash != payload.earlyHash) >+ throw new Error(`Wrong early hash for ${payload.generate.name}: ${hash}`); >+ >+ allocateStack(code); >+ >+ if (this._verbose) { >+ print("After allocateStack:"); >+ print(code); >+ } >+ >+ hash = code.hash(); >+ if (hash != payload.lateHash) >+ throw new Error(`Wrong late hash for ${payload.generate.name}: ${hash}`); >+ } >+ } >+} >+ >+function runBenchmark() >+{ >+ const verbose = 0; >+ const numIterations = 5; >+ >+ let before = currentTime(); >+ let benchmark = new AirBenchmark(verbose); >+ >+ for (let iteration = 0; iteration < numIterations; ++iteration) >+ benchmark.runIteration(); >+ >+ let after = currentTime(); >+ return after - before; >+} >+runBenchmark(); >Index: PerformanceTests/testmem/base64.js >=================================================================== >--- PerformanceTests/testmem/base64.js (nonexistent) >+++ PerformanceTests/testmem/base64.js (working copy) >@@ -0,0 +1,137 @@ >+/* ***** BEGIN LICENSE BLOCK ***** >+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 >+ * >+ * The contents of this file are subject to the Mozilla Public License Version >+ * 1.1 (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * http://www.mozilla.org/MPL/ >+ * >+ * Software distributed under the License is distributed on an "AS IS" basis, >+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License >+ * for the specific language governing rights and limitations under the >+ * License. >+ * >+ * The Original Code is Mozilla XML-RPC Client component. >+ * >+ * The Initial Developer of the Original Code is >+ * Digital Creations 2, Inc. >+ * Portions created by the Initial Developer are Copyright (C) 2000 >+ * the Initial Developer. All Rights Reserved. >+ * >+ * Contributor(s): >+ * Martijn Pieters <mj@digicool.com> (original author) >+ * Samuel Sieb <samuel@sieb.net> >+ * >+ * Alternatively, the contents of this file may be used under the terms of >+ * either the GNU General Public License Version 2 or later (the "GPL"), or >+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), >+ * in which case the provisions of the GPL or the LGPL are applicable instead >+ * of those above. If you wish to allow use of your version of this file only >+ * under the terms of either the GPL or the LGPL, and not to allow others to >+ * use your version of this file under the terms of the MPL, indicate your >+ * decision by deleting the provisions above and replace them with the notice >+ * and other provisions required by the GPL or the LGPL. If you do not delete >+ * the provisions above, a recipient may use your version of this file under >+ * the terms of any one of the MPL, the GPL or the LGPL. >+ * >+ * ***** END LICENSE BLOCK ***** */ >+ >+// From: http://lxr.mozilla.org/mozilla/source/extensions/xml-rpc/src/nsXmlRpcClient.js#956 >+ >+/* Convert data (an array of integers) to a Base64 string. */ >+var toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; >+var base64Pad = '='; >+ >+function toBase64(data) { >+ var result = ''; >+ var length = data.length; >+ var i; >+ // Convert every three bytes to 4 ascii characters. >+ for (i = 0; i < (length - 2); i += 3) { >+ result += toBase64Table[data.charCodeAt(i) >> 2]; >+ result += toBase64Table[((data.charCodeAt(i) & 0x03) << 4) + (data.charCodeAt(i+1) >> 4)]; >+ result += toBase64Table[((data.charCodeAt(i+1) & 0x0f) << 2) + (data.charCodeAt(i+2) >> 6)]; >+ result += toBase64Table[data.charCodeAt(i+2) & 0x3f]; >+ } >+ >+ // Convert the remaining 1 or 2 bytes, pad out to 4 characters. >+ if (length%3) { >+ i = length - (length%3); >+ result += toBase64Table[data.charCodeAt(i) >> 2]; >+ if ((length%3) == 2) { >+ result += toBase64Table[((data.charCodeAt(i) & 0x03) << 4) + (data.charCodeAt(i+1) >> 4)]; >+ result += toBase64Table[(data.charCodeAt(i+1) & 0x0f) << 2]; >+ result += base64Pad; >+ } else { >+ result += toBase64Table[(data.charCodeAt(i) & 0x03) << 4]; >+ result += base64Pad + base64Pad; >+ } >+ } >+ >+ return result; >+} >+ >+/* Convert Base64 data to a string */ >+var toBinaryTable = [ >+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, >+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, >+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, >+ 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1, >+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, >+ 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, >+ -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, >+ 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 >+]; >+ >+function base64ToString(data) { >+ var result = ''; >+ var leftbits = 0; // number of bits decoded, but yet to be appended >+ var leftdata = 0; // bits decoded, but yet to be appended >+ >+ // Convert one by one. >+ for (var i = 0; i < data.length; i++) { >+ var c = toBinaryTable[data.charCodeAt(i) & 0x7f]; >+ var padding = (data.charCodeAt(i) == base64Pad.charCodeAt(0)); >+ // Skip illegal characters and whitespace >+ if (c == -1) continue; >+ >+ // Collect data into leftdata, update bitcount >+ leftdata = (leftdata << 6) | c; >+ leftbits += 6; >+ >+ // If we have 8 or more bits, append 8 bits to the result >+ if (leftbits >= 8) { >+ leftbits -= 8; >+ // Append if not padding. >+ if (!padding) >+ result += String.fromCharCode((leftdata >> leftbits) & 0xff); >+ leftdata &= (1 << leftbits) - 1; >+ } >+ } >+ >+ // If there are any bits left, the base64 string was corrupted >+ if (leftbits) >+ throw Components.Exception('Corrupted base64 string'); >+ >+ return result; >+} >+ >+var str = ""; >+ >+for ( var i = 0; i < 8192; i++ ) >+ str += String.fromCharCode( (25 * Math.random()) + 97 ); >+ >+for ( var i = 8192; i <= 16384; i *= 2 ) { >+ >+ var base64; >+ >+ base64 = toBase64(str); >+ var encoded = base64ToString(base64); >+ if (encoded != str) >+ throw "ERROR: bad result: expected " + str + " but got " + encoded; >+ >+ // Double the string >+ str += str; >+} >+ >+toBinaryTable = null; >Index: PerformanceTests/testmem/basic.js >=================================================================== >--- PerformanceTests/testmem/basic.js (nonexistent) >+++ PerformanceTests/testmem/basic.js (working copy) >@@ -0,0 +1,1419 @@ >+'use strict';/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+const Basic = {}; >+ >+Basic.NumberApply = function(state) >+{ >+ // I'd call this arguments but we're in strict mode. >+ let parameters = this.parameters.map(value => value.evaluate(state)); >+ >+ return state.getValue(this.name, parameters.length).apply(state, parameters); >+}; >+ >+Basic.Variable = function(state) >+{ >+ let parameters = this.parameters.map(value => value.evaluate(state)); >+ >+ return state.getValue(this.name, parameters.length).leftApply(state, parameters); >+} >+ >+Basic.Const = function(state) >+{ >+ return this.value; >+} >+ >+Basic.NumberPow = function(state) >+{ >+ return Math.pow(this.left.evaluate(state), this.right.evaluate(state)); >+} >+ >+Basic.NumberMul = function(state) >+{ >+ return this.left.evaluate(state) * this.right.evaluate(state); >+} >+ >+Basic.NumberDiv = function(state) >+{ >+ return this.left.evaluate(state) / this.right.evaluate(state); >+} >+ >+Basic.NumberNeg = function(state) >+{ >+ return -this.term.evaluate(state); >+} >+ >+Basic.NumberAdd = function(state) >+{ >+ return this.left.evaluate(state) + this.right.evaluate(state); >+} >+ >+Basic.NumberSub = function(state) >+{ >+ return this.left.evaluate(state) - this.right.evaluate(state); >+} >+ >+Basic.StringVar = function(state) >+{ >+ let value = state.stringValues.get(this.name); >+ if (value == null) >+ state.abort("Could not find string variable " + this.name); >+ return value; >+} >+ >+Basic.Equals = function(state) >+{ >+ return this.left.evaluate(state) == this.right.evaluate(state); >+} >+ >+Basic.NotEquals = function(state) >+{ >+ return this.left.evaluate(state) != this.right.evaluate(state); >+} >+ >+Basic.LessThan = function(state) >+{ >+ return this.left.evaluate(state) < this.right.evaluate(state); >+} >+ >+Basic.GreaterThan = function(state) >+{ >+ return this.left.evaluate(state) > this.right.evaluate(state); >+} >+ >+Basic.LessEqual = function(state) >+{ >+ return this.left.evaluate(state) <= this.right.evaluate(state); >+} >+ >+Basic.GreaterEqual = function(state) >+{ >+ return this.left.evaluate(state) >= this.right.evaluate(state); >+} >+ >+Basic.GoTo = function*(state) >+{ >+ state.nextLineNumber = this.target; >+} >+ >+Basic.GoSub = function*(state) >+{ >+ state.subStack.push(state.nextLineNumber); >+ state.nextLineNumber = this.target; >+} >+ >+Basic.Def = function*(state) >+{ >+ state.validate(!state.values.has(this.name), "Cannot redefine function"); >+ state.values.set(this.name, new NumberFunction(this.parameters, this.expression)); >+} >+ >+Basic.Let = function*(state) >+{ >+ this.variable.evaluate(state).assign(this.expression.evaluate(state)); >+} >+ >+Basic.If = function*(state) >+{ >+ if (this.condition.evaluate(state)) >+ state.nextLineNumber = this.target; >+} >+ >+Basic.Return = function*(state) >+{ >+ this.validate(state.subStack.length, "Not in a subroutine"); >+ this.nextLineNumber = state.subStack.pop(); >+} >+ >+Basic.Stop = function*(state) >+{ >+ state.nextLineNumber = null; >+} >+ >+Basic.On = function*(state) >+{ >+ let index = this.expression.evaluate(state); >+ if (!(index >= 1) || !(index <= this.targets.length)) >+ state.abort("Index out of bounds: " + index); >+ this.nextLineNumber = this.targets[Math.floor(index)]; >+} >+ >+Basic.For = function*(state) >+{ >+ let sideState = state.getSideState(this); >+ sideState.variable = state.getValue(this.variable, 0).leftApply(state, []); >+ sideState.initialValue = this.initial.evaluate(state); >+ sideState.limitValue = this.limit.evaluate(state); >+ sideState.stepValue = this.step.evaluate(state); >+ sideState.variable.assign(sideState.initialValue); >+ sideState.shouldStop = function() { >+ return (sideState.variable.value - sideState.limitValue) * Math.sign(sideState.stepValue) > 0; >+ }; >+ if (sideState.shouldStop()) >+ this.nextLineNumber = this.target.lineNumber + 1; >+} >+ >+Basic.Next = function*(state) >+{ >+ let sideState = state.getSideState(this.target); >+ sideState.variable.assign(sideState.variable.value + sideState.stepValue); >+ if (sideState.shouldStop()) >+ return; >+ state.nextLineNumber = this.target.lineNumber + 1; >+} >+ >+Basic.Next.isBlockEnd = true; >+ >+Basic.Print = function*(state) >+{ >+ let string = ""; >+ for (let item of this.items) { >+ switch (item.kind) { >+ case "comma": >+ while (string.length % 14) >+ string += " "; >+ break; >+ case "tab": { >+ let value = item.value.evaluate(state); >+ value = Math.max(Math.round(value), 1); >+ while (string.length % value) >+ string += " "; >+ break; >+ } >+ case "string": >+ case "number": >+ string += item.value.evaluate(state); >+ break; >+ default: >+ throw new Error("Bad item kind: " + item.kind); >+ } >+ } >+ >+ yield {kind: "output", string}; >+} >+ >+Basic.Input = function*(state) >+{ >+ let results = yield {kind: "input", numItems: this.items.length}; >+ state.validate(results != null && results.length == this.items.length, "Input did not get the right number of items"); >+ for (let i = 0; i < results.length; ++i) >+ this.items[i].evaluate(state).assign(results[i]); >+} >+ >+Basic.Read = function*(state) >+{ >+ for (let item of this.items) { >+ state.validate(state.dataIndex < state.program.data.length, "Attempting to read past the end of data"); >+ item.assign(state.program.data[state.dataIndex++]); >+ } >+} >+ >+Basic.Restore = function*(state) >+{ >+ state.dataIndex = 0; >+} >+ >+Basic.Dim = function*(state) >+{ >+ for (let item of this.items) { >+ state.validate(!state.values.has(item.name), "Variable " + item.name + " already exists"); >+ state.validate(item.bounds.length, "Dim statement is for arrays"); >+ state.values.set(item.name, new NumberArray(item.bounds.map(bound => bound + 1))); >+ } >+} >+ >+Basic.Randomize = function*(state) >+{ >+ state.rng = createRNGWithRandomSeed(); >+} >+ >+Basic.End = function*(state) >+{ >+ state.nextLineNumber = null; >+} >+ >+Basic.End.isBlockEnd = true; >+ >+Basic.Program = function* programGenerator(state) >+{ >+ state.validate(state.program == this, "State must match program"); >+ let maxLineNumber = Math.max(...this.statements.keys()); >+ while (state.nextLineNumber != null) { >+ state.validate(state.nextLineNumber <= maxLineNumber, "Went out of bounds of the program"); >+ let statement = this.statements.get(state.nextLineNumber++); >+ if (statement == null || statement.process == null) >+ continue; >+ state.statement = statement; >+ yield* statement.process(state); >+ } >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+function prepare(string) >+{ >+ let program = parse(lex(string)).program(); >+ return program.process(new State(program)); >+} >+ >+function simulate(program, inputs = []) >+{ >+ let result = ""; >+ let args = []; >+ for (;;) { >+ let next = program.next(...args); >+ args = []; >+ if (next.done) >+ break; >+ if (next.value.kind == "output") { >+ result += next.value.string + "\n"; >+ continue; >+ } >+ if (next.value.kind == "input") { >+ args = inputs.splice(0, next.value.numItems); >+ continue; >+ } >+ } >+ return result; >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class CaselessMap { >+ constructor(otherMap) >+ { >+ if (otherMap == null) >+ this._map = new Map(); >+ else >+ this._map = new Map(otherMap._map); >+ } >+ >+ set(key, value) >+ { >+ this._map.set(key.toLowerCase(), value); >+ } >+ >+ has(key) >+ { >+ return this._map.has(key.toLowerCase()); >+ } >+ >+ get(key) >+ { >+ return this._map.get(key.toLowerCase()); >+ } >+ >+ [Symbol.iterator]() >+ { >+ return this._map[Symbol.iterator](); >+ } >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+// Loosely based on ECMA 55 sections 4-8, but loosened to allow for modern conventions, like >+// multi-character variable names. But this doesn't go too far - in particular, this doesn't do >+// unicode, because that would require more thought. >+function* lex(string) >+{ >+ let sourceLineNumber = 0; >+ for (let line of string.split("\n")) { >+ ++sourceLineNumber; >+ >+ function consumeWhitespace() >+ { >+ if (/^\s+/.test(line)) >+ line = RegExp.rightContext; >+ } >+ >+ function consume(kind) >+ { >+ line = RegExp.rightContext; >+ return {kind, string: RegExp.lastMatch, sourceLineNumber, userLineNumber}; >+ } >+ >+ const isIdentifier = /^[a-z_]([a-z0-9_]*)/i; >+ const isNumber = /^(([0-9]+(\.([0-9]*))?)|(\.[0-9]+)(e([+-]?)([0-9]+))?)/i; >+ const isString = /^\"([^\"]|(\"\"))*\"/; >+ const isKeyword = /^((base)|(data)|(def)|(dim)|(end)|(for)|(go)|(gosub)|(goto)|(if)|(input)|(let)|(next)|(on)|(option)|(print)|(randomize)|(read)|(restore)|(return)|(step)|(stop)|(sub)|(then)|(to))/i; >+ const isOperator = /^(-|\+|\*|\/|\^|\(|\)|(<[>=]?)|(>=?)|=|,|\$|;)/; >+ const isRem = /^rem\s.*/; >+ >+ consumeWhitespace(); >+ >+ if (!/^[0-9]+/.test(line)) >+ throw new Error("At line " + sourceLineNumber + ": Expect line number: " + line); >+ let userLineNumber = +RegExp.lastMatch; >+ line = RegExp.rightContext; >+ yield {kind: "userLineNumber", string: RegExp.lastMatch, sourceLineNumber, userLineNumber}; >+ >+ consumeWhitespace(); >+ >+ while (line.length) { >+ if (isKeyword.test(line)) >+ yield consume("keyword"); >+ else if (isIdentifier.test(line)) >+ yield consume("identifier"); >+ else if (isNumber.test(line)) { >+ let token = consume("number"); >+ token.value = +token.string; >+ yield token; >+ } else if (isString.test(line)) { >+ let token = consume("string"); >+ token.value = ""; >+ for (let i = 1; i < token.string.length - 1; ++i) { >+ let char = token.string.charAt(i); >+ if (char == "\"") >+ i++; >+ token.value += char; >+ } >+ yield token; >+ } else if (isOperator.test(line)) >+ yield consume("operator"); >+ else if (isRem.test(line)) >+ yield consume("remark"); >+ else >+ throw new Error("At line " + sourceLineNumber + ": Cannot lex token: " + line); >+ consumeWhitespace(); >+ } >+ >+ // Note: this is necessary for the parser, which may look-ahead without checking if we're >+ // done. Fortunately, it won't look-ahead past a newLine. >+ yield {kind: "newLine", string:"\n", sourceLineNumber, userLineNumber}; >+ } >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class NumberValue { >+ constructor(value = 0) >+ { >+ this._value = value; >+ } >+ >+ get value() { return this._value; } >+ >+ apply(state, parameters) >+ { >+ state.validate(parameters.length == 0, "Should not pass arguments to simple numeric variables"); >+ return this._value; >+ } >+ >+ leftApply(state, parameters) >+ { >+ state.validate(parameters.length == 0, "Should not pass arguments to simple numeric variables"); >+ return this; >+ } >+ >+ assign(value) >+ { >+ this._value = value; >+ } >+} >+ >+class NumberArray { >+ constructor(dim = [11]) >+ { >+ function allocateDim(index) >+ { >+ let result = new Array(dim[index]); >+ if (index + 1 < dim.length) { >+ for (let i = 0; i < dim[index]; ++i) >+ result[i] = allocateDim(index + 1); >+ } else { >+ for (let i = 0; i < dim[index]; ++i) >+ result[i] = new NumberValue(); >+ } >+ return result; >+ } >+ >+ this._array = allocateDim(0); >+ this._dim = dim; >+ } >+ >+ apply(state, parameters) >+ { >+ return this.leftApply(state, parameters).apply(state, []); >+ } >+ >+ leftApply(state, parameters) >+ { >+ if (this._dim.length != parameters.length) >+ state.abort("Expected " + this._dim.length + " arguments but " + parameters.length + " were passed."); >+ let result = this._array; >+ for (var i = 0; i < parameters.length; ++i) { >+ let index = Math.floor(parameters[i]); >+ if (!(index >= state.program.base) || !(index < result.length)) >+ state.abort("Index out of bounds: " + index); >+ result = result[index]; >+ } >+ return result; >+ } >+} >+ >+class NumberFunction { >+ constructor(parameters, code) >+ { >+ this._parameters = parameters; >+ this._code = code; >+ } >+ >+ apply(state, parameters) >+ { >+ if (this._parameters.length != parameters.length) >+ state.abort("Expected " + this._parameters.length + " arguments but " + parameters.length + " were passed"); >+ let oldValues = state.values; >+ state.values = new Map(oldValues); >+ for (let i = 0; i < parameters.length; ++i) >+ state.values.set(this._parameters[i], parameters[i]); >+ let result = this.code.evaluate(state); >+ state.values = oldValues; >+ return result; >+ } >+ >+ leftApply(state, parameters) >+ { >+ state.abort("Cannot use a function as an lvalue"); >+ } >+} >+ >+class NativeFunction { >+ constructor(callback) >+ { >+ this._callback = callback; >+ } >+ >+ apply(state, parameters) >+ { >+ if (this._callback.length != parameters.length) >+ state.abort("Expected " + this._callback.length + " arguments but " + parameters.length + " were passed"); >+ return this._callback(...parameters); >+ } >+ >+ leftApply(state, parameters) >+ { >+ state.abort("Cannot use a native function as an lvalue"); >+ } >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+function parse(tokenizer) >+{ >+ let program; >+ >+ let pushBackBuffer = []; >+ >+ function nextToken() >+ { >+ if (pushBackBuffer.length) >+ return pushBackBuffer.pop(); >+ let result = tokenizer.next(); >+ if (result.done) >+ return {kind: "endOfFile", string: "<end of file>"}; >+ return result.value; >+ } >+ >+ function pushToken(token) >+ { >+ pushBackBuffer.push(token); >+ } >+ >+ function peekToken() >+ { >+ let result = nextToken(); >+ pushToken(result); >+ return result; >+ } >+ >+ function consumeKind(kind) >+ { >+ let token = nextToken(); >+ if (token.kind != kind) { >+ throw new Error("At " + token.sourceLineNumber + ": expected " + kind + " but got: " + token.string); >+ } >+ return token; >+ } >+ >+ function consumeToken(string) >+ { >+ let token = nextToken(); >+ if (token.string.toLowerCase() != string.toLowerCase()) >+ throw new Error("At " + token.sourceLineNumber + ": expected " + string + " but got: " + token.string); >+ return token; >+ } >+ >+ function parseVariable() >+ { >+ let name = consumeKind("identifier").string; >+ let result = {evaluate: Basic.Variable, name, parameters: []}; >+ if (peekToken().string == "(") { >+ do { >+ nextToken(); >+ result.parameters.push(parseNumericExpression()); >+ } while (peekToken().string == ","); >+ consumeToken(")"); >+ } >+ return result; >+ } >+ >+ function parseNumericExpression() >+ { >+ function parsePrimary() >+ { >+ let token = nextToken(); >+ switch (token.kind) { >+ case "identifier": { >+ let result = {evaluate: Basic.NumberApply, name: token.string, parameters: []}; >+ if (peekToken().string == "(") { >+ do { >+ nextToken(); >+ result.parameters.push(parseNumericExpression()); >+ } while (peekToken().string == ","); >+ consumeToken(")"); >+ } >+ return result; >+ } >+ >+ case "number": >+ return {evaluate: Basic.Const, value: token.value}; >+ >+ case "operator": >+ switch (token.string) { >+ case "(": { >+ let result = parseNumericExpression(); >+ consumeToken(")"); >+ return result; >+ } } >+ break; >+ } >+ throw new Error("At " + token.sourceLineNumber + ": expected identifier, number, or (, but got: " + token.string); >+ } >+ >+ function parseFactor() >+ { >+ let primary = parsePrimary(); >+ >+ let ok = true; >+ while (ok) { >+ switch (peekToken().string) { >+ case "^": >+ nextToken(); >+ primary = {evaluate: Basic.NumberPow, left: primary, right: parsePrimary()}; >+ break; >+ default: >+ ok = false; >+ break; >+ } >+ } >+ >+ return primary; >+ } >+ >+ function parseTerm() >+ { >+ let factor = parseFactor(); >+ >+ let ok = true; >+ while (ok) { >+ switch (peekToken().string) { >+ case "*": >+ nextToken(); >+ factor = {evaluate: Basic.NumberMul, left: factor, right: parseFactor()}; >+ break; >+ case "/": >+ nextToken(); >+ factor = {evaluate: Basic.NumberDiv, left: factor, right: parseFactor()}; >+ break; >+ default: >+ ok = false; >+ break; >+ } >+ } >+ >+ return factor; >+ } >+ >+ // Only the leading term in Basic can have a sign. >+ let negate = false; >+ switch (peekToken().string) { >+ case "+": >+ nextToken(); >+ break; >+ case "-": >+ negate = true; >+ nextToken() >+ break; >+ } >+ >+ let term = parseTerm(); >+ if (negate) >+ term = {evaluate: Basic.NumberNeg, term: term}; >+ >+ let ok = true; >+ while (ok) { >+ switch (peekToken().string) { >+ case "+": >+ nextToken(); >+ term = {evaluate: Basic.NumberAdd, left: term, right: parseTerm()}; >+ break; >+ case "-": >+ nextToken(); >+ term = {evaluate: Basic.NumberSub, left: term, right: parseTerm()}; >+ break; >+ default: >+ ok = false; >+ break; >+ } >+ } >+ >+ return term; >+ } >+ >+ function parseConstant() >+ { >+ switch (peekToken().string) { >+ case "+": >+ nextToken(); >+ return consumeKind("number").value; >+ case "-": >+ nextToken(); >+ return -consumeKind("number").value; >+ default: >+ if (isStringExpression()) >+ return consumeKind("string").value; >+ return consumeKind("number").value; >+ } >+ } >+ >+ function parseStringExpression() >+ { >+ let token = nextToken(); >+ switch (token.kind) { >+ case "string": >+ return {evaluate: Basic.Const, value: token.value}; >+ case "identifier": >+ consumeToken("$"); >+ return {evaluate: Basic.StringVar, name: token.string}; >+ default: >+ throw new Error("At " + token.sourceLineNumber + ": expected string expression but got " + token.string); >+ } >+ } >+ >+ function isStringExpression() >+ { >+ // A string expression must start with a string variable or a string constant. >+ let token = nextToken(); >+ if (token.kind == "string") { >+ pushToken(token); >+ return true; >+ } >+ if (token.kind == "identifier") { >+ let result = peekToken().string == "$"; >+ pushToken(token); >+ return result; >+ } >+ pushToken(token); >+ return false; >+ } >+ >+ function parseRelationalExpression() >+ { >+ if (isStringExpression()) { >+ let left = parseStringExpression(); >+ let operator = nextToken(); >+ let evaluate; >+ switch (operator.string) { >+ case "=": >+ evaluate = Basic.Equals; >+ break; >+ case "<>": >+ evaluate = Basic.NotEquals; >+ break; >+ default: >+ throw new Error("At " + operator.sourceLineNumber + ": expected a string comparison operator but got: " + operator.string); >+ } >+ return {evaluate, left, right: parseStringExpression()}; >+ } >+ >+ let left = parseNumericExpression(); >+ let operator = nextToken(); >+ let evaluate; >+ switch (operator.string) { >+ case "=": >+ evaluate = Basic.Equals; >+ break; >+ case "<>": >+ evaluate = Basic.NotEquals; >+ break; >+ case "<": >+ evaluate = Basic.LessThan; >+ break; >+ case ">": >+ evaluate = Basic.GreaterThan; >+ break; >+ case "<=": >+ evaluate = Basic.LessEqual; >+ break; >+ case ">=": >+ evaluate = Basic.GreaterEqual; >+ break; >+ default: >+ throw new Error("At " + operator.sourceLineNumber + ": expected a numeric comparison operator but got: " + operator.string); >+ } >+ return {evaluate, left, right: parseNumericExpression()}; >+ } >+ >+ function parseNonNegativeInteger() >+ { >+ let token = nextToken(); >+ if (!/^[0-9]+$/.test(token.string)) >+ throw new Error("At ", token.sourceLineNumber + ": expected a line number but got: " + token.string); >+ return token.value; >+ } >+ >+ function parseGoToStatement() >+ { >+ statement.kind = Basic.GoTo; >+ statement.target = parseNonNegativeInteger(); >+ } >+ >+ function parseGoSubStatement() >+ { >+ statement.kind = Basic.GoSub; >+ statement.target = parseNonNegativeInteger(); >+ } >+ >+ function parseStatement() >+ { >+ let statement = {}; >+ statement.lineNumber = consumeKind("userLineNumber").userLineNumber; >+ program.statements.set(statement.lineNumber, statement); >+ >+ let command = nextToken(); >+ statement.sourceLineNumber = command.sourceLineNumber; >+ switch (command.kind) { >+ case "keyword": >+ switch (command.string.toLowerCase()) { >+ case "def": >+ statement.process = Basic.Def; >+ statement.name = consumeKind("identifier"); >+ statement.parameters = []; >+ if (peekToken().string == "(") { >+ do { >+ nextToken(); >+ statement.parameters.push(consumeKind("identifier")); >+ } while (peekToken().string == ","); >+ } >+ statement.expression = parseNumericExpression(); >+ break; >+ case "let": >+ statement.process = Basic.Let; >+ statement.variable = parseVariable(); >+ consumeToken("="); >+ if (statement.process == Basic.Let) >+ statement.expression = parseNumericExpression(); >+ else >+ statement.expression = parseStringExpression(); >+ break; >+ case "go": { >+ let next = nextToken(); >+ if (next.string == "to") >+ parseGoToStatement(); >+ else if (next.string == "sub") >+ parseGoSubStatement(); >+ else >+ throw new Error("At " + next.sourceLineNumber + ": expected to or sub but got: " + next.string); >+ break; >+ } >+ case "goto": >+ parseGoToStatement(); >+ break; >+ case "gosub": >+ parseGoSubStatement(); >+ break; >+ case "if": >+ statement.process = Basic.If; >+ statement.condition = parseRelationalExpression(); >+ consumeToken("then"); >+ statement.target = parseNonNegativeInteger(); >+ break; >+ case "return": >+ statement.process = Basic.Return; >+ break; >+ case "stop": >+ statement.process = Basic.Stop; >+ break; >+ case "on": >+ statement.process = Basic.On; >+ statement.expression = parseNumericExpression(); >+ if (peekToken().string == "go") { >+ consumeToken("go"); >+ consumeToken("to"); >+ } else >+ consumeToken("goto"); >+ statement.targets = []; >+ for (;;) { >+ statement.targets.push(parseNonNegativeInteger()); >+ if (peekToken().string != ",") >+ break; >+ nextToken(); >+ } >+ break; >+ case "for": >+ statement.process = Basic.For; >+ statement.variable = consumeKind("identifier").string; >+ consumeToken("="); >+ statement.initial = parseNumericExpression(); >+ consumeToken("to"); >+ statement.limit = parseNumericExpression(); >+ if (peekToken().string == "step") { >+ nextToken(); >+ statement.step = parseNumericExpression(); >+ } else >+ statement.step = {evaluate: Basic.Const, value: 1}; >+ consumeKind("newLine"); >+ let lastStatement = parseStatements(); >+ if (lastStatement.process != Basic.Next) >+ throw new Error("At " + lastStatement.sourceLineNumber + ": expected next statement"); >+ if (lastStatement.variable != statement.variable) >+ throw new Error("At " + lastStatement.sourceLineNumber + ": expected next for " + statement.variable + " but got " + lastStatement.variable); >+ lastStatement.target = statement; >+ statement.target = lastStatement; >+ return statement; >+ case "next": >+ statement.process = Basic.Next; >+ statement.variable = consumeKind("identifier").string; >+ break; >+ case "print": { >+ statement.process = Basic.Print; >+ statement.items = []; >+ let ok = true; >+ while (ok) { >+ switch (peekToken().string) { >+ case ",": >+ nextToken(); >+ statement.items.push({kind: "comma"}); >+ break; >+ case ";": >+ nextToken(); >+ break; >+ case "tab": >+ nextToken(); >+ consumeToken("("); >+ statement.items.push({kind: "tab", value: parseNumericExpression()}); >+ break; >+ case "\n": >+ ok = false; >+ break; >+ default: >+ if (isStringExpression()) { >+ statement.items.push({kind: "string", value: parseStringExpression()}); >+ break; >+ } >+ statement.items.push({kind: "number", value: parseNumericExpression()}); >+ break; >+ } >+ } >+ break; >+ } >+ case "input": >+ statement.process = Basic.Input; >+ statement.items = []; >+ for (;;) { >+ stament.items.push(parseVariable()); >+ if (peekToken().string != ",") >+ break; >+ nextToken(); >+ } >+ break; >+ case "read": >+ statement.process = Basic.Read; >+ statement.items = []; >+ for (;;) { >+ stament.items.push(parseVariable()); >+ if (peekToken().string != ",") >+ break; >+ nextToken(); >+ } >+ break; >+ case "restore": >+ statement.process = Basic.Restore; >+ break; >+ case "data": >+ for (;;) { >+ program.data.push(parseConstant()); >+ if (peekToken().string != ",") >+ break; >+ nextToken(); >+ } >+ break; >+ case "dim": >+ statement.process = Basic.Dim; >+ statement.items = []; >+ for (;;) { >+ let name = consumeKind("identifier").string; >+ consumeToken("("); >+ let bounds = []; >+ bounds.push(parseNonNegativeInteger()); >+ if (peekToken().string == ",") { >+ nextToken(); >+ bounds.push(parseNonNegativeInteger()); >+ } >+ consumeToken(")"); >+ statement.items.push({name, bounds}); >+ >+ if (peekToken().string != ",") >+ break; >+ consumeToken(","); >+ } >+ break; >+ case "option": { >+ consumeToken("base"); >+ let base = parseNonNegativeInteger(); >+ if (base != 0 && base != 1) >+ throw new Error("At " + command.sourceLineNumber + ": unexpected base: " + base); >+ program.base = base; >+ break; >+ } >+ case "randomize": >+ statement.process = Basic.Randomize; >+ break; >+ case "end": >+ statement.process = Basic.End; >+ break; >+ default: >+ throw new Error("At " + command.sourceLineNumber + ": unexpected command but got: " + command.string); >+ } >+ break; >+ case "remark": >+ // Just ignore it. >+ break; >+ default: >+ throw new Error("At " + command.sourceLineNumber + ": expected command but got: " + command.string + " (of kind " + command.kind + ")"); >+ } >+ >+ consumeKind("newLine"); >+ return statement; >+ } >+ >+ function parseStatements() >+ { >+ let statement; >+ do { >+ statement = parseStatement(); >+ } while (!statement.process || !statement.process.isBlockEnd); >+ return statement; >+ } >+ >+ return { >+ program() >+ { >+ program = { >+ process: Basic.Program, >+ statements: new Map(), >+ data: [], >+ base: 0 >+ }; >+ let lastStatement = parseStatements(program.statements); >+ if (lastStatement.process != Basic.End) >+ throw new Error("At " + lastStatement.sourceLineNumber + ": expected end"); >+ >+ return program; >+ }, >+ >+ statement(program_) >+ { >+ program = program_; >+ return parseStatement(); >+ } >+ }; >+} >+ >+// Copyright 2013 the V8 project authors. All rights reserved. >+// Copyright (C) 2015-2016 Apple Inc. All rights reserved. >+// Redistribution and use in source and binary forms, with or without >+// modification, are permitted provided that the following conditions are >+// met: >+// >+// * Redistributions of source code must retain the above copyright >+// notice, this list of conditions and the following disclaimer. >+// * Redistributions in binary form must reproduce the above >+// copyright notice, this list of conditions and the following >+// disclaimer in the documentation and/or other materials provided >+// with the distribution. >+// * Neither the name of Google Inc. nor the names of its >+// contributors may be used to endorse or promote products derived >+// from this software without specific prior written permission. >+// >+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT >+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR >+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT >+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, >+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT >+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+"use strict"; >+ >+// This is based on Octane's RNG. >+function createRNG(seed) >+{ >+ return function() { >+ // Robert Jenkins' 32 bit integer hash function. >+ seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff; >+ seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff; >+ seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff; >+ seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff; >+ seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff; >+ seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff; >+ return (seed & 0xfffffff) / 0x10000000; >+ }; >+} >+ >+function createRNGWithFixedSeed() >+{ >+ // This uses Octane's initial seed. >+ return createRNG(49734321); >+} >+ >+function createRNGWithRandomSeed() >+{ >+ return createRNG((Math.random() * 4294967296) | 0); >+} >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class State { >+ constructor(program) >+ { >+ this.values = new CaselessMap(); >+ this.stringValues = new CaselessMap(); >+ this.sideState = new WeakMap(); >+ this.statement = null; >+ this.nextLineNumber = 0; >+ this.subStack = []; >+ this.dataIndex = 0; >+ this.program = program; >+ this.rng = createRNGWithFixedSeed(); >+ >+ let addNative = (name, callback) => { >+ this.values.set(name, new NativeFunction(callback)); >+ }; >+ >+ addNative("abs", x => Math.abs(x)); >+ addNative("atn", x => Math.atan(x)); >+ addNative("cos", x => Math.cos(x)); >+ addNative("exp", x => Math.exp(x)); >+ addNative("int", x => Math.floor(x)); >+ addNative("log", x => Math.log(x)); >+ addNative("rnd", () => this.rng()); >+ addNative("sgn", x => Math.sign(x)); >+ addNative("sin", x => Math.sin(x)); >+ addNative("sqr", x => Math.sqrt(x)); >+ addNative("tan", x => Math.tan(x)); >+ } >+ >+ getValue(name, numParameters) >+ { >+ if (this.values.has(name)) >+ return this.values.get(name); >+ >+ let result; >+ if (numParameters == 0) >+ result = new NumberValue(); >+ else { >+ let dim = []; >+ while (numParameters--) >+ dim.push(11); >+ result = new NumberArray(dim); >+ } >+ this.values.set(name, result); >+ return result; >+ } >+ >+ getSideState(key) >+ { >+ if (!this.sideState.has(key)) { >+ let result = {}; >+ this.sideState.set(key, result); >+ return result; >+ } >+ return this.sideState.get(key); >+ } >+ >+ abort(text) >+ { >+ if (!this.statement) >+ throw new Error("At beginning of execution: " + text); >+ throw new Error("At " + this.statement.sourceLineNumber + ": " + text); >+ } >+ >+ validate(predicate, text) >+ { >+ if (!predicate) >+ this.abort(text); >+ } >+} >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+let currentTime; >+if (this.performance && performance.now) >+ currentTime = function() { return performance.now() }; >+else if (this.preciseTime) >+ currentTime = function() { return preciseTime() * 1000; }; >+else >+ currentTime = function() { return +new Date(); }; >+ >+/* >+ * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+"use strict"; >+ >+class BasicBenchmark { >+ constructor(verbose = 0) >+ { >+ this._verbose = verbose; >+ } >+ >+ runIteration() >+ { >+ function expect(program, expected, ...inputs) >+ { >+ let result = simulate(prepare(program, inputs)); >+ if (result != expected) >+ throw new Error("Program " + JSON.stringify(program) + " with inputs " + JSON.stringify(inputs) + " produced " + JSON.stringify(result) + " but we expected " + JSON.stringify(expected)); >+ } >+ >+ expect("10 print \"hello, world!\"\n20 end", "hello, world!\n"); >+ expect("10 let x = 0\n20 let x = x + 1\n30 print x\n40 if x < 10 then 20\n50 end", "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n"); >+ expect("10 print int(rnd * 100)\n20 end\n", "98\n"); >+ expect("10 let value = int(rnd * 2000)\n20 print value\n30 if value <> 100 then 10\n40 end", "1974\n697\n1126\n1998\n1658\n264\n1650\n1677\n226\n117\n492\n861\n877\n1969\n38\n1039\n197\n1261\n1102\n1522\n916\n1683\n1943\n1835\n476\n1898\n939\n176\n966\n908\n474\n614\n1326\n564\n1916\n728\n524\n162\n1303\n758\n832\n1279\n1856\n1876\n982\n6\n1613\n1781\n681\n1238\n494\n1583\n1953\n788\n1026\n347\n1116\n1465\n514\n583\n463\n1970\n1573\n412\n1256\n1453\n838\n1538\n1984\n1598\n209\n411\n1700\n546\n861\n91\n132\n884\n378\n693\n11\n433\n1719\n860\n164\n472\n231\n1786\n806\n811\n106\n1697\n118\n980\n890\n1199\n227\n1667\n1933\n1903\n1390\n1595\n923\n1746\n39\n1361\n117\n1297\n923\n901\n1180\n818\n1444\n269\n933\n327\n1744\n1082\n1527\n1260\n622\n528\n318\n856\n296\n1796\n1574\n585\n1871\n111\n827\n1725\n1320\n1868\n1695\n1914\n216\n63\n1847\n156\n671\n893\n127\n1867\n811\n279\n913\n310\n814\n907\n1363\n1624\n1670\n478\n714\n436\n355\n1484\n1628\n1208\n800\n611\n917\n829\n830\n273\n1791\n340\n214\n992\n1444\n442\n1555\n144\n1194\n282\n180\n1228\n1251\n1883\n678\n1555\n347\n72\n1661\n1828\n1090\n1183\n957\n1685\n930\n475\n103\n759\n1725\n1902\n1662\n1587\n61\n614\n863\n1418\n321\n1050\n505\n1622\n1425\n803\n589\n1511\n1098\n1051\n1554\n1898\n27\n747\n813\n1544\n332\n728\n1363\n771\n759\n1145\n1098\n1991\n385\n230\n520\n1369\n1840\n1285\n1562\n1845\n102\n760\n1874\n748\n361\n575\n277\n1661\n1764\n1117\n332\n757\n1766\n1722\n143\n474\n1507\n1294\n1180\n1578\n904\n845\n321\n496\n1911\n1784\n1116\n938\n1591\n1403\n1374\n533\n1085\n452\n708\n1096\n1634\n522\n564\n1397\n1357\n980\n978\n1760\n1088\n1361\n1184\n314\n1242\n217\n133\n1187\n1723\n646\n605\n591\n46\n135\n1420\n1821\n1147\n1211\n61\n244\n1307\n1551\n449\n1122\n1336\n140\n880\n22\n1155\n1326\n590\n1499\n1376\n112\n1771\n1897\n1071\n938\n1685\n1963\n1203\n1296\n804\n1275\n453\n1387\n482\n1262\n1883\n1381\n418\n1417\n1222\n1208\n1263\n632\n450\n1422\n1285\n1408\n644\n665\n275\n363\n1012\n165\n354\n80\n609\n291\n1661\n1724\n117\n407\n59\n906\n1224\n136\n855\n1275\n1468\n482\n1537\n1283\n1784\n1568\n1832\n452\n867\n1546\n1467\n800\n45\n1225\n1890\n465\n1372\n47\n1608\n193\n1345\n1847\n1059\n1788\n518\n52\n1052\n1003\n1210\n1135\n1433\n519\n1558\n39\n1249\n1017\n39\n1713\n1449\n1245\n1354\n82\n1140\n916\n1595\n838\n607\n389\n1270\n821\n247\n1692\n1305\n1211\n1960\n429\n1703\n1635\n575\n1618\n1490\n1495\n682\n1256\n964\n420\n1520\n1429\n1997\n396\n382\n856\n1182\n296\n1295\n298\n1892\n990\n711\n934\n1939\n1339\n682\n1631\n1533\n742\n1520\n1281\n1332\n1042\n656\n1576\n1253\n1608\n375\n169\n14\n414\n1586\n1562\n1508\n1245\n303\n715\n1053\n340\n915\n160\n1796\n111\n925\n1872\n735\n350\n107\n1913\n1653\n987\n825\n1893\n1601\n460\n1228\n1526\n1613\n1359\n1854\n1352\n542\n665\n109\n1874\n467\n533\n1188\n1629\n851\n630\n1060\n1530\n1853\n743\n765\n126\n1540\n1411\n858\n1741\n284\n299\n577\n1848\n1495\n283\n1886\n284\n129\n1077\n1245\n1364\n1505\n176\n1012\n1663\n1306\n1586\n410\n315\n660\n256\n1102\n1289\n1292\n939\n762\n601\n1140\n574\n1851\n44\n560\n1948\n1142\n1787\n947\n948\n280\n1210\n1139\n1072\n1033\n92\n1244\n1589\n1079\n22\n1514\n163\n157\n1742\n1058\n514\n196\n1858\n565\n354\n1413\n792\n183\n526\n1724\n1007\n158\n1229\n1802\n99\n1514\n708\n1276\n1802\n1564\n1387\n1235\n1132\n715\n1584\n617\n1664\n1559\n1625\n1037\n601\n1175\n1713\n107\n88\n384\n1634\n904\n1835\n1472\n212\n1145\n443\n1617\n866\n1963\n937\n1917\n855\n1215\n1867\n520\n892\n1483\n1898\n1747\n1441\n289\n1609\n328\n566\n271\n458\n1616\n843\n1107\n507\n1090\n854\n1094\n806\n166\n408\n661\n334\n230\n1917\n1323\n927\n1912\n673\n311\n952\n1783\n1549\n1714\n1500\n450\n1498\n530\n442\n607\n609\n1226\n370\n1769\n1815\n788\n536\n293\n115\n947\n290\n1764\n243\n1219\n1851\n289\n599\n1528\n150\n1859\n297\n279\n1542\n1719\n1910\n551\n401\n952\n1764\n946\n1835\n647\n1309\n271\n275\n70\n129\n1518\n972\n1164\n816\n1125\n575\n588\n1456\n1154\n290\n1681\n1133\n561\n343\n1360\n1035\n1158\n1365\n744\n781\n58\n531\n271\n1612\n1774\n28\n1480\n1312\n1855\n666\n1574\n613\n42\n456\n351\n727\n1503\n1115\n333\n1972\n822\n1575\n848\n1087\n1262\n1671\n710\n460\n1816\n287\n172\n492\n1079\n582\n1236\n1756\n1792\n1095\n1205\n1894\n22\n1930\n1529\n1547\n1383\n1768\n364\n1108\n1972\n287\n200\n230\n1335\n187\n486\n1722\n20\n963\n792\n1114\n633\n1862\n1433\n829\n737\n215\n1570\n378\n1677\n944\n1301\n1160\n500\n150\n886\n1337\n662\n1062\n290\n460\n592\n1867\n872\n155\n1613\n1913\n1548\n1847\n855\n1702\n952\n1894\n587\n1813\n1021\n21\n654\n254\n910\n1696\n1606\n679\n1222\n696\n1319\n368\n447\n549\n905\n1194\n189\n1766\n616\n278\n1418\n1965\n872\n998\n1268\n1673\n1647\n1163\n533\n1650\n1849\n1124\n1252\n1412\n703\n944\n468\n1485\n1352\n681\n864\n1432\n1771\n497\n956\n1794\n363\n1099\n1804\n457\n1227\n1487\n446\n1993\n1576\n272\n709\n1810\n330\n876\n1107\n1187\n122\n1625\n472\n676\n314\n1257\n1509\n350\n741\n366\n33\n536\n293\n1663\n1039\n1527\n126\n923\n1937\n1767\n1302\n1510\n1518\n1343\n91\n1551\n1614\n1687\n1748\n137\n75\n738\n1977\n751\n237\n313\n566\n24\n202\n889\n1716\n1460\n129\n1760\n1597\n96\n1057\n1323\n1188\n1373\n537\n955\n65\n1679\n1441\n1315\n398\n647\n1470\n1335\n617\n331\n796\n129\n1635\n1497\n836\n855\n1472\n1828\n568\n862\n690\n1370\n1657\n819\n45\n420\n258\n1980\n672\n615\n358\n852\n1148\n1897\n1306\n1092\n1405\n719\n1752\n1456\n1338\n332\n351\n479\n747\n249\n1977\n1671\n1061\n1685\n306\n254\n1060\n764\n420\n1139\n1452\n426\n835\n929\n1424\n1336\n697\n191\n1697\n1897\n644\n546\n982\n359\n1201\n1095\n1623\n1947\n215\n10\n855\n297\n551\n1037\n945\n396\n211\n1059\n423\n1521\n1770\n203\n1828\n879\n1179\n1912\n1028\n1416\n1845\n698\n715\n1857\n817\n50\n473\n1122\n126\n70\n1773\n40\n1970\n1311\n826\n355\n1921\n23\n526\n1717\n1397\n1932\n1075\n1652\n997\n1039\n1481\n779\n415\n49\n1330\n317\n1701\n690\n245\n1824\n639\n799\n1240\n422\n344\n1639\n20\n546\n912\n1930\n1368\n1541\n1109\n369\n66\n1564\n444\n1928\n1963\n1899\n744\n1593\n1702\n100\n"); >+ >+ expect("10 dim a(2000)\n20 for i = 2 to 2000\n30 let a(i) = 1\n40 next i\n50 for i = 2 to sqr(2000)\n60 if a(i) = 0 then 100\n70 for j = i ^ 2 to 2000 step i\n80 let a(j) = 0\n90 next j\n100 next i\n110 for i = 2 to 2000\n120 if a(i) = 0 then 140\n130 print i\n140 next i\n150 end\n", "2\n3\n5\n7\n11\n13\n17\n19\n23\n29\n31\n37\n41\n43\n47\n53\n59\n61\n67\n71\n73\n79\n83\n89\n97\n101\n103\n107\n109\n113\n127\n131\n137\n139\n149\n151\n157\n163\n167\n173\n179\n181\n191\n193\n197\n199\n211\n223\n227\n229\n233\n239\n241\n251\n257\n263\n269\n271\n277\n281\n283\n293\n307\n311\n313\n317\n331\n337\n347\n349\n353\n359\n367\n373\n379\n383\n389\n397\n401\n409\n419\n421\n431\n433\n439\n443\n449\n457\n461\n463\n467\n479\n487\n491\n499\n503\n509\n521\n523\n541\n547\n557\n563\n569\n571\n577\n587\n593\n599\n601\n607\n613\n617\n619\n631\n641\n643\n647\n653\n659\n661\n673\n677\n683\n691\n701\n709\n719\n727\n733\n739\n743\n751\n757\n761\n769\n773\n787\n797\n809\n811\n821\n823\n827\n829\n839\n853\n857\n859\n863\n877\n881\n883\n887\n907\n911\n919\n929\n937\n941\n947\n953\n967\n971\n977\n983\n991\n997\n1009\n1013\n1019\n1021\n1031\n1033\n1039\n1049\n1051\n1061\n1063\n1069\n1087\n1091\n1093\n1097\n1103\n1109\n1117\n1123\n1129\n1151\n1153\n1163\n1171\n1181\n1187\n1193\n1201\n1213\n1217\n1223\n1229\n1231\n1237\n1249\n1259\n1277\n1279\n1283\n1289\n1291\n1297\n1301\n1303\n1307\n1319\n1321\n1327\n1361\n1367\n1373\n1381\n1399\n1409\n1423\n1427\n1429\n1433\n1439\n1447\n1451\n1453\n1459\n1471\n1481\n1483\n1487\n1489\n1493\n1499\n1511\n1523\n1531\n1543\n1549\n1553\n1559\n1567\n1571\n1579\n1583\n1597\n1601\n1607\n1609\n1613\n1619\n1621\n1627\n1637\n1657\n1663\n1667\n1669\n1693\n1697\n1699\n1709\n1721\n1723\n1733\n1741\n1747\n1753\n1759\n1777\n1783\n1787\n1789\n1801\n1811\n1823\n1831\n1847\n1861\n1867\n1871\n1873\n1877\n1879\n1889\n1901\n1907\n1913\n1931\n1933\n1949\n1951\n1973\n1979\n1987\n1993\n1997\n1999\n"); >+ } >+} >+ >+function runBenchmark() >+{ >+ const numIterations = 4; >+ let benchmark = new BasicBenchmark(); >+ for (let iteration = 0; iteration < numIterations; ++iteration) >+ benchmark.runIteration(); >+ >+} >+runBenchmark(); >Index: PerformanceTests/testmem/box2d.js >=================================================================== >--- PerformanceTests/testmem/box2d.js (nonexistent) >+++ PerformanceTests/testmem/box2d.js (working copy) >@@ -0,0 +1,558 @@ >+// Portions copyright 2013 Google, Inc >+ >+/* >+* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com >+* >+* This software is provided 'as-is', without any express or implied >+* warranty. In no event will the authors be held liable for any damages >+* arising from the use of this software. >+* Permission is granted to anyone to use this software for any purpose, >+* including commercial applications, and to alter it and redistribute it >+* freely, subject to the following restrictions: >+* 1. The origin of this software must not be misrepresented; you must not >+* claim that you wrote the original software. If you use this software >+* in a product, an acknowledgment in the product documentation would be >+* appreciated but is not required. >+* 2. Altered source versions must be plainly marked as such, and must not be >+* misrepresented as being the original software. >+* 3. This notice may not be removed or altered from any source distribution. >+*/ >+ >+var Box2D={}; >+(function(F,G){function K(){}if(!(Object.defineProperty instanceof Function)&&Object.prototype.__defineGetter__ instanceof Function&&Object.prototype.__defineSetter__ instanceof Function)Object.defineProperty=function(y,w,A){A.get instanceof Function&&y.__defineGetter__(w,A.get);A.set instanceof Function&&y.__defineSetter__(w,A.set)};F.inherit=function(y,w){K.prototype=w.prototype;y.prototype=new K;y.prototype.constructor=y};F.generateCallback=function(y,w){return function(){w.apply(y,arguments)}}; >+F.NVector=function(y){if(y===G)y=0;for(var w=Array(y||0),A=0;A<y;++A)w[A]=0;return w};F.is=function(y,w){if(y===null)return false;if(w instanceof Function&&y instanceof w)return true;if(y.constructor.__implements!=G&&y.constructor.__implements[w])return true;return false};F.parseUInt=function(y){return Math.abs(parseInt(y))}})(Box2D);var Vector=Array,Vector_a2j_Number=Box2D.NVector;if(typeof Box2D==="undefined")Box2D={};if(typeof Box2D.Collision==="undefined")Box2D.Collision={}; >+if(typeof Box2D.Collision.Shapes==="undefined")Box2D.Collision.Shapes={};if(typeof Box2D.Common==="undefined")Box2D.Common={};if(typeof Box2D.Common.Math==="undefined")Box2D.Common.Math={};if(typeof Box2D.Dynamics==="undefined")Box2D.Dynamics={};if(typeof Box2D.Dynamics.Contacts==="undefined")Box2D.Dynamics.Contacts={};if(typeof Box2D.Dynamics.Controllers==="undefined")Box2D.Dynamics.Controllers={};if(typeof Box2D.Dynamics.Joints==="undefined")Box2D.Dynamics.Joints={}; >+(function(){function F(){F.b2AABB.apply(this,arguments)}function G(){G.b2Bound.apply(this,arguments)}function K(){K.b2BoundValues.apply(this,arguments);this.constructor===K&&this.b2BoundValues.apply(this,arguments)}function y(){y.b2Collision.apply(this,arguments)}function w(){w.b2ContactID.apply(this,arguments);this.constructor===w&&this.b2ContactID.apply(this,arguments)}function A(){A.b2ContactPoint.apply(this,arguments)}function U(){U.b2Distance.apply(this,arguments)}function p(){p.b2DistanceInput.apply(this, >+arguments)}function B(){B.b2DistanceOutput.apply(this,arguments)}function Q(){Q.b2DistanceProxy.apply(this,arguments)}function V(){V.b2DynamicTree.apply(this,arguments);this.constructor===V&&this.b2DynamicTree.apply(this,arguments)}function M(){M.b2DynamicTreeBroadPhase.apply(this,arguments)}function L(){L.b2DynamicTreeNode.apply(this,arguments)}function I(){I.b2DynamicTreePair.apply(this,arguments)}function W(){W.b2Manifold.apply(this,arguments);this.constructor===W&&this.b2Manifold.apply(this,arguments)} >+function Y(){Y.b2ManifoldPoint.apply(this,arguments);this.constructor===Y&&this.b2ManifoldPoint.apply(this,arguments)}function k(){k.b2Point.apply(this,arguments)}function z(){z.b2RayCastInput.apply(this,arguments);this.constructor===z&&this.b2RayCastInput.apply(this,arguments)}function u(){u.b2RayCastOutput.apply(this,arguments)}function D(){D.b2Segment.apply(this,arguments)}function H(){H.b2SeparationFunction.apply(this,arguments)}function O(){O.b2Simplex.apply(this,arguments);this.constructor=== >+O&&this.b2Simplex.apply(this,arguments)}function E(){E.b2SimplexCache.apply(this,arguments)}function R(){R.b2SimplexVertex.apply(this,arguments)}function N(){N.b2TimeOfImpact.apply(this,arguments)}function S(){S.b2TOIInput.apply(this,arguments)}function aa(){aa.b2WorldManifold.apply(this,arguments);this.constructor===aa&&this.b2WorldManifold.apply(this,arguments)}function Z(){Z.ClipVertex.apply(this,arguments)}function d(){d.Features.apply(this,arguments)}function h(){h.b2CircleShape.apply(this,arguments); >+this.constructor===h&&this.b2CircleShape.apply(this,arguments)}function l(){l.b2EdgeChainDef.apply(this,arguments);this.constructor===l&&this.b2EdgeChainDef.apply(this,arguments)}function j(){j.b2EdgeShape.apply(this,arguments);this.constructor===j&&this.b2EdgeShape.apply(this,arguments)}function o(){o.b2MassData.apply(this,arguments)}function q(){q.b2PolygonShape.apply(this,arguments);this.constructor===q&&this.b2PolygonShape.apply(this,arguments)}function n(){n.b2Shape.apply(this,arguments);this.constructor=== >+n&&this.b2Shape.apply(this,arguments)}function a(){a.b2Color.apply(this,arguments);this.constructor===a&&this.b2Color.apply(this,arguments)}function c(){c.b2Settings.apply(this,arguments)}function g(){g.b2Mat22.apply(this,arguments);this.constructor===g&&this.b2Mat22.apply(this,arguments)}function b(){b.b2Mat33.apply(this,arguments);this.constructor===b&&this.b2Mat33.apply(this,arguments)}function e(){e.b2Math.apply(this,arguments)}function f(){f.b2Sweep.apply(this,arguments)}function m(){m.b2Transform.apply(this, >+arguments);this.constructor===m&&this.b2Transform.apply(this,arguments)}function r(){r.b2Vec2.apply(this,arguments);this.constructor===r&&this.b2Vec2.apply(this,arguments)}function s(){s.b2Vec3.apply(this,arguments);this.constructor===s&&this.b2Vec3.apply(this,arguments)}function v(){v.b2Body.apply(this,arguments);this.constructor===v&&this.b2Body.apply(this,arguments)}function t(){t.b2BodyDef.apply(this,arguments);this.constructor===t&&this.b2BodyDef.apply(this,arguments)}function x(){x.b2ContactFilter.apply(this, >+arguments)}function C(){C.b2ContactImpulse.apply(this,arguments)}function J(){J.b2ContactListener.apply(this,arguments)}function T(){T.b2ContactManager.apply(this,arguments);this.constructor===T&&this.b2ContactManager.apply(this,arguments)}function P(){P.b2DebugDraw.apply(this,arguments);this.constructor===P&&this.b2DebugDraw.apply(this,arguments)}function X(){X.b2DestructionListener.apply(this,arguments)}function $(){$.b2FilterData.apply(this,arguments)}function ba(){ba.b2Fixture.apply(this,arguments); >+this.constructor===ba&&this.b2Fixture.apply(this,arguments)}function ca(){ca.b2FixtureDef.apply(this,arguments);this.constructor===ca&&this.b2FixtureDef.apply(this,arguments)}function da(){da.b2Island.apply(this,arguments);this.constructor===da&&this.b2Island.apply(this,arguments)}function Fa(){Fa.b2TimeStep.apply(this,arguments)}function ea(){ea.b2World.apply(this,arguments);this.constructor===ea&&this.b2World.apply(this,arguments)}function Ga(){Ga.b2CircleContact.apply(this,arguments)}function fa(){fa.b2Contact.apply(this, >+arguments);this.constructor===fa&&this.b2Contact.apply(this,arguments)}function ga(){ga.b2ContactConstraint.apply(this,arguments);this.constructor===ga&&this.b2ContactConstraint.apply(this,arguments)}function Ha(){Ha.b2ContactConstraintPoint.apply(this,arguments)}function Ia(){Ia.b2ContactEdge.apply(this,arguments)}function ha(){ha.b2ContactFactory.apply(this,arguments);this.constructor===ha&&this.b2ContactFactory.apply(this,arguments)}function Ja(){Ja.b2ContactRegister.apply(this,arguments)}function Ka(){Ka.b2ContactResult.apply(this, >+arguments)}function ia(){ia.b2ContactSolver.apply(this,arguments);this.constructor===ia&&this.b2ContactSolver.apply(this,arguments)}function La(){La.b2EdgeAndCircleContact.apply(this,arguments)}function ja(){ja.b2NullContact.apply(this,arguments);this.constructor===ja&&this.b2NullContact.apply(this,arguments)}function Ma(){Ma.b2PolyAndCircleContact.apply(this,arguments)}function Na(){Na.b2PolyAndEdgeContact.apply(this,arguments)}function Oa(){Oa.b2PolygonContact.apply(this,arguments)}function ka(){ka.b2PositionSolverManifold.apply(this, >+arguments);this.constructor===ka&&this.b2PositionSolverManifold.apply(this,arguments)}function Pa(){Pa.b2BuoyancyController.apply(this,arguments)}function Qa(){Qa.b2ConstantAccelController.apply(this,arguments)}function Ra(){Ra.b2ConstantForceController.apply(this,arguments)}function Sa(){Sa.b2Controller.apply(this,arguments)}function Ta(){Ta.b2ControllerEdge.apply(this,arguments)}function Ua(){Ua.b2GravityController.apply(this,arguments)}function Va(){Va.b2TensorDampingController.apply(this,arguments)} >+function la(){la.b2DistanceJoint.apply(this,arguments);this.constructor===la&&this.b2DistanceJoint.apply(this,arguments)}function ma(){ma.b2DistanceJointDef.apply(this,arguments);this.constructor===ma&&this.b2DistanceJointDef.apply(this,arguments)}function na(){na.b2FrictionJoint.apply(this,arguments);this.constructor===na&&this.b2FrictionJoint.apply(this,arguments)}function oa(){oa.b2FrictionJointDef.apply(this,arguments);this.constructor===oa&&this.b2FrictionJointDef.apply(this,arguments)}function pa(){pa.b2GearJoint.apply(this, >+arguments);this.constructor===pa&&this.b2GearJoint.apply(this,arguments)}function qa(){qa.b2GearJointDef.apply(this,arguments);this.constructor===qa&&this.b2GearJointDef.apply(this,arguments)}function Wa(){Wa.b2Jacobian.apply(this,arguments)}function ra(){ra.b2Joint.apply(this,arguments);this.constructor===ra&&this.b2Joint.apply(this,arguments)}function sa(){sa.b2JointDef.apply(this,arguments);this.constructor===sa&&this.b2JointDef.apply(this,arguments)}function Xa(){Xa.b2JointEdge.apply(this,arguments)} >+function ta(){ta.b2LineJoint.apply(this,arguments);this.constructor===ta&&this.b2LineJoint.apply(this,arguments)}function ua(){ua.b2LineJointDef.apply(this,arguments);this.constructor===ua&&this.b2LineJointDef.apply(this,arguments)}function va(){va.b2MouseJoint.apply(this,arguments);this.constructor===va&&this.b2MouseJoint.apply(this,arguments)}function wa(){wa.b2MouseJointDef.apply(this,arguments);this.constructor===wa&&this.b2MouseJointDef.apply(this,arguments)}function xa(){xa.b2PrismaticJoint.apply(this, >+arguments);this.constructor===xa&&this.b2PrismaticJoint.apply(this,arguments)}function ya(){ya.b2PrismaticJointDef.apply(this,arguments);this.constructor===ya&&this.b2PrismaticJointDef.apply(this,arguments)}function za(){za.b2PulleyJoint.apply(this,arguments);this.constructor===za&&this.b2PulleyJoint.apply(this,arguments)}function Aa(){Aa.b2PulleyJointDef.apply(this,arguments);this.constructor===Aa&&this.b2PulleyJointDef.apply(this,arguments)}function Ba(){Ba.b2RevoluteJoint.apply(this,arguments); >+this.constructor===Ba&&this.b2RevoluteJoint.apply(this,arguments)}function Ca(){Ca.b2RevoluteJointDef.apply(this,arguments);this.constructor===Ca&&this.b2RevoluteJointDef.apply(this,arguments)}function Da(){Da.b2WeldJoint.apply(this,arguments);this.constructor===Da&&this.b2WeldJoint.apply(this,arguments)}function Ea(){Ea.b2WeldJointDef.apply(this,arguments);this.constructor===Ea&&this.b2WeldJointDef.apply(this,arguments)}Box2D.Collision.IBroadPhase="Box2D.Collision.IBroadPhase";Box2D.Collision.b2AABB= >+F;Box2D.Collision.b2Bound=G;Box2D.Collision.b2BoundValues=K;Box2D.Collision.b2Collision=y;Box2D.Collision.b2ContactID=w;Box2D.Collision.b2ContactPoint=A;Box2D.Collision.b2Distance=U;Box2D.Collision.b2DistanceInput=p;Box2D.Collision.b2DistanceOutput=B;Box2D.Collision.b2DistanceProxy=Q;Box2D.Collision.b2DynamicTree=V;Box2D.Collision.b2DynamicTreeBroadPhase=M;Box2D.Collision.b2DynamicTreeNode=L;Box2D.Collision.b2DynamicTreePair=I;Box2D.Collision.b2Manifold=W;Box2D.Collision.b2ManifoldPoint=Y;Box2D.Collision.b2Point= >+k;Box2D.Collision.b2RayCastInput=z;Box2D.Collision.b2RayCastOutput=u;Box2D.Collision.b2Segment=D;Box2D.Collision.b2SeparationFunction=H;Box2D.Collision.b2Simplex=O;Box2D.Collision.b2SimplexCache=E;Box2D.Collision.b2SimplexVertex=R;Box2D.Collision.b2TimeOfImpact=N;Box2D.Collision.b2TOIInput=S;Box2D.Collision.b2WorldManifold=aa;Box2D.Collision.ClipVertex=Z;Box2D.Collision.Features=d;Box2D.Collision.Shapes.b2CircleShape=h;Box2D.Collision.Shapes.b2EdgeChainDef=l;Box2D.Collision.Shapes.b2EdgeShape=j;Box2D.Collision.Shapes.b2MassData= >+o;Box2D.Collision.Shapes.b2PolygonShape=q;Box2D.Collision.Shapes.b2Shape=n;Box2D.Common.b2internal="Box2D.Common.b2internal";Box2D.Common.b2Color=a;Box2D.Common.b2Settings=c;Box2D.Common.Math.b2Mat22=g;Box2D.Common.Math.b2Mat33=b;Box2D.Common.Math.b2Math=e;Box2D.Common.Math.b2Sweep=f;Box2D.Common.Math.b2Transform=m;Box2D.Common.Math.b2Vec2=r;Box2D.Common.Math.b2Vec3=s;Box2D.Dynamics.b2Body=v;Box2D.Dynamics.b2BodyDef=t;Box2D.Dynamics.b2ContactFilter=x;Box2D.Dynamics.b2ContactImpulse=C;Box2D.Dynamics.b2ContactListener= >+J;Box2D.Dynamics.b2ContactManager=T;Box2D.Dynamics.b2DebugDraw=P;Box2D.Dynamics.b2DestructionListener=X;Box2D.Dynamics.b2FilterData=$;Box2D.Dynamics.b2Fixture=ba;Box2D.Dynamics.b2FixtureDef=ca;Box2D.Dynamics.b2Island=da;Box2D.Dynamics.b2TimeStep=Fa;Box2D.Dynamics.b2World=ea;Box2D.Dynamics.Contacts.b2CircleContact=Ga;Box2D.Dynamics.Contacts.b2Contact=fa;Box2D.Dynamics.Contacts.b2ContactConstraint=ga;Box2D.Dynamics.Contacts.b2ContactConstraintPoint=Ha;Box2D.Dynamics.Contacts.b2ContactEdge=Ia;Box2D.Dynamics.Contacts.b2ContactFactory= >+ha;Box2D.Dynamics.Contacts.b2ContactRegister=Ja;Box2D.Dynamics.Contacts.b2ContactResult=Ka;Box2D.Dynamics.Contacts.b2ContactSolver=ia;Box2D.Dynamics.Contacts.b2EdgeAndCircleContact=La;Box2D.Dynamics.Contacts.b2NullContact=ja;Box2D.Dynamics.Contacts.b2PolyAndCircleContact=Ma;Box2D.Dynamics.Contacts.b2PolyAndEdgeContact=Na;Box2D.Dynamics.Contacts.b2PolygonContact=Oa;Box2D.Dynamics.Contacts.b2PositionSolverManifold=ka;Box2D.Dynamics.Controllers.b2BuoyancyController=Pa;Box2D.Dynamics.Controllers.b2ConstantAccelController= >+Qa;Box2D.Dynamics.Controllers.b2ConstantForceController=Ra;Box2D.Dynamics.Controllers.b2Controller=Sa;Box2D.Dynamics.Controllers.b2ControllerEdge=Ta;Box2D.Dynamics.Controllers.b2GravityController=Ua;Box2D.Dynamics.Controllers.b2TensorDampingController=Va;Box2D.Dynamics.Joints.b2DistanceJoint=la;Box2D.Dynamics.Joints.b2DistanceJointDef=ma;Box2D.Dynamics.Joints.b2FrictionJoint=na;Box2D.Dynamics.Joints.b2FrictionJointDef=oa;Box2D.Dynamics.Joints.b2GearJoint=pa;Box2D.Dynamics.Joints.b2GearJointDef=qa; >+Box2D.Dynamics.Joints.b2Jacobian=Wa;Box2D.Dynamics.Joints.b2Joint=ra;Box2D.Dynamics.Joints.b2JointDef=sa;Box2D.Dynamics.Joints.b2JointEdge=Xa;Box2D.Dynamics.Joints.b2LineJoint=ta;Box2D.Dynamics.Joints.b2LineJointDef=ua;Box2D.Dynamics.Joints.b2MouseJoint=va;Box2D.Dynamics.Joints.b2MouseJointDef=wa;Box2D.Dynamics.Joints.b2PrismaticJoint=xa;Box2D.Dynamics.Joints.b2PrismaticJointDef=ya;Box2D.Dynamics.Joints.b2PulleyJoint=za;Box2D.Dynamics.Joints.b2PulleyJointDef=Aa;Box2D.Dynamics.Joints.b2RevoluteJoint= >+Ba;Box2D.Dynamics.Joints.b2RevoluteJointDef=Ca;Box2D.Dynamics.Joints.b2WeldJoint=Da;Box2D.Dynamics.Joints.b2WeldJointDef=Ea})();Box2D.postDefs=[]; >+(function(){var F=Box2D.Collision.Shapes.b2CircleShape,G=Box2D.Collision.Shapes.b2PolygonShape,K=Box2D.Collision.Shapes.b2Shape,y=Box2D.Common.b2Settings,w=Box2D.Common.Math.b2Math,A=Box2D.Common.Math.b2Sweep,U=Box2D.Common.Math.b2Transform,p=Box2D.Common.Math.b2Vec2,B=Box2D.Collision.b2AABB,Q=Box2D.Collision.b2Bound,V=Box2D.Collision.b2BoundValues,M=Box2D.Collision.b2Collision,L=Box2D.Collision.b2ContactID,I=Box2D.Collision.b2ContactPoint,W=Box2D.Collision.b2Distance,Y=Box2D.Collision.b2DistanceInput, >+k=Box2D.Collision.b2DistanceOutput,z=Box2D.Collision.b2DistanceProxy,u=Box2D.Collision.b2DynamicTree,D=Box2D.Collision.b2DynamicTreeBroadPhase,H=Box2D.Collision.b2DynamicTreeNode,O=Box2D.Collision.b2DynamicTreePair,E=Box2D.Collision.b2Manifold,R=Box2D.Collision.b2ManifoldPoint,N=Box2D.Collision.b2Point,S=Box2D.Collision.b2RayCastInput,aa=Box2D.Collision.b2RayCastOutput,Z=Box2D.Collision.b2Segment,d=Box2D.Collision.b2SeparationFunction,h=Box2D.Collision.b2Simplex,l=Box2D.Collision.b2SimplexCache,j= >+Box2D.Collision.b2SimplexVertex,o=Box2D.Collision.b2TimeOfImpact,q=Box2D.Collision.b2TOIInput,n=Box2D.Collision.b2WorldManifold,a=Box2D.Collision.ClipVertex,c=Box2D.Collision.Features,g=Box2D.Collision.IBroadPhase;B.b2AABB=function(){this.lowerBound=new p;this.upperBound=new p};B.prototype.IsValid=function(){var b=this.upperBound.y-this.lowerBound.y;return b=(b=this.upperBound.x-this.lowerBound.x>=0&&b>=0)&&this.lowerBound.IsValid()&&this.upperBound.IsValid()};B.prototype.GetCenter=function(){return new p((this.lowerBound.x+ >+this.upperBound.x)/2,(this.lowerBound.y+this.upperBound.y)/2)};B.prototype.GetExtents=function(){return new p((this.upperBound.x-this.lowerBound.x)/2,(this.upperBound.y-this.lowerBound.y)/2)};B.prototype.Contains=function(b){var e=true;return e=(e=(e=(e=e&&this.lowerBound.x<=b.lowerBound.x)&&this.lowerBound.y<=b.lowerBound.y)&&b.upperBound.x<=this.upperBound.x)&&b.upperBound.y<=this.upperBound.y};B.prototype.RayCast=function(b,e){var f=-Number.MAX_VALUE,m=Number.MAX_VALUE,r=e.p1.x,s=e.p1.y,v=e.p2.x- >+e.p1.x,t=e.p2.y-e.p1.y,x=Math.abs(t),C=b.normal,J=0,T=0,P=J=0;P=0;if(Math.abs(v)<Number.MIN_VALUE){if(r<this.lowerBound.x||this.upperBound.x<r)return false}else{J=1/v;T=(this.lowerBound.x-r)*J;J=(this.upperBound.x-r)*J;P=-1;if(T>J){P=T;T=J;J=P;P=1}if(T>f){C.x=P;C.y=0;f=T}m=Math.min(m,J);if(f>m)return false}if(x<Number.MIN_VALUE){if(s<this.lowerBound.y||this.upperBound.y<s)return false}else{J=1/t;T=(this.lowerBound.y-s)*J;J=(this.upperBound.y-s)*J;P=-1;if(T>J){P=T;T=J;J=P;P=1}if(T>f){C.y=P;C.x=0;f= >+T}m=Math.min(m,J);if(f>m)return false}b.fraction=f;return true};B.prototype.TestOverlap=function(b){var e=b.lowerBound.y-this.upperBound.y,f=this.lowerBound.y-b.upperBound.y;if(b.lowerBound.x-this.upperBound.x>0||e>0)return false;if(this.lowerBound.x-b.upperBound.x>0||f>0)return false;return true};B.Combine=function(b,e){var f=new B;f.Combine(b,e);return f};B.prototype.Combine=function(b,e){this.lowerBound.x=Math.min(b.lowerBound.x,e.lowerBound.x);this.lowerBound.y=Math.min(b.lowerBound.y,e.lowerBound.y); >+this.upperBound.x=Math.max(b.upperBound.x,e.upperBound.x);this.upperBound.y=Math.max(b.upperBound.y,e.upperBound.y)};Q.b2Bound=function(){};Q.prototype.IsLower=function(){return(this.value&1)==0};Q.prototype.IsUpper=function(){return(this.value&1)==1};Q.prototype.Swap=function(b){var e=this.value,f=this.proxy,m=this.stabbingCount;this.value=b.value;this.proxy=b.proxy;this.stabbingCount=b.stabbingCount;b.value=e;b.proxy=f;b.stabbingCount=m};V.b2BoundValues=function(){};V.prototype.b2BoundValues=function(){this.lowerValues= >+new Vector_a2j_Number;this.lowerValues[0]=0;this.lowerValues[1]=0;this.upperValues=new Vector_a2j_Number;this.upperValues[0]=0;this.upperValues[1]=0};M.b2Collision=function(){};M.ClipSegmentToLine=function(b,e,f,m){if(m===undefined)m=0;var r,s=0;r=e[0];var v=r.v;r=e[1];var t=r.v,x=f.x*v.x+f.y*v.y-m;r=f.x*t.x+f.y*t.y-m;x<=0&&b[s++].Set(e[0]);r<=0&&b[s++].Set(e[1]);if(x*r<0){f=x/(x-r);r=b[s];r=r.v;r.x=v.x+f*(t.x-v.x);r.y=v.y+f*(t.y-v.y);r=b[s];r.id=(x>0?e[0]:e[1]).id;++s}return s};M.EdgeSeparation= >+function(b,e,f,m,r){if(f===undefined)f=0;parseInt(b.m_vertexCount);var s=b.m_vertices;b=b.m_normals;var v=parseInt(m.m_vertexCount),t=m.m_vertices,x,C;x=e.R;C=b[f];b=x.col1.x*C.x+x.col2.x*C.y;m=x.col1.y*C.x+x.col2.y*C.y;x=r.R;var J=x.col1.x*b+x.col1.y*m;x=x.col2.x*b+x.col2.y*m;for(var T=0,P=Number.MAX_VALUE,X=0;X<v;++X){C=t[X];C=C.x*J+C.y*x;if(C<P){P=C;T=X}}C=s[f];x=e.R;f=e.position.x+(x.col1.x*C.x+x.col2.x*C.y);e=e.position.y+(x.col1.y*C.x+x.col2.y*C.y);C=t[T];x=r.R;s=r.position.x+(x.col1.x*C.x+ >+x.col2.x*C.y);r=r.position.y+(x.col1.y*C.x+x.col2.y*C.y);s-=f;r-=e;return s*b+r*m};M.FindMaxSeparation=function(b,e,f,m,r){var s=parseInt(e.m_vertexCount),v=e.m_normals,t,x;x=r.R;t=m.m_centroid;var C=r.position.x+(x.col1.x*t.x+x.col2.x*t.y),J=r.position.y+(x.col1.y*t.x+x.col2.y*t.y);x=f.R;t=e.m_centroid;C-=f.position.x+(x.col1.x*t.x+x.col2.x*t.y);J-=f.position.y+(x.col1.y*t.x+x.col2.y*t.y);x=C*f.R.col1.x+J*f.R.col1.y;J=C*f.R.col2.x+J*f.R.col2.y;C=0;for(var T=-Number.MAX_VALUE,P=0;P<s;++P){t=v[P]; >+t=t.x*x+t.y*J;if(t>T){T=t;C=P}}v=M.EdgeSeparation(e,f,C,m,r);t=parseInt(C-1>=0?C-1:s-1);x=M.EdgeSeparation(e,f,t,m,r);J=parseInt(C+1<s?C+1:0);T=M.EdgeSeparation(e,f,J,m,r);var X=P=0,$=0;if(x>v&&x>T){$=-1;P=t;X=x}else if(T>v){$=1;P=J;X=T}else{b[0]=C;return v}for(;;){C=$==-1?P-1>=0?P-1:s-1:P+1<s?P+1:0;v=M.EdgeSeparation(e,f,C,m,r);if(v>X){P=C;X=v}else break}b[0]=P;return X};M.FindIncidentEdge=function(b,e,f,m,r,s){if(m===undefined)m=0;parseInt(e.m_vertexCount);var v=e.m_normals,t=parseInt(r.m_vertexCount); >+e=r.m_vertices;r=r.m_normals;var x;x=f.R;f=v[m];v=x.col1.x*f.x+x.col2.x*f.y;var C=x.col1.y*f.x+x.col2.y*f.y;x=s.R;f=x.col1.x*v+x.col1.y*C;C=x.col2.x*v+x.col2.y*C;v=f;x=0;for(var J=Number.MAX_VALUE,T=0;T<t;++T){f=r[T];f=v*f.x+C*f.y;if(f<J){J=f;x=T}}r=parseInt(x);v=parseInt(r+1<t?r+1:0);t=b[0];f=e[r];x=s.R;t.v.x=s.position.x+(x.col1.x*f.x+x.col2.x*f.y);t.v.y=s.position.y+(x.col1.y*f.x+x.col2.y*f.y);t.id.features.referenceEdge=m;t.id.features.incidentEdge=r;t.id.features.incidentVertex=0;t=b[1];f=e[v]; >+x=s.R;t.v.x=s.position.x+(x.col1.x*f.x+x.col2.x*f.y);t.v.y=s.position.y+(x.col1.y*f.x+x.col2.y*f.y);t.id.features.referenceEdge=m;t.id.features.incidentEdge=v;t.id.features.incidentVertex=1};M.MakeClipPointVector=function(){var b=new Vector(2);b[0]=new a;b[1]=new a;return b};M.CollidePolygons=function(b,e,f,m,r){var s;b.m_pointCount=0;var v=e.m_radius+m.m_radius;s=0;M.s_edgeAO[0]=s;var t=M.FindMaxSeparation(M.s_edgeAO,e,f,m,r);s=M.s_edgeAO[0];if(!(t>v)){var x=0;M.s_edgeBO[0]=x;var C=M.FindMaxSeparation(M.s_edgeBO, >+m,r,e,f);x=M.s_edgeBO[0];if(!(C>v)){var J=0,T=0;if(C>0.98*t+0.0010){t=m;m=e;e=r;f=f;J=x;b.m_type=E.e_faceB;T=1}else{t=e;m=m;e=f;f=r;J=s;b.m_type=E.e_faceA;T=0}s=M.s_incidentEdge;M.FindIncidentEdge(s,t,e,J,m,f);x=parseInt(t.m_vertexCount);r=t.m_vertices;t=r[J];var P;P=J+1<x?r[parseInt(J+1)]:r[0];J=M.s_localTangent;J.Set(P.x-t.x,P.y-t.y);J.Normalize();r=M.s_localNormal;r.x=J.y;r.y=-J.x;m=M.s_planePoint;m.Set(0.5*(t.x+P.x),0.5*(t.y+P.y));C=M.s_tangent;x=e.R;C.x=x.col1.x*J.x+x.col2.x*J.y;C.y=x.col1.y* >+J.x+x.col2.y*J.y;var X=M.s_tangent2;X.x=-C.x;X.y=-C.y;J=M.s_normal;J.x=C.y;J.y=-C.x;var $=M.s_v11,ba=M.s_v12;$.x=e.position.x+(x.col1.x*t.x+x.col2.x*t.y);$.y=e.position.y+(x.col1.y*t.x+x.col2.y*t.y);ba.x=e.position.x+(x.col1.x*P.x+x.col2.x*P.y);ba.y=e.position.y+(x.col1.y*P.x+x.col2.y*P.y);e=J.x*$.x+J.y*$.y;x=C.x*ba.x+C.y*ba.y+v;P=M.s_clipPoints1;t=M.s_clipPoints2;ba=0;ba=M.ClipSegmentToLine(P,s,X,-C.x*$.x-C.y*$.y+v);if(!(ba<2)){ba=M.ClipSegmentToLine(t,P,C,x);if(!(ba<2)){b.m_localPlaneNormal.SetV(r); >+b.m_localPoint.SetV(m);for(m=r=0;m<y.b2_maxManifoldPoints;++m){s=t[m];if(J.x*s.v.x+J.y*s.v.y-e<=v){C=b.m_points[r];x=f.R;X=s.v.x-f.position.x;$=s.v.y-f.position.y;C.m_localPoint.x=X*x.col1.x+$*x.col1.y;C.m_localPoint.y=X*x.col2.x+$*x.col2.y;C.m_id.Set(s.id);C.m_id.features.flip=T;++r}}b.m_pointCount=r}}}}};M.CollideCircles=function(b,e,f,m,r){b.m_pointCount=0;var s,v;s=f.R;v=e.m_p;var t=f.position.x+(s.col1.x*v.x+s.col2.x*v.y);f=f.position.y+(s.col1.y*v.x+s.col2.y*v.y);s=r.R;v=m.m_p;t=r.position.x+ >+(s.col1.x*v.x+s.col2.x*v.y)-t;r=r.position.y+(s.col1.y*v.x+s.col2.y*v.y)-f;s=e.m_radius+m.m_radius;if(!(t*t+r*r>s*s)){b.m_type=E.e_circles;b.m_localPoint.SetV(e.m_p);b.m_localPlaneNormal.SetZero();b.m_pointCount=1;b.m_points[0].m_localPoint.SetV(m.m_p);b.m_points[0].m_id.key=0}};M.CollidePolygonAndCircle=function(b,e,f,m,r){var s=b.m_pointCount=0,v=0,t,x;x=r.R;t=m.m_p;var C=r.position.y+(x.col1.y*t.x+x.col2.y*t.y);s=r.position.x+(x.col1.x*t.x+x.col2.x*t.y)-f.position.x;v=C-f.position.y;x=f.R;f=s* >+x.col1.x+v*x.col1.y;x=s*x.col2.x+v*x.col2.y;var J=0;C=-Number.MAX_VALUE;r=e.m_radius+m.m_radius;var T=parseInt(e.m_vertexCount),P=e.m_vertices;e=e.m_normals;for(var X=0;X<T;++X){t=P[X];s=f-t.x;v=x-t.y;t=e[X];s=t.x*s+t.y*v;if(s>r)return;if(s>C){C=s;J=X}}s=parseInt(J);v=parseInt(s+1<T?s+1:0);t=P[s];P=P[v];if(C<Number.MIN_VALUE){b.m_pointCount=1;b.m_type=E.e_faceA;b.m_localPlaneNormal.SetV(e[J]);b.m_localPoint.x=0.5*(t.x+P.x);b.m_localPoint.y=0.5*(t.y+P.y)}else{C=(f-P.x)*(t.x-P.x)+(x-P.y)*(t.y-P.y); >+if((f-t.x)*(P.x-t.x)+(x-t.y)*(P.y-t.y)<=0){if((f-t.x)*(f-t.x)+(x-t.y)*(x-t.y)>r*r)return;b.m_pointCount=1;b.m_type=E.e_faceA;b.m_localPlaneNormal.x=f-t.x;b.m_localPlaneNormal.y=x-t.y;b.m_localPlaneNormal.Normalize();b.m_localPoint.SetV(t)}else if(C<=0){if((f-P.x)*(f-P.x)+(x-P.y)*(x-P.y)>r*r)return;b.m_pointCount=1;b.m_type=E.e_faceA;b.m_localPlaneNormal.x=f-P.x;b.m_localPlaneNormal.y=x-P.y;b.m_localPlaneNormal.Normalize();b.m_localPoint.SetV(P)}else{J=0.5*(t.x+P.x);t=0.5*(t.y+P.y);C=(f-J)*e[s].x+ >+(x-t)*e[s].y;if(C>r)return;b.m_pointCount=1;b.m_type=E.e_faceA;b.m_localPlaneNormal.x=e[s].x;b.m_localPlaneNormal.y=e[s].y;b.m_localPlaneNormal.Normalize();b.m_localPoint.Set(J,t)}}b.m_points[0].m_localPoint.SetV(m.m_p);b.m_points[0].m_id.key=0};M.TestOverlap=function(b,e){var f=e.lowerBound,m=b.upperBound,r=f.x-m.x,s=f.y-m.y;f=b.lowerBound;m=e.upperBound;var v=f.y-m.y;if(r>0||s>0)return false;if(f.x-m.x>0||v>0)return false;return true};Box2D.postDefs.push(function(){Box2D.Collision.b2Collision.s_incidentEdge= >+M.MakeClipPointVector();Box2D.Collision.b2Collision.s_clipPoints1=M.MakeClipPointVector();Box2D.Collision.b2Collision.s_clipPoints2=M.MakeClipPointVector();Box2D.Collision.b2Collision.s_edgeAO=new Vector_a2j_Number(1);Box2D.Collision.b2Collision.s_edgeBO=new Vector_a2j_Number(1);Box2D.Collision.b2Collision.s_localTangent=new p;Box2D.Collision.b2Collision.s_localNormal=new p;Box2D.Collision.b2Collision.s_planePoint=new p;Box2D.Collision.b2Collision.s_normal=new p;Box2D.Collision.b2Collision.s_tangent= >+new p;Box2D.Collision.b2Collision.s_tangent2=new p;Box2D.Collision.b2Collision.s_v11=new p;Box2D.Collision.b2Collision.s_v12=new p;Box2D.Collision.b2Collision.b2CollidePolyTempVec=new p;Box2D.Collision.b2Collision.b2_nullFeature=255});L.b2ContactID=function(){this.features=new c};L.prototype.b2ContactID=function(){this.features._m_id=this};L.prototype.Set=function(b){this.key=b._key};L.prototype.Copy=function(){var b=new L;b.key=this.key;return b};Object.defineProperty(L.prototype,"key",{enumerable:false, >+configurable:true,get:function(){return this._key}});Object.defineProperty(L.prototype,"key",{enumerable:false,configurable:true,set:function(b){if(b===undefined)b=0;this._key=b;this.features._referenceEdge=this._key&255;this.features._incidentEdge=(this._key&65280)>>8&255;this.features._incidentVertex=(this._key&16711680)>>16&255;this.features._flip=(this._key&4278190080)>>24&255}});I.b2ContactPoint=function(){this.position=new p;this.velocity=new p;this.normal=new p;this.id=new L};W.b2Distance= >+function(){};W.Distance=function(b,e,f){++W.b2_gjkCalls;var m=f.proxyA,r=f.proxyB,s=f.transformA,v=f.transformB,t=W.s_simplex;t.ReadCache(e,m,s,r,v);var x=t.m_vertices,C=W.s_saveA,J=W.s_saveB,T=0;t.GetClosestPoint().LengthSquared();for(var P=0,X,$=0;$<20;){T=t.m_count;for(P=0;P<T;P++){C[P]=x[P].indexA;J[P]=x[P].indexB}switch(t.m_count){case 1:break;case 2:t.Solve2();break;case 3:t.Solve3();break;default:y.b2Assert(false)}if(t.m_count==3)break;X=t.GetClosestPoint();X.LengthSquared();P=t.GetSearchDirection(); >+if(P.LengthSquared()<Number.MIN_VALUE*Number.MIN_VALUE)break;X=x[t.m_count];X.indexA=m.GetSupport(w.MulTMV(s.R,P.GetNegative()));X.wA=w.MulX(s,m.GetVertex(X.indexA));X.indexB=r.GetSupport(w.MulTMV(v.R,P));X.wB=w.MulX(v,r.GetVertex(X.indexB));X.w=w.SubtractVV(X.wB,X.wA);++$;++W.b2_gjkIters;var ba=false;for(P=0;P<T;P++)if(X.indexA==C[P]&&X.indexB==J[P]){ba=true;break}if(ba)break;++t.m_count}W.b2_gjkMaxIters=w.Max(W.b2_gjkMaxIters,$);t.GetWitnessPoints(b.pointA,b.pointB);b.distance=w.SubtractVV(b.pointA, >+b.pointB).Length();b.iterations=$;t.WriteCache(e);if(f.useRadii){e=m.m_radius;r=r.m_radius;if(b.distance>e+r&&b.distance>Number.MIN_VALUE){b.distance-=e+r;f=w.SubtractVV(b.pointB,b.pointA);f.Normalize();b.pointA.x+=e*f.x;b.pointA.y+=e*f.y;b.pointB.x-=r*f.x;b.pointB.y-=r*f.y}else{X=new p;X.x=0.5*(b.pointA.x+b.pointB.x);X.y=0.5*(b.pointA.y+b.pointB.y);b.pointA.x=b.pointB.x=X.x;b.pointA.y=b.pointB.y=X.y;b.distance=0}}};Box2D.postDefs.push(function(){Box2D.Collision.b2Distance.s_simplex=new h;Box2D.Collision.b2Distance.s_saveA= >+new Vector_a2j_Number(3);Box2D.Collision.b2Distance.s_saveB=new Vector_a2j_Number(3)});Y.b2DistanceInput=function(){};k.b2DistanceOutput=function(){this.pointA=new p;this.pointB=new p};z.b2DistanceProxy=function(){};z.prototype.Set=function(b){switch(b.GetType()){case K.e_circleShape:b=b instanceof F?b:null;this.m_vertices=new Vector(1,true);this.m_vertices[0]=b.m_p;this.m_count=1;this.m_radius=b.m_radius;break;case K.e_polygonShape:b=b instanceof G?b:null;this.m_vertices=b.m_vertices;this.m_count= >+b.m_vertexCount;this.m_radius=b.m_radius;break;default:y.b2Assert(false)}};z.prototype.GetSupport=function(b){for(var e=0,f=this.m_vertices[0].x*b.x+this.m_vertices[0].y*b.y,m=1;m<this.m_count;++m){var r=this.m_vertices[m].x*b.x+this.m_vertices[m].y*b.y;if(r>f){e=m;f=r}}return e};z.prototype.GetSupportVertex=function(b){for(var e=0,f=this.m_vertices[0].x*b.x+this.m_vertices[0].y*b.y,m=1;m<this.m_count;++m){var r=this.m_vertices[m].x*b.x+this.m_vertices[m].y*b.y;if(r>f){e=m;f=r}}return this.m_vertices[e]}; >+z.prototype.GetVertexCount=function(){return this.m_count};z.prototype.GetVertex=function(b){if(b===undefined)b=0;y.b2Assert(0<=b&&b<this.m_count);return this.m_vertices[b]};u.b2DynamicTree=function(){};u.prototype.b2DynamicTree=function(){this.m_freeList=this.m_root=null;this.m_insertionCount=this.m_path=0};u.prototype.CreateProxy=function(b,e){var f=this.AllocateNode(),m=y.b2_aabbExtension,r=y.b2_aabbExtension;f.aabb.lowerBound.x=b.lowerBound.x-m;f.aabb.lowerBound.y=b.lowerBound.y-r;f.aabb.upperBound.x= >+b.upperBound.x+m;f.aabb.upperBound.y=b.upperBound.y+r;f.userData=e;this.InsertLeaf(f);return f};u.prototype.DestroyProxy=function(b){this.RemoveLeaf(b);this.FreeNode(b)};u.prototype.MoveProxy=function(b,e,f){y.b2Assert(b.IsLeaf());if(b.aabb.Contains(e))return false;this.RemoveLeaf(b);var m=y.b2_aabbExtension+y.b2_aabbMultiplier*(f.x>0?f.x:-f.x);f=y.b2_aabbExtension+y.b2_aabbMultiplier*(f.y>0?f.y:-f.y);b.aabb.lowerBound.x=e.lowerBound.x-m;b.aabb.lowerBound.y=e.lowerBound.y-f;b.aabb.upperBound.x=e.upperBound.x+ >+m;b.aabb.upperBound.y=e.upperBound.y+f;this.InsertLeaf(b);return true};u.prototype.Rebalance=function(b){if(b===undefined)b=0;if(this.m_root!=null)for(var e=0;e<b;e++){for(var f=this.m_root,m=0;f.IsLeaf()==false;){f=this.m_path>>m&1?f.child2:f.child1;m=m+1&31}++this.m_path;this.RemoveLeaf(f);this.InsertLeaf(f)}};u.prototype.GetFatAABB=function(b){return b.aabb};u.prototype.GetUserData=function(b){return b.userData};u.prototype.Query=function(b,e){if(this.m_root!=null){var f=new Vector,m=0;for(f[m++]= >+this.m_root;m>0;){var r=f[--m];if(r.aabb.TestOverlap(e))if(r.IsLeaf()){if(!b(r))break}else{f[m++]=r.child1;f[m++]=r.child2}}}};u.prototype.RayCast=function(b,e){if(this.m_root!=null){var f=e.p1,m=e.p2,r=w.SubtractVV(f,m);r.Normalize();r=w.CrossFV(1,r);var s=w.AbsV(r),v=e.maxFraction,t=new B,x=0,C=0;x=f.x+v*(m.x-f.x);C=f.y+v*(m.y-f.y);t.lowerBound.x=Math.min(f.x,x);t.lowerBound.y=Math.min(f.y,C);t.upperBound.x=Math.max(f.x,x);t.upperBound.y=Math.max(f.y,C);var J=new Vector,T=0;for(J[T++]=this.m_root;T> >+0;){v=J[--T];if(v.aabb.TestOverlap(t)!=false){x=v.aabb.GetCenter();C=v.aabb.GetExtents();if(!(Math.abs(r.x*(f.x-x.x)+r.y*(f.y-x.y))-s.x*C.x-s.y*C.y>0))if(v.IsLeaf()){x=new S;x.p1=e.p1;x.p2=e.p2;x.maxFraction=e.maxFraction;v=b(x,v);if(v==0)break;if(v>0){x=f.x+v*(m.x-f.x);C=f.y+v*(m.y-f.y);t.lowerBound.x=Math.min(f.x,x);t.lowerBound.y=Math.min(f.y,C);t.upperBound.x=Math.max(f.x,x);t.upperBound.y=Math.max(f.y,C)}}else{J[T++]=v.child1;J[T++]=v.child2}}}}};u.prototype.AllocateNode=function(){if(this.m_freeList){var b= >+this.m_freeList;this.m_freeList=b.parent;b.parent=null;b.child1=null;b.child2=null;return b}return new H};u.prototype.FreeNode=function(b){b.parent=this.m_freeList;this.m_freeList=b};u.prototype.InsertLeaf=function(b){++this.m_insertionCount;if(this.m_root==null){this.m_root=b;this.m_root.parent=null}else{var e=b.aabb.GetCenter(),f=this.m_root;if(f.IsLeaf()==false){do{var m=f.child1;f=f.child2;f=Math.abs((m.aabb.lowerBound.x+m.aabb.upperBound.x)/2-e.x)+Math.abs((m.aabb.lowerBound.y+m.aabb.upperBound.y)/ >+2-e.y)<Math.abs((f.aabb.lowerBound.x+f.aabb.upperBound.x)/2-e.x)+Math.abs((f.aabb.lowerBound.y+f.aabb.upperBound.y)/2-e.y)?m:f}while(f.IsLeaf()==false)}e=f.parent;m=this.AllocateNode();m.parent=e;m.userData=null;m.aabb.Combine(b.aabb,f.aabb);if(e){if(f.parent.child1==f)e.child1=m;else e.child2=m;m.child1=f;m.child2=b;f.parent=m;b.parent=m;do{if(e.aabb.Contains(m.aabb))break;e.aabb.Combine(e.child1.aabb,e.child2.aabb);m=e;e=e.parent}while(e)}else{m.child1=f;m.child2=b;f.parent=m;this.m_root=b.parent= >+m}}};u.prototype.RemoveLeaf=function(b){if(b==this.m_root)this.m_root=null;else{var e=b.parent,f=e.parent;b=e.child1==b?e.child2:e.child1;if(f){if(f.child1==e)f.child1=b;else f.child2=b;b.parent=f;for(this.FreeNode(e);f;){e=f.aabb;f.aabb=B.Combine(f.child1.aabb,f.child2.aabb);if(e.Contains(f.aabb))break;f=f.parent}}else{this.m_root=b;b.parent=null;this.FreeNode(e)}}};D.b2DynamicTreeBroadPhase=function(){this.m_tree=new u;this.m_moveBuffer=new Vector;this.m_pairBuffer=new Vector;this.m_pairCount=0}; >+D.prototype.CreateProxy=function(b,e){var f=this.m_tree.CreateProxy(b,e);++this.m_proxyCount;this.BufferMove(f);return f};D.prototype.DestroyProxy=function(b){this.UnBufferMove(b);--this.m_proxyCount;this.m_tree.DestroyProxy(b)};D.prototype.MoveProxy=function(b,e,f){this.m_tree.MoveProxy(b,e,f)&&this.BufferMove(b)};D.prototype.TestOverlap=function(b,e){var f=this.m_tree.GetFatAABB(b),m=this.m_tree.GetFatAABB(e);return f.TestOverlap(m)};D.prototype.GetUserData=function(b){return this.m_tree.GetUserData(b)}; >+D.prototype.GetFatAABB=function(b){return this.m_tree.GetFatAABB(b)};D.prototype.GetProxyCount=function(){return this.m_proxyCount};D.prototype.UpdatePairs=function(b){var e=this;var f=e.m_pairCount=0,m;for(f=0;f<e.m_moveBuffer.length;++f){m=e.m_moveBuffer[f];var r=e.m_tree.GetFatAABB(m);e.m_tree.Query(function(t){if(t==m)return true;if(e.m_pairCount==e.m_pairBuffer.length)e.m_pairBuffer[e.m_pairCount]=new O;var x=e.m_pairBuffer[e.m_pairCount];x.proxyA=t<m?t:m;x.proxyB=t>=m?t:m;++e.m_pairCount;return true}, >+r)}for(f=e.m_moveBuffer.length=0;f<e.m_pairCount;){r=e.m_pairBuffer[f];var s=e.m_tree.GetUserData(r.proxyA),v=e.m_tree.GetUserData(r.proxyB);b(s,v);for(++f;f<e.m_pairCount;){s=e.m_pairBuffer[f];if(s.proxyA!=r.proxyA||s.proxyB!=r.proxyB)break;++f}}};D.prototype.Query=function(b,e){this.m_tree.Query(b,e)};D.prototype.RayCast=function(b,e){this.m_tree.RayCast(b,e)};D.prototype.Validate=function(){};D.prototype.Rebalance=function(b){if(b===undefined)b=0;this.m_tree.Rebalance(b)};D.prototype.BufferMove= >+function(b){this.m_moveBuffer[this.m_moveBuffer.length]=b};D.prototype.UnBufferMove=function(b){this.m_moveBuffer.splice(parseInt(this.m_moveBuffer.indexOf(b)),1)};D.prototype.ComparePairs=function(){return 0};D.__implements={};D.__implements[g]=true;H.b2DynamicTreeNode=function(){this.aabb=new B};H.prototype.IsLeaf=function(){return this.child1==null};O.b2DynamicTreePair=function(){};E.b2Manifold=function(){this.m_pointCount=0};E.prototype.b2Manifold=function(){this.m_points=new Vector(y.b2_maxManifoldPoints); >+for(var b=0;b<y.b2_maxManifoldPoints;b++)this.m_points[b]=new R;this.m_localPlaneNormal=new p;this.m_localPoint=new p};E.prototype.Reset=function(){for(var b=0;b<y.b2_maxManifoldPoints;b++)(this.m_points[b]instanceof R?this.m_points[b]:null).Reset();this.m_localPlaneNormal.SetZero();this.m_localPoint.SetZero();this.m_pointCount=this.m_type=0};E.prototype.Set=function(b){this.m_pointCount=b.m_pointCount;for(var e=0;e<y.b2_maxManifoldPoints;e++)(this.m_points[e]instanceof R?this.m_points[e]:null).Set(b.m_points[e]); >+this.m_localPlaneNormal.SetV(b.m_localPlaneNormal);this.m_localPoint.SetV(b.m_localPoint);this.m_type=b.m_type};E.prototype.Copy=function(){var b=new E;b.Set(this);return b};Box2D.postDefs.push(function(){Box2D.Collision.b2Manifold.e_circles=1;Box2D.Collision.b2Manifold.e_faceA=2;Box2D.Collision.b2Manifold.e_faceB=4});R.b2ManifoldPoint=function(){this.m_localPoint=new p;this.m_id=new L};R.prototype.b2ManifoldPoint=function(){this.Reset()};R.prototype.Reset=function(){this.m_localPoint.SetZero();this.m_tangentImpulse= >+this.m_normalImpulse=0;this.m_id.key=0};R.prototype.Set=function(b){this.m_localPoint.SetV(b.m_localPoint);this.m_normalImpulse=b.m_normalImpulse;this.m_tangentImpulse=b.m_tangentImpulse;this.m_id.Set(b.m_id)};N.b2Point=function(){this.p=new p};N.prototype.Support=function(){return this.p};N.prototype.GetFirstVertex=function(){return this.p};S.b2RayCastInput=function(){this.p1=new p;this.p2=new p};S.prototype.b2RayCastInput=function(b,e,f){if(b===undefined)b=null;if(e===undefined)e=null;if(f===undefined)f= >+1;b&&this.p1.SetV(b);e&&this.p2.SetV(e);this.maxFraction=f};aa.b2RayCastOutput=function(){this.normal=new p};Z.b2Segment=function(){this.p1=new p;this.p2=new p};Z.prototype.TestSegment=function(b,e,f,m){if(m===undefined)m=0;var r=f.p1,s=f.p2.x-r.x,v=f.p2.y-r.y;f=this.p2.y-this.p1.y;var t=-(this.p2.x-this.p1.x),x=100*Number.MIN_VALUE,C=-(s*f+v*t);if(C>x){var J=r.x-this.p1.x,T=r.y-this.p1.y;r=J*f+T*t;if(0<=r&&r<=m*C){m=-s*T+v*J;if(-x*C<=m&&m<=C*(1+x)){r/=C;m=Math.sqrt(f*f+t*t);f/=m;t/=m;b[0]=r;e.Set(f, >+t);return true}}}return false};Z.prototype.Extend=function(b){this.ExtendForward(b);this.ExtendBackward(b)};Z.prototype.ExtendForward=function(b){var e=this.p2.x-this.p1.x,f=this.p2.y-this.p1.y;b=Math.min(e>0?(b.upperBound.x-this.p1.x)/e:e<0?(b.lowerBound.x-this.p1.x)/e:Number.POSITIVE_INFINITY,f>0?(b.upperBound.y-this.p1.y)/f:f<0?(b.lowerBound.y-this.p1.y)/f:Number.POSITIVE_INFINITY);this.p2.x=this.p1.x+e*b;this.p2.y=this.p1.y+f*b};Z.prototype.ExtendBackward=function(b){var e=-this.p2.x+this.p1.x, >+f=-this.p2.y+this.p1.y;b=Math.min(e>0?(b.upperBound.x-this.p2.x)/e:e<0?(b.lowerBound.x-this.p2.x)/e:Number.POSITIVE_INFINITY,f>0?(b.upperBound.y-this.p2.y)/f:f<0?(b.lowerBound.y-this.p2.y)/f:Number.POSITIVE_INFINITY);this.p1.x=this.p2.x+e*b;this.p1.y=this.p2.y+f*b};d.b2SeparationFunction=function(){this.m_localPoint=new p;this.m_axis=new p};d.prototype.Initialize=function(b,e,f,m,r){this.m_proxyA=e;this.m_proxyB=m;var s=parseInt(b.count);y.b2Assert(0<s&&s<3);var v,t,x,C,J=C=x=m=e=0,T=0;J=0;if(s== >+1){this.m_type=d.e_points;v=this.m_proxyA.GetVertex(b.indexA[0]);t=this.m_proxyB.GetVertex(b.indexB[0]);s=v;b=f.R;e=f.position.x+(b.col1.x*s.x+b.col2.x*s.y);m=f.position.y+(b.col1.y*s.x+b.col2.y*s.y);s=t;b=r.R;x=r.position.x+(b.col1.x*s.x+b.col2.x*s.y);C=r.position.y+(b.col1.y*s.x+b.col2.y*s.y);this.m_axis.x=x-e;this.m_axis.y=C-m;this.m_axis.Normalize()}else{if(b.indexB[0]==b.indexB[1]){this.m_type=d.e_faceA;e=this.m_proxyA.GetVertex(b.indexA[0]);m=this.m_proxyA.GetVertex(b.indexA[1]);t=this.m_proxyB.GetVertex(b.indexB[0]); >+this.m_localPoint.x=0.5*(e.x+m.x);this.m_localPoint.y=0.5*(e.y+m.y);this.m_axis=w.CrossVF(w.SubtractVV(m,e),1);this.m_axis.Normalize();s=this.m_axis;b=f.R;J=b.col1.x*s.x+b.col2.x*s.y;T=b.col1.y*s.x+b.col2.y*s.y;s=this.m_localPoint;b=f.R;e=f.position.x+(b.col1.x*s.x+b.col2.x*s.y);m=f.position.y+(b.col1.y*s.x+b.col2.y*s.y);s=t;b=r.R;x=r.position.x+(b.col1.x*s.x+b.col2.x*s.y);C=r.position.y+(b.col1.y*s.x+b.col2.y*s.y);J=(x-e)*J+(C-m)*T}else if(b.indexA[0]==b.indexA[0]){this.m_type=d.e_faceB;x=this.m_proxyB.GetVertex(b.indexB[0]); >+C=this.m_proxyB.GetVertex(b.indexB[1]);v=this.m_proxyA.GetVertex(b.indexA[0]);this.m_localPoint.x=0.5*(x.x+C.x);this.m_localPoint.y=0.5*(x.y+C.y);this.m_axis=w.CrossVF(w.SubtractVV(C,x),1);this.m_axis.Normalize();s=this.m_axis;b=r.R;J=b.col1.x*s.x+b.col2.x*s.y;T=b.col1.y*s.x+b.col2.y*s.y;s=this.m_localPoint;b=r.R;x=r.position.x+(b.col1.x*s.x+b.col2.x*s.y);C=r.position.y+(b.col1.y*s.x+b.col2.y*s.y);s=v;b=f.R;e=f.position.x+(b.col1.x*s.x+b.col2.x*s.y);m=f.position.y+(b.col1.y*s.x+b.col2.y*s.y);J=(e- >+x)*J+(m-C)*T}else{e=this.m_proxyA.GetVertex(b.indexA[0]);m=this.m_proxyA.GetVertex(b.indexA[1]);x=this.m_proxyB.GetVertex(b.indexB[0]);C=this.m_proxyB.GetVertex(b.indexB[1]);w.MulX(f,v);v=w.MulMV(f.R,w.SubtractVV(m,e));w.MulX(r,t);J=w.MulMV(r.R,w.SubtractVV(C,x));r=v.x*v.x+v.y*v.y;t=J.x*J.x+J.y*J.y;b=w.SubtractVV(J,v);f=v.x*b.x+v.y*b.y;b=J.x*b.x+J.y*b.y;v=v.x*J.x+v.y*J.y;T=r*t-v*v;J=0;if(T!=0)J=w.Clamp((v*b-f*t)/T,0,1);if((v*J+b)/t<0)J=w.Clamp((v-f)/r,0,1);v=new p;v.x=e.x+J*(m.x-e.x);v.y=e.y+J*(m.y- >+e.y);t=new p;t.x=x.x+J*(C.x-x.x);t.y=x.y+J*(C.y-x.y);if(J==0||J==1){this.m_type=d.e_faceB;this.m_axis=w.CrossVF(w.SubtractVV(C,x),1);this.m_axis.Normalize();this.m_localPoint=t}else{this.m_type=d.e_faceA;this.m_axis=w.CrossVF(w.SubtractVV(m,e),1);this.m_localPoint=v}}J<0&&this.m_axis.NegativeSelf()}};d.prototype.Evaluate=function(b,e){var f,m,r=0;switch(this.m_type){case d.e_points:f=w.MulTMV(b.R,this.m_axis);m=w.MulTMV(e.R,this.m_axis.GetNegative());f=this.m_proxyA.GetSupportVertex(f);m=this.m_proxyB.GetSupportVertex(m); >+f=w.MulX(b,f);m=w.MulX(e,m);return r=(m.x-f.x)*this.m_axis.x+(m.y-f.y)*this.m_axis.y;case d.e_faceA:r=w.MulMV(b.R,this.m_axis);f=w.MulX(b,this.m_localPoint);m=w.MulTMV(e.R,r.GetNegative());m=this.m_proxyB.GetSupportVertex(m);m=w.MulX(e,m);return r=(m.x-f.x)*r.x+(m.y-f.y)*r.y;case d.e_faceB:r=w.MulMV(e.R,this.m_axis);m=w.MulX(e,this.m_localPoint);f=w.MulTMV(b.R,r.GetNegative());f=this.m_proxyA.GetSupportVertex(f);f=w.MulX(b,f);return r=(f.x-m.x)*r.x+(f.y-m.y)*r.y;default:y.b2Assert(false);return 0}}; >+Box2D.postDefs.push(function(){Box2D.Collision.b2SeparationFunction.e_points=1;Box2D.Collision.b2SeparationFunction.e_faceA=2;Box2D.Collision.b2SeparationFunction.e_faceB=4});h.b2Simplex=function(){this.m_v1=new j;this.m_v2=new j;this.m_v3=new j;this.m_vertices=new Vector(3)};h.prototype.b2Simplex=function(){this.m_vertices[0]=this.m_v1;this.m_vertices[1]=this.m_v2;this.m_vertices[2]=this.m_v3};h.prototype.ReadCache=function(b,e,f,m,r){y.b2Assert(0<=b.count&&b.count<=3);var s,v;this.m_count=b.count; >+for(var t=this.m_vertices,x=0;x<this.m_count;x++){var C=t[x];C.indexA=b.indexA[x];C.indexB=b.indexB[x];s=e.GetVertex(C.indexA);v=m.GetVertex(C.indexB);C.wA=w.MulX(f,s);C.wB=w.MulX(r,v);C.w=w.SubtractVV(C.wB,C.wA);C.a=0}if(this.m_count>1){b=b.metric;s=this.GetMetric();if(s<0.5*b||2*b<s||s<Number.MIN_VALUE)this.m_count=0}if(this.m_count==0){C=t[0];C.indexA=0;C.indexB=0;s=e.GetVertex(0);v=m.GetVertex(0);C.wA=w.MulX(f,s);C.wB=w.MulX(r,v);C.w=w.SubtractVV(C.wB,C.wA);this.m_count=1}};h.prototype.WriteCache= >+function(b){b.metric=this.GetMetric();b.count=Box2D.parseUInt(this.m_count);for(var e=this.m_vertices,f=0;f<this.m_count;f++){b.indexA[f]=Box2D.parseUInt(e[f].indexA);b.indexB[f]=Box2D.parseUInt(e[f].indexB)}};h.prototype.GetSearchDirection=function(){switch(this.m_count){case 1:return this.m_v1.w.GetNegative();case 2:var b=w.SubtractVV(this.m_v2.w,this.m_v1.w);return w.CrossVV(b,this.m_v1.w.GetNegative())>0?w.CrossFV(1,b):w.CrossVF(b,1);default:y.b2Assert(false);return new p}};h.prototype.GetClosestPoint= >+function(){switch(this.m_count){case 0:y.b2Assert(false);return new p;case 1:return this.m_v1.w;case 2:return new p(this.m_v1.a*this.m_v1.w.x+this.m_v2.a*this.m_v2.w.x,this.m_v1.a*this.m_v1.w.y+this.m_v2.a*this.m_v2.w.y);default:y.b2Assert(false);return new p}};h.prototype.GetWitnessPoints=function(b,e){switch(this.m_count){case 0:y.b2Assert(false);break;case 1:b.SetV(this.m_v1.wA);e.SetV(this.m_v1.wB);break;case 2:b.x=this.m_v1.a*this.m_v1.wA.x+this.m_v2.a*this.m_v2.wA.x;b.y=this.m_v1.a*this.m_v1.wA.y+ >+this.m_v2.a*this.m_v2.wA.y;e.x=this.m_v1.a*this.m_v1.wB.x+this.m_v2.a*this.m_v2.wB.x;e.y=this.m_v1.a*this.m_v1.wB.y+this.m_v2.a*this.m_v2.wB.y;break;case 3:e.x=b.x=this.m_v1.a*this.m_v1.wA.x+this.m_v2.a*this.m_v2.wA.x+this.m_v3.a*this.m_v3.wA.x;e.y=b.y=this.m_v1.a*this.m_v1.wA.y+this.m_v2.a*this.m_v2.wA.y+this.m_v3.a*this.m_v3.wA.y;break;default:y.b2Assert(false)}};h.prototype.GetMetric=function(){switch(this.m_count){case 0:y.b2Assert(false);return 0;case 1:return 0;case 2:return w.SubtractVV(this.m_v1.w, >+this.m_v2.w).Length();case 3:return w.CrossVV(w.SubtractVV(this.m_v2.w,this.m_v1.w),w.SubtractVV(this.m_v3.w,this.m_v1.w));default:y.b2Assert(false);return 0}};h.prototype.Solve2=function(){var b=this.m_v1.w,e=this.m_v2.w,f=w.SubtractVV(e,b);b=-(b.x*f.x+b.y*f.y);if(b<=0)this.m_count=this.m_v1.a=1;else{e=e.x*f.x+e.y*f.y;if(e<=0){this.m_count=this.m_v2.a=1;this.m_v1.Set(this.m_v2)}else{f=1/(e+b);this.m_v1.a=e*f;this.m_v2.a=b*f;this.m_count=2}}};h.prototype.Solve3=function(){var b=this.m_v1.w,e=this.m_v2.w, >+f=this.m_v3.w,m=w.SubtractVV(e,b),r=w.Dot(b,m),s=w.Dot(e,m);r=-r;var v=w.SubtractVV(f,b),t=w.Dot(b,v),x=w.Dot(f,v);t=-t;var C=w.SubtractVV(f,e),J=w.Dot(e,C);C=w.Dot(f,C);J=-J;v=w.CrossVV(m,v);m=v*w.CrossVV(e,f);f=v*w.CrossVV(f,b);b=v*w.CrossVV(b,e);if(r<=0&&t<=0)this.m_count=this.m_v1.a=1;else if(s>0&&r>0&&b<=0){x=1/(s+r);this.m_v1.a=s*x;this.m_v2.a=r*x;this.m_count=2}else if(x>0&&t>0&&f<=0){s=1/(x+t);this.m_v1.a=x*s;this.m_v3.a=t*s;this.m_count=2;this.m_v2.Set(this.m_v3)}else if(s<=0&&J<=0){this.m_count= >+this.m_v2.a=1;this.m_v1.Set(this.m_v2)}else if(x<=0&&C<=0){this.m_count=this.m_v3.a=1;this.m_v1.Set(this.m_v3)}else if(C>0&&J>0&&m<=0){s=1/(C+J);this.m_v2.a=C*s;this.m_v3.a=J*s;this.m_count=2;this.m_v1.Set(this.m_v3)}else{s=1/(m+f+b);this.m_v1.a=m*s;this.m_v2.a=f*s;this.m_v3.a=b*s;this.m_count=3}};l.b2SimplexCache=function(){this.indexA=new Vector_a2j_Number(3);this.indexB=new Vector_a2j_Number(3)};j.b2SimplexVertex=function(){};j.prototype.Set=function(b){this.wA.SetV(b.wA);this.wB.SetV(b.wB);this.w.SetV(b.w); >+this.a=b.a;this.indexA=b.indexA;this.indexB=b.indexB};o.b2TimeOfImpact=function(){};o.TimeOfImpact=function(b){++o.b2_toiCalls;var e=b.proxyA,f=b.proxyB,m=b.sweepA,r=b.sweepB;y.b2Assert(m.t0==r.t0);y.b2Assert(1-m.t0>Number.MIN_VALUE);var s=e.m_radius+f.m_radius;b=b.tolerance;var v=0,t=0,x=0;o.s_cache.count=0;for(o.s_distanceInput.useRadii=false;;){m.GetTransform(o.s_xfA,v);r.GetTransform(o.s_xfB,v);o.s_distanceInput.proxyA=e;o.s_distanceInput.proxyB=f;o.s_distanceInput.transformA=o.s_xfA;o.s_distanceInput.transformB= >+o.s_xfB;W.Distance(o.s_distanceOutput,o.s_cache,o.s_distanceInput);if(o.s_distanceOutput.distance<=0){v=1;break}o.s_fcn.Initialize(o.s_cache,e,o.s_xfA,f,o.s_xfB);var C=o.s_fcn.Evaluate(o.s_xfA,o.s_xfB);if(C<=0){v=1;break}if(t==0)x=C>s?w.Max(s-b,0.75*s):w.Max(C-b,0.02*s);if(C-x<0.5*b){if(t==0){v=1;break}break}var J=v,T=v,P=1;C=C;m.GetTransform(o.s_xfA,P);r.GetTransform(o.s_xfB,P);var X=o.s_fcn.Evaluate(o.s_xfA,o.s_xfB);if(X>=x){v=1;break}for(var $=0;;){var ba=0;ba=$&1?T+(x-C)*(P-T)/(X-C):0.5*(T+P); >+m.GetTransform(o.s_xfA,ba);r.GetTransform(o.s_xfB,ba);var ca=o.s_fcn.Evaluate(o.s_xfA,o.s_xfB);if(w.Abs(ca-x)<0.025*b){J=ba;break}if(ca>x){T=ba;C=ca}else{P=ba;X=ca}++$;++o.b2_toiRootIters;if($==50)break}o.b2_toiMaxRootIters=w.Max(o.b2_toiMaxRootIters,$);if(J<(1+100*Number.MIN_VALUE)*v)break;v=J;t++;++o.b2_toiIters;if(t==1E3)break}o.b2_toiMaxIters=w.Max(o.b2_toiMaxIters,t);return v};Box2D.postDefs.push(function(){Box2D.Collision.b2TimeOfImpact.b2_toiCalls=0;Box2D.Collision.b2TimeOfImpact.b2_toiIters= >+0;Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters=0;Box2D.Collision.b2TimeOfImpact.b2_toiRootIters=0;Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters=0;Box2D.Collision.b2TimeOfImpact.s_cache=new l;Box2D.Collision.b2TimeOfImpact.s_distanceInput=new Y;Box2D.Collision.b2TimeOfImpact.s_xfA=new U;Box2D.Collision.b2TimeOfImpact.s_xfB=new U;Box2D.Collision.b2TimeOfImpact.s_fcn=new d;Box2D.Collision.b2TimeOfImpact.s_distanceOutput=new k});q.b2TOIInput=function(){this.proxyA=new z;this.proxyB=new z;this.sweepA= >+new A;this.sweepB=new A};n.b2WorldManifold=function(){this.m_normal=new p};n.prototype.b2WorldManifold=function(){this.m_points=new Vector(y.b2_maxManifoldPoints);for(var b=0;b<y.b2_maxManifoldPoints;b++)this.m_points[b]=new p};n.prototype.Initialize=function(b,e,f,m,r){if(f===undefined)f=0;if(r===undefined)r=0;if(b.m_pointCount!=0){var s=0,v,t,x=0,C=0,J=0,T=0,P=0;v=0;switch(b.m_type){case E.e_circles:t=e.R;v=b.m_localPoint;s=e.position.x+t.col1.x*v.x+t.col2.x*v.y;e=e.position.y+t.col1.y*v.x+t.col2.y* >+v.y;t=m.R;v=b.m_points[0].m_localPoint;b=m.position.x+t.col1.x*v.x+t.col2.x*v.y;m=m.position.y+t.col1.y*v.x+t.col2.y*v.y;v=b-s;t=m-e;x=v*v+t*t;if(x>Number.MIN_VALUE*Number.MIN_VALUE){x=Math.sqrt(x);this.m_normal.x=v/x;this.m_normal.y=t/x}else{this.m_normal.x=1;this.m_normal.y=0}v=e+f*this.m_normal.y;m=m-r*this.m_normal.y;this.m_points[0].x=0.5*(s+f*this.m_normal.x+(b-r*this.m_normal.x));this.m_points[0].y=0.5*(v+m);break;case E.e_faceA:t=e.R;v=b.m_localPlaneNormal;x=t.col1.x*v.x+t.col2.x*v.y;C=t.col1.y* >+v.x+t.col2.y*v.y;t=e.R;v=b.m_localPoint;J=e.position.x+t.col1.x*v.x+t.col2.x*v.y;T=e.position.y+t.col1.y*v.x+t.col2.y*v.y;this.m_normal.x=x;this.m_normal.y=C;for(s=0;s<b.m_pointCount;s++){t=m.R;v=b.m_points[s].m_localPoint;P=m.position.x+t.col1.x*v.x+t.col2.x*v.y;v=m.position.y+t.col1.y*v.x+t.col2.y*v.y;this.m_points[s].x=P+0.5*(f-(P-J)*x-(v-T)*C-r)*x;this.m_points[s].y=v+0.5*(f-(P-J)*x-(v-T)*C-r)*C}break;case E.e_faceB:t=m.R;v=b.m_localPlaneNormal;x=t.col1.x*v.x+t.col2.x*v.y;C=t.col1.y*v.x+t.col2.y* >+v.y;t=m.R;v=b.m_localPoint;J=m.position.x+t.col1.x*v.x+t.col2.x*v.y;T=m.position.y+t.col1.y*v.x+t.col2.y*v.y;this.m_normal.x=-x;this.m_normal.y=-C;for(s=0;s<b.m_pointCount;s++){t=e.R;v=b.m_points[s].m_localPoint;P=e.position.x+t.col1.x*v.x+t.col2.x*v.y;v=e.position.y+t.col1.y*v.x+t.col2.y*v.y;this.m_points[s].x=P+0.5*(r-(P-J)*x-(v-T)*C-f)*x;this.m_points[s].y=v+0.5*(r-(P-J)*x-(v-T)*C-f)*C}}}};a.ClipVertex=function(){this.v=new p;this.id=new L};a.prototype.Set=function(b){this.v.SetV(b.v);this.id.Set(b.id)}; >+c.Features=function(){};Object.defineProperty(c.prototype,"referenceEdge",{enumerable:false,configurable:true,get:function(){return this._referenceEdge}});Object.defineProperty(c.prototype,"referenceEdge",{enumerable:false,configurable:true,set:function(b){if(b===undefined)b=0;this._referenceEdge=b;this._m_id._key=this._m_id._key&4294967040|this._referenceEdge&255}});Object.defineProperty(c.prototype,"incidentEdge",{enumerable:false,configurable:true,get:function(){return this._incidentEdge}});Object.defineProperty(c.prototype, >+"incidentEdge",{enumerable:false,configurable:true,set:function(b){if(b===undefined)b=0;this._incidentEdge=b;this._m_id._key=this._m_id._key&4294902015|this._incidentEdge<<8&65280}});Object.defineProperty(c.prototype,"incidentVertex",{enumerable:false,configurable:true,get:function(){return this._incidentVertex}});Object.defineProperty(c.prototype,"incidentVertex",{enumerable:false,configurable:true,set:function(b){if(b===undefined)b=0;this._incidentVertex=b;this._m_id._key=this._m_id._key&4278255615| >+this._incidentVertex<<16&16711680}});Object.defineProperty(c.prototype,"flip",{enumerable:false,configurable:true,get:function(){return this._flip}});Object.defineProperty(c.prototype,"flip",{enumerable:false,configurable:true,set:function(b){if(b===undefined)b=0;this._flip=b;this._m_id._key=this._m_id._key&16777215|this._flip<<24&4278190080}})})(); >+(function(){var F=Box2D.Common.b2Settings,G=Box2D.Collision.Shapes.b2CircleShape,K=Box2D.Collision.Shapes.b2EdgeChainDef,y=Box2D.Collision.Shapes.b2EdgeShape,w=Box2D.Collision.Shapes.b2MassData,A=Box2D.Collision.Shapes.b2PolygonShape,U=Box2D.Collision.Shapes.b2Shape,p=Box2D.Common.Math.b2Mat22,B=Box2D.Common.Math.b2Math,Q=Box2D.Common.Math.b2Transform,V=Box2D.Common.Math.b2Vec2,M=Box2D.Collision.b2Distance,L=Box2D.Collision.b2DistanceInput,I=Box2D.Collision.b2DistanceOutput,W=Box2D.Collision.b2DistanceProxy, >+Y=Box2D.Collision.b2SimplexCache;Box2D.inherit(G,Box2D.Collision.Shapes.b2Shape);G.prototype.__super=Box2D.Collision.Shapes.b2Shape.prototype;G.b2CircleShape=function(){Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this,arguments);this.m_p=new V};G.prototype.Copy=function(){var k=new G;k.Set(this);return k};G.prototype.Set=function(k){this.__super.Set.call(this,k);if(Box2D.is(k,G))this.m_p.SetV((k instanceof G?k:null).m_p)};G.prototype.TestPoint=function(k,z){var u=k.R,D=k.position.x+(u.col1.x*this.m_p.x+ >+u.col2.x*this.m_p.y);u=k.position.y+(u.col1.y*this.m_p.x+u.col2.y*this.m_p.y);D=z.x-D;u=z.y-u;return D*D+u*u<=this.m_radius*this.m_radius};G.prototype.RayCast=function(k,z,u){var D=u.R,H=z.p1.x-(u.position.x+(D.col1.x*this.m_p.x+D.col2.x*this.m_p.y));u=z.p1.y-(u.position.y+(D.col1.y*this.m_p.x+D.col2.y*this.m_p.y));D=z.p2.x-z.p1.x;var O=z.p2.y-z.p1.y,E=H*D+u*O,R=D*D+O*O,N=E*E-R*(H*H+u*u-this.m_radius*this.m_radius);if(N<0||R<Number.MIN_VALUE)return false;E=-(E+Math.sqrt(N));if(0<=E&&E<=z.maxFraction* >+R){E/=R;k.fraction=E;k.normal.x=H+E*D;k.normal.y=u+E*O;k.normal.Normalize();return true}return false};G.prototype.ComputeAABB=function(k,z){var u=z.R,D=z.position.x+(u.col1.x*this.m_p.x+u.col2.x*this.m_p.y);u=z.position.y+(u.col1.y*this.m_p.x+u.col2.y*this.m_p.y);k.lowerBound.Set(D-this.m_radius,u-this.m_radius);k.upperBound.Set(D+this.m_radius,u+this.m_radius)};G.prototype.ComputeMass=function(k,z){if(z===undefined)z=0;k.mass=z*F.b2_pi*this.m_radius*this.m_radius;k.center.SetV(this.m_p);k.I=k.mass* >+(0.5*this.m_radius*this.m_radius+(this.m_p.x*this.m_p.x+this.m_p.y*this.m_p.y))};G.prototype.ComputeSubmergedArea=function(k,z,u,D){if(z===undefined)z=0;u=B.MulX(u,this.m_p);var H=-(B.Dot(k,u)-z);if(H<-this.m_radius+Number.MIN_VALUE)return 0;if(H>this.m_radius){D.SetV(u);return Math.PI*this.m_radius*this.m_radius}z=this.m_radius*this.m_radius;var O=H*H;H=z*(Math.asin(H/this.m_radius)+Math.PI/2)+H*Math.sqrt(z-O);z=-2/3*Math.pow(z-O,1.5)/H;D.x=u.x+k.x*z;D.y=u.y+k.y*z;return H};G.prototype.GetLocalPosition= >+function(){return this.m_p};G.prototype.SetLocalPosition=function(k){this.m_p.SetV(k)};G.prototype.GetRadius=function(){return this.m_radius};G.prototype.SetRadius=function(k){if(k===undefined)k=0;this.m_radius=k};G.prototype.b2CircleShape=function(k){if(k===undefined)k=0;this.__super.b2Shape.call(this);this.m_type=U.e_circleShape;this.m_radius=k};K.b2EdgeChainDef=function(){};K.prototype.b2EdgeChainDef=function(){this.vertexCount=0;this.isALoop=true;this.vertices=[]};Box2D.inherit(y,Box2D.Collision.Shapes.b2Shape); >+y.prototype.__super=Box2D.Collision.Shapes.b2Shape.prototype;y.b2EdgeShape=function(){Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this,arguments);this.s_supportVec=new V;this.m_v1=new V;this.m_v2=new V;this.m_coreV1=new V;this.m_coreV2=new V;this.m_normal=new V;this.m_direction=new V;this.m_cornerDir1=new V;this.m_cornerDir2=new V};y.prototype.TestPoint=function(){return false};y.prototype.RayCast=function(k,z,u){var D,H=z.p2.x-z.p1.x,O=z.p2.y-z.p1.y;D=u.R;var E=u.position.x+(D.col1.x*this.m_v1.x+ >+D.col2.x*this.m_v1.y),R=u.position.y+(D.col1.y*this.m_v1.x+D.col2.y*this.m_v1.y),N=u.position.y+(D.col1.y*this.m_v2.x+D.col2.y*this.m_v2.y)-R;u=-(u.position.x+(D.col1.x*this.m_v2.x+D.col2.x*this.m_v2.y)-E);D=100*Number.MIN_VALUE;var S=-(H*N+O*u);if(S>D){E=z.p1.x-E;var aa=z.p1.y-R;R=E*N+aa*u;if(0<=R&&R<=z.maxFraction*S){z=-H*aa+O*E;if(-D*S<=z&&z<=S*(1+D)){R/=S;k.fraction=R;z=Math.sqrt(N*N+u*u);k.normal.x=N/z;k.normal.y=u/z;return true}}}return false};y.prototype.ComputeAABB=function(k,z){var u=z.R, >+D=z.position.x+(u.col1.x*this.m_v1.x+u.col2.x*this.m_v1.y),H=z.position.y+(u.col1.y*this.m_v1.x+u.col2.y*this.m_v1.y),O=z.position.x+(u.col1.x*this.m_v2.x+u.col2.x*this.m_v2.y);u=z.position.y+(u.col1.y*this.m_v2.x+u.col2.y*this.m_v2.y);if(D<O){k.lowerBound.x=D;k.upperBound.x=O}else{k.lowerBound.x=O;k.upperBound.x=D}if(H<u){k.lowerBound.y=H;k.upperBound.y=u}else{k.lowerBound.y=u;k.upperBound.y=H}};y.prototype.ComputeMass=function(k){k.mass=0;k.center.SetV(this.m_v1);k.I=0};y.prototype.ComputeSubmergedArea= >+function(k,z,u,D){if(z===undefined)z=0;var H=new V(k.x*z,k.y*z),O=B.MulX(u,this.m_v1);u=B.MulX(u,this.m_v2);var E=B.Dot(k,O)-z;k=B.Dot(k,u)-z;if(E>0)if(k>0)return 0;else{O.x=-k/(E-k)*O.x+E/(E-k)*u.x;O.y=-k/(E-k)*O.y+E/(E-k)*u.y}else if(k>0){u.x=-k/(E-k)*O.x+E/(E-k)*u.x;u.y=-k/(E-k)*O.y+E/(E-k)*u.y}D.x=(H.x+O.x+u.x)/3;D.y=(H.y+O.y+u.y)/3;return 0.5*((O.x-H.x)*(u.y-H.y)-(O.y-H.y)*(u.x-H.x))};y.prototype.GetLength=function(){return this.m_length};y.prototype.GetVertex1=function(){return this.m_v1};y.prototype.GetVertex2= >+function(){return this.m_v2};y.prototype.GetCoreVertex1=function(){return this.m_coreV1};y.prototype.GetCoreVertex2=function(){return this.m_coreV2};y.prototype.GetNormalVector=function(){return this.m_normal};y.prototype.GetDirectionVector=function(){return this.m_direction};y.prototype.GetCorner1Vector=function(){return this.m_cornerDir1};y.prototype.GetCorner2Vector=function(){return this.m_cornerDir2};y.prototype.Corner1IsConvex=function(){return this.m_cornerConvex1};y.prototype.Corner2IsConvex= >+function(){return this.m_cornerConvex2};y.prototype.GetFirstVertex=function(k){var z=k.R;return new V(k.position.x+(z.col1.x*this.m_coreV1.x+z.col2.x*this.m_coreV1.y),k.position.y+(z.col1.y*this.m_coreV1.x+z.col2.y*this.m_coreV1.y))};y.prototype.GetNextEdge=function(){return this.m_nextEdge};y.prototype.GetPrevEdge=function(){return this.m_prevEdge};y.prototype.Support=function(k,z,u){if(z===undefined)z=0;if(u===undefined)u=0;var D=k.R,H=k.position.x+(D.col1.x*this.m_coreV1.x+D.col2.x*this.m_coreV1.y), >+O=k.position.y+(D.col1.y*this.m_coreV1.x+D.col2.y*this.m_coreV1.y),E=k.position.x+(D.col1.x*this.m_coreV2.x+D.col2.x*this.m_coreV2.y);k=k.position.y+(D.col1.y*this.m_coreV2.x+D.col2.y*this.m_coreV2.y);if(H*z+O*u>E*z+k*u){this.s_supportVec.x=H;this.s_supportVec.y=O}else{this.s_supportVec.x=E;this.s_supportVec.y=k}return this.s_supportVec};y.prototype.b2EdgeShape=function(k,z){this.__super.b2Shape.call(this);this.m_type=U.e_edgeShape;this.m_nextEdge=this.m_prevEdge=null;this.m_v1=k;this.m_v2=z;this.m_direction.Set(this.m_v2.x- >+this.m_v1.x,this.m_v2.y-this.m_v1.y);this.m_length=this.m_direction.Normalize();this.m_normal.Set(this.m_direction.y,-this.m_direction.x);this.m_coreV1.Set(-F.b2_toiSlop*(this.m_normal.x-this.m_direction.x)+this.m_v1.x,-F.b2_toiSlop*(this.m_normal.y-this.m_direction.y)+this.m_v1.y);this.m_coreV2.Set(-F.b2_toiSlop*(this.m_normal.x+this.m_direction.x)+this.m_v2.x,-F.b2_toiSlop*(this.m_normal.y+this.m_direction.y)+this.m_v2.y);this.m_cornerDir1=this.m_normal;this.m_cornerDir2.Set(-this.m_normal.x,-this.m_normal.y)}; >+y.prototype.SetPrevEdge=function(k,z,u,D){this.m_prevEdge=k;this.m_coreV1=z;this.m_cornerDir1=u;this.m_cornerConvex1=D};y.prototype.SetNextEdge=function(k,z,u,D){this.m_nextEdge=k;this.m_coreV2=z;this.m_cornerDir2=u;this.m_cornerConvex2=D};w.b2MassData=function(){this.mass=0;this.center=new V(0,0);this.I=0};Box2D.inherit(A,Box2D.Collision.Shapes.b2Shape);A.prototype.__super=Box2D.Collision.Shapes.b2Shape.prototype;A.b2PolygonShape=function(){Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this,arguments)}; >+A.prototype.Copy=function(){var k=new A;k.Set(this);return k};A.prototype.Set=function(k){this.__super.Set.call(this,k);if(Box2D.is(k,A)){k=k instanceof A?k:null;this.m_centroid.SetV(k.m_centroid);this.m_vertexCount=k.m_vertexCount;this.Reserve(this.m_vertexCount);for(var z=0;z<this.m_vertexCount;z++){this.m_vertices[z].SetV(k.m_vertices[z]);this.m_normals[z].SetV(k.m_normals[z])}}};A.prototype.SetAsArray=function(k,z){if(z===undefined)z=0;var u=new Vector,D=0,H;for(D=0;D<k.length;++D){H=k[D];u.push(H)}this.SetAsVector(u, >+z)};A.AsArray=function(k,z){if(z===undefined)z=0;var u=new A;u.SetAsArray(k,z);return u};A.prototype.SetAsVector=function(k,z){if(z===undefined)z=0;if(z==0)z=k.length;F.b2Assert(2<=z);this.m_vertexCount=z;this.Reserve(z);var u=0;for(u=0;u<this.m_vertexCount;u++)this.m_vertices[u].SetV(k[u]);for(u=0;u<this.m_vertexCount;++u){var D=parseInt(u),H=parseInt(u+1<this.m_vertexCount?u+1:0);D=B.SubtractVV(this.m_vertices[H],this.m_vertices[D]);F.b2Assert(D.LengthSquared()>Number.MIN_VALUE);this.m_normals[u].SetV(B.CrossVF(D, >+1));this.m_normals[u].Normalize()}this.m_centroid=A.ComputeCentroid(this.m_vertices,this.m_vertexCount)};A.AsVector=function(k,z){if(z===undefined)z=0;var u=new A;u.SetAsVector(k,z);return u};A.prototype.SetAsBox=function(k,z){if(k===undefined)k=0;if(z===undefined)z=0;this.m_vertexCount=4;this.Reserve(4);this.m_vertices[0].Set(-k,-z);this.m_vertices[1].Set(k,-z);this.m_vertices[2].Set(k,z);this.m_vertices[3].Set(-k,z);this.m_normals[0].Set(0,-1);this.m_normals[1].Set(1,0);this.m_normals[2].Set(0, >+1);this.m_normals[3].Set(-1,0);this.m_centroid.SetZero()};A.AsBox=function(k,z){if(k===undefined)k=0;if(z===undefined)z=0;var u=new A;u.SetAsBox(k,z);return u};A.prototype.SetAsOrientedBox=function(k,z,u,D){if(k===undefined)k=0;if(z===undefined)z=0;if(u===undefined)u=null;if(D===undefined)D=0;this.m_vertexCount=4;this.Reserve(4);this.m_vertices[0].Set(-k,-z);this.m_vertices[1].Set(k,-z);this.m_vertices[2].Set(k,z);this.m_vertices[3].Set(-k,z);this.m_normals[0].Set(0,-1);this.m_normals[1].Set(1,0); >+this.m_normals[2].Set(0,1);this.m_normals[3].Set(-1,0);this.m_centroid=u;k=new Q;k.position=u;k.R.Set(D);for(u=0;u<this.m_vertexCount;++u){this.m_vertices[u]=B.MulX(k,this.m_vertices[u]);this.m_normals[u]=B.MulMV(k.R,this.m_normals[u])}};A.AsOrientedBox=function(k,z,u,D){if(k===undefined)k=0;if(z===undefined)z=0;if(u===undefined)u=null;if(D===undefined)D=0;var H=new A;H.SetAsOrientedBox(k,z,u,D);return H};A.prototype.SetAsEdge=function(k,z){this.m_vertexCount=2;this.Reserve(2);this.m_vertices[0].SetV(k); >+this.m_vertices[1].SetV(z);this.m_centroid.x=0.5*(k.x+z.x);this.m_centroid.y=0.5*(k.y+z.y);this.m_normals[0]=B.CrossVF(B.SubtractVV(z,k),1);this.m_normals[0].Normalize();this.m_normals[1].x=-this.m_normals[0].x;this.m_normals[1].y=-this.m_normals[0].y};A.AsEdge=function(k,z){var u=new A;u.SetAsEdge(k,z);return u};A.prototype.TestPoint=function(k,z){var u;u=k.R;for(var D=z.x-k.position.x,H=z.y-k.position.y,O=D*u.col1.x+H*u.col1.y,E=D*u.col2.x+H*u.col2.y,R=0;R<this.m_vertexCount;++R){u=this.m_vertices[R]; >+D=O-u.x;H=E-u.y;u=this.m_normals[R];if(u.x*D+u.y*H>0)return false}return true};A.prototype.RayCast=function(k,z,u){var D=0,H=z.maxFraction,O=0,E=0,R,N;O=z.p1.x-u.position.x;E=z.p1.y-u.position.y;R=u.R;var S=O*R.col1.x+E*R.col1.y,aa=O*R.col2.x+E*R.col2.y;O=z.p2.x-u.position.x;E=z.p2.y-u.position.y;R=u.R;z=O*R.col1.x+E*R.col1.y-S;R=O*R.col2.x+E*R.col2.y-aa;for(var Z=parseInt(-1),d=0;d<this.m_vertexCount;++d){N=this.m_vertices[d];O=N.x-S;E=N.y-aa;N=this.m_normals[d];O=N.x*O+N.y*E;E=N.x*z+N.y*R;if(E== >+0){if(O<0)return false}else if(E<0&&O<D*E){D=O/E;Z=d}else if(E>0&&O<H*E)H=O/E;if(H<D-Number.MIN_VALUE)return false}if(Z>=0){k.fraction=D;R=u.R;N=this.m_normals[Z];k.normal.x=R.col1.x*N.x+R.col2.x*N.y;k.normal.y=R.col1.y*N.x+R.col2.y*N.y;return true}return false};A.prototype.ComputeAABB=function(k,z){for(var u=z.R,D=this.m_vertices[0],H=z.position.x+(u.col1.x*D.x+u.col2.x*D.y),O=z.position.y+(u.col1.y*D.x+u.col2.y*D.y),E=H,R=O,N=1;N<this.m_vertexCount;++N){D=this.m_vertices[N];var S=z.position.x+(u.col1.x* >+D.x+u.col2.x*D.y);D=z.position.y+(u.col1.y*D.x+u.col2.y*D.y);H=H<S?H:S;O=O<D?O:D;E=E>S?E:S;R=R>D?R:D}k.lowerBound.x=H-this.m_radius;k.lowerBound.y=O-this.m_radius;k.upperBound.x=E+this.m_radius;k.upperBound.y=R+this.m_radius};A.prototype.ComputeMass=function(k,z){if(z===undefined)z=0;if(this.m_vertexCount==2){k.center.x=0.5*(this.m_vertices[0].x+this.m_vertices[1].x);k.center.y=0.5*(this.m_vertices[0].y+this.m_vertices[1].y);k.mass=0;k.I=0}else{for(var u=0,D=0,H=0,O=0,E=1/3,R=0;R<this.m_vertexCount;++R){var N= >+this.m_vertices[R],S=R+1<this.m_vertexCount?this.m_vertices[parseInt(R+1)]:this.m_vertices[0],aa=N.x-0,Z=N.y-0,d=S.x-0,h=S.y-0,l=aa*h-Z*d,j=0.5*l;H+=j;u+=j*E*(0+N.x+S.x);D+=j*E*(0+N.y+S.y);N=aa;Z=Z;d=d;h=h;O+=l*(E*(0.25*(N*N+d*N+d*d)+(0*N+0*d))+0+(E*(0.25*(Z*Z+h*Z+h*h)+(0*Z+0*h))+0))}k.mass=z*H;u*=1/H;D*=1/H;k.center.Set(u,D);k.I=z*O}};A.prototype.ComputeSubmergedArea=function(k,z,u,D){if(z===undefined)z=0;var H=B.MulTMV(u.R,k),O=z-B.Dot(k,u.position),E=new Vector_a2j_Number,R=0,N=parseInt(-1);z= >+parseInt(-1);var S=false;for(k=k=0;k<this.m_vertexCount;++k){E[k]=B.Dot(H,this.m_vertices[k])-O;var aa=E[k]<-Number.MIN_VALUE;if(k>0)if(aa){if(!S){N=k-1;R++}}else if(S){z=k-1;R++}S=aa}switch(R){case 0:if(S){k=new w;this.ComputeMass(k,1);D.SetV(B.MulX(u,k.center));return k.mass}else return 0;case 1:if(N==-1)N=this.m_vertexCount-1;else z=this.m_vertexCount-1}k=parseInt((N+1)%this.m_vertexCount);H=parseInt((z+1)%this.m_vertexCount);O=(0-E[N])/(E[k]-E[N]);E=(0-E[z])/(E[H]-E[z]);N=new V(this.m_vertices[N].x* >+(1-O)+this.m_vertices[k].x*O,this.m_vertices[N].y*(1-O)+this.m_vertices[k].y*O);z=new V(this.m_vertices[z].x*(1-E)+this.m_vertices[H].x*E,this.m_vertices[z].y*(1-E)+this.m_vertices[H].y*E);E=0;O=new V;R=this.m_vertices[k];for(k=k;k!=H;){k=(k+1)%this.m_vertexCount;S=k==H?z:this.m_vertices[k];aa=0.5*((R.x-N.x)*(S.y-N.y)-(R.y-N.y)*(S.x-N.x));E+=aa;O.x+=aa*(N.x+R.x+S.x)/3;O.y+=aa*(N.y+R.y+S.y)/3;R=S}O.Multiply(1/E);D.SetV(B.MulX(u,O));return E};A.prototype.GetVertexCount=function(){return this.m_vertexCount}; >+A.prototype.GetVertices=function(){return this.m_vertices};A.prototype.GetNormals=function(){return this.m_normals};A.prototype.GetSupport=function(k){for(var z=0,u=this.m_vertices[0].x*k.x+this.m_vertices[0].y*k.y,D=1;D<this.m_vertexCount;++D){var H=this.m_vertices[D].x*k.x+this.m_vertices[D].y*k.y;if(H>u){z=D;u=H}}return z};A.prototype.GetSupportVertex=function(k){for(var z=0,u=this.m_vertices[0].x*k.x+this.m_vertices[0].y*k.y,D=1;D<this.m_vertexCount;++D){var H=this.m_vertices[D].x*k.x+this.m_vertices[D].y* >+k.y;if(H>u){z=D;u=H}}return this.m_vertices[z]};A.prototype.Validate=function(){return false};A.prototype.b2PolygonShape=function(){this.__super.b2Shape.call(this);this.m_type=U.e_polygonShape;this.m_centroid=new V;this.m_vertices=new Vector;this.m_normals=new Vector};A.prototype.Reserve=function(k){if(k===undefined)k=0;for(var z=parseInt(this.m_vertices.length);z<k;z++){this.m_vertices[z]=new V;this.m_normals[z]=new V}};A.ComputeCentroid=function(k,z){if(z===undefined)z=0;for(var u=new V,D=0,H=1/ >+3,O=0;O<z;++O){var E=k[O],R=O+1<z?k[parseInt(O+1)]:k[0],N=0.5*((E.x-0)*(R.y-0)-(E.y-0)*(R.x-0));D+=N;u.x+=N*H*(0+E.x+R.x);u.y+=N*H*(0+E.y+R.y)}u.x*=1/D;u.y*=1/D;return u};A.ComputeOBB=function(k,z,u){if(u===undefined)u=0;var D=0,H=new Vector(u+1);for(D=0;D<u;++D)H[D]=z[D];H[u]=H[0];z=Number.MAX_VALUE;for(D=1;D<=u;++D){var O=H[parseInt(D-1)],E=H[D].x-O.x,R=H[D].y-O.y,N=Math.sqrt(E*E+R*R);E/=N;R/=N;for(var S=-R,aa=E,Z=N=Number.MAX_VALUE,d=-Number.MAX_VALUE,h=-Number.MAX_VALUE,l=0;l<u;++l){var j=H[l].x- >+O.x,o=H[l].y-O.y,q=E*j+R*o;j=S*j+aa*o;if(q<N)N=q;if(j<Z)Z=j;if(q>d)d=q;if(j>h)h=j}l=(d-N)*(h-Z);if(l<0.95*z){z=l;k.R.col1.x=E;k.R.col1.y=R;k.R.col2.x=S;k.R.col2.y=aa;E=0.5*(N+d);R=0.5*(Z+h);S=k.R;k.center.x=O.x+(S.col1.x*E+S.col2.x*R);k.center.y=O.y+(S.col1.y*E+S.col2.y*R);k.extents.x=0.5*(d-N);k.extents.y=0.5*(h-Z)}}};Box2D.postDefs.push(function(){Box2D.Collision.Shapes.b2PolygonShape.s_mat=new p});U.b2Shape=function(){};U.prototype.Copy=function(){return null};U.prototype.Set=function(k){this.m_radius= >+k.m_radius};U.prototype.GetType=function(){return this.m_type};U.prototype.TestPoint=function(){return false};U.prototype.RayCast=function(){return false};U.prototype.ComputeAABB=function(){};U.prototype.ComputeMass=function(){};U.prototype.ComputeSubmergedArea=function(){return 0};U.TestOverlap=function(k,z,u,D){var H=new L;H.proxyA=new W;H.proxyA.Set(k);H.proxyB=new W;H.proxyB.Set(u);H.transformA=z;H.transformB=D;H.useRadii=true;k=new Y;k.count=0;z=new I;M.Distance(z,k,H);return z.distance<10*Number.MIN_VALUE}; >+U.prototype.b2Shape=function(){this.m_type=U.e_unknownShape;this.m_radius=F.b2_linearSlop};Box2D.postDefs.push(function(){Box2D.Collision.Shapes.b2Shape.e_unknownShape=parseInt(-1);Box2D.Collision.Shapes.b2Shape.e_circleShape=0;Box2D.Collision.Shapes.b2Shape.e_polygonShape=1;Box2D.Collision.Shapes.b2Shape.e_edgeShape=2;Box2D.Collision.Shapes.b2Shape.e_shapeTypeCount=3;Box2D.Collision.Shapes.b2Shape.e_hitCollide=1;Box2D.Collision.Shapes.b2Shape.e_missCollide=0;Box2D.Collision.Shapes.b2Shape.e_startsInsideCollide= >+parseInt(-1)})})(); >+(function(){var F=Box2D.Common.b2Color,G=Box2D.Common.b2Settings,K=Box2D.Common.Math.b2Math;F.b2Color=function(){this._b=this._g=this._r=0};F.prototype.b2Color=function(y,w,A){if(y===undefined)y=0;if(w===undefined)w=0;if(A===undefined)A=0;this._r=Box2D.parseUInt(255*K.Clamp(y,0,1));this._g=Box2D.parseUInt(255*K.Clamp(w,0,1));this._b=Box2D.parseUInt(255*K.Clamp(A,0,1))};F.prototype.Set=function(y,w,A){if(y===undefined)y=0;if(w===undefined)w=0;if(A===undefined)A=0;this._r=Box2D.parseUInt(255*K.Clamp(y, >+0,1));this._g=Box2D.parseUInt(255*K.Clamp(w,0,1));this._b=Box2D.parseUInt(255*K.Clamp(A,0,1))};Object.defineProperty(F.prototype,"r",{enumerable:false,configurable:true,set:function(y){if(y===undefined)y=0;this._r=Box2D.parseUInt(255*K.Clamp(y,0,1))}});Object.defineProperty(F.prototype,"g",{enumerable:false,configurable:true,set:function(y){if(y===undefined)y=0;this._g=Box2D.parseUInt(255*K.Clamp(y,0,1))}});Object.defineProperty(F.prototype,"b",{enumerable:false,configurable:true,set:function(y){if(y=== >+undefined)y=0;this._b=Box2D.parseUInt(255*K.Clamp(y,0,1))}});Object.defineProperty(F.prototype,"color",{enumerable:false,configurable:true,get:function(){return this._r<<16|this._g<<8|this._b}});G.b2Settings=function(){};G.b2MixFriction=function(y,w){if(y===undefined)y=0;if(w===undefined)w=0;return Math.sqrt(y*w)};G.b2MixRestitution=function(y,w){if(y===undefined)y=0;if(w===undefined)w=0;return y>w?y:w};G.b2Assert=function(y){if(!y)throw"Assertion Failed";};Box2D.postDefs.push(function(){Box2D.Common.b2Settings.VERSION= >+"2.1alpha";Box2D.Common.b2Settings.USHRT_MAX=65535;Box2D.Common.b2Settings.b2_pi=Math.PI;Box2D.Common.b2Settings.b2_maxManifoldPoints=2;Box2D.Common.b2Settings.b2_aabbExtension=0.1;Box2D.Common.b2Settings.b2_aabbMultiplier=2;Box2D.Common.b2Settings.b2_polygonRadius=2*G.b2_linearSlop;Box2D.Common.b2Settings.b2_linearSlop=0.0050;Box2D.Common.b2Settings.b2_angularSlop=2/180*G.b2_pi;Box2D.Common.b2Settings.b2_toiSlop=8*G.b2_linearSlop;Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland=32;Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland= >+32;Box2D.Common.b2Settings.b2_velocityThreshold=1;Box2D.Common.b2Settings.b2_maxLinearCorrection=0.2;Box2D.Common.b2Settings.b2_maxAngularCorrection=8/180*G.b2_pi;Box2D.Common.b2Settings.b2_maxTranslation=2;Box2D.Common.b2Settings.b2_maxTranslationSquared=G.b2_maxTranslation*G.b2_maxTranslation;Box2D.Common.b2Settings.b2_maxRotation=0.5*G.b2_pi;Box2D.Common.b2Settings.b2_maxRotationSquared=G.b2_maxRotation*G.b2_maxRotation;Box2D.Common.b2Settings.b2_contactBaumgarte=0.2;Box2D.Common.b2Settings.b2_timeToSleep= >+0.5;Box2D.Common.b2Settings.b2_linearSleepTolerance=0.01;Box2D.Common.b2Settings.b2_angularSleepTolerance=2/180*G.b2_pi})})(); >+(function(){var F=Box2D.Common.Math.b2Mat22,G=Box2D.Common.Math.b2Mat33,K=Box2D.Common.Math.b2Math,y=Box2D.Common.Math.b2Sweep,w=Box2D.Common.Math.b2Transform,A=Box2D.Common.Math.b2Vec2,U=Box2D.Common.Math.b2Vec3;F.b2Mat22=function(){this.col1=new A;this.col2=new A};F.prototype.b2Mat22=function(){this.SetIdentity()};F.FromAngle=function(p){if(p===undefined)p=0;var B=new F;B.Set(p);return B};F.FromVV=function(p,B){var Q=new F;Q.SetVV(p,B);return Q};F.prototype.Set=function(p){if(p===undefined)p=0; >+var B=Math.cos(p);p=Math.sin(p);this.col1.x=B;this.col2.x=-p;this.col1.y=p;this.col2.y=B};F.prototype.SetVV=function(p,B){this.col1.SetV(p);this.col2.SetV(B)};F.prototype.Copy=function(){var p=new F;p.SetM(this);return p};F.prototype.SetM=function(p){this.col1.SetV(p.col1);this.col2.SetV(p.col2)};F.prototype.AddM=function(p){this.col1.x+=p.col1.x;this.col1.y+=p.col1.y;this.col2.x+=p.col2.x;this.col2.y+=p.col2.y};F.prototype.SetIdentity=function(){this.col1.x=1;this.col2.x=0;this.col1.y=0;this.col2.y= >+1};F.prototype.SetZero=function(){this.col1.x=0;this.col2.x=0;this.col1.y=0;this.col2.y=0};F.prototype.GetAngle=function(){return Math.atan2(this.col1.y,this.col1.x)};F.prototype.GetInverse=function(p){var B=this.col1.x,Q=this.col2.x,V=this.col1.y,M=this.col2.y,L=B*M-Q*V;if(L!=0)L=1/L;p.col1.x=L*M;p.col2.x=-L*Q;p.col1.y=-L*V;p.col2.y=L*B;return p};F.prototype.Solve=function(p,B,Q){if(B===undefined)B=0;if(Q===undefined)Q=0;var V=this.col1.x,M=this.col2.x,L=this.col1.y,I=this.col2.y,W=V*I-M*L;if(W!= >+0)W=1/W;p.x=W*(I*B-M*Q);p.y=W*(V*Q-L*B);return p};F.prototype.Abs=function(){this.col1.Abs();this.col2.Abs()};G.b2Mat33=function(){this.col1=new U;this.col2=new U;this.col3=new U};G.prototype.b2Mat33=function(p,B,Q){if(p===undefined)p=null;if(B===undefined)B=null;if(Q===undefined)Q=null;if(!p&&!B&&!Q){this.col1.SetZero();this.col2.SetZero();this.col3.SetZero()}else{this.col1.SetV(p);this.col2.SetV(B);this.col3.SetV(Q)}};G.prototype.SetVVV=function(p,B,Q){this.col1.SetV(p);this.col2.SetV(B);this.col3.SetV(Q)}; >+G.prototype.Copy=function(){return new G(this.col1,this.col2,this.col3)};G.prototype.SetM=function(p){this.col1.SetV(p.col1);this.col2.SetV(p.col2);this.col3.SetV(p.col3)};G.prototype.AddM=function(p){this.col1.x+=p.col1.x;this.col1.y+=p.col1.y;this.col1.z+=p.col1.z;this.col2.x+=p.col2.x;this.col2.y+=p.col2.y;this.col2.z+=p.col2.z;this.col3.x+=p.col3.x;this.col3.y+=p.col3.y;this.col3.z+=p.col3.z};G.prototype.SetIdentity=function(){this.col1.x=1;this.col2.x=0;this.col3.x=0;this.col1.y=0;this.col2.y= >+1;this.col3.y=0;this.col1.z=0;this.col2.z=0;this.col3.z=1};G.prototype.SetZero=function(){this.col1.x=0;this.col2.x=0;this.col3.x=0;this.col1.y=0;this.col2.y=0;this.col3.y=0;this.col1.z=0;this.col2.z=0;this.col3.z=0};G.prototype.Solve22=function(p,B,Q){if(B===undefined)B=0;if(Q===undefined)Q=0;var V=this.col1.x,M=this.col2.x,L=this.col1.y,I=this.col2.y,W=V*I-M*L;if(W!=0)W=1/W;p.x=W*(I*B-M*Q);p.y=W*(V*Q-L*B);return p};G.prototype.Solve33=function(p,B,Q,V){if(B===undefined)B=0;if(Q===undefined)Q=0; >+if(V===undefined)V=0;var M=this.col1.x,L=this.col1.y,I=this.col1.z,W=this.col2.x,Y=this.col2.y,k=this.col2.z,z=this.col3.x,u=this.col3.y,D=this.col3.z,H=M*(Y*D-k*u)+L*(k*z-W*D)+I*(W*u-Y*z);if(H!=0)H=1/H;p.x=H*(B*(Y*D-k*u)+Q*(k*z-W*D)+V*(W*u-Y*z));p.y=H*(M*(Q*D-V*u)+L*(V*z-B*D)+I*(B*u-Q*z));p.z=H*(M*(Y*V-k*Q)+L*(k*B-W*V)+I*(W*Q-Y*B));return p};K.b2Math=function(){};K.IsValid=function(p){if(p===undefined)p=0;return isFinite(p)};K.Dot=function(p,B){return p.x*B.x+p.y*B.y};K.CrossVV=function(p,B){return p.x* >+B.y-p.y*B.x};K.CrossVF=function(p,B){if(B===undefined)B=0;return new A(B*p.y,-B*p.x)};K.CrossFV=function(p,B){if(p===undefined)p=0;return new A(-p*B.y,p*B.x)};K.MulMV=function(p,B){return new A(p.col1.x*B.x+p.col2.x*B.y,p.col1.y*B.x+p.col2.y*B.y)};K.MulTMV=function(p,B){return new A(K.Dot(B,p.col1),K.Dot(B,p.col2))};K.MulX=function(p,B){var Q=K.MulMV(p.R,B);Q.x+=p.position.x;Q.y+=p.position.y;return Q};K.MulXT=function(p,B){var Q=K.SubtractVV(B,p.position),V=Q.x*p.R.col1.x+Q.y*p.R.col1.y;Q.y=Q.x* >+p.R.col2.x+Q.y*p.R.col2.y;Q.x=V;return Q};K.AddVV=function(p,B){return new A(p.x+B.x,p.y+B.y)};K.SubtractVV=function(p,B){return new A(p.x-B.x,p.y-B.y)};K.Distance=function(p,B){var Q=p.x-B.x,V=p.y-B.y;return Math.sqrt(Q*Q+V*V)};K.DistanceSquared=function(p,B){var Q=p.x-B.x,V=p.y-B.y;return Q*Q+V*V};K.MulFV=function(p,B){if(p===undefined)p=0;return new A(p*B.x,p*B.y)};K.AddMM=function(p,B){return F.FromVV(K.AddVV(p.col1,B.col1),K.AddVV(p.col2,B.col2))};K.MulMM=function(p,B){return F.FromVV(K.MulMV(p, >+B.col1),K.MulMV(p,B.col2))};K.MulTMM=function(p,B){var Q=new A(K.Dot(p.col1,B.col1),K.Dot(p.col2,B.col1)),V=new A(K.Dot(p.col1,B.col2),K.Dot(p.col2,B.col2));return F.FromVV(Q,V)};K.Abs=function(p){if(p===undefined)p=0;return p>0?p:-p};K.AbsV=function(p){return new A(K.Abs(p.x),K.Abs(p.y))};K.AbsM=function(p){return F.FromVV(K.AbsV(p.col1),K.AbsV(p.col2))};K.Min=function(p,B){if(p===undefined)p=0;if(B===undefined)B=0;return p<B?p:B};K.MinV=function(p,B){return new A(K.Min(p.x,B.x),K.Min(p.y,B.y))}; >+K.Max=function(p,B){if(p===undefined)p=0;if(B===undefined)B=0;return p>B?p:B};K.MaxV=function(p,B){return new A(K.Max(p.x,B.x),K.Max(p.y,B.y))};K.Clamp=function(p,B,Q){if(p===undefined)p=0;if(B===undefined)B=0;if(Q===undefined)Q=0;return p<B?B:p>Q?Q:p};K.ClampV=function(p,B,Q){return K.MaxV(B,K.MinV(p,Q))};K.Swap=function(p,B){var Q=p[0];p[0]=B[0];B[0]=Q};K.Random=function(){return Math.random()*2-1};K.RandomRange=function(p,B){if(p===undefined)p=0;if(B===undefined)B=0;var Q=Math.random();return Q= >+(B-p)*Q+p};K.NextPowerOfTwo=function(p){if(p===undefined)p=0;p|=p>>1&2147483647;p|=p>>2&1073741823;p|=p>>4&268435455;p|=p>>8&16777215;p|=p>>16&65535;return p+1};K.IsPowerOfTwo=function(p){if(p===undefined)p=0;return p>0&&(p&p-1)==0};Box2D.postDefs.push(function(){Box2D.Common.Math.b2Math.b2Vec2_zero=new A(0,0);Box2D.Common.Math.b2Math.b2Mat22_identity=F.FromVV(new A(1,0),new A(0,1));Box2D.Common.Math.b2Math.b2Transform_identity=new w(K.b2Vec2_zero,K.b2Mat22_identity)});y.b2Sweep=function(){this.localCenter= >+new A;this.c0=new A;this.c=new A};y.prototype.Set=function(p){this.localCenter.SetV(p.localCenter);this.c0.SetV(p.c0);this.c.SetV(p.c);this.a0=p.a0;this.a=p.a;this.t0=p.t0};y.prototype.Copy=function(){var p=new y;p.localCenter.SetV(this.localCenter);p.c0.SetV(this.c0);p.c.SetV(this.c);p.a0=this.a0;p.a=this.a;p.t0=this.t0;return p};y.prototype.GetTransform=function(p,B){if(B===undefined)B=0;p.position.x=(1-B)*this.c0.x+B*this.c.x;p.position.y=(1-B)*this.c0.y+B*this.c.y;p.R.Set((1-B)*this.a0+B*this.a); >+var Q=p.R;p.position.x-=Q.col1.x*this.localCenter.x+Q.col2.x*this.localCenter.y;p.position.y-=Q.col1.y*this.localCenter.x+Q.col2.y*this.localCenter.y};y.prototype.Advance=function(p){if(p===undefined)p=0;if(this.t0<p&&1-this.t0>Number.MIN_VALUE){var B=(p-this.t0)/(1-this.t0);this.c0.x=(1-B)*this.c0.x+B*this.c.x;this.c0.y=(1-B)*this.c0.y+B*this.c.y;this.a0=(1-B)*this.a0+B*this.a;this.t0=p}};w.b2Transform=function(){this.position=new A;this.R=new F};w.prototype.b2Transform=function(p,B){if(p===undefined)p= >+null;if(B===undefined)B=null;if(p){this.position.SetV(p);this.R.SetM(B)}};w.prototype.Initialize=function(p,B){this.position.SetV(p);this.R.SetM(B)};w.prototype.SetIdentity=function(){this.position.SetZero();this.R.SetIdentity()};w.prototype.Set=function(p){this.position.SetV(p.position);this.R.SetM(p.R)};w.prototype.GetAngle=function(){return Math.atan2(this.R.col1.y,this.R.col1.x)};A.b2Vec2=function(){};A.prototype.b2Vec2=function(p,B){if(p===undefined)p=0;if(B===undefined)B=0;this.x=p;this.y=B}; >+A.prototype.SetZero=function(){this.y=this.x=0};A.prototype.Set=function(p,B){if(p===undefined)p=0;if(B===undefined)B=0;this.x=p;this.y=B};A.prototype.SetV=function(p){this.x=p.x;this.y=p.y};A.prototype.GetNegative=function(){return new A(-this.x,-this.y)};A.prototype.NegativeSelf=function(){this.x=-this.x;this.y=-this.y};A.Make=function(p,B){if(p===undefined)p=0;if(B===undefined)B=0;return new A(p,B)};A.prototype.Copy=function(){return new A(this.x,this.y)};A.prototype.Add=function(p){this.x+=p.x; >+this.y+=p.y};A.prototype.Subtract=function(p){this.x-=p.x;this.y-=p.y};A.prototype.Multiply=function(p){if(p===undefined)p=0;this.x*=p;this.y*=p};A.prototype.MulM=function(p){var B=this.x;this.x=p.col1.x*B+p.col2.x*this.y;this.y=p.col1.y*B+p.col2.y*this.y};A.prototype.MulTM=function(p){var B=K.Dot(this,p.col1);this.y=K.Dot(this,p.col2);this.x=B};A.prototype.CrossVF=function(p){if(p===undefined)p=0;var B=this.x;this.x=p*this.y;this.y=-p*B};A.prototype.CrossFV=function(p){if(p===undefined)p=0;var B= >+this.x;this.x=-p*this.y;this.y=p*B};A.prototype.MinV=function(p){this.x=this.x<p.x?this.x:p.x;this.y=this.y<p.y?this.y:p.y};A.prototype.MaxV=function(p){this.x=this.x>p.x?this.x:p.x;this.y=this.y>p.y?this.y:p.y};A.prototype.Abs=function(){if(this.x<0)this.x=-this.x;if(this.y<0)this.y=-this.y};A.prototype.Length=function(){return Math.sqrt(this.x*this.x+this.y*this.y)};A.prototype.LengthSquared=function(){return this.x*this.x+this.y*this.y};A.prototype.Normalize=function(){var p=Math.sqrt(this.x*this.x+ >+this.y*this.y);if(p<Number.MIN_VALUE)return 0;var B=1/p;this.x*=B;this.y*=B;return p};A.prototype.IsValid=function(){return K.IsValid(this.x)&&K.IsValid(this.y)};U.b2Vec3=function(){};U.prototype.b2Vec3=function(p,B,Q){if(p===undefined)p=0;if(B===undefined)B=0;if(Q===undefined)Q=0;this.x=p;this.y=B;this.z=Q};U.prototype.SetZero=function(){this.x=this.y=this.z=0};U.prototype.Set=function(p,B,Q){if(p===undefined)p=0;if(B===undefined)B=0;if(Q===undefined)Q=0;this.x=p;this.y=B;this.z=Q};U.prototype.SetV= >+function(p){this.x=p.x;this.y=p.y;this.z=p.z};U.prototype.GetNegative=function(){return new U(-this.x,-this.y,-this.z)};U.prototype.NegativeSelf=function(){this.x=-this.x;this.y=-this.y;this.z=-this.z};U.prototype.Copy=function(){return new U(this.x,this.y,this.z)};U.prototype.Add=function(p){this.x+=p.x;this.y+=p.y;this.z+=p.z};U.prototype.Subtract=function(p){this.x-=p.x;this.y-=p.y;this.z-=p.z};U.prototype.Multiply=function(p){if(p===undefined)p=0;this.x*=p;this.y*=p;this.z*=p}})(); >+(function(){var F=Box2D.Common.Math.b2Math,G=Box2D.Common.Math.b2Sweep,K=Box2D.Common.Math.b2Transform,y=Box2D.Common.Math.b2Vec2,w=Box2D.Common.b2Color,A=Box2D.Common.b2Settings,U=Box2D.Collision.b2AABB,p=Box2D.Collision.b2ContactPoint,B=Box2D.Collision.b2DynamicTreeBroadPhase,Q=Box2D.Collision.b2RayCastInput,V=Box2D.Collision.b2RayCastOutput,M=Box2D.Collision.Shapes.b2CircleShape,L=Box2D.Collision.Shapes.b2EdgeShape,I=Box2D.Collision.Shapes.b2MassData,W=Box2D.Collision.Shapes.b2PolygonShape,Y=Box2D.Collision.Shapes.b2Shape, >+k=Box2D.Dynamics.b2Body,z=Box2D.Dynamics.b2BodyDef,u=Box2D.Dynamics.b2ContactFilter,D=Box2D.Dynamics.b2ContactImpulse,H=Box2D.Dynamics.b2ContactListener,O=Box2D.Dynamics.b2ContactManager,E=Box2D.Dynamics.b2DebugDraw,R=Box2D.Dynamics.b2DestructionListener,N=Box2D.Dynamics.b2FilterData,S=Box2D.Dynamics.b2Fixture,aa=Box2D.Dynamics.b2FixtureDef,Z=Box2D.Dynamics.b2Island,d=Box2D.Dynamics.b2TimeStep,h=Box2D.Dynamics.b2World,l=Box2D.Dynamics.Contacts.b2Contact,j=Box2D.Dynamics.Contacts.b2ContactFactory, >+o=Box2D.Dynamics.Contacts.b2ContactSolver,q=Box2D.Dynamics.Joints.b2Joint,n=Box2D.Dynamics.Joints.b2PulleyJoint;k.b2Body=function(){this.m_xf=new K;this.m_sweep=new G;this.m_linearVelocity=new y;this.m_force=new y};k.prototype.connectEdges=function(a,c,g){if(g===undefined)g=0;var b=Math.atan2(c.GetDirectionVector().y,c.GetDirectionVector().x);g=F.MulFV(Math.tan((b-g)*0.5),c.GetDirectionVector());g=F.SubtractVV(g,c.GetNormalVector());g=F.MulFV(A.b2_toiSlop,g);g=F.AddVV(g,c.GetVertex1());var e=F.AddVV(a.GetDirectionVector(), >+c.GetDirectionVector());e.Normalize();var f=F.Dot(a.GetDirectionVector(),c.GetNormalVector())>0;a.SetNextEdge(c,g,e,f);c.SetPrevEdge(a,g,e,f);return b};k.prototype.CreateFixture=function(a){if(this.m_world.IsLocked()==true)return null;var c=new S;c.Create(this,this.m_xf,a);this.m_flags&k.e_activeFlag&&c.CreateProxy(this.m_world.m_contactManager.m_broadPhase,this.m_xf);c.m_next=this.m_fixtureList;this.m_fixtureList=c;++this.m_fixtureCount;c.m_body=this;c.m_density>0&&this.ResetMassData();this.m_world.m_flags|= >+h.e_newFixture;return c};k.prototype.CreateFixture2=function(a,c){if(c===undefined)c=0;var g=new aa;g.shape=a;g.density=c;return this.CreateFixture(g)};k.prototype.DestroyFixture=function(a){if(this.m_world.IsLocked()!=true){for(var c=this.m_fixtureList,g=null;c!=null;){if(c==a){if(g)g.m_next=a.m_next;else this.m_fixtureList=a.m_next;break}g=c;c=c.m_next}for(c=this.m_contactList;c;){g=c.contact;c=c.next;var b=g.GetFixtureA(),e=g.GetFixtureB();if(a==b||a==e)this.m_world.m_contactManager.Destroy(g)}this.m_flags& >+k.e_activeFlag&&a.DestroyProxy(this.m_world.m_contactManager.m_broadPhase);a.Destroy();a.m_body=null;a.m_next=null;--this.m_fixtureCount;this.ResetMassData()}};k.prototype.SetPositionAndAngle=function(a,c){if(c===undefined)c=0;var g;if(this.m_world.IsLocked()!=true){this.m_xf.R.Set(c);this.m_xf.position.SetV(a);g=this.m_xf.R;var b=this.m_sweep.localCenter;this.m_sweep.c.x=g.col1.x*b.x+g.col2.x*b.y;this.m_sweep.c.y=g.col1.y*b.x+g.col2.y*b.y;this.m_sweep.c.x+=this.m_xf.position.x;this.m_sweep.c.y+= >+this.m_xf.position.y;this.m_sweep.c0.SetV(this.m_sweep.c);this.m_sweep.a0=this.m_sweep.a=c;b=this.m_world.m_contactManager.m_broadPhase;for(g=this.m_fixtureList;g;g=g.m_next)g.Synchronize(b,this.m_xf,this.m_xf);this.m_world.m_contactManager.FindNewContacts()}};k.prototype.SetTransform=function(a){this.SetPositionAndAngle(a.position,a.GetAngle())};k.prototype.GetTransform=function(){return this.m_xf};k.prototype.GetPosition=function(){return this.m_xf.position};k.prototype.SetPosition=function(a){this.SetPositionAndAngle(a, >+this.GetAngle())};k.prototype.GetAngle=function(){return this.m_sweep.a};k.prototype.SetAngle=function(a){if(a===undefined)a=0;this.SetPositionAndAngle(this.GetPosition(),a)};k.prototype.GetWorldCenter=function(){return this.m_sweep.c};k.prototype.GetLocalCenter=function(){return this.m_sweep.localCenter};k.prototype.SetLinearVelocity=function(a){this.m_type!=k.b2_staticBody&&this.m_linearVelocity.SetV(a)};k.prototype.GetLinearVelocity=function(){return this.m_linearVelocity};k.prototype.SetAngularVelocity= >+function(a){if(a===undefined)a=0;if(this.m_type!=k.b2_staticBody)this.m_angularVelocity=a};k.prototype.GetAngularVelocity=function(){return this.m_angularVelocity};k.prototype.GetDefinition=function(){var a=new z;a.type=this.GetType();a.allowSleep=(this.m_flags&k.e_allowSleepFlag)==k.e_allowSleepFlag;a.angle=this.GetAngle();a.angularDamping=this.m_angularDamping;a.angularVelocity=this.m_angularVelocity;a.fixedRotation=(this.m_flags&k.e_fixedRotationFlag)==k.e_fixedRotationFlag;a.bullet=(this.m_flags& >+k.e_bulletFlag)==k.e_bulletFlag;a.awake=(this.m_flags&k.e_awakeFlag)==k.e_awakeFlag;a.linearDamping=this.m_linearDamping;a.linearVelocity.SetV(this.GetLinearVelocity());a.position=this.GetPosition();a.userData=this.GetUserData();return a};k.prototype.ApplyForce=function(a,c){if(this.m_type==k.b2_dynamicBody){this.IsAwake()==false&&this.SetAwake(true);this.m_force.x+=a.x;this.m_force.y+=a.y;this.m_torque+=(c.x-this.m_sweep.c.x)*a.y-(c.y-this.m_sweep.c.y)*a.x}};k.prototype.ApplyTorque=function(a){if(a=== >+undefined)a=0;if(this.m_type==k.b2_dynamicBody){this.IsAwake()==false&&this.SetAwake(true);this.m_torque+=a}};k.prototype.ApplyImpulse=function(a,c){if(this.m_type==k.b2_dynamicBody){this.IsAwake()==false&&this.SetAwake(true);this.m_linearVelocity.x+=this.m_invMass*a.x;this.m_linearVelocity.y+=this.m_invMass*a.y;this.m_angularVelocity+=this.m_invI*((c.x-this.m_sweep.c.x)*a.y-(c.y-this.m_sweep.c.y)*a.x)}};k.prototype.Split=function(a){for(var c=this.GetLinearVelocity().Copy(),g=this.GetAngularVelocity(), >+b=this.GetWorldCenter(),e=this.m_world.CreateBody(this.GetDefinition()),f,m=this.m_fixtureList;m;)if(a(m)){var r=m.m_next;if(f)f.m_next=r;else this.m_fixtureList=r;this.m_fixtureCount--;m.m_next=e.m_fixtureList;e.m_fixtureList=m;e.m_fixtureCount++;m.m_body=e;m=r}else{f=m;m=m.m_next}this.ResetMassData();e.ResetMassData();f=this.GetWorldCenter();a=e.GetWorldCenter();f=F.AddVV(c,F.CrossFV(g,F.SubtractVV(f,b)));c=F.AddVV(c,F.CrossFV(g,F.SubtractVV(a,b)));this.SetLinearVelocity(f);e.SetLinearVelocity(c); >+this.SetAngularVelocity(g);e.SetAngularVelocity(g);this.SynchronizeFixtures();e.SynchronizeFixtures();return e};k.prototype.Merge=function(a){var c;for(c=a.m_fixtureList;c;){var g=c.m_next;a.m_fixtureCount--;c.m_next=this.m_fixtureList;this.m_fixtureList=c;this.m_fixtureCount++;c.m_body=e;c=g}b.m_fixtureCount=0;var b=this,e=a;b.GetWorldCenter();e.GetWorldCenter();b.GetLinearVelocity().Copy();e.GetLinearVelocity().Copy();b.GetAngularVelocity();e.GetAngularVelocity();b.ResetMassData();this.SynchronizeFixtures()}; >+k.prototype.GetMass=function(){return this.m_mass};k.prototype.GetInertia=function(){return this.m_I};k.prototype.GetMassData=function(a){a.mass=this.m_mass;a.I=this.m_I;a.center.SetV(this.m_sweep.localCenter)};k.prototype.SetMassData=function(a){A.b2Assert(this.m_world.IsLocked()==false);if(this.m_world.IsLocked()!=true)if(this.m_type==k.b2_dynamicBody){this.m_invI=this.m_I=this.m_invMass=0;this.m_mass=a.mass;if(this.m_mass<=0)this.m_mass=1;this.m_invMass=1/this.m_mass;if(a.I>0&&(this.m_flags&k.e_fixedRotationFlag)== >+0){this.m_I=a.I-this.m_mass*(a.center.x*a.center.x+a.center.y*a.center.y);this.m_invI=1/this.m_I}var c=this.m_sweep.c.Copy();this.m_sweep.localCenter.SetV(a.center);this.m_sweep.c0.SetV(F.MulX(this.m_xf,this.m_sweep.localCenter));this.m_sweep.c.SetV(this.m_sweep.c0);this.m_linearVelocity.x+=this.m_angularVelocity*-(this.m_sweep.c.y-c.y);this.m_linearVelocity.y+=this.m_angularVelocity*+(this.m_sweep.c.x-c.x)}};k.prototype.ResetMassData=function(){this.m_invI=this.m_I=this.m_invMass=this.m_mass=0;this.m_sweep.localCenter.SetZero(); >+if(!(this.m_type==k.b2_staticBody||this.m_type==k.b2_kinematicBody)){for(var a=y.Make(0,0),c=this.m_fixtureList;c;c=c.m_next)if(c.m_density!=0){var g=c.GetMassData();this.m_mass+=g.mass;a.x+=g.center.x*g.mass;a.y+=g.center.y*g.mass;this.m_I+=g.I}if(this.m_mass>0){this.m_invMass=1/this.m_mass;a.x*=this.m_invMass;a.y*=this.m_invMass}else this.m_invMass=this.m_mass=1;if(this.m_I>0&&(this.m_flags&k.e_fixedRotationFlag)==0){this.m_I-=this.m_mass*(a.x*a.x+a.y*a.y);this.m_I*=this.m_inertiaScale;A.b2Assert(this.m_I> >+0);this.m_invI=1/this.m_I}else this.m_invI=this.m_I=0;c=this.m_sweep.c.Copy();this.m_sweep.localCenter.SetV(a);this.m_sweep.c0.SetV(F.MulX(this.m_xf,this.m_sweep.localCenter));this.m_sweep.c.SetV(this.m_sweep.c0);this.m_linearVelocity.x+=this.m_angularVelocity*-(this.m_sweep.c.y-c.y);this.m_linearVelocity.y+=this.m_angularVelocity*+(this.m_sweep.c.x-c.x)}};k.prototype.GetWorldPoint=function(a){var c=this.m_xf.R;a=new y(c.col1.x*a.x+c.col2.x*a.y,c.col1.y*a.x+c.col2.y*a.y);a.x+=this.m_xf.position.x; >+a.y+=this.m_xf.position.y;return a};k.prototype.GetWorldVector=function(a){return F.MulMV(this.m_xf.R,a)};k.prototype.GetLocalPoint=function(a){return F.MulXT(this.m_xf,a)};k.prototype.GetLocalVector=function(a){return F.MulTMV(this.m_xf.R,a)};k.prototype.GetLinearVelocityFromWorldPoint=function(a){return new y(this.m_linearVelocity.x-this.m_angularVelocity*(a.y-this.m_sweep.c.y),this.m_linearVelocity.y+this.m_angularVelocity*(a.x-this.m_sweep.c.x))};k.prototype.GetLinearVelocityFromLocalPoint=function(a){var c= >+this.m_xf.R;a=new y(c.col1.x*a.x+c.col2.x*a.y,c.col1.y*a.x+c.col2.y*a.y);a.x+=this.m_xf.position.x;a.y+=this.m_xf.position.y;return new y(this.m_linearVelocity.x-this.m_angularVelocity*(a.y-this.m_sweep.c.y),this.m_linearVelocity.y+this.m_angularVelocity*(a.x-this.m_sweep.c.x))};k.prototype.GetLinearDamping=function(){return this.m_linearDamping};k.prototype.SetLinearDamping=function(a){if(a===undefined)a=0;this.m_linearDamping=a};k.prototype.GetAngularDamping=function(){return this.m_angularDamping}; >+k.prototype.SetAngularDamping=function(a){if(a===undefined)a=0;this.m_angularDamping=a};k.prototype.SetType=function(a){if(a===undefined)a=0;if(this.m_type!=a){this.m_type=a;this.ResetMassData();if(this.m_type==k.b2_staticBody){this.m_linearVelocity.SetZero();this.m_angularVelocity=0}this.SetAwake(true);this.m_force.SetZero();this.m_torque=0;for(a=this.m_contactList;a;a=a.next)a.contact.FlagForFiltering()}};k.prototype.GetType=function(){return this.m_type};k.prototype.SetBullet=function(a){if(a)this.m_flags|= >+k.e_bulletFlag;else this.m_flags&=~k.e_bulletFlag};k.prototype.IsBullet=function(){return(this.m_flags&k.e_bulletFlag)==k.e_bulletFlag};k.prototype.SetSleepingAllowed=function(a){if(a)this.m_flags|=k.e_allowSleepFlag;else{this.m_flags&=~k.e_allowSleepFlag;this.SetAwake(true)}};k.prototype.SetAwake=function(a){if(a){this.m_flags|=k.e_awakeFlag;this.m_sleepTime=0}else{this.m_flags&=~k.e_awakeFlag;this.m_sleepTime=0;this.m_linearVelocity.SetZero();this.m_angularVelocity=0;this.m_force.SetZero();this.m_torque= >+0}};k.prototype.IsAwake=function(){return(this.m_flags&k.e_awakeFlag)==k.e_awakeFlag};k.prototype.SetFixedRotation=function(a){if(a)this.m_flags|=k.e_fixedRotationFlag;else this.m_flags&=~k.e_fixedRotationFlag;this.ResetMassData()};k.prototype.IsFixedRotation=function(){return(this.m_flags&k.e_fixedRotationFlag)==k.e_fixedRotationFlag};k.prototype.SetActive=function(a){if(a!=this.IsActive()){var c;if(a){this.m_flags|=k.e_activeFlag;a=this.m_world.m_contactManager.m_broadPhase;for(c=this.m_fixtureList;c;c= >+c.m_next)c.CreateProxy(a,this.m_xf)}else{this.m_flags&=~k.e_activeFlag;a=this.m_world.m_contactManager.m_broadPhase;for(c=this.m_fixtureList;c;c=c.m_next)c.DestroyProxy(a);for(a=this.m_contactList;a;){c=a;a=a.next;this.m_world.m_contactManager.Destroy(c.contact)}this.m_contactList=null}}};k.prototype.IsActive=function(){return(this.m_flags&k.e_activeFlag)==k.e_activeFlag};k.prototype.IsSleepingAllowed=function(){return(this.m_flags&k.e_allowSleepFlag)==k.e_allowSleepFlag};k.prototype.GetFixtureList= >+function(){return this.m_fixtureList};k.prototype.GetJointList=function(){return this.m_jointList};k.prototype.GetControllerList=function(){return this.m_controllerList};k.prototype.GetContactList=function(){return this.m_contactList};k.prototype.GetNext=function(){return this.m_next};k.prototype.GetUserData=function(){return this.m_userData};k.prototype.SetUserData=function(a){this.m_userData=a};k.prototype.GetWorld=function(){return this.m_world};k.prototype.b2Body=function(a,c){this.m_flags=0; >+if(a.bullet)this.m_flags|=k.e_bulletFlag;if(a.fixedRotation)this.m_flags|=k.e_fixedRotationFlag;if(a.allowSleep)this.m_flags|=k.e_allowSleepFlag;if(a.awake)this.m_flags|=k.e_awakeFlag;if(a.active)this.m_flags|=k.e_activeFlag;this.m_world=c;this.m_xf.position.SetV(a.position);this.m_xf.R.Set(a.angle);this.m_sweep.localCenter.SetZero();this.m_sweep.t0=1;this.m_sweep.a0=this.m_sweep.a=a.angle;var g=this.m_xf.R,b=this.m_sweep.localCenter;this.m_sweep.c.x=g.col1.x*b.x+g.col2.x*b.y;this.m_sweep.c.y=g.col1.y* >+b.x+g.col2.y*b.y;this.m_sweep.c.x+=this.m_xf.position.x;this.m_sweep.c.y+=this.m_xf.position.y;this.m_sweep.c0.SetV(this.m_sweep.c);this.m_contactList=this.m_controllerList=this.m_jointList=null;this.m_controllerCount=0;this.m_next=this.m_prev=null;this.m_linearVelocity.SetV(a.linearVelocity);this.m_angularVelocity=a.angularVelocity;this.m_linearDamping=a.linearDamping;this.m_angularDamping=a.angularDamping;this.m_force.Set(0,0);this.m_sleepTime=this.m_torque=0;this.m_type=a.type;if(this.m_type== >+k.b2_dynamicBody)this.m_invMass=this.m_mass=1;else this.m_invMass=this.m_mass=0;this.m_invI=this.m_I=0;this.m_inertiaScale=a.inertiaScale;this.m_userData=a.userData;this.m_fixtureList=null;this.m_fixtureCount=0};k.prototype.SynchronizeFixtures=function(){var a=k.s_xf1;a.R.Set(this.m_sweep.a0);var c=a.R,g=this.m_sweep.localCenter;a.position.x=this.m_sweep.c0.x-(c.col1.x*g.x+c.col2.x*g.y);a.position.y=this.m_sweep.c0.y-(c.col1.y*g.x+c.col2.y*g.y);g=this.m_world.m_contactManager.m_broadPhase;for(c=this.m_fixtureList;c;c= >+c.m_next)c.Synchronize(g,a,this.m_xf)};k.prototype.SynchronizeTransform=function(){this.m_xf.R.Set(this.m_sweep.a);var a=this.m_xf.R,c=this.m_sweep.localCenter;this.m_xf.position.x=this.m_sweep.c.x-(a.col1.x*c.x+a.col2.x*c.y);this.m_xf.position.y=this.m_sweep.c.y-(a.col1.y*c.x+a.col2.y*c.y)};k.prototype.ShouldCollide=function(a){if(this.m_type!=k.b2_dynamicBody&&a.m_type!=k.b2_dynamicBody)return false;for(var c=this.m_jointList;c;c=c.next)if(c.other==a)if(c.joint.m_collideConnected==false)return false; >+return true};k.prototype.Advance=function(a){if(a===undefined)a=0;this.m_sweep.Advance(a);this.m_sweep.c.SetV(this.m_sweep.c0);this.m_sweep.a=this.m_sweep.a0;this.SynchronizeTransform()};Box2D.postDefs.push(function(){Box2D.Dynamics.b2Body.s_xf1=new K;Box2D.Dynamics.b2Body.e_islandFlag=1;Box2D.Dynamics.b2Body.e_awakeFlag=2;Box2D.Dynamics.b2Body.e_allowSleepFlag=4;Box2D.Dynamics.b2Body.e_bulletFlag=8;Box2D.Dynamics.b2Body.e_fixedRotationFlag=16;Box2D.Dynamics.b2Body.e_activeFlag=32;Box2D.Dynamics.b2Body.b2_staticBody= >+0;Box2D.Dynamics.b2Body.b2_kinematicBody=1;Box2D.Dynamics.b2Body.b2_dynamicBody=2});z.b2BodyDef=function(){this.position=new y;this.linearVelocity=new y};z.prototype.b2BodyDef=function(){this.userData=null;this.position.Set(0,0);this.angle=0;this.linearVelocity.Set(0,0);this.angularDamping=this.linearDamping=this.angularVelocity=0;this.awake=this.allowSleep=true;this.bullet=this.fixedRotation=false;this.type=k.b2_staticBody;this.active=true;this.inertiaScale=1};u.b2ContactFilter=function(){};u.prototype.ShouldCollide= >+function(a,c){var g=a.GetFilterData(),b=c.GetFilterData();if(g.groupIndex==b.groupIndex&&g.groupIndex!=0)return g.groupIndex>0;return(g.maskBits&b.categoryBits)!=0&&(g.categoryBits&b.maskBits)!=0};u.prototype.RayCollide=function(a,c){if(!a)return true;return this.ShouldCollide(a instanceof S?a:null,c)};Box2D.postDefs.push(function(){Box2D.Dynamics.b2ContactFilter.b2_defaultFilter=new u});D.b2ContactImpulse=function(){this.normalImpulses=new Vector_a2j_Number(A.b2_maxManifoldPoints);this.tangentImpulses= >+new Vector_a2j_Number(A.b2_maxManifoldPoints)};H.b2ContactListener=function(){};H.prototype.BeginContact=function(){};H.prototype.EndContact=function(){};H.prototype.PreSolve=function(){};H.prototype.PostSolve=function(){};Box2D.postDefs.push(function(){Box2D.Dynamics.b2ContactListener.b2_defaultListener=new H});O.b2ContactManager=function(){};O.prototype.b2ContactManager=function(){this.m_world=null;this.m_contactCount=0;this.m_contactFilter=u.b2_defaultFilter;this.m_contactListener=H.b2_defaultListener; >+this.m_contactFactory=new j(this.m_allocator);this.m_broadPhase=new B};O.prototype.AddPair=function(a,c){var g=a instanceof S?a:null,b=c instanceof S?c:null,e=g.GetBody(),f=b.GetBody();if(e!=f){for(var m=f.GetContactList();m;){if(m.other==e){var r=m.contact.GetFixtureA(),s=m.contact.GetFixtureB();if(r==g&&s==b)return;if(r==b&&s==g)return}m=m.next}if(f.ShouldCollide(e)!=false)if(this.m_contactFilter.ShouldCollide(g,b)!=false){m=this.m_contactFactory.Create(g,b);g=m.GetFixtureA();b=m.GetFixtureB(); >+e=g.m_body;f=b.m_body;m.m_prev=null;m.m_next=this.m_world.m_contactList;if(this.m_world.m_contactList!=null)this.m_world.m_contactList.m_prev=m;this.m_world.m_contactList=m;m.m_nodeA.contact=m;m.m_nodeA.other=f;m.m_nodeA.prev=null;m.m_nodeA.next=e.m_contactList;if(e.m_contactList!=null)e.m_contactList.prev=m.m_nodeA;e.m_contactList=m.m_nodeA;m.m_nodeB.contact=m;m.m_nodeB.other=e;m.m_nodeB.prev=null;m.m_nodeB.next=f.m_contactList;if(f.m_contactList!=null)f.m_contactList.prev=m.m_nodeB;f.m_contactList= >+m.m_nodeB;++this.m_world.m_contactCount}}};O.prototype.FindNewContacts=function(){this.m_broadPhase.UpdatePairs(Box2D.generateCallback(this,this.AddPair))};O.prototype.Destroy=function(a){var c=a.GetFixtureA(),g=a.GetFixtureB();c=c.GetBody();g=g.GetBody();a.IsTouching()&&this.m_contactListener.EndContact(a);if(a.m_prev)a.m_prev.m_next=a.m_next;if(a.m_next)a.m_next.m_prev=a.m_prev;if(a==this.m_world.m_contactList)this.m_world.m_contactList=a.m_next;if(a.m_nodeA.prev)a.m_nodeA.prev.next=a.m_nodeA.next; >+if(a.m_nodeA.next)a.m_nodeA.next.prev=a.m_nodeA.prev;if(a.m_nodeA==c.m_contactList)c.m_contactList=a.m_nodeA.next;if(a.m_nodeB.prev)a.m_nodeB.prev.next=a.m_nodeB.next;if(a.m_nodeB.next)a.m_nodeB.next.prev=a.m_nodeB.prev;if(a.m_nodeB==g.m_contactList)g.m_contactList=a.m_nodeB.next;this.m_contactFactory.Destroy(a);--this.m_contactCount};O.prototype.Collide=function(){for(var a=this.m_world.m_contactList;a;){var c=a.GetFixtureA(),g=a.GetFixtureB(),b=c.GetBody(),e=g.GetBody();if(b.IsAwake()==false&&e.IsAwake()== >+false)a=a.GetNext();else{if(a.m_flags&l.e_filterFlag){if(e.ShouldCollide(b)==false){c=a;a=c.GetNext();this.Destroy(c);continue}if(this.m_contactFilter.ShouldCollide(c,g)==false){c=a;a=c.GetNext();this.Destroy(c);continue}a.m_flags&=~l.e_filterFlag}if(this.m_broadPhase.TestOverlap(c.m_proxy,g.m_proxy)==false){c=a;a=c.GetNext();this.Destroy(c)}else{a.Update(this.m_contactListener);a=a.GetNext()}}}};Box2D.postDefs.push(function(){Box2D.Dynamics.b2ContactManager.s_evalCP=new p});E.b2DebugDraw=function(){}; >+E.prototype.b2DebugDraw=function(){};E.prototype.SetFlags=function(){};E.prototype.GetFlags=function(){};E.prototype.AppendFlags=function(){};E.prototype.ClearFlags=function(){};E.prototype.SetSprite=function(){};E.prototype.GetSprite=function(){};E.prototype.SetDrawScale=function(){};E.prototype.GetDrawScale=function(){};E.prototype.SetLineThickness=function(){};E.prototype.GetLineThickness=function(){};E.prototype.SetAlpha=function(){};E.prototype.GetAlpha=function(){};E.prototype.SetFillAlpha= >+function(){};E.prototype.GetFillAlpha=function(){};E.prototype.SetXFormScale=function(){};E.prototype.GetXFormScale=function(){};E.prototype.DrawPolygon=function(){};E.prototype.DrawSolidPolygon=function(){};E.prototype.DrawCircle=function(){};E.prototype.DrawSolidCircle=function(){};E.prototype.DrawSegment=function(){};E.prototype.DrawTransform=function(){};Box2D.postDefs.push(function(){Box2D.Dynamics.b2DebugDraw.e_shapeBit=1;Box2D.Dynamics.b2DebugDraw.e_jointBit=2;Box2D.Dynamics.b2DebugDraw.e_aabbBit= >+4;Box2D.Dynamics.b2DebugDraw.e_pairBit=8;Box2D.Dynamics.b2DebugDraw.e_centerOfMassBit=16;Box2D.Dynamics.b2DebugDraw.e_controllerBit=32});R.b2DestructionListener=function(){};R.prototype.SayGoodbyeJoint=function(){};R.prototype.SayGoodbyeFixture=function(){};N.b2FilterData=function(){this.categoryBits=1;this.maskBits=65535;this.groupIndex=0};N.prototype.Copy=function(){var a=new N;a.categoryBits=this.categoryBits;a.maskBits=this.maskBits;a.groupIndex=this.groupIndex;return a};S.b2Fixture=function(){this.m_filter= >+new N};S.prototype.GetType=function(){return this.m_shape.GetType()};S.prototype.GetShape=function(){return this.m_shape};S.prototype.SetSensor=function(a){if(this.m_isSensor!=a){this.m_isSensor=a;if(this.m_body!=null)for(a=this.m_body.GetContactList();a;){var c=a.contact,g=c.GetFixtureA(),b=c.GetFixtureB();if(g==this||b==this)c.SetSensor(g.IsSensor()||b.IsSensor());a=a.next}}};S.prototype.IsSensor=function(){return this.m_isSensor};S.prototype.SetFilterData=function(a){this.m_filter=a.Copy();if(!this.m_body)for(a= >+this.m_body.GetContactList();a;){var c=a.contact,g=c.GetFixtureA(),b=c.GetFixtureB();if(g==this||b==this)c.FlagForFiltering();a=a.next}};S.prototype.GetFilterData=function(){return this.m_filter.Copy()};S.prototype.GetBody=function(){return this.m_body};S.prototype.GetNext=function(){return this.m_next};S.prototype.GetUserData=function(){return this.m_userData};S.prototype.SetUserData=function(a){this.m_userData=a};S.prototype.TestPoint=function(a){return this.m_shape.TestPoint(this.m_body.GetTransform(), >+a)};S.prototype.RayCast=function(a,c){return this.m_shape.RayCast(a,c,this.m_body.GetTransform())};S.prototype.GetMassData=function(a){if(a===undefined)a=null;if(a==null)a=new I;this.m_shape.ComputeMass(a,this.m_density);return a};S.prototype.SetDensity=function(a){if(a===undefined)a=0;this.m_density=a};S.prototype.GetDensity=function(){return this.m_density};S.prototype.GetFriction=function(){return this.m_friction};S.prototype.SetFriction=function(a){if(a===undefined)a=0;this.m_friction=a};S.prototype.GetRestitution= >+function(){return this.m_restitution};S.prototype.SetRestitution=function(a){if(a===undefined)a=0;this.m_restitution=a};S.prototype.GetAABB=function(){return this.m_aabb};S.prototype.b2Fixture=function(){this.m_aabb=new U;this.m_shape=this.m_next=this.m_body=this.m_userData=null;this.m_restitution=this.m_friction=this.m_density=0};S.prototype.Create=function(a,c,g){this.m_userData=g.userData;this.m_friction=g.friction;this.m_restitution=g.restitution;this.m_body=a;this.m_next=null;this.m_filter=g.filter.Copy(); >+this.m_isSensor=g.isSensor;this.m_shape=g.shape.Copy();this.m_density=g.density};S.prototype.Destroy=function(){this.m_shape=null};S.prototype.CreateProxy=function(a,c){this.m_shape.ComputeAABB(this.m_aabb,c);this.m_proxy=a.CreateProxy(this.m_aabb,this)};S.prototype.DestroyProxy=function(a){if(this.m_proxy!=null){a.DestroyProxy(this.m_proxy);this.m_proxy=null}};S.prototype.Synchronize=function(a,c,g){if(this.m_proxy){var b=new U,e=new U;this.m_shape.ComputeAABB(b,c);this.m_shape.ComputeAABB(e,g); >+this.m_aabb.Combine(b,e);c=F.SubtractVV(g.position,c.position);a.MoveProxy(this.m_proxy,this.m_aabb,c)}};aa.b2FixtureDef=function(){this.filter=new N};aa.prototype.b2FixtureDef=function(){this.userData=this.shape=null;this.friction=0.2;this.density=this.restitution=0;this.filter.categoryBits=1;this.filter.maskBits=65535;this.filter.groupIndex=0;this.isSensor=false};Z.b2Island=function(){};Z.prototype.b2Island=function(){this.m_bodies=new Vector;this.m_contacts=new Vector;this.m_joints=new Vector}; >+Z.prototype.Initialize=function(a,c,g,b,e,f){if(a===undefined)a=0;if(c===undefined)c=0;if(g===undefined)g=0;var m=0;this.m_bodyCapacity=a;this.m_contactCapacity=c;this.m_jointCapacity=g;this.m_jointCount=this.m_contactCount=this.m_bodyCount=0;this.m_allocator=b;this.m_listener=e;this.m_contactSolver=f;for(m=this.m_bodies.length;m<a;m++)this.m_bodies[m]=null;for(m=this.m_contacts.length;m<c;m++)this.m_contacts[m]=null;for(m=this.m_joints.length;m<g;m++)this.m_joints[m]=null};Z.prototype.Clear=function(){this.m_jointCount= >+this.m_contactCount=this.m_bodyCount=0};Z.prototype.Solve=function(a,c,g){var b=0,e=0,f;for(b=0;b<this.m_bodyCount;++b){e=this.m_bodies[b];if(e.GetType()==k.b2_dynamicBody){e.m_linearVelocity.x+=a.dt*(c.x+e.m_invMass*e.m_force.x);e.m_linearVelocity.y+=a.dt*(c.y+e.m_invMass*e.m_force.y);e.m_angularVelocity+=a.dt*e.m_invI*e.m_torque;e.m_linearVelocity.Multiply(F.Clamp(1-a.dt*e.m_linearDamping,0,1));e.m_angularVelocity*=F.Clamp(1-a.dt*e.m_angularDamping,0,1)}}this.m_contactSolver.Initialize(a,this.m_contacts, >+this.m_contactCount,this.m_allocator);c=this.m_contactSolver;c.InitVelocityConstraints(a);for(b=0;b<this.m_jointCount;++b){f=this.m_joints[b];f.InitVelocityConstraints(a)}for(b=0;b<a.velocityIterations;++b){for(e=0;e<this.m_jointCount;++e){f=this.m_joints[e];f.SolveVelocityConstraints(a)}c.SolveVelocityConstraints()}for(b=0;b<this.m_jointCount;++b){f=this.m_joints[b];f.FinalizeVelocityConstraints()}c.FinalizeVelocityConstraints();for(b=0;b<this.m_bodyCount;++b){e=this.m_bodies[b];if(e.GetType()!= >+k.b2_staticBody){var m=a.dt*e.m_linearVelocity.x,r=a.dt*e.m_linearVelocity.y;if(m*m+r*r>A.b2_maxTranslationSquared){e.m_linearVelocity.Normalize();e.m_linearVelocity.x*=A.b2_maxTranslation*a.inv_dt;e.m_linearVelocity.y*=A.b2_maxTranslation*a.inv_dt}m=a.dt*e.m_angularVelocity;if(m*m>A.b2_maxRotationSquared)e.m_angularVelocity=e.m_angularVelocity<0?-A.b2_maxRotation*a.inv_dt:A.b2_maxRotation*a.inv_dt;e.m_sweep.c0.SetV(e.m_sweep.c);e.m_sweep.a0=e.m_sweep.a;e.m_sweep.c.x+=a.dt*e.m_linearVelocity.x;e.m_sweep.c.y+= >+a.dt*e.m_linearVelocity.y;e.m_sweep.a+=a.dt*e.m_angularVelocity;e.SynchronizeTransform()}}for(b=0;b<a.positionIterations;++b){m=c.SolvePositionConstraints(A.b2_contactBaumgarte);r=true;for(e=0;e<this.m_jointCount;++e){f=this.m_joints[e];f=f.SolvePositionConstraints(A.b2_contactBaumgarte);r=r&&f}if(m&&r)break}this.Report(c.m_constraints);if(g){g=Number.MAX_VALUE;c=A.b2_linearSleepTolerance*A.b2_linearSleepTolerance;m=A.b2_angularSleepTolerance*A.b2_angularSleepTolerance;for(b=0;b<this.m_bodyCount;++b){e= >+this.m_bodies[b];if(e.GetType()!=k.b2_staticBody){if((e.m_flags&k.e_allowSleepFlag)==0)g=e.m_sleepTime=0;if((e.m_flags&k.e_allowSleepFlag)==0||e.m_angularVelocity*e.m_angularVelocity>m||F.Dot(e.m_linearVelocity,e.m_linearVelocity)>c)g=e.m_sleepTime=0;else{e.m_sleepTime+=a.dt;g=F.Min(g,e.m_sleepTime)}}}if(g>=A.b2_timeToSleep)for(b=0;b<this.m_bodyCount;++b){e=this.m_bodies[b];e.SetAwake(false)}}};Z.prototype.SolveTOI=function(a){var c=0,g=0;this.m_contactSolver.Initialize(a,this.m_contacts,this.m_contactCount, >+this.m_allocator);var b=this.m_contactSolver;for(c=0;c<this.m_jointCount;++c)this.m_joints[c].InitVelocityConstraints(a);for(c=0;c<a.velocityIterations;++c){b.SolveVelocityConstraints();for(g=0;g<this.m_jointCount;++g)this.m_joints[g].SolveVelocityConstraints(a)}for(c=0;c<this.m_bodyCount;++c){g=this.m_bodies[c];if(g.GetType()!=k.b2_staticBody){var e=a.dt*g.m_linearVelocity.x,f=a.dt*g.m_linearVelocity.y;if(e*e+f*f>A.b2_maxTranslationSquared){g.m_linearVelocity.Normalize();g.m_linearVelocity.x*=A.b2_maxTranslation* >+a.inv_dt;g.m_linearVelocity.y*=A.b2_maxTranslation*a.inv_dt}e=a.dt*g.m_angularVelocity;if(e*e>A.b2_maxRotationSquared)g.m_angularVelocity=g.m_angularVelocity<0?-A.b2_maxRotation*a.inv_dt:A.b2_maxRotation*a.inv_dt;g.m_sweep.c0.SetV(g.m_sweep.c);g.m_sweep.a0=g.m_sweep.a;g.m_sweep.c.x+=a.dt*g.m_linearVelocity.x;g.m_sweep.c.y+=a.dt*g.m_linearVelocity.y;g.m_sweep.a+=a.dt*g.m_angularVelocity;g.SynchronizeTransform()}}for(c=0;c<a.positionIterations;++c){e=b.SolvePositionConstraints(0.75);f=true;for(g=0;g< >+this.m_jointCount;++g){var m=this.m_joints[g].SolvePositionConstraints(A.b2_contactBaumgarte);f=f&&m}if(e&&f)break}this.Report(b.m_constraints)};Z.prototype.Report=function(a){if(this.m_listener!=null)for(var c=0;c<this.m_contactCount;++c){for(var g=this.m_contacts[c],b=a[c],e=0;e<b.pointCount;++e){Z.s_impulse.normalImpulses[e]=b.points[e].normalImpulse;Z.s_impulse.tangentImpulses[e]=b.points[e].tangentImpulse}this.m_listener.PostSolve(g,Z.s_impulse)}};Z.prototype.AddBody=function(a){a.m_islandIndex= >+this.m_bodyCount;this.m_bodies[this.m_bodyCount++]=a};Z.prototype.AddContact=function(a){this.m_contacts[this.m_contactCount++]=a};Z.prototype.AddJoint=function(a){this.m_joints[this.m_jointCount++]=a};Box2D.postDefs.push(function(){Box2D.Dynamics.b2Island.s_impulse=new D});d.b2TimeStep=function(){};d.prototype.Set=function(a){this.dt=a.dt;this.inv_dt=a.inv_dt;this.positionIterations=a.positionIterations;this.velocityIterations=a.velocityIterations;this.warmStarting=a.warmStarting};h.b2World=function(){this.s_stack= >+new Vector;this.m_contactManager=new O;this.m_contactSolver=new o;this.m_island=new Z};h.prototype.b2World=function(a,c){this.m_controllerList=this.m_jointList=this.m_contactList=this.m_bodyList=this.m_debugDraw=this.m_destructionListener=null;this.m_controllerCount=this.m_jointCount=this.m_contactCount=this.m_bodyCount=0;h.m_warmStarting=true;h.m_continuousPhysics=true;this.m_allowSleep=c;this.m_gravity=a;this.m_inv_dt0=0;this.m_contactManager.m_world=this;this.m_groundBody=this.CreateBody(new z)}; >+h.prototype.SetDestructionListener=function(a){this.m_destructionListener=a};h.prototype.SetContactFilter=function(a){this.m_contactManager.m_contactFilter=a};h.prototype.SetContactListener=function(a){this.m_contactManager.m_contactListener=a};h.prototype.SetDebugDraw=function(a){this.m_debugDraw=a};h.prototype.SetBroadPhase=function(a){var c=this.m_contactManager.m_broadPhase;this.m_contactManager.m_broadPhase=a;for(var g=this.m_bodyList;g;g=g.m_next)for(var b=g.m_fixtureList;b;b=b.m_next)b.m_proxy= >+a.CreateProxy(c.GetFatAABB(b.m_proxy),b)};h.prototype.Validate=function(){this.m_contactManager.m_broadPhase.Validate()};h.prototype.GetProxyCount=function(){return this.m_contactManager.m_broadPhase.GetProxyCount()};h.prototype.CreateBody=function(a){if(this.IsLocked()==true)return null;a=new k(a,this);a.m_prev=null;if(a.m_next=this.m_bodyList)this.m_bodyList.m_prev=a;this.m_bodyList=a;++this.m_bodyCount;return a};h.prototype.DestroyBody=function(a){if(this.IsLocked()!=true){for(var c=a.m_jointList;c;){var g= >+c;c=c.next;this.m_destructionListener&&this.m_destructionListener.SayGoodbyeJoint(g.joint);this.DestroyJoint(g.joint)}for(c=a.m_controllerList;c;){g=c;c=c.nextController;g.controller.RemoveBody(a)}for(c=a.m_contactList;c;){g=c;c=c.next;this.m_contactManager.Destroy(g.contact)}a.m_contactList=null;for(c=a.m_fixtureList;c;){g=c;c=c.m_next;this.m_destructionListener&&this.m_destructionListener.SayGoodbyeFixture(g);g.DestroyProxy(this.m_contactManager.m_broadPhase);g.Destroy()}a.m_fixtureList=null;a.m_fixtureCount= >+0;if(a.m_prev)a.m_prev.m_next=a.m_next;if(a.m_next)a.m_next.m_prev=a.m_prev;if(a==this.m_bodyList)this.m_bodyList=a.m_next;--this.m_bodyCount}};h.prototype.CreateJoint=function(a){var c=q.Create(a,null);c.m_prev=null;if(c.m_next=this.m_jointList)this.m_jointList.m_prev=c;this.m_jointList=c;++this.m_jointCount;c.m_edgeA.joint=c;c.m_edgeA.other=c.m_bodyB;c.m_edgeA.prev=null;if(c.m_edgeA.next=c.m_bodyA.m_jointList)c.m_bodyA.m_jointList.prev=c.m_edgeA;c.m_bodyA.m_jointList=c.m_edgeA;c.m_edgeB.joint=c; >+c.m_edgeB.other=c.m_bodyA;c.m_edgeB.prev=null;if(c.m_edgeB.next=c.m_bodyB.m_jointList)c.m_bodyB.m_jointList.prev=c.m_edgeB;c.m_bodyB.m_jointList=c.m_edgeB;var g=a.bodyA,b=a.bodyB;if(a.collideConnected==false)for(a=b.GetContactList();a;){a.other==g&&a.contact.FlagForFiltering();a=a.next}return c};h.prototype.DestroyJoint=function(a){var c=a.m_collideConnected;if(a.m_prev)a.m_prev.m_next=a.m_next;if(a.m_next)a.m_next.m_prev=a.m_prev;if(a==this.m_jointList)this.m_jointList=a.m_next;var g=a.m_bodyA,b= >+a.m_bodyB;g.SetAwake(true);b.SetAwake(true);if(a.m_edgeA.prev)a.m_edgeA.prev.next=a.m_edgeA.next;if(a.m_edgeA.next)a.m_edgeA.next.prev=a.m_edgeA.prev;if(a.m_edgeA==g.m_jointList)g.m_jointList=a.m_edgeA.next;a.m_edgeA.prev=null;a.m_edgeA.next=null;if(a.m_edgeB.prev)a.m_edgeB.prev.next=a.m_edgeB.next;if(a.m_edgeB.next)a.m_edgeB.next.prev=a.m_edgeB.prev;if(a.m_edgeB==b.m_jointList)b.m_jointList=a.m_edgeB.next;a.m_edgeB.prev=null;a.m_edgeB.next=null;q.Destroy(a,null);--this.m_jointCount;if(c==false)for(a= >+b.GetContactList();a;){a.other==g&&a.contact.FlagForFiltering();a=a.next}};h.prototype.AddController=function(a){a.m_next=this.m_controllerList;a.m_prev=null;this.m_controllerList=a;a.m_world=this;this.m_controllerCount++;return a};h.prototype.RemoveController=function(a){if(a.m_prev)a.m_prev.m_next=a.m_next;if(a.m_next)a.m_next.m_prev=a.m_prev;if(this.m_controllerList==a)this.m_controllerList=a.m_next;this.m_controllerCount--};h.prototype.CreateController=function(a){if(a.m_world!=this)throw Error("Controller can only be a member of one world"); >+a.m_next=this.m_controllerList;a.m_prev=null;if(this.m_controllerList)this.m_controllerList.m_prev=a;this.m_controllerList=a;++this.m_controllerCount;a.m_world=this;return a};h.prototype.DestroyController=function(a){a.Clear();if(a.m_next)a.m_next.m_prev=a.m_prev;if(a.m_prev)a.m_prev.m_next=a.m_next;if(a==this.m_controllerList)this.m_controllerList=a.m_next;--this.m_controllerCount};h.prototype.SetWarmStarting=function(a){h.m_warmStarting=a};h.prototype.SetContinuousPhysics=function(a){h.m_continuousPhysics= >+a};h.prototype.GetBodyCount=function(){return this.m_bodyCount};h.prototype.GetJointCount=function(){return this.m_jointCount};h.prototype.GetContactCount=function(){return this.m_contactCount};h.prototype.SetGravity=function(a){this.m_gravity=a};h.prototype.GetGravity=function(){return this.m_gravity};h.prototype.GetGroundBody=function(){return this.m_groundBody};h.prototype.Step=function(a,c,g){if(a===undefined)a=0;if(c===undefined)c=0;if(g===undefined)g=0;if(this.m_flags&h.e_newFixture){this.m_contactManager.FindNewContacts(); >+this.m_flags&=~h.e_newFixture}this.m_flags|=h.e_locked;var b=h.s_timestep2;b.dt=a;b.velocityIterations=c;b.positionIterations=g;b.inv_dt=a>0?1/a:0;b.dtRatio=this.m_inv_dt0*a;b.warmStarting=h.m_warmStarting;this.m_contactManager.Collide();b.dt>0&&this.Solve(b);h.m_continuousPhysics&&b.dt>0&&this.SolveTOI(b);if(b.dt>0)this.m_inv_dt0=b.inv_dt;this.m_flags&=~h.e_locked};h.prototype.ClearForces=function(){for(var a=this.m_bodyList;a;a=a.m_next){a.m_force.SetZero();a.m_torque=0}};h.prototype.DrawDebugData= >+function(){if(this.m_debugDraw!=null){this.m_debugDraw.m_sprite.graphics.clear();var a=this.m_debugDraw.GetFlags(),c,g,b;new y;new y;new y;var e;new U;new U;e=[new y,new y,new y,new y];var f=new w(0,0,0);if(a&E.e_shapeBit)for(c=this.m_bodyList;c;c=c.m_next){e=c.m_xf;for(g=c.GetFixtureList();g;g=g.m_next){b=g.GetShape();if(c.IsActive()==false)f.Set(0.5,0.5,0.3);else if(c.GetType()==k.b2_staticBody)f.Set(0.5,0.9,0.5);else if(c.GetType()==k.b2_kinematicBody)f.Set(0.5,0.5,0.9);else c.IsAwake()==false? >+f.Set(0.6,0.6,0.6):f.Set(0.9,0.7,0.7);this.DrawShape(b,e,f)}}if(a&E.e_jointBit)for(c=this.m_jointList;c;c=c.m_next)this.DrawJoint(c);if(a&E.e_controllerBit)for(c=this.m_controllerList;c;c=c.m_next)c.Draw(this.m_debugDraw);if(a&E.e_pairBit){f.Set(0.3,0.9,0.9);for(c=this.m_contactManager.m_contactList;c;c=c.GetNext()){b=c.GetFixtureA();g=c.GetFixtureB();b=b.GetAABB().GetCenter();g=g.GetAABB().GetCenter();this.m_debugDraw.DrawSegment(b,g,f)}}if(a&E.e_aabbBit){b=this.m_contactManager.m_broadPhase;e=[new y, >+new y,new y,new y];for(c=this.m_bodyList;c;c=c.GetNext())if(c.IsActive()!=false)for(g=c.GetFixtureList();g;g=g.GetNext()){var m=b.GetFatAABB(g.m_proxy);e[0].Set(m.lowerBound.x,m.lowerBound.y);e[1].Set(m.upperBound.x,m.lowerBound.y);e[2].Set(m.upperBound.x,m.upperBound.y);e[3].Set(m.lowerBound.x,m.upperBound.y);this.m_debugDraw.DrawPolygon(e,4,f)}}if(a&E.e_centerOfMassBit)for(c=this.m_bodyList;c;c=c.m_next){e=h.s_xf;e.R=c.m_xf.R;e.position=c.GetWorldCenter();this.m_debugDraw.DrawTransform(e)}}};h.prototype.QueryAABB= >+function(a,c){var g=this.m_contactManager.m_broadPhase;g.Query(function(b){return a(g.GetUserData(b))},c)};h.prototype.QueryShape=function(a,c,g){if(g===undefined)g=null;if(g==null){g=new K;g.SetIdentity()}var b=this.m_contactManager.m_broadPhase,e=new U;c.ComputeAABB(e,g);b.Query(function(f){f=b.GetUserData(f)instanceof S?b.GetUserData(f):null;if(Y.TestOverlap(c,g,f.GetShape(),f.GetBody().GetTransform()))return a(f);return true},e)};h.prototype.QueryPoint=function(a,c){var g=this.m_contactManager.m_broadPhase, >+b=new U;b.lowerBound.Set(c.x-A.b2_linearSlop,c.y-A.b2_linearSlop);b.upperBound.Set(c.x+A.b2_linearSlop,c.y+A.b2_linearSlop);g.Query(function(e){e=g.GetUserData(e)instanceof S?g.GetUserData(e):null;if(e.TestPoint(c))return a(e);return true},b)};h.prototype.RayCast=function(a,c,g){var b=this.m_contactManager.m_broadPhase,e=new V,f=new Q(c,g);b.RayCast(function(m,r){var s=b.GetUserData(r);s=s instanceof S?s:null;if(s.RayCast(e,m)){var v=e.fraction,t=new y((1-v)*c.x+v*g.x,(1-v)*c.y+v*g.y);return a(s, >+t,e.normal,v)}return m.maxFraction},f)};h.prototype.RayCastOne=function(a,c){var g;this.RayCast(function(b,e,f,m){if(m===undefined)m=0;g=b;return m},a,c);return g};h.prototype.RayCastAll=function(a,c){var g=new Vector;this.RayCast(function(b){g[g.length]=b;return 1},a,c);return g};h.prototype.GetBodyList=function(){return this.m_bodyList};h.prototype.GetJointList=function(){return this.m_jointList};h.prototype.GetContactList=function(){return this.m_contactList};h.prototype.IsLocked=function(){return(this.m_flags& >+h.e_locked)>0};h.prototype.Solve=function(a){for(var c,g=this.m_controllerList;g;g=g.m_next)g.Step(a);g=this.m_island;g.Initialize(this.m_bodyCount,this.m_contactCount,this.m_jointCount,null,this.m_contactManager.m_contactListener,this.m_contactSolver);for(c=this.m_bodyList;c;c=c.m_next)c.m_flags&=~k.e_islandFlag;for(var b=this.m_contactList;b;b=b.m_next)b.m_flags&=~l.e_islandFlag;for(b=this.m_jointList;b;b=b.m_next)b.m_islandFlag=false;parseInt(this.m_bodyCount);b=this.s_stack;for(var e=this.m_bodyList;e;e= >+e.m_next)if(!(e.m_flags&k.e_islandFlag))if(!(e.IsAwake()==false||e.IsActive()==false))if(e.GetType()!=k.b2_staticBody){g.Clear();var f=0;b[f++]=e;for(e.m_flags|=k.e_islandFlag;f>0;){c=b[--f];g.AddBody(c);c.IsAwake()==false&&c.SetAwake(true);if(c.GetType()!=k.b2_staticBody){for(var m,r=c.m_contactList;r;r=r.next)if(!(r.contact.m_flags&l.e_islandFlag))if(!(r.contact.IsSensor()==true||r.contact.IsEnabled()==false||r.contact.IsTouching()==false)){g.AddContact(r.contact);r.contact.m_flags|=l.e_islandFlag; >+m=r.other;if(!(m.m_flags&k.e_islandFlag)){b[f++]=m;m.m_flags|=k.e_islandFlag}}for(c=c.m_jointList;c;c=c.next)if(c.joint.m_islandFlag!=true){m=c.other;if(m.IsActive()!=false){g.AddJoint(c.joint);c.joint.m_islandFlag=true;if(!(m.m_flags&k.e_islandFlag)){b[f++]=m;m.m_flags|=k.e_islandFlag}}}}}g.Solve(a,this.m_gravity,this.m_allowSleep);for(f=0;f<g.m_bodyCount;++f){c=g.m_bodies[f];if(c.GetType()==k.b2_staticBody)c.m_flags&=~k.e_islandFlag}}for(f=0;f<b.length;++f){if(!b[f])break;b[f]=null}for(c=this.m_bodyList;c;c= >+c.m_next)c.IsAwake()==false||c.IsActive()==false||c.GetType()!=k.b2_staticBody&&c.SynchronizeFixtures();this.m_contactManager.FindNewContacts()};h.prototype.SolveTOI=function(a){var c,g,b,e=this.m_island;e.Initialize(this.m_bodyCount,A.b2_maxTOIContactsPerIsland,A.b2_maxTOIJointsPerIsland,null,this.m_contactManager.m_contactListener,this.m_contactSolver);var f=h.s_queue;for(c=this.m_bodyList;c;c=c.m_next){c.m_flags&=~k.e_islandFlag;c.m_sweep.t0=0}for(b=this.m_contactList;b;b=b.m_next)b.m_flags&=~(l.e_toiFlag| >+l.e_islandFlag);for(b=this.m_jointList;b;b=b.m_next)b.m_islandFlag=false;for(;;){var m=null,r=1;for(b=this.m_contactList;b;b=b.m_next)if(!(b.IsSensor()==true||b.IsEnabled()==false||b.IsContinuous()==false)){c=1;if(b.m_flags&l.e_toiFlag)c=b.m_toi;else{c=b.m_fixtureA;g=b.m_fixtureB;c=c.m_body;g=g.m_body;if((c.GetType()!=k.b2_dynamicBody||c.IsAwake()==false)&&(g.GetType()!=k.b2_dynamicBody||g.IsAwake()==false))continue;var s=c.m_sweep.t0;if(c.m_sweep.t0<g.m_sweep.t0){s=g.m_sweep.t0;c.m_sweep.Advance(s)}else if(g.m_sweep.t0< >+c.m_sweep.t0){s=c.m_sweep.t0;g.m_sweep.Advance(s)}c=b.ComputeTOI(c.m_sweep,g.m_sweep);A.b2Assert(0<=c&&c<=1);if(c>0&&c<1){c=(1-c)*s+c;if(c>1)c=1}b.m_toi=c;b.m_flags|=l.e_toiFlag}if(Number.MIN_VALUE<c&&c<r){m=b;r=c}}if(m==null||1-100*Number.MIN_VALUE<r)break;c=m.m_fixtureA;g=m.m_fixtureB;c=c.m_body;g=g.m_body;h.s_backupA.Set(c.m_sweep);h.s_backupB.Set(g.m_sweep);c.Advance(r);g.Advance(r);m.Update(this.m_contactManager.m_contactListener);m.m_flags&=~l.e_toiFlag;if(m.IsSensor()==true||m.IsEnabled()== >+false){c.m_sweep.Set(h.s_backupA);g.m_sweep.Set(h.s_backupB);c.SynchronizeTransform();g.SynchronizeTransform()}else if(m.IsTouching()!=false){c=c;if(c.GetType()!=k.b2_dynamicBody)c=g;e.Clear();m=b=0;f[b+m++]=c;for(c.m_flags|=k.e_islandFlag;m>0;){c=f[b++];--m;e.AddBody(c);c.IsAwake()==false&&c.SetAwake(true);if(c.GetType()==k.b2_dynamicBody){for(g=c.m_contactList;g;g=g.next){if(e.m_contactCount==e.m_contactCapacity)break;if(!(g.contact.m_flags&l.e_islandFlag))if(!(g.contact.IsSensor()==true||g.contact.IsEnabled()== >+false||g.contact.IsTouching()==false)){e.AddContact(g.contact);g.contact.m_flags|=l.e_islandFlag;s=g.other;if(!(s.m_flags&k.e_islandFlag)){if(s.GetType()!=k.b2_staticBody){s.Advance(r);s.SetAwake(true)}f[b+m]=s;++m;s.m_flags|=k.e_islandFlag}}}for(c=c.m_jointList;c;c=c.next)if(e.m_jointCount!=e.m_jointCapacity)if(c.joint.m_islandFlag!=true){s=c.other;if(s.IsActive()!=false){e.AddJoint(c.joint);c.joint.m_islandFlag=true;if(!(s.m_flags&k.e_islandFlag)){if(s.GetType()!=k.b2_staticBody){s.Advance(r);s.SetAwake(true)}f[b+ >+m]=s;++m;s.m_flags|=k.e_islandFlag}}}}}b=h.s_timestep;b.warmStarting=false;b.dt=(1-r)*a.dt;b.inv_dt=1/b.dt;b.dtRatio=0;b.velocityIterations=a.velocityIterations;b.positionIterations=a.positionIterations;e.SolveTOI(b);for(r=r=0;r<e.m_bodyCount;++r){c=e.m_bodies[r];c.m_flags&=~k.e_islandFlag;if(c.IsAwake()!=false)if(c.GetType()==k.b2_dynamicBody){c.SynchronizeFixtures();for(g=c.m_contactList;g;g=g.next)g.contact.m_flags&=~l.e_toiFlag}}for(r=0;r<e.m_contactCount;++r){b=e.m_contacts[r];b.m_flags&=~(l.e_toiFlag| >+l.e_islandFlag)}for(r=0;r<e.m_jointCount;++r){b=e.m_joints[r];b.m_islandFlag=false}this.m_contactManager.FindNewContacts()}}};h.prototype.DrawJoint=function(a){var c=a.GetBodyA(),g=a.GetBodyB(),b=c.m_xf.position,e=g.m_xf.position,f=a.GetAnchorA(),m=a.GetAnchorB(),r=h.s_jointColor;switch(a.m_type){case q.e_distanceJoint:this.m_debugDraw.DrawSegment(f,m,r);break;case q.e_pulleyJoint:c=a instanceof n?a:null;a=c.GetGroundAnchorA();c=c.GetGroundAnchorB();this.m_debugDraw.DrawSegment(a,f,r);this.m_debugDraw.DrawSegment(c, >+m,r);this.m_debugDraw.DrawSegment(a,c,r);break;case q.e_mouseJoint:this.m_debugDraw.DrawSegment(f,m,r);break;default:c!=this.m_groundBody&&this.m_debugDraw.DrawSegment(b,f,r);this.m_debugDraw.DrawSegment(f,m,r);g!=this.m_groundBody&&this.m_debugDraw.DrawSegment(e,m,r)}};h.prototype.DrawShape=function(a,c,g){switch(a.m_type){case Y.e_circleShape:var b=a instanceof M?a:null;this.m_debugDraw.DrawSolidCircle(F.MulX(c,b.m_p),b.m_radius,c.R.col1,g);break;case Y.e_polygonShape:b=0;b=a instanceof W?a:null; >+a=parseInt(b.GetVertexCount());var e=b.GetVertices(),f=new Vector(a);for(b=0;b<a;++b)f[b]=F.MulX(c,e[b]);this.m_debugDraw.DrawSolidPolygon(f,a,g);break;case Y.e_edgeShape:b=a instanceof L?a:null;this.m_debugDraw.DrawSegment(F.MulX(c,b.GetVertex1()),F.MulX(c,b.GetVertex2()),g)}};Box2D.postDefs.push(function(){Box2D.Dynamics.b2World.s_timestep2=new d;Box2D.Dynamics.b2World.s_xf=new K;Box2D.Dynamics.b2World.s_backupA=new G;Box2D.Dynamics.b2World.s_backupB=new G;Box2D.Dynamics.b2World.s_timestep=new d; >+Box2D.Dynamics.b2World.s_queue=new Vector;Box2D.Dynamics.b2World.s_jointColor=new w(0.5,0.8,0.8);Box2D.Dynamics.b2World.e_newFixture=1;Box2D.Dynamics.b2World.e_locked=2})})(); >+(function(){var F=Box2D.Collision.Shapes.b2CircleShape,G=Box2D.Collision.Shapes.b2EdgeShape,K=Box2D.Collision.Shapes.b2PolygonShape,y=Box2D.Collision.Shapes.b2Shape,w=Box2D.Dynamics.Contacts.b2CircleContact,A=Box2D.Dynamics.Contacts.b2Contact,U=Box2D.Dynamics.Contacts.b2ContactConstraint,p=Box2D.Dynamics.Contacts.b2ContactConstraintPoint,B=Box2D.Dynamics.Contacts.b2ContactEdge,Q=Box2D.Dynamics.Contacts.b2ContactFactory,V=Box2D.Dynamics.Contacts.b2ContactRegister,M=Box2D.Dynamics.Contacts.b2ContactResult, >+L=Box2D.Dynamics.Contacts.b2ContactSolver,I=Box2D.Dynamics.Contacts.b2EdgeAndCircleContact,W=Box2D.Dynamics.Contacts.b2NullContact,Y=Box2D.Dynamics.Contacts.b2PolyAndCircleContact,k=Box2D.Dynamics.Contacts.b2PolyAndEdgeContact,z=Box2D.Dynamics.Contacts.b2PolygonContact,u=Box2D.Dynamics.Contacts.b2PositionSolverManifold,D=Box2D.Dynamics.b2Body,H=Box2D.Dynamics.b2TimeStep,O=Box2D.Common.b2Settings,E=Box2D.Common.Math.b2Mat22,R=Box2D.Common.Math.b2Math,N=Box2D.Common.Math.b2Vec2,S=Box2D.Collision.b2Collision, >+aa=Box2D.Collision.b2ContactID,Z=Box2D.Collision.b2Manifold,d=Box2D.Collision.b2TimeOfImpact,h=Box2D.Collision.b2TOIInput,l=Box2D.Collision.b2WorldManifold;Box2D.inherit(w,Box2D.Dynamics.Contacts.b2Contact);w.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;w.b2CircleContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};w.Create=function(){return new w};w.Destroy=function(){};w.prototype.Reset=function(j,o){this.__super.Reset.call(this,j,o)};w.prototype.Evaluate= >+function(){var j=this.m_fixtureA.GetBody(),o=this.m_fixtureB.GetBody();S.CollideCircles(this.m_manifold,this.m_fixtureA.GetShape()instanceof F?this.m_fixtureA.GetShape():null,j.m_xf,this.m_fixtureB.GetShape()instanceof F?this.m_fixtureB.GetShape():null,o.m_xf)};A.b2Contact=function(){this.m_nodeA=new B;this.m_nodeB=new B;this.m_manifold=new Z;this.m_oldManifold=new Z};A.prototype.GetManifold=function(){return this.m_manifold};A.prototype.GetWorldManifold=function(j){var o=this.m_fixtureA.GetBody(), >+q=this.m_fixtureB.GetBody(),n=this.m_fixtureA.GetShape(),a=this.m_fixtureB.GetShape();j.Initialize(this.m_manifold,o.GetTransform(),n.m_radius,q.GetTransform(),a.m_radius)};A.prototype.IsTouching=function(){return(this.m_flags&A.e_touchingFlag)==A.e_touchingFlag};A.prototype.IsContinuous=function(){return(this.m_flags&A.e_continuousFlag)==A.e_continuousFlag};A.prototype.SetSensor=function(j){if(j)this.m_flags|=A.e_sensorFlag;else this.m_flags&=~A.e_sensorFlag};A.prototype.IsSensor=function(){return(this.m_flags& >+A.e_sensorFlag)==A.e_sensorFlag};A.prototype.SetEnabled=function(j){if(j)this.m_flags|=A.e_enabledFlag;else this.m_flags&=~A.e_enabledFlag};A.prototype.IsEnabled=function(){return(this.m_flags&A.e_enabledFlag)==A.e_enabledFlag};A.prototype.GetNext=function(){return this.m_next};A.prototype.GetFixtureA=function(){return this.m_fixtureA};A.prototype.GetFixtureB=function(){return this.m_fixtureB};A.prototype.FlagForFiltering=function(){this.m_flags|=A.e_filterFlag};A.prototype.b2Contact=function(){}; >+A.prototype.Reset=function(j,o){if(j===undefined)j=null;if(o===undefined)o=null;this.m_flags=A.e_enabledFlag;if(!j||!o)this.m_fixtureB=this.m_fixtureA=null;else{if(j.IsSensor()||o.IsSensor())this.m_flags|=A.e_sensorFlag;var q=j.GetBody(),n=o.GetBody();if(q.GetType()!=D.b2_dynamicBody||q.IsBullet()||n.GetType()!=D.b2_dynamicBody||n.IsBullet())this.m_flags|=A.e_continuousFlag;this.m_fixtureA=j;this.m_fixtureB=o;this.m_manifold.m_pointCount=0;this.m_next=this.m_prev=null;this.m_nodeA.contact=null;this.m_nodeA.prev= >+null;this.m_nodeA.next=null;this.m_nodeA.other=null;this.m_nodeB.contact=null;this.m_nodeB.prev=null;this.m_nodeB.next=null;this.m_nodeB.other=null}};A.prototype.Update=function(j){var o=this.m_oldManifold;this.m_oldManifold=this.m_manifold;this.m_manifold=o;this.m_flags|=A.e_enabledFlag;var q=false;o=(this.m_flags&A.e_touchingFlag)==A.e_touchingFlag;var n=this.m_fixtureA.m_body,a=this.m_fixtureB.m_body,c=this.m_fixtureA.m_aabb.TestOverlap(this.m_fixtureB.m_aabb);if(this.m_flags&A.e_sensorFlag){if(c){q= >+this.m_fixtureA.GetShape();c=this.m_fixtureB.GetShape();n=n.GetTransform();a=a.GetTransform();q=y.TestOverlap(q,n,c,a)}this.m_manifold.m_pointCount=0}else{if(n.GetType()!=D.b2_dynamicBody||n.IsBullet()||a.GetType()!=D.b2_dynamicBody||a.IsBullet())this.m_flags|=A.e_continuousFlag;else this.m_flags&=~A.e_continuousFlag;if(c){this.Evaluate();q=this.m_manifold.m_pointCount>0;for(c=0;c<this.m_manifold.m_pointCount;++c){var g=this.m_manifold.m_points[c];g.m_normalImpulse=0;g.m_tangentImpulse=0;for(var b= >+g.m_id,e=0;e<this.m_oldManifold.m_pointCount;++e){var f=this.m_oldManifold.m_points[e];if(f.m_id.key==b.key){g.m_normalImpulse=f.m_normalImpulse;g.m_tangentImpulse=f.m_tangentImpulse;break}}}}else this.m_manifold.m_pointCount=0;if(q!=o){n.SetAwake(true);a.SetAwake(true)}}if(q)this.m_flags|=A.e_touchingFlag;else this.m_flags&=~A.e_touchingFlag;o==false&&q==true&&j.BeginContact(this);o==true&&q==false&&j.EndContact(this);(this.m_flags&A.e_sensorFlag)==0&&j.PreSolve(this,this.m_oldManifold)};A.prototype.Evaluate= >+function(){};A.prototype.ComputeTOI=function(j,o){A.s_input.proxyA.Set(this.m_fixtureA.GetShape());A.s_input.proxyB.Set(this.m_fixtureB.GetShape());A.s_input.sweepA=j;A.s_input.sweepB=o;A.s_input.tolerance=O.b2_linearSlop;return d.TimeOfImpact(A.s_input)};Box2D.postDefs.push(function(){Box2D.Dynamics.Contacts.b2Contact.e_sensorFlag=1;Box2D.Dynamics.Contacts.b2Contact.e_continuousFlag=2;Box2D.Dynamics.Contacts.b2Contact.e_islandFlag=4;Box2D.Dynamics.Contacts.b2Contact.e_toiFlag=8;Box2D.Dynamics.Contacts.b2Contact.e_touchingFlag= >+16;Box2D.Dynamics.Contacts.b2Contact.e_enabledFlag=32;Box2D.Dynamics.Contacts.b2Contact.e_filterFlag=64;Box2D.Dynamics.Contacts.b2Contact.s_input=new h});U.b2ContactConstraint=function(){this.localPlaneNormal=new N;this.localPoint=new N;this.normal=new N;this.normalMass=new E;this.K=new E};U.prototype.b2ContactConstraint=function(){this.points=new Vector(O.b2_maxManifoldPoints);for(var j=0;j<O.b2_maxManifoldPoints;j++)this.points[j]=new p};p.b2ContactConstraintPoint=function(){this.localPoint=new N; >+this.rA=new N;this.rB=new N};B.b2ContactEdge=function(){};Q.b2ContactFactory=function(){};Q.prototype.b2ContactFactory=function(j){this.m_allocator=j;this.InitializeRegisters()};Q.prototype.AddType=function(j,o,q,n){if(q===undefined)q=0;if(n===undefined)n=0;this.m_registers[q][n].createFcn=j;this.m_registers[q][n].destroyFcn=o;this.m_registers[q][n].primary=true;if(q!=n){this.m_registers[n][q].createFcn=j;this.m_registers[n][q].destroyFcn=o;this.m_registers[n][q].primary=false}};Q.prototype.InitializeRegisters= >+function(){this.m_registers=new Vector(y.e_shapeTypeCount);for(var j=0;j<y.e_shapeTypeCount;j++){this.m_registers[j]=new Vector(y.e_shapeTypeCount);for(var o=0;o<y.e_shapeTypeCount;o++)this.m_registers[j][o]=new V}this.AddType(w.Create,w.Destroy,y.e_circleShape,y.e_circleShape);this.AddType(Y.Create,Y.Destroy,y.e_polygonShape,y.e_circleShape);this.AddType(z.Create,z.Destroy,y.e_polygonShape,y.e_polygonShape);this.AddType(I.Create,I.Destroy,y.e_edgeShape,y.e_circleShape);this.AddType(k.Create,k.Destroy, >+y.e_polygonShape,y.e_edgeShape)};Q.prototype.Create=function(j,o){var q=parseInt(j.GetType()),n=parseInt(o.GetType());q=this.m_registers[q][n];if(q.pool){n=q.pool;q.pool=n.m_next;q.poolCount--;n.Reset(j,o);return n}n=q.createFcn;if(n!=null){if(q.primary){n=n(this.m_allocator);n.Reset(j,o)}else{n=n(this.m_allocator);n.Reset(o,j)}return n}else return null};Q.prototype.Destroy=function(j){if(j.m_manifold.m_pointCount>0){j.m_fixtureA.m_body.SetAwake(true);j.m_fixtureB.m_body.SetAwake(true)}var o=parseInt(j.m_fixtureA.GetType()), >+q=parseInt(j.m_fixtureB.GetType());o=this.m_registers[o][q];o.poolCount++;j.m_next=o.pool;o.pool=j;o=o.destroyFcn;o(j,this.m_allocator)};V.b2ContactRegister=function(){};M.b2ContactResult=function(){this.position=new N;this.normal=new N;this.id=new aa};L.b2ContactSolver=function(){this.m_step=new H;this.m_constraints=new Vector};L.prototype.b2ContactSolver=function(){};L.prototype.Initialize=function(j,o,q,n){if(q===undefined)q=0;var a;this.m_step.Set(j);this.m_allocator=n;j=0;for(this.m_constraintCount= >+q;this.m_constraints.length<this.m_constraintCount;)this.m_constraints[this.m_constraints.length]=new U;for(j=0;j<q;++j){a=o[j];n=a.m_fixtureA;var c=a.m_fixtureB,g=n.m_shape.m_radius,b=c.m_shape.m_radius,e=n.m_body,f=c.m_body,m=a.GetManifold(),r=O.b2MixFriction(n.GetFriction(),c.GetFriction()),s=O.b2MixRestitution(n.GetRestitution(),c.GetRestitution()),v=e.m_linearVelocity.x,t=e.m_linearVelocity.y,x=f.m_linearVelocity.x,C=f.m_linearVelocity.y,J=e.m_angularVelocity,T=f.m_angularVelocity;O.b2Assert(m.m_pointCount> >+0);L.s_worldManifold.Initialize(m,e.m_xf,g,f.m_xf,b);c=L.s_worldManifold.m_normal.x;a=L.s_worldManifold.m_normal.y;n=this.m_constraints[j];n.bodyA=e;n.bodyB=f;n.manifold=m;n.normal.x=c;n.normal.y=a;n.pointCount=m.m_pointCount;n.friction=r;n.restitution=s;n.localPlaneNormal.x=m.m_localPlaneNormal.x;n.localPlaneNormal.y=m.m_localPlaneNormal.y;n.localPoint.x=m.m_localPoint.x;n.localPoint.y=m.m_localPoint.y;n.radius=g+b;n.type=m.m_type;for(g=0;g<n.pointCount;++g){r=m.m_points[g];b=n.points[g];b.normalImpulse= >+r.m_normalImpulse;b.tangentImpulse=r.m_tangentImpulse;b.localPoint.SetV(r.m_localPoint);r=b.rA.x=L.s_worldManifold.m_points[g].x-e.m_sweep.c.x;s=b.rA.y=L.s_worldManifold.m_points[g].y-e.m_sweep.c.y;var P=b.rB.x=L.s_worldManifold.m_points[g].x-f.m_sweep.c.x,X=b.rB.y=L.s_worldManifold.m_points[g].y-f.m_sweep.c.y,$=r*a-s*c,ba=P*a-X*c;$*=$;ba*=ba;b.normalMass=1/(e.m_invMass+f.m_invMass+e.m_invI*$+f.m_invI*ba);var ca=e.m_mass*e.m_invMass+f.m_mass*f.m_invMass;ca+=e.m_mass*e.m_invI*$+f.m_mass*f.m_invI*ba; >+b.equalizedMass=1/ca;ba=a;ca=-c;$=r*ca-s*ba;ba=P*ca-X*ba;$*=$;ba*=ba;b.tangentMass=1/(e.m_invMass+f.m_invMass+e.m_invI*$+f.m_invI*ba);b.velocityBias=0;r=n.normal.x*(x+-T*X-v- -J*s)+n.normal.y*(C+T*P-t-J*r);if(r<-O.b2_velocityThreshold)b.velocityBias+=-n.restitution*r}if(n.pointCount==2){C=n.points[0];x=n.points[1];m=e.m_invMass;e=e.m_invI;v=f.m_invMass;f=f.m_invI;t=C.rA.x*a-C.rA.y*c;C=C.rB.x*a-C.rB.y*c;J=x.rA.x*a-x.rA.y*c;x=x.rB.x*a-x.rB.y*c;c=m+v+e*t*t+f*C*C;a=m+v+e*J*J+f*x*x;f=m+v+e*t*J+f*C*x;if(c* >+c<100*(c*a-f*f)){n.K.col1.Set(c,f);n.K.col2.Set(f,a);n.K.GetInverse(n.normalMass)}else n.pointCount=1}}};L.prototype.InitVelocityConstraints=function(j){for(var o=0;o<this.m_constraintCount;++o){var q=this.m_constraints[o],n=q.bodyA,a=q.bodyB,c=n.m_invMass,g=n.m_invI,b=a.m_invMass,e=a.m_invI,f=q.normal.x,m=q.normal.y,r=m,s=-f,v=0,t=0;if(j.warmStarting){t=q.pointCount;for(v=0;v<t;++v){var x=q.points[v];x.normalImpulse*=j.dtRatio;x.tangentImpulse*=j.dtRatio;var C=x.normalImpulse*f+x.tangentImpulse* >+r,J=x.normalImpulse*m+x.tangentImpulse*s;n.m_angularVelocity-=g*(x.rA.x*J-x.rA.y*C);n.m_linearVelocity.x-=c*C;n.m_linearVelocity.y-=c*J;a.m_angularVelocity+=e*(x.rB.x*J-x.rB.y*C);a.m_linearVelocity.x+=b*C;a.m_linearVelocity.y+=b*J}}else{t=q.pointCount;for(v=0;v<t;++v){n=q.points[v];n.normalImpulse=0;n.tangentImpulse=0}}}};L.prototype.SolveVelocityConstraints=function(){for(var j=0,o,q=0,n=0,a=0,c=n=n=q=q=0,g=q=q=0,b=q=a=0,e=0,f,m=0;m<this.m_constraintCount;++m){a=this.m_constraints[m];var r=a.bodyA, >+s=a.bodyB,v=r.m_angularVelocity,t=s.m_angularVelocity,x=r.m_linearVelocity,C=s.m_linearVelocity,J=r.m_invMass,T=r.m_invI,P=s.m_invMass,X=s.m_invI;b=a.normal.x;var $=e=a.normal.y;f=-b;g=a.friction;for(j=0;j<a.pointCount;j++){o=a.points[j];q=C.x-t*o.rB.y-x.x+v*o.rA.y;n=C.y+t*o.rB.x-x.y-v*o.rA.x;q=q*$+n*f;q=o.tangentMass*-q;n=g*o.normalImpulse;n=R.Clamp(o.tangentImpulse+q,-n,n);q=n-o.tangentImpulse;c=q*$;q=q*f;x.x-=J*c;x.y-=J*q;v-=T*(o.rA.x*q-o.rA.y*c);C.x+=P*c;C.y+=P*q;t+=X*(o.rB.x*q-o.rB.y*c);o.tangentImpulse= >+n}parseInt(a.pointCount);if(a.pointCount==1){o=a.points[0];q=C.x+-t*o.rB.y-x.x- -v*o.rA.y;n=C.y+t*o.rB.x-x.y-v*o.rA.x;a=q*b+n*e;q=-o.normalMass*(a-o.velocityBias);n=o.normalImpulse+q;n=n>0?n:0;q=n-o.normalImpulse;c=q*b;q=q*e;x.x-=J*c;x.y-=J*q;v-=T*(o.rA.x*q-o.rA.y*c);C.x+=P*c;C.y+=P*q;t+=X*(o.rB.x*q-o.rB.y*c);o.normalImpulse=n}else{o=a.points[0];j=a.points[1];q=o.normalImpulse;g=j.normalImpulse;var ba=(C.x-t*o.rB.y-x.x+v*o.rA.y)*b+(C.y+t*o.rB.x-x.y-v*o.rA.x)*e,ca=(C.x-t*j.rB.y-x.x+v*j.rA.y)*b+(C.y+ >+t*j.rB.x-x.y-v*j.rA.x)*e;n=ba-o.velocityBias;c=ca-j.velocityBias;f=a.K;n-=f.col1.x*q+f.col2.x*g;for(c-=f.col1.y*q+f.col2.y*g;;){f=a.normalMass;$=-(f.col1.x*n+f.col2.x*c);f=-(f.col1.y*n+f.col2.y*c);if($>=0&&f>=0){q=$-q;g=f-g;a=q*b;q=q*e;b=g*b;e=g*e;x.x-=J*(a+b);x.y-=J*(q+e);v-=T*(o.rA.x*q-o.rA.y*a+j.rA.x*e-j.rA.y*b);C.x+=P*(a+b);C.y+=P*(q+e);t+=X*(o.rB.x*q-o.rB.y*a+j.rB.x*e-j.rB.y*b);o.normalImpulse=$;j.normalImpulse=f;break}$=-o.normalMass*n;f=0;ca=a.K.col1.y*$+c;if($>=0&&ca>=0){q=$-q;g=f-g;a=q*b; >+q=q*e;b=g*b;e=g*e;x.x-=J*(a+b);x.y-=J*(q+e);v-=T*(o.rA.x*q-o.rA.y*a+j.rA.x*e-j.rA.y*b);C.x+=P*(a+b);C.y+=P*(q+e);t+=X*(o.rB.x*q-o.rB.y*a+j.rB.x*e-j.rB.y*b);o.normalImpulse=$;j.normalImpulse=f;break}$=0;f=-j.normalMass*c;ba=a.K.col2.x*f+n;if(f>=0&&ba>=0){q=$-q;g=f-g;a=q*b;q=q*e;b=g*b;e=g*e;x.x-=J*(a+b);x.y-=J*(q+e);v-=T*(o.rA.x*q-o.rA.y*a+j.rA.x*e-j.rA.y*b);C.x+=P*(a+b);C.y+=P*(q+e);t+=X*(o.rB.x*q-o.rB.y*a+j.rB.x*e-j.rB.y*b);o.normalImpulse=$;j.normalImpulse=f;break}f=$=0;ba=n;ca=c;if(ba>=0&&ca>=0){q= >+$-q;g=f-g;a=q*b;q=q*e;b=g*b;e=g*e;x.x-=J*(a+b);x.y-=J*(q+e);v-=T*(o.rA.x*q-o.rA.y*a+j.rA.x*e-j.rA.y*b);C.x+=P*(a+b);C.y+=P*(q+e);t+=X*(o.rB.x*q-o.rB.y*a+j.rB.x*e-j.rB.y*b);o.normalImpulse=$;j.normalImpulse=f;break}break}}r.m_angularVelocity=v;s.m_angularVelocity=t}};L.prototype.FinalizeVelocityConstraints=function(){for(var j=0;j<this.m_constraintCount;++j)for(var o=this.m_constraints[j],q=o.manifold,n=0;n<o.pointCount;++n){var a=q.m_points[n],c=o.points[n];a.m_normalImpulse=c.normalImpulse;a.m_tangentImpulse= >+c.tangentImpulse}};L.prototype.SolvePositionConstraints=function(j){if(j===undefined)j=0;for(var o=0,q=0;q<this.m_constraintCount;q++){var n=this.m_constraints[q],a=n.bodyA,c=n.bodyB,g=a.m_mass*a.m_invMass,b=a.m_mass*a.m_invI,e=c.m_mass*c.m_invMass,f=c.m_mass*c.m_invI;L.s_psm.Initialize(n);for(var m=L.s_psm.m_normal,r=0;r<n.pointCount;r++){var s=n.points[r],v=L.s_psm.m_points[r],t=L.s_psm.m_separations[r],x=v.x-a.m_sweep.c.x,C=v.y-a.m_sweep.c.y,J=v.x-c.m_sweep.c.x;v=v.y-c.m_sweep.c.y;o=o<t?o:t;t= >+R.Clamp(j*(t+O.b2_linearSlop),-O.b2_maxLinearCorrection,0);t=-s.equalizedMass*t;s=t*m.x;t=t*m.y;a.m_sweep.c.x-=g*s;a.m_sweep.c.y-=g*t;a.m_sweep.a-=b*(x*t-C*s);a.SynchronizeTransform();c.m_sweep.c.x+=e*s;c.m_sweep.c.y+=e*t;c.m_sweep.a+=f*(J*t-v*s);c.SynchronizeTransform()}}return o>-1.5*O.b2_linearSlop};Box2D.postDefs.push(function(){Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold=new l;Box2D.Dynamics.Contacts.b2ContactSolver.s_psm=new u});Box2D.inherit(I,Box2D.Dynamics.Contacts.b2Contact); >+I.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;I.b2EdgeAndCircleContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};I.Create=function(){return new I};I.Destroy=function(){};I.prototype.Reset=function(j,o){this.__super.Reset.call(this,j,o)};I.prototype.Evaluate=function(){var j=this.m_fixtureA.GetBody(),o=this.m_fixtureB.GetBody();this.b2CollideEdgeAndCircle(this.m_manifold,this.m_fixtureA.GetShape()instanceof G?this.m_fixtureA.GetShape():null,j.m_xf, >+this.m_fixtureB.GetShape()instanceof F?this.m_fixtureB.GetShape():null,o.m_xf)};I.prototype.b2CollideEdgeAndCircle=function(){};Box2D.inherit(W,Box2D.Dynamics.Contacts.b2Contact);W.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;W.b2NullContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};W.prototype.b2NullContact=function(){this.__super.b2Contact.call(this)};W.prototype.Evaluate=function(){};Box2D.inherit(Y,Box2D.Dynamics.Contacts.b2Contact);Y.prototype.__super= >+Box2D.Dynamics.Contacts.b2Contact.prototype;Y.b2PolyAndCircleContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};Y.Create=function(){return new Y};Y.Destroy=function(){};Y.prototype.Reset=function(j,o){this.__super.Reset.call(this,j,o);O.b2Assert(j.GetType()==y.e_polygonShape);O.b2Assert(o.GetType()==y.e_circleShape)};Y.prototype.Evaluate=function(){var j=this.m_fixtureA.m_body,o=this.m_fixtureB.m_body;S.CollidePolygonAndCircle(this.m_manifold,this.m_fixtureA.GetShape()instanceof >+K?this.m_fixtureA.GetShape():null,j.m_xf,this.m_fixtureB.GetShape()instanceof F?this.m_fixtureB.GetShape():null,o.m_xf)};Box2D.inherit(k,Box2D.Dynamics.Contacts.b2Contact);k.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;k.b2PolyAndEdgeContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};k.Create=function(){return new k};k.Destroy=function(){};k.prototype.Reset=function(j,o){this.__super.Reset.call(this,j,o);O.b2Assert(j.GetType()==y.e_polygonShape); >+O.b2Assert(o.GetType()==y.e_edgeShape)};k.prototype.Evaluate=function(){var j=this.m_fixtureA.GetBody(),o=this.m_fixtureB.GetBody();this.b2CollidePolyAndEdge(this.m_manifold,this.m_fixtureA.GetShape()instanceof K?this.m_fixtureA.GetShape():null,j.m_xf,this.m_fixtureB.GetShape()instanceof G?this.m_fixtureB.GetShape():null,o.m_xf)};k.prototype.b2CollidePolyAndEdge=function(){};Box2D.inherit(z,Box2D.Dynamics.Contacts.b2Contact);z.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;z.b2PolygonContact= >+function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};z.Create=function(){return new z};z.Destroy=function(){};z.prototype.Reset=function(j,o){this.__super.Reset.call(this,j,o)};z.prototype.Evaluate=function(){var j=this.m_fixtureA.GetBody(),o=this.m_fixtureB.GetBody();S.CollidePolygons(this.m_manifold,this.m_fixtureA.GetShape()instanceof K?this.m_fixtureA.GetShape():null,j.m_xf,this.m_fixtureB.GetShape()instanceof K?this.m_fixtureB.GetShape():null,o.m_xf)};u.b2PositionSolverManifold= >+function(){};u.prototype.b2PositionSolverManifold=function(){this.m_normal=new N;this.m_separations=new Vector_a2j_Number(O.b2_maxManifoldPoints);this.m_points=new Vector(O.b2_maxManifoldPoints);for(var j=0;j<O.b2_maxManifoldPoints;j++)this.m_points[j]=new N};u.prototype.Initialize=function(j){O.b2Assert(j.pointCount>0);var o=0,q=0,n=0,a,c=0,g=0;switch(j.type){case Z.e_circles:a=j.bodyA.m_xf.R;n=j.localPoint;o=j.bodyA.m_xf.position.x+(a.col1.x*n.x+a.col2.x*n.y);q=j.bodyA.m_xf.position.y+(a.col1.y* >+n.x+a.col2.y*n.y);a=j.bodyB.m_xf.R;n=j.points[0].localPoint;c=j.bodyB.m_xf.position.x+(a.col1.x*n.x+a.col2.x*n.y);a=j.bodyB.m_xf.position.y+(a.col1.y*n.x+a.col2.y*n.y);n=c-o;g=a-q;var b=n*n+g*g;if(b>Number.MIN_VALUE*Number.MIN_VALUE){b=Math.sqrt(b);this.m_normal.x=n/b;this.m_normal.y=g/b}else{this.m_normal.x=1;this.m_normal.y=0}this.m_points[0].x=0.5*(o+c);this.m_points[0].y=0.5*(q+a);this.m_separations[0]=n*this.m_normal.x+g*this.m_normal.y-j.radius;break;case Z.e_faceA:a=j.bodyA.m_xf.R;n=j.localPlaneNormal; >+this.m_normal.x=a.col1.x*n.x+a.col2.x*n.y;this.m_normal.y=a.col1.y*n.x+a.col2.y*n.y;a=j.bodyA.m_xf.R;n=j.localPoint;c=j.bodyA.m_xf.position.x+(a.col1.x*n.x+a.col2.x*n.y);g=j.bodyA.m_xf.position.y+(a.col1.y*n.x+a.col2.y*n.y);a=j.bodyB.m_xf.R;for(o=0;o<j.pointCount;++o){n=j.points[o].localPoint;q=j.bodyB.m_xf.position.x+(a.col1.x*n.x+a.col2.x*n.y);n=j.bodyB.m_xf.position.y+(a.col1.y*n.x+a.col2.y*n.y);this.m_separations[o]=(q-c)*this.m_normal.x+(n-g)*this.m_normal.y-j.radius;this.m_points[o].x=q;this.m_points[o].y= >+n}break;case Z.e_faceB:a=j.bodyB.m_xf.R;n=j.localPlaneNormal;this.m_normal.x=a.col1.x*n.x+a.col2.x*n.y;this.m_normal.y=a.col1.y*n.x+a.col2.y*n.y;a=j.bodyB.m_xf.R;n=j.localPoint;c=j.bodyB.m_xf.position.x+(a.col1.x*n.x+a.col2.x*n.y);g=j.bodyB.m_xf.position.y+(a.col1.y*n.x+a.col2.y*n.y);a=j.bodyA.m_xf.R;for(o=0;o<j.pointCount;++o){n=j.points[o].localPoint;q=j.bodyA.m_xf.position.x+(a.col1.x*n.x+a.col2.x*n.y);n=j.bodyA.m_xf.position.y+(a.col1.y*n.x+a.col2.y*n.y);this.m_separations[o]=(q-c)*this.m_normal.x+ >+(n-g)*this.m_normal.y-j.radius;this.m_points[o].Set(q,n)}this.m_normal.x*=-1;this.m_normal.y*=-1}};Box2D.postDefs.push(function(){Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointA=new N;Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointB=new N})})(); >+(function(){var F=Box2D.Common.Math.b2Mat22,G=Box2D.Common.Math.b2Math,K=Box2D.Common.Math.b2Vec2,y=Box2D.Common.b2Color,w=Box2D.Dynamics.Controllers.b2BuoyancyController,A=Box2D.Dynamics.Controllers.b2ConstantAccelController,U=Box2D.Dynamics.Controllers.b2ConstantForceController,p=Box2D.Dynamics.Controllers.b2Controller,B=Box2D.Dynamics.Controllers.b2ControllerEdge,Q=Box2D.Dynamics.Controllers.b2GravityController,V=Box2D.Dynamics.Controllers.b2TensorDampingController;Box2D.inherit(w,Box2D.Dynamics.Controllers.b2Controller); >+w.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype;w.b2BuoyancyController=function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.normal=new K(0,-1);this.density=this.offset=0;this.velocity=new K(0,0);this.linearDrag=2;this.angularDrag=1;this.useDensity=false;this.useWorldGravity=true;this.gravity=null};w.prototype.Step=function(){if(this.m_bodyList){if(this.useWorldGravity)this.gravity=this.GetWorld().GetGravity().Copy();for(var M=this.m_bodyList;M;M= >+M.nextBody){var L=M.body;if(L.IsAwake()!=false){for(var I=new K,W=new K,Y=0,k=0,z=L.GetFixtureList();z;z=z.GetNext()){var u=new K,D=z.GetShape().ComputeSubmergedArea(this.normal,this.offset,L.GetTransform(),u);Y+=D;I.x+=D*u.x;I.y+=D*u.y;var H=0;H=1;k+=D*H;W.x+=D*u.x*H;W.y+=D*u.y*H}I.x/=Y;I.y/=Y;W.x/=k;W.y/=k;if(!(Y<Number.MIN_VALUE)){k=this.gravity.GetNegative();k.Multiply(this.density*Y);L.ApplyForce(k,W);W=L.GetLinearVelocityFromWorldPoint(I);W.Subtract(this.velocity);W.Multiply(-this.linearDrag* >+Y);L.ApplyForce(W,I);L.ApplyTorque(-L.GetInertia()/L.GetMass()*Y*L.GetAngularVelocity()*this.angularDrag)}}}}};w.prototype.Draw=function(M){var L=new K,I=new K;L.x=this.normal.x*this.offset+this.normal.y*1E3;L.y=this.normal.y*this.offset-this.normal.x*1E3;I.x=this.normal.x*this.offset-this.normal.y*1E3;I.y=this.normal.y*this.offset+this.normal.x*1E3;var W=new y(0,0,1);M.DrawSegment(L,I,W)};Box2D.inherit(A,Box2D.Dynamics.Controllers.b2Controller);A.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype; >+A.b2ConstantAccelController=function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.A=new K(0,0)};A.prototype.Step=function(M){M=new K(this.A.x*M.dt,this.A.y*M.dt);for(var L=this.m_bodyList;L;L=L.nextBody){var I=L.body;I.IsAwake()&&I.SetLinearVelocity(new K(I.GetLinearVelocity().x+M.x,I.GetLinearVelocity().y+M.y))}};Box2D.inherit(U,Box2D.Dynamics.Controllers.b2Controller);U.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype;U.b2ConstantForceController= >+function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.F=new K(0,0)};U.prototype.Step=function(){for(var M=this.m_bodyList;M;M=M.nextBody){var L=M.body;L.IsAwake()&&L.ApplyForce(this.F,L.GetWorldCenter())}};p.b2Controller=function(){};p.prototype.Step=function(){};p.prototype.Draw=function(){};p.prototype.AddBody=function(M){var L=new B;L.controller=this;L.body=M;L.nextBody=this.m_bodyList;L.prevBody=null;this.m_bodyList=L;if(L.nextBody)L.nextBody.prevBody=L;this.m_bodyCount++; >+L.nextController=M.m_controllerList;L.prevController=null;M.m_controllerList=L;if(L.nextController)L.nextController.prevController=L;M.m_controllerCount++};p.prototype.RemoveBody=function(M){for(var L=M.m_controllerList;L&&L.controller!=this;)L=L.nextController;if(L.prevBody)L.prevBody.nextBody=L.nextBody;if(L.nextBody)L.nextBody.prevBody=L.prevBody;if(L.nextController)L.nextController.prevController=L.prevController;if(L.prevController)L.prevController.nextController=L.nextController;if(this.m_bodyList== >+L)this.m_bodyList=L.nextBody;if(M.m_controllerList==L)M.m_controllerList=L.nextController;M.m_controllerCount--;this.m_bodyCount--};p.prototype.Clear=function(){for(;this.m_bodyList;)this.RemoveBody(this.m_bodyList.body)};p.prototype.GetNext=function(){return this.m_next};p.prototype.GetWorld=function(){return this.m_world};p.prototype.GetBodyList=function(){return this.m_bodyList};B.b2ControllerEdge=function(){};Box2D.inherit(Q,Box2D.Dynamics.Controllers.b2Controller);Q.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype; >+Q.b2GravityController=function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.G=1;this.invSqr=true};Q.prototype.Step=function(){var M=null,L=null,I=null,W=0,Y=null,k=null,z=null,u=0,D=0,H=0;u=null;if(this.invSqr)for(M=this.m_bodyList;M;M=M.nextBody){L=M.body;I=L.GetWorldCenter();W=L.GetMass();for(Y=this.m_bodyList;Y!=M;Y=Y.nextBody){k=Y.body;z=k.GetWorldCenter();u=z.x-I.x;D=z.y-I.y;H=u*u+D*D;if(!(H<Number.MIN_VALUE)){u=new K(u,D);u.Multiply(this.G/H/Math.sqrt(H)* >+W*k.GetMass());L.IsAwake()&&L.ApplyForce(u,I);u.Multiply(-1);k.IsAwake()&&k.ApplyForce(u,z)}}}else for(M=this.m_bodyList;M;M=M.nextBody){L=M.body;I=L.GetWorldCenter();W=L.GetMass();for(Y=this.m_bodyList;Y!=M;Y=Y.nextBody){k=Y.body;z=k.GetWorldCenter();u=z.x-I.x;D=z.y-I.y;H=u*u+D*D;if(!(H<Number.MIN_VALUE)){u=new K(u,D);u.Multiply(this.G/H*W*k.GetMass());L.IsAwake()&&L.ApplyForce(u,I);u.Multiply(-1);k.IsAwake()&&k.ApplyForce(u,z)}}}};Box2D.inherit(V,Box2D.Dynamics.Controllers.b2Controller);V.prototype.__super= >+Box2D.Dynamics.Controllers.b2Controller.prototype;V.b2TensorDampingController=function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.T=new F;this.maxTimestep=0};V.prototype.SetAxisAligned=function(M,L){if(M===undefined)M=0;if(L===undefined)L=0;this.T.col1.x=-M;this.T.col1.y=0;this.T.col2.x=0;this.T.col2.y=-L;this.maxTimestep=M>0||L>0?1/Math.max(M,L):0};V.prototype.Step=function(M){M=M.dt;if(!(M<=Number.MIN_VALUE)){if(M>this.maxTimestep&&this.maxTimestep>0)M=this.maxTimestep; >+for(var L=this.m_bodyList;L;L=L.nextBody){var I=L.body;if(I.IsAwake()){var W=I.GetWorldVector(G.MulMV(this.T,I.GetLocalVector(I.GetLinearVelocity())));I.SetLinearVelocity(new K(I.GetLinearVelocity().x+W.x*M,I.GetLinearVelocity().y+W.y*M))}}}}})(); >+(function(){var F=Box2D.Common.b2Settings,G=Box2D.Common.Math.b2Mat22,K=Box2D.Common.Math.b2Mat33,y=Box2D.Common.Math.b2Math,w=Box2D.Common.Math.b2Vec2,A=Box2D.Common.Math.b2Vec3,U=Box2D.Dynamics.Joints.b2DistanceJoint,p=Box2D.Dynamics.Joints.b2DistanceJointDef,B=Box2D.Dynamics.Joints.b2FrictionJoint,Q=Box2D.Dynamics.Joints.b2FrictionJointDef,V=Box2D.Dynamics.Joints.b2GearJoint,M=Box2D.Dynamics.Joints.b2GearJointDef,L=Box2D.Dynamics.Joints.b2Jacobian,I=Box2D.Dynamics.Joints.b2Joint,W=Box2D.Dynamics.Joints.b2JointDef, >+Y=Box2D.Dynamics.Joints.b2JointEdge,k=Box2D.Dynamics.Joints.b2LineJoint,z=Box2D.Dynamics.Joints.b2LineJointDef,u=Box2D.Dynamics.Joints.b2MouseJoint,D=Box2D.Dynamics.Joints.b2MouseJointDef,H=Box2D.Dynamics.Joints.b2PrismaticJoint,O=Box2D.Dynamics.Joints.b2PrismaticJointDef,E=Box2D.Dynamics.Joints.b2PulleyJoint,R=Box2D.Dynamics.Joints.b2PulleyJointDef,N=Box2D.Dynamics.Joints.b2RevoluteJoint,S=Box2D.Dynamics.Joints.b2RevoluteJointDef,aa=Box2D.Dynamics.Joints.b2WeldJoint,Z=Box2D.Dynamics.Joints.b2WeldJointDef; >+Box2D.inherit(U,Box2D.Dynamics.Joints.b2Joint);U.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;U.b2DistanceJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchor1=new w;this.m_localAnchor2=new w;this.m_u=new w};U.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};U.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};U.prototype.GetReactionForce=function(d){if(d===undefined)d= >+0;return new w(d*this.m_impulse*this.m_u.x,d*this.m_impulse*this.m_u.y)};U.prototype.GetReactionTorque=function(){return 0};U.prototype.GetLength=function(){return this.m_length};U.prototype.SetLength=function(d){if(d===undefined)d=0;this.m_length=d};U.prototype.GetFrequency=function(){return this.m_frequencyHz};U.prototype.SetFrequency=function(d){if(d===undefined)d=0;this.m_frequencyHz=d};U.prototype.GetDampingRatio=function(){return this.m_dampingRatio};U.prototype.SetDampingRatio=function(d){if(d=== >+undefined)d=0;this.m_dampingRatio=d};U.prototype.b2DistanceJoint=function(d){this.__super.b2Joint.call(this,d);this.m_localAnchor1.SetV(d.localAnchorA);this.m_localAnchor2.SetV(d.localAnchorB);this.m_length=d.length;this.m_frequencyHz=d.frequencyHz;this.m_dampingRatio=d.dampingRatio;this.m_bias=this.m_gamma=this.m_impulse=0};U.prototype.InitVelocityConstraints=function(d){var h,l=0,j=this.m_bodyA,o=this.m_bodyB;h=j.m_xf.R;var q=this.m_localAnchor1.x-j.m_sweep.localCenter.x,n=this.m_localAnchor1.y- >+j.m_sweep.localCenter.y;l=h.col1.x*q+h.col2.x*n;n=h.col1.y*q+h.col2.y*n;q=l;h=o.m_xf.R;var a=this.m_localAnchor2.x-o.m_sweep.localCenter.x,c=this.m_localAnchor2.y-o.m_sweep.localCenter.y;l=h.col1.x*a+h.col2.x*c;c=h.col1.y*a+h.col2.y*c;a=l;this.m_u.x=o.m_sweep.c.x+a-j.m_sweep.c.x-q;this.m_u.y=o.m_sweep.c.y+c-j.m_sweep.c.y-n;l=Math.sqrt(this.m_u.x*this.m_u.x+this.m_u.y*this.m_u.y);l>F.b2_linearSlop?this.m_u.Multiply(1/l):this.m_u.SetZero();h=q*this.m_u.y-n*this.m_u.x;var g=a*this.m_u.y-c*this.m_u.x; >+h=j.m_invMass+j.m_invI*h*h+o.m_invMass+o.m_invI*g*g;this.m_mass=h!=0?1/h:0;if(this.m_frequencyHz>0){l=l-this.m_length;g=2*Math.PI*this.m_frequencyHz;var b=this.m_mass*g*g;this.m_gamma=d.dt*(2*this.m_mass*this.m_dampingRatio*g+d.dt*b);this.m_gamma=this.m_gamma!=0?1/this.m_gamma:0;this.m_bias=l*d.dt*b*this.m_gamma;this.m_mass=h+this.m_gamma;this.m_mass=this.m_mass!=0?1/this.m_mass:0}if(d.warmStarting){this.m_impulse*=d.dtRatio;d=this.m_impulse*this.m_u.x;h=this.m_impulse*this.m_u.y;j.m_linearVelocity.x-= >+j.m_invMass*d;j.m_linearVelocity.y-=j.m_invMass*h;j.m_angularVelocity-=j.m_invI*(q*h-n*d);o.m_linearVelocity.x+=o.m_invMass*d;o.m_linearVelocity.y+=o.m_invMass*h;o.m_angularVelocity+=o.m_invI*(a*h-c*d)}else this.m_impulse=0};U.prototype.SolveVelocityConstraints=function(){var d,h=this.m_bodyA,l=this.m_bodyB;d=h.m_xf.R;var j=this.m_localAnchor1.x-h.m_sweep.localCenter.x,o=this.m_localAnchor1.y-h.m_sweep.localCenter.y,q=d.col1.x*j+d.col2.x*o;o=d.col1.y*j+d.col2.y*o;j=q;d=l.m_xf.R;var n=this.m_localAnchor2.x- >+l.m_sweep.localCenter.x,a=this.m_localAnchor2.y-l.m_sweep.localCenter.y;q=d.col1.x*n+d.col2.x*a;a=d.col1.y*n+d.col2.y*a;n=q;q=-this.m_mass*(this.m_u.x*(l.m_linearVelocity.x+-l.m_angularVelocity*a-(h.m_linearVelocity.x+-h.m_angularVelocity*o))+this.m_u.y*(l.m_linearVelocity.y+l.m_angularVelocity*n-(h.m_linearVelocity.y+h.m_angularVelocity*j))+this.m_bias+this.m_gamma*this.m_impulse);this.m_impulse+=q;d=q*this.m_u.x;q=q*this.m_u.y;h.m_linearVelocity.x-=h.m_invMass*d;h.m_linearVelocity.y-=h.m_invMass* >+q;h.m_angularVelocity-=h.m_invI*(j*q-o*d);l.m_linearVelocity.x+=l.m_invMass*d;l.m_linearVelocity.y+=l.m_invMass*q;l.m_angularVelocity+=l.m_invI*(n*q-a*d)};U.prototype.SolvePositionConstraints=function(){var d;if(this.m_frequencyHz>0)return true;var h=this.m_bodyA,l=this.m_bodyB;d=h.m_xf.R;var j=this.m_localAnchor1.x-h.m_sweep.localCenter.x,o=this.m_localAnchor1.y-h.m_sweep.localCenter.y,q=d.col1.x*j+d.col2.x*o;o=d.col1.y*j+d.col2.y*o;j=q;d=l.m_xf.R;var n=this.m_localAnchor2.x-l.m_sweep.localCenter.x, >+a=this.m_localAnchor2.y-l.m_sweep.localCenter.y;q=d.col1.x*n+d.col2.x*a;a=d.col1.y*n+d.col2.y*a;n=q;q=l.m_sweep.c.x+n-h.m_sweep.c.x-j;var c=l.m_sweep.c.y+a-h.m_sweep.c.y-o;d=Math.sqrt(q*q+c*c);q/=d;c/=d;d=d-this.m_length;d=y.Clamp(d,-F.b2_maxLinearCorrection,F.b2_maxLinearCorrection);var g=-this.m_mass*d;this.m_u.Set(q,c);q=g*this.m_u.x;c=g*this.m_u.y;h.m_sweep.c.x-=h.m_invMass*q;h.m_sweep.c.y-=h.m_invMass*c;h.m_sweep.a-=h.m_invI*(j*c-o*q);l.m_sweep.c.x+=l.m_invMass*q;l.m_sweep.c.y+=l.m_invMass*c; >+l.m_sweep.a+=l.m_invI*(n*c-a*q);h.SynchronizeTransform();l.SynchronizeTransform();return y.Abs(d)<F.b2_linearSlop};Box2D.inherit(p,Box2D.Dynamics.Joints.b2JointDef);p.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;p.b2DistanceJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA=new w;this.localAnchorB=new w};p.prototype.b2DistanceJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_distanceJoint;this.length=1;this.dampingRatio= >+this.frequencyHz=0};p.prototype.Initialize=function(d,h,l,j){this.bodyA=d;this.bodyB=h;this.localAnchorA.SetV(this.bodyA.GetLocalPoint(l));this.localAnchorB.SetV(this.bodyB.GetLocalPoint(j));d=j.x-l.x;l=j.y-l.y;this.length=Math.sqrt(d*d+l*l);this.dampingRatio=this.frequencyHz=0};Box2D.inherit(B,Box2D.Dynamics.Joints.b2Joint);B.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;B.b2FrictionJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchorA=new w; >+this.m_localAnchorB=new w;this.m_linearMass=new G;this.m_linearImpulse=new w};B.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchorA)};B.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchorB)};B.prototype.GetReactionForce=function(d){if(d===undefined)d=0;return new w(d*this.m_linearImpulse.x,d*this.m_linearImpulse.y)};B.prototype.GetReactionTorque=function(d){if(d===undefined)d=0;return d*this.m_angularImpulse};B.prototype.SetMaxForce= >+function(d){if(d===undefined)d=0;this.m_maxForce=d};B.prototype.GetMaxForce=function(){return this.m_maxForce};B.prototype.SetMaxTorque=function(d){if(d===undefined)d=0;this.m_maxTorque=d};B.prototype.GetMaxTorque=function(){return this.m_maxTorque};B.prototype.b2FrictionJoint=function(d){this.__super.b2Joint.call(this,d);this.m_localAnchorA.SetV(d.localAnchorA);this.m_localAnchorB.SetV(d.localAnchorB);this.m_linearMass.SetZero();this.m_angularMass=0;this.m_linearImpulse.SetZero();this.m_angularImpulse= >+0;this.m_maxForce=d.maxForce;this.m_maxTorque=d.maxTorque};B.prototype.InitVelocityConstraints=function(d){var h,l=0,j=this.m_bodyA,o=this.m_bodyB;h=j.m_xf.R;var q=this.m_localAnchorA.x-j.m_sweep.localCenter.x,n=this.m_localAnchorA.y-j.m_sweep.localCenter.y;l=h.col1.x*q+h.col2.x*n;n=h.col1.y*q+h.col2.y*n;q=l;h=o.m_xf.R;var a=this.m_localAnchorB.x-o.m_sweep.localCenter.x,c=this.m_localAnchorB.y-o.m_sweep.localCenter.y;l=h.col1.x*a+h.col2.x*c;c=h.col1.y*a+h.col2.y*c;a=l;h=j.m_invMass;l=o.m_invMass; >+var g=j.m_invI,b=o.m_invI,e=new G;e.col1.x=h+l;e.col2.x=0;e.col1.y=0;e.col2.y=h+l;e.col1.x+=g*n*n;e.col2.x+=-g*q*n;e.col1.y+=-g*q*n;e.col2.y+=g*q*q;e.col1.x+=b*c*c;e.col2.x+=-b*a*c;e.col1.y+=-b*a*c;e.col2.y+=b*a*a;e.GetInverse(this.m_linearMass);this.m_angularMass=g+b;if(this.m_angularMass>0)this.m_angularMass=1/this.m_angularMass;if(d.warmStarting){this.m_linearImpulse.x*=d.dtRatio;this.m_linearImpulse.y*=d.dtRatio;this.m_angularImpulse*=d.dtRatio;d=this.m_linearImpulse;j.m_linearVelocity.x-=h*d.x; >+j.m_linearVelocity.y-=h*d.y;j.m_angularVelocity-=g*(q*d.y-n*d.x+this.m_angularImpulse);o.m_linearVelocity.x+=l*d.x;o.m_linearVelocity.y+=l*d.y;o.m_angularVelocity+=b*(a*d.y-c*d.x+this.m_angularImpulse)}else{this.m_linearImpulse.SetZero();this.m_angularImpulse=0}};B.prototype.SolveVelocityConstraints=function(d){var h,l=0,j=this.m_bodyA,o=this.m_bodyB,q=j.m_linearVelocity,n=j.m_angularVelocity,a=o.m_linearVelocity,c=o.m_angularVelocity,g=j.m_invMass,b=o.m_invMass,e=j.m_invI,f=o.m_invI;h=j.m_xf.R;var m= >+this.m_localAnchorA.x-j.m_sweep.localCenter.x,r=this.m_localAnchorA.y-j.m_sweep.localCenter.y;l=h.col1.x*m+h.col2.x*r;r=h.col1.y*m+h.col2.y*r;m=l;h=o.m_xf.R;var s=this.m_localAnchorB.x-o.m_sweep.localCenter.x,v=this.m_localAnchorB.y-o.m_sweep.localCenter.y;l=h.col1.x*s+h.col2.x*v;v=h.col1.y*s+h.col2.y*v;s=l;h=0;l=-this.m_angularMass*(c-n);var t=this.m_angularImpulse;h=d.dt*this.m_maxTorque;this.m_angularImpulse=y.Clamp(this.m_angularImpulse+l,-h,h);l=this.m_angularImpulse-t;n-=e*l;c+=f*l;h=y.MulMV(this.m_linearMass, >+new w(-(a.x-c*v-q.x+n*r),-(a.y+c*s-q.y-n*m)));l=this.m_linearImpulse.Copy();this.m_linearImpulse.Add(h);h=d.dt*this.m_maxForce;if(this.m_linearImpulse.LengthSquared()>h*h){this.m_linearImpulse.Normalize();this.m_linearImpulse.Multiply(h)}h=y.SubtractVV(this.m_linearImpulse,l);q.x-=g*h.x;q.y-=g*h.y;n-=e*(m*h.y-r*h.x);a.x+=b*h.x;a.y+=b*h.y;c+=f*(s*h.y-v*h.x);j.m_angularVelocity=n;o.m_angularVelocity=c};B.prototype.SolvePositionConstraints=function(){return true};Box2D.inherit(Q,Box2D.Dynamics.Joints.b2JointDef); >+Q.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;Q.b2FrictionJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA=new w;this.localAnchorB=new w};Q.prototype.b2FrictionJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_frictionJoint;this.maxTorque=this.maxForce=0};Q.prototype.Initialize=function(d,h,l){this.bodyA=d;this.bodyB=h;this.localAnchorA.SetV(this.bodyA.GetLocalPoint(l));this.localAnchorB.SetV(this.bodyB.GetLocalPoint(l))}; >+Box2D.inherit(V,Box2D.Dynamics.Joints.b2Joint);V.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;V.b2GearJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_groundAnchor1=new w;this.m_groundAnchor2=new w;this.m_localAnchor1=new w;this.m_localAnchor2=new w;this.m_J=new L};V.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};V.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};V.prototype.GetReactionForce= >+function(d){if(d===undefined)d=0;return new w(d*this.m_impulse*this.m_J.linearB.x,d*this.m_impulse*this.m_J.linearB.y)};V.prototype.GetReactionTorque=function(d){if(d===undefined)d=0;var h=this.m_bodyB.m_xf.R,l=this.m_localAnchor1.x-this.m_bodyB.m_sweep.localCenter.x,j=this.m_localAnchor1.y-this.m_bodyB.m_sweep.localCenter.y,o=h.col1.x*l+h.col2.x*j;j=h.col1.y*l+h.col2.y*j;l=o;return d*(this.m_impulse*this.m_J.angularB-l*this.m_impulse*this.m_J.linearB.y+j*this.m_impulse*this.m_J.linearB.x)};V.prototype.GetRatio= >+function(){return this.m_ratio};V.prototype.SetRatio=function(d){if(d===undefined)d=0;this.m_ratio=d};V.prototype.b2GearJoint=function(d){this.__super.b2Joint.call(this,d);var h=parseInt(d.joint1.m_type),l=parseInt(d.joint2.m_type);this.m_prismatic2=this.m_revolute2=this.m_prismatic1=this.m_revolute1=null;var j=0,o=0;this.m_ground1=d.joint1.GetBodyA();this.m_bodyA=d.joint1.GetBodyB();if(h==I.e_revoluteJoint){this.m_revolute1=d.joint1 instanceof N?d.joint1:null;this.m_groundAnchor1.SetV(this.m_revolute1.m_localAnchor1); >+this.m_localAnchor1.SetV(this.m_revolute1.m_localAnchor2);j=this.m_revolute1.GetJointAngle()}else{this.m_prismatic1=d.joint1 instanceof H?d.joint1:null;this.m_groundAnchor1.SetV(this.m_prismatic1.m_localAnchor1);this.m_localAnchor1.SetV(this.m_prismatic1.m_localAnchor2);j=this.m_prismatic1.GetJointTranslation()}this.m_ground2=d.joint2.GetBodyA();this.m_bodyB=d.joint2.GetBodyB();if(l==I.e_revoluteJoint){this.m_revolute2=d.joint2 instanceof N?d.joint2:null;this.m_groundAnchor2.SetV(this.m_revolute2.m_localAnchor1); >+this.m_localAnchor2.SetV(this.m_revolute2.m_localAnchor2);o=this.m_revolute2.GetJointAngle()}else{this.m_prismatic2=d.joint2 instanceof H?d.joint2:null;this.m_groundAnchor2.SetV(this.m_prismatic2.m_localAnchor1);this.m_localAnchor2.SetV(this.m_prismatic2.m_localAnchor2);o=this.m_prismatic2.GetJointTranslation()}this.m_ratio=d.ratio;this.m_constant=j+this.m_ratio*o;this.m_impulse=0};V.prototype.InitVelocityConstraints=function(d){var h=this.m_ground1,l=this.m_ground2,j=this.m_bodyA,o=this.m_bodyB, >+q=0,n=0,a=0,c=0,g=a=0,b=0;this.m_J.SetZero();if(this.m_revolute1){this.m_J.angularA=-1;b+=j.m_invI}else{h=h.m_xf.R;n=this.m_prismatic1.m_localXAxis1;q=h.col1.x*n.x+h.col2.x*n.y;n=h.col1.y*n.x+h.col2.y*n.y;h=j.m_xf.R;a=this.m_localAnchor1.x-j.m_sweep.localCenter.x;c=this.m_localAnchor1.y-j.m_sweep.localCenter.y;g=h.col1.x*a+h.col2.x*c;c=h.col1.y*a+h.col2.y*c;a=g;a=a*n-c*q;this.m_J.linearA.Set(-q,-n);this.m_J.angularA=-a;b+=j.m_invMass+j.m_invI*a*a}if(this.m_revolute2){this.m_J.angularB=-this.m_ratio; >+b+=this.m_ratio*this.m_ratio*o.m_invI}else{h=l.m_xf.R;n=this.m_prismatic2.m_localXAxis1;q=h.col1.x*n.x+h.col2.x*n.y;n=h.col1.y*n.x+h.col2.y*n.y;h=o.m_xf.R;a=this.m_localAnchor2.x-o.m_sweep.localCenter.x;c=this.m_localAnchor2.y-o.m_sweep.localCenter.y;g=h.col1.x*a+h.col2.x*c;c=h.col1.y*a+h.col2.y*c;a=g;a=a*n-c*q;this.m_J.linearB.Set(-this.m_ratio*q,-this.m_ratio*n);this.m_J.angularB=-this.m_ratio*a;b+=this.m_ratio*this.m_ratio*(o.m_invMass+o.m_invI*a*a)}this.m_mass=b>0?1/b:0;if(d.warmStarting){j.m_linearVelocity.x+= >+j.m_invMass*this.m_impulse*this.m_J.linearA.x;j.m_linearVelocity.y+=j.m_invMass*this.m_impulse*this.m_J.linearA.y;j.m_angularVelocity+=j.m_invI*this.m_impulse*this.m_J.angularA;o.m_linearVelocity.x+=o.m_invMass*this.m_impulse*this.m_J.linearB.x;o.m_linearVelocity.y+=o.m_invMass*this.m_impulse*this.m_J.linearB.y;o.m_angularVelocity+=o.m_invI*this.m_impulse*this.m_J.angularB}else this.m_impulse=0};V.prototype.SolveVelocityConstraints=function(){var d=this.m_bodyA,h=this.m_bodyB,l=-this.m_mass*this.m_J.Compute(d.m_linearVelocity, >+d.m_angularVelocity,h.m_linearVelocity,h.m_angularVelocity);this.m_impulse+=l;d.m_linearVelocity.x+=d.m_invMass*l*this.m_J.linearA.x;d.m_linearVelocity.y+=d.m_invMass*l*this.m_J.linearA.y;d.m_angularVelocity+=d.m_invI*l*this.m_J.angularA;h.m_linearVelocity.x+=h.m_invMass*l*this.m_J.linearB.x;h.m_linearVelocity.y+=h.m_invMass*l*this.m_J.linearB.y;h.m_angularVelocity+=h.m_invI*l*this.m_J.angularB};V.prototype.SolvePositionConstraints=function(){var d=this.m_bodyA,h=this.m_bodyB,l=0,j=0;l=this.m_revolute1? >+this.m_revolute1.GetJointAngle():this.m_prismatic1.GetJointTranslation();j=this.m_revolute2?this.m_revolute2.GetJointAngle():this.m_prismatic2.GetJointTranslation();l=-this.m_mass*(this.m_constant-(l+this.m_ratio*j));d.m_sweep.c.x+=d.m_invMass*l*this.m_J.linearA.x;d.m_sweep.c.y+=d.m_invMass*l*this.m_J.linearA.y;d.m_sweep.a+=d.m_invI*l*this.m_J.angularA;h.m_sweep.c.x+=h.m_invMass*l*this.m_J.linearB.x;h.m_sweep.c.y+=h.m_invMass*l*this.m_J.linearB.y;h.m_sweep.a+=h.m_invI*l*this.m_J.angularB;d.SynchronizeTransform(); >+h.SynchronizeTransform();return 0<F.b2_linearSlop};Box2D.inherit(M,Box2D.Dynamics.Joints.b2JointDef);M.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;M.b2GearJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments)};M.prototype.b2GearJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_gearJoint;this.joint2=this.joint1=null;this.ratio=1};L.b2Jacobian=function(){this.linearA=new w;this.linearB=new w};L.prototype.SetZero=function(){this.linearA.SetZero(); >+this.angularA=0;this.linearB.SetZero();this.angularB=0};L.prototype.Set=function(d,h,l,j){if(h===undefined)h=0;if(j===undefined)j=0;this.linearA.SetV(d);this.angularA=h;this.linearB.SetV(l);this.angularB=j};L.prototype.Compute=function(d,h,l,j){if(h===undefined)h=0;if(j===undefined)j=0;return this.linearA.x*d.x+this.linearA.y*d.y+this.angularA*h+(this.linearB.x*l.x+this.linearB.y*l.y)+this.angularB*j};I.b2Joint=function(){this.m_edgeA=new Y;this.m_edgeB=new Y;this.m_localCenterA=new w;this.m_localCenterB= >+new w};I.prototype.GetType=function(){return this.m_type};I.prototype.GetAnchorA=function(){return null};I.prototype.GetAnchorB=function(){return null};I.prototype.GetReactionForce=function(){return null};I.prototype.GetReactionTorque=function(){return 0};I.prototype.GetBodyA=function(){return this.m_bodyA};I.prototype.GetBodyB=function(){return this.m_bodyB};I.prototype.GetNext=function(){return this.m_next};I.prototype.GetUserData=function(){return this.m_userData};I.prototype.SetUserData=function(d){this.m_userData= >+d};I.prototype.IsActive=function(){return this.m_bodyA.IsActive()&&this.m_bodyB.IsActive()};I.Create=function(d){var h=null;switch(d.type){case I.e_distanceJoint:h=new U(d instanceof p?d:null);break;case I.e_mouseJoint:h=new u(d instanceof D?d:null);break;case I.e_prismaticJoint:h=new H(d instanceof O?d:null);break;case I.e_revoluteJoint:h=new N(d instanceof S?d:null);break;case I.e_pulleyJoint:h=new E(d instanceof R?d:null);break;case I.e_gearJoint:h=new V(d instanceof M?d:null);break;case I.e_lineJoint:h= >+new k(d instanceof z?d:null);break;case I.e_weldJoint:h=new aa(d instanceof Z?d:null);break;case I.e_frictionJoint:h=new B(d instanceof Q?d:null)}return h};I.Destroy=function(){};I.prototype.b2Joint=function(d){F.b2Assert(d.bodyA!=d.bodyB);this.m_type=d.type;this.m_next=this.m_prev=null;this.m_bodyA=d.bodyA;this.m_bodyB=d.bodyB;this.m_collideConnected=d.collideConnected;this.m_islandFlag=false;this.m_userData=d.userData};I.prototype.InitVelocityConstraints=function(){};I.prototype.SolveVelocityConstraints= >+function(){};I.prototype.FinalizeVelocityConstraints=function(){};I.prototype.SolvePositionConstraints=function(){return false};Box2D.postDefs.push(function(){Box2D.Dynamics.Joints.b2Joint.e_unknownJoint=0;Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint=1;Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint=2;Box2D.Dynamics.Joints.b2Joint.e_distanceJoint=3;Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint=4;Box2D.Dynamics.Joints.b2Joint.e_mouseJoint=5;Box2D.Dynamics.Joints.b2Joint.e_gearJoint=6;Box2D.Dynamics.Joints.b2Joint.e_lineJoint= >+7;Box2D.Dynamics.Joints.b2Joint.e_weldJoint=8;Box2D.Dynamics.Joints.b2Joint.e_frictionJoint=9;Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit=0;Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit=1;Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit=2;Box2D.Dynamics.Joints.b2Joint.e_equalLimits=3});W.b2JointDef=function(){};W.prototype.b2JointDef=function(){this.type=I.e_unknownJoint;this.bodyB=this.bodyA=this.userData=null;this.collideConnected=false};Y.b2JointEdge=function(){};Box2D.inherit(k,Box2D.Dynamics.Joints.b2Joint); >+k.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;k.b2LineJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchor1=new w;this.m_localAnchor2=new w;this.m_localXAxis1=new w;this.m_localYAxis1=new w;this.m_axis=new w;this.m_perp=new w;this.m_K=new G;this.m_impulse=new w};k.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};k.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};k.prototype.GetReactionForce= >+function(d){if(d===undefined)d=0;return new w(d*(this.m_impulse.x*this.m_perp.x+(this.m_motorImpulse+this.m_impulse.y)*this.m_axis.x),d*(this.m_impulse.x*this.m_perp.y+(this.m_motorImpulse+this.m_impulse.y)*this.m_axis.y))};k.prototype.GetReactionTorque=function(d){if(d===undefined)d=0;return d*this.m_impulse.y};k.prototype.GetJointTranslation=function(){var d=this.m_bodyA,h=this.m_bodyB,l=d.GetWorldPoint(this.m_localAnchor1),j=h.GetWorldPoint(this.m_localAnchor2);h=j.x-l.x;l=j.y-l.y;d=d.GetWorldVector(this.m_localXAxis1); >+return d.x*h+d.y*l};k.prototype.GetJointSpeed=function(){var d=this.m_bodyA,h=this.m_bodyB,l;l=d.m_xf.R;var j=this.m_localAnchor1.x-d.m_sweep.localCenter.x,o=this.m_localAnchor1.y-d.m_sweep.localCenter.y,q=l.col1.x*j+l.col2.x*o;o=l.col1.y*j+l.col2.y*o;j=q;l=h.m_xf.R;var n=this.m_localAnchor2.x-h.m_sweep.localCenter.x,a=this.m_localAnchor2.y-h.m_sweep.localCenter.y;q=l.col1.x*n+l.col2.x*a;a=l.col1.y*n+l.col2.y*a;n=q;l=h.m_sweep.c.x+n-(d.m_sweep.c.x+j);q=h.m_sweep.c.y+a-(d.m_sweep.c.y+o);var c=d.GetWorldVector(this.m_localXAxis1), >+g=d.m_linearVelocity,b=h.m_linearVelocity;d=d.m_angularVelocity;h=h.m_angularVelocity;return l*-d*c.y+q*d*c.x+(c.x*(b.x+-h*a-g.x- -d*o)+c.y*(b.y+h*n-g.y-d*j))};k.prototype.IsLimitEnabled=function(){return this.m_enableLimit};k.prototype.EnableLimit=function(d){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_enableLimit=d};k.prototype.GetLowerLimit=function(){return this.m_lowerTranslation};k.prototype.GetUpperLimit=function(){return this.m_upperTranslation};k.prototype.SetLimits=function(d, >+h){if(d===undefined)d=0;if(h===undefined)h=0;this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_lowerTranslation=d;this.m_upperTranslation=h};k.prototype.IsMotorEnabled=function(){return this.m_enableMotor};k.prototype.EnableMotor=function(d){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_enableMotor=d};k.prototype.SetMotorSpeed=function(d){if(d===undefined)d=0;this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_motorSpeed=d};k.prototype.GetMotorSpeed=function(){return this.m_motorSpeed}; >+k.prototype.SetMaxMotorForce=function(d){if(d===undefined)d=0;this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_maxMotorForce=d};k.prototype.GetMaxMotorForce=function(){return this.m_maxMotorForce};k.prototype.GetMotorForce=function(){return this.m_motorImpulse};k.prototype.b2LineJoint=function(d){this.__super.b2Joint.call(this,d);this.m_localAnchor1.SetV(d.localAnchorA);this.m_localAnchor2.SetV(d.localAnchorB);this.m_localXAxis1.SetV(d.localAxisA);this.m_localYAxis1.x=-this.m_localXAxis1.y; >+this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_impulse.SetZero();this.m_motorImpulse=this.m_motorMass=0;this.m_lowerTranslation=d.lowerTranslation;this.m_upperTranslation=d.upperTranslation;this.m_maxMotorForce=d.maxMotorForce;this.m_motorSpeed=d.motorSpeed;this.m_enableLimit=d.enableLimit;this.m_enableMotor=d.enableMotor;this.m_limitState=I.e_inactiveLimit;this.m_axis.SetZero();this.m_perp.SetZero()};k.prototype.InitVelocityConstraints=function(d){var h=this.m_bodyA,l=this.m_bodyB,j,o=0;this.m_localCenterA.SetV(h.GetLocalCenter()); >+this.m_localCenterB.SetV(l.GetLocalCenter());var q=h.GetTransform();l.GetTransform();j=h.m_xf.R;var n=this.m_localAnchor1.x-this.m_localCenterA.x,a=this.m_localAnchor1.y-this.m_localCenterA.y;o=j.col1.x*n+j.col2.x*a;a=j.col1.y*n+j.col2.y*a;n=o;j=l.m_xf.R;var c=this.m_localAnchor2.x-this.m_localCenterB.x,g=this.m_localAnchor2.y-this.m_localCenterB.y;o=j.col1.x*c+j.col2.x*g;g=j.col1.y*c+j.col2.y*g;c=o;j=l.m_sweep.c.x+c-h.m_sweep.c.x-n;o=l.m_sweep.c.y+g-h.m_sweep.c.y-a;this.m_invMassA=h.m_invMass;this.m_invMassB= >+l.m_invMass;this.m_invIA=h.m_invI;this.m_invIB=l.m_invI;this.m_axis.SetV(y.MulMV(q.R,this.m_localXAxis1));this.m_a1=(j+n)*this.m_axis.y-(o+a)*this.m_axis.x;this.m_a2=c*this.m_axis.y-g*this.m_axis.x;this.m_motorMass=this.m_invMassA+this.m_invMassB+this.m_invIA*this.m_a1*this.m_a1+this.m_invIB*this.m_a2*this.m_a2;this.m_motorMass=this.m_motorMass>Number.MIN_VALUE?1/this.m_motorMass:0;this.m_perp.SetV(y.MulMV(q.R,this.m_localYAxis1));this.m_s1=(j+n)*this.m_perp.y-(o+a)*this.m_perp.x;this.m_s2=c*this.m_perp.y- >+g*this.m_perp.x;q=this.m_invMassA;n=this.m_invMassB;a=this.m_invIA;c=this.m_invIB;this.m_K.col1.x=q+n+a*this.m_s1*this.m_s1+c*this.m_s2*this.m_s2;this.m_K.col1.y=a*this.m_s1*this.m_a1+c*this.m_s2*this.m_a2;this.m_K.col2.x=this.m_K.col1.y;this.m_K.col2.y=q+n+a*this.m_a1*this.m_a1+c*this.m_a2*this.m_a2;if(this.m_enableLimit){j=this.m_axis.x*j+this.m_axis.y*o;if(y.Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*F.b2_linearSlop)this.m_limitState=I.e_equalLimits;else if(j<=this.m_lowerTranslation){if(this.m_limitState!= >+I.e_atLowerLimit){this.m_limitState=I.e_atLowerLimit;this.m_impulse.y=0}}else if(j>=this.m_upperTranslation){if(this.m_limitState!=I.e_atUpperLimit){this.m_limitState=I.e_atUpperLimit;this.m_impulse.y=0}}else{this.m_limitState=I.e_inactiveLimit;this.m_impulse.y=0}}else this.m_limitState=I.e_inactiveLimit;if(this.m_enableMotor==false)this.m_motorImpulse=0;if(d.warmStarting){this.m_impulse.x*=d.dtRatio;this.m_impulse.y*=d.dtRatio;this.m_motorImpulse*=d.dtRatio;d=this.m_impulse.x*this.m_perp.x+(this.m_motorImpulse+ >+this.m_impulse.y)*this.m_axis.x;j=this.m_impulse.x*this.m_perp.y+(this.m_motorImpulse+this.m_impulse.y)*this.m_axis.y;o=this.m_impulse.x*this.m_s1+(this.m_motorImpulse+this.m_impulse.y)*this.m_a1;q=this.m_impulse.x*this.m_s2+(this.m_motorImpulse+this.m_impulse.y)*this.m_a2;h.m_linearVelocity.x-=this.m_invMassA*d;h.m_linearVelocity.y-=this.m_invMassA*j;h.m_angularVelocity-=this.m_invIA*o;l.m_linearVelocity.x+=this.m_invMassB*d;l.m_linearVelocity.y+=this.m_invMassB*j;l.m_angularVelocity+=this.m_invIB* >+q}else{this.m_impulse.SetZero();this.m_motorImpulse=0}};k.prototype.SolveVelocityConstraints=function(d){var h=this.m_bodyA,l=this.m_bodyB,j=h.m_linearVelocity,o=h.m_angularVelocity,q=l.m_linearVelocity,n=l.m_angularVelocity,a=0,c=0,g=0,b=0;if(this.m_enableMotor&&this.m_limitState!=I.e_equalLimits){b=this.m_motorMass*(this.m_motorSpeed-(this.m_axis.x*(q.x-j.x)+this.m_axis.y*(q.y-j.y)+this.m_a2*n-this.m_a1*o));a=this.m_motorImpulse;c=d.dt*this.m_maxMotorForce;this.m_motorImpulse=y.Clamp(this.m_motorImpulse+ >+b,-c,c);b=this.m_motorImpulse-a;a=b*this.m_axis.x;c=b*this.m_axis.y;g=b*this.m_a1;b=b*this.m_a2;j.x-=this.m_invMassA*a;j.y-=this.m_invMassA*c;o-=this.m_invIA*g;q.x+=this.m_invMassB*a;q.y+=this.m_invMassB*c;n+=this.m_invIB*b}c=this.m_perp.x*(q.x-j.x)+this.m_perp.y*(q.y-j.y)+this.m_s2*n-this.m_s1*o;if(this.m_enableLimit&&this.m_limitState!=I.e_inactiveLimit){g=this.m_axis.x*(q.x-j.x)+this.m_axis.y*(q.y-j.y)+this.m_a2*n-this.m_a1*o;a=this.m_impulse.Copy();d=this.m_K.Solve(new w,-c,-g);this.m_impulse.Add(d); >+if(this.m_limitState==I.e_atLowerLimit)this.m_impulse.y=y.Max(this.m_impulse.y,0);else if(this.m_limitState==I.e_atUpperLimit)this.m_impulse.y=y.Min(this.m_impulse.y,0);c=-c-(this.m_impulse.y-a.y)*this.m_K.col2.x;g=0;g=this.m_K.col1.x!=0?c/this.m_K.col1.x+a.x:a.x;this.m_impulse.x=g;d.x=this.m_impulse.x-a.x;d.y=this.m_impulse.y-a.y;a=d.x*this.m_perp.x+d.y*this.m_axis.x;c=d.x*this.m_perp.y+d.y*this.m_axis.y;g=d.x*this.m_s1+d.y*this.m_a1;b=d.x*this.m_s2+d.y*this.m_a2}else{d=0;d=this.m_K.col1.x!=0?-c/ >+this.m_K.col1.x:0;this.m_impulse.x+=d;a=d*this.m_perp.x;c=d*this.m_perp.y;g=d*this.m_s1;b=d*this.m_s2}j.x-=this.m_invMassA*a;j.y-=this.m_invMassA*c;o-=this.m_invIA*g;q.x+=this.m_invMassB*a;q.y+=this.m_invMassB*c;n+=this.m_invIB*b;h.m_linearVelocity.SetV(j);h.m_angularVelocity=o;l.m_linearVelocity.SetV(q);l.m_angularVelocity=n};k.prototype.SolvePositionConstraints=function(){var d=this.m_bodyA,h=this.m_bodyB,l=d.m_sweep.c,j=d.m_sweep.a,o=h.m_sweep.c,q=h.m_sweep.a,n,a=0,c=0,g=0,b=0,e=n=0,f=0;c=false; >+var m=0,r=G.FromAngle(j);g=G.FromAngle(q);n=r;f=this.m_localAnchor1.x-this.m_localCenterA.x;var s=this.m_localAnchor1.y-this.m_localCenterA.y;a=n.col1.x*f+n.col2.x*s;s=n.col1.y*f+n.col2.y*s;f=a;n=g;g=this.m_localAnchor2.x-this.m_localCenterB.x;b=this.m_localAnchor2.y-this.m_localCenterB.y;a=n.col1.x*g+n.col2.x*b;b=n.col1.y*g+n.col2.y*b;g=a;n=o.x+g-l.x-f;a=o.y+b-l.y-s;if(this.m_enableLimit){this.m_axis=y.MulMV(r,this.m_localXAxis1);this.m_a1=(n+f)*this.m_axis.y-(a+s)*this.m_axis.x;this.m_a2=g*this.m_axis.y- >+b*this.m_axis.x;var v=this.m_axis.x*n+this.m_axis.y*a;if(y.Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*F.b2_linearSlop){m=y.Clamp(v,-F.b2_maxLinearCorrection,F.b2_maxLinearCorrection);e=y.Abs(v);c=true}else if(v<=this.m_lowerTranslation){m=y.Clamp(v-this.m_lowerTranslation+F.b2_linearSlop,-F.b2_maxLinearCorrection,0);e=this.m_lowerTranslation-v;c=true}else if(v>=this.m_upperTranslation){m=y.Clamp(v-this.m_upperTranslation+F.b2_linearSlop,0,F.b2_maxLinearCorrection);e=v-this.m_upperTranslation; >+c=true}}this.m_perp=y.MulMV(r,this.m_localYAxis1);this.m_s1=(n+f)*this.m_perp.y-(a+s)*this.m_perp.x;this.m_s2=g*this.m_perp.y-b*this.m_perp.x;r=new w;s=this.m_perp.x*n+this.m_perp.y*a;e=y.Max(e,y.Abs(s));f=0;if(c){c=this.m_invMassA;g=this.m_invMassB;b=this.m_invIA;n=this.m_invIB;this.m_K.col1.x=c+g+b*this.m_s1*this.m_s1+n*this.m_s2*this.m_s2;this.m_K.col1.y=b*this.m_s1*this.m_a1+n*this.m_s2*this.m_a2;this.m_K.col2.x=this.m_K.col1.y;this.m_K.col2.y=c+g+b*this.m_a1*this.m_a1+n*this.m_a2*this.m_a2;this.m_K.Solve(r, >+-s,-m)}else{c=this.m_invMassA;g=this.m_invMassB;b=this.m_invIA;n=this.m_invIB;m=c+g+b*this.m_s1*this.m_s1+n*this.m_s2*this.m_s2;c=0;c=m!=0?-s/m:0;r.x=c;r.y=0}m=r.x*this.m_perp.x+r.y*this.m_axis.x;c=r.x*this.m_perp.y+r.y*this.m_axis.y;s=r.x*this.m_s1+r.y*this.m_a1;r=r.x*this.m_s2+r.y*this.m_a2;l.x-=this.m_invMassA*m;l.y-=this.m_invMassA*c;j-=this.m_invIA*s;o.x+=this.m_invMassB*m;o.y+=this.m_invMassB*c;q+=this.m_invIB*r;d.m_sweep.a=j;h.m_sweep.a=q;d.SynchronizeTransform();h.SynchronizeTransform();return e<= >+F.b2_linearSlop&&f<=F.b2_angularSlop};Box2D.inherit(z,Box2D.Dynamics.Joints.b2JointDef);z.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;z.b2LineJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA=new w;this.localAnchorB=new w;this.localAxisA=new w};z.prototype.b2LineJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_lineJoint;this.localAxisA.Set(1,0);this.enableLimit=false;this.upperTranslation=this.lowerTranslation= >+0;this.enableMotor=false;this.motorSpeed=this.maxMotorForce=0};z.prototype.Initialize=function(d,h,l,j){this.bodyA=d;this.bodyB=h;this.localAnchorA=this.bodyA.GetLocalPoint(l);this.localAnchorB=this.bodyB.GetLocalPoint(l);this.localAxisA=this.bodyA.GetLocalVector(j)};Box2D.inherit(u,Box2D.Dynamics.Joints.b2Joint);u.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;u.b2MouseJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.K=new G;this.K1=new G;this.K2=new G; >+this.m_localAnchor=new w;this.m_target=new w;this.m_impulse=new w;this.m_mass=new G;this.m_C=new w};u.prototype.GetAnchorA=function(){return this.m_target};u.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor)};u.prototype.GetReactionForce=function(d){if(d===undefined)d=0;return new w(d*this.m_impulse.x,d*this.m_impulse.y)};u.prototype.GetReactionTorque=function(){return 0};u.prototype.GetTarget=function(){return this.m_target};u.prototype.SetTarget=function(d){this.m_bodyB.IsAwake()== >+false&&this.m_bodyB.SetAwake(true);this.m_target=d};u.prototype.GetMaxForce=function(){return this.m_maxForce};u.prototype.SetMaxForce=function(d){if(d===undefined)d=0;this.m_maxForce=d};u.prototype.GetFrequency=function(){return this.m_frequencyHz};u.prototype.SetFrequency=function(d){if(d===undefined)d=0;this.m_frequencyHz=d};u.prototype.GetDampingRatio=function(){return this.m_dampingRatio};u.prototype.SetDampingRatio=function(d){if(d===undefined)d=0;this.m_dampingRatio=d};u.prototype.b2MouseJoint= >+function(d){this.__super.b2Joint.call(this,d);this.m_target.SetV(d.target);var h=this.m_target.x-this.m_bodyB.m_xf.position.x,l=this.m_target.y-this.m_bodyB.m_xf.position.y,j=this.m_bodyB.m_xf.R;this.m_localAnchor.x=h*j.col1.x+l*j.col1.y;this.m_localAnchor.y=h*j.col2.x+l*j.col2.y;this.m_maxForce=d.maxForce;this.m_impulse.SetZero();this.m_frequencyHz=d.frequencyHz;this.m_dampingRatio=d.dampingRatio;this.m_gamma=this.m_beta=0};u.prototype.InitVelocityConstraints=function(d){var h=this.m_bodyB,l=h.GetMass(), >+j=2*Math.PI*this.m_frequencyHz,o=l*j*j;this.m_gamma=d.dt*(2*l*this.m_dampingRatio*j+d.dt*o);this.m_gamma=this.m_gamma!=0?1/this.m_gamma:0;this.m_beta=d.dt*o*this.m_gamma;o=h.m_xf.R;l=this.m_localAnchor.x-h.m_sweep.localCenter.x;j=this.m_localAnchor.y-h.m_sweep.localCenter.y;var q=o.col1.x*l+o.col2.x*j;j=o.col1.y*l+o.col2.y*j;l=q;o=h.m_invMass;q=h.m_invI;this.K1.col1.x=o;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=o;this.K2.col1.x=q*j*j;this.K2.col2.x=-q*l*j;this.K2.col1.y=-q*l*j;this.K2.col2.y= >+q*l*l;this.K.SetM(this.K1);this.K.AddM(this.K2);this.K.col1.x+=this.m_gamma;this.K.col2.y+=this.m_gamma;this.K.GetInverse(this.m_mass);this.m_C.x=h.m_sweep.c.x+l-this.m_target.x;this.m_C.y=h.m_sweep.c.y+j-this.m_target.y;h.m_angularVelocity*=0.98;this.m_impulse.x*=d.dtRatio;this.m_impulse.y*=d.dtRatio;h.m_linearVelocity.x+=o*this.m_impulse.x;h.m_linearVelocity.y+=o*this.m_impulse.y;h.m_angularVelocity+=q*(l*this.m_impulse.y-j*this.m_impulse.x)};u.prototype.SolveVelocityConstraints=function(d){var h= >+this.m_bodyB,l,j=0,o=0;l=h.m_xf.R;var q=this.m_localAnchor.x-h.m_sweep.localCenter.x,n=this.m_localAnchor.y-h.m_sweep.localCenter.y;j=l.col1.x*q+l.col2.x*n;n=l.col1.y*q+l.col2.y*n;q=j;j=h.m_linearVelocity.x+-h.m_angularVelocity*n;var a=h.m_linearVelocity.y+h.m_angularVelocity*q;l=this.m_mass;j=j+this.m_beta*this.m_C.x+this.m_gamma*this.m_impulse.x;o=a+this.m_beta*this.m_C.y+this.m_gamma*this.m_impulse.y;a=-(l.col1.x*j+l.col2.x*o);o=-(l.col1.y*j+l.col2.y*o);l=this.m_impulse.x;j=this.m_impulse.y;this.m_impulse.x+= >+a;this.m_impulse.y+=o;d=d.dt*this.m_maxForce;this.m_impulse.LengthSquared()>d*d&&this.m_impulse.Multiply(d/this.m_impulse.Length());a=this.m_impulse.x-l;o=this.m_impulse.y-j;h.m_linearVelocity.x+=h.m_invMass*a;h.m_linearVelocity.y+=h.m_invMass*o;h.m_angularVelocity+=h.m_invI*(q*o-n*a)};u.prototype.SolvePositionConstraints=function(){return true};Box2D.inherit(D,Box2D.Dynamics.Joints.b2JointDef);D.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;D.b2MouseJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, >+arguments);this.target=new w};D.prototype.b2MouseJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_mouseJoint;this.maxForce=0;this.frequencyHz=5;this.dampingRatio=0.7};Box2D.inherit(H,Box2D.Dynamics.Joints.b2Joint);H.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;H.b2PrismaticJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchor1=new w;this.m_localAnchor2=new w;this.m_localXAxis1=new w;this.m_localYAxis1=new w;this.m_axis=new w; >+this.m_perp=new w;this.m_K=new K;this.m_impulse=new A};H.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};H.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};H.prototype.GetReactionForce=function(d){if(d===undefined)d=0;return new w(d*(this.m_impulse.x*this.m_perp.x+(this.m_motorImpulse+this.m_impulse.z)*this.m_axis.x),d*(this.m_impulse.x*this.m_perp.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_axis.y))};H.prototype.GetReactionTorque= >+function(d){if(d===undefined)d=0;return d*this.m_impulse.y};H.prototype.GetJointTranslation=function(){var d=this.m_bodyA,h=this.m_bodyB,l=d.GetWorldPoint(this.m_localAnchor1),j=h.GetWorldPoint(this.m_localAnchor2);h=j.x-l.x;l=j.y-l.y;d=d.GetWorldVector(this.m_localXAxis1);return d.x*h+d.y*l};H.prototype.GetJointSpeed=function(){var d=this.m_bodyA,h=this.m_bodyB,l;l=d.m_xf.R;var j=this.m_localAnchor1.x-d.m_sweep.localCenter.x,o=this.m_localAnchor1.y-d.m_sweep.localCenter.y,q=l.col1.x*j+l.col2.x*o; >+o=l.col1.y*j+l.col2.y*o;j=q;l=h.m_xf.R;var n=this.m_localAnchor2.x-h.m_sweep.localCenter.x,a=this.m_localAnchor2.y-h.m_sweep.localCenter.y;q=l.col1.x*n+l.col2.x*a;a=l.col1.y*n+l.col2.y*a;n=q;l=h.m_sweep.c.x+n-(d.m_sweep.c.x+j);q=h.m_sweep.c.y+a-(d.m_sweep.c.y+o);var c=d.GetWorldVector(this.m_localXAxis1),g=d.m_linearVelocity,b=h.m_linearVelocity;d=d.m_angularVelocity;h=h.m_angularVelocity;return l*-d*c.y+q*d*c.x+(c.x*(b.x+-h*a-g.x- -d*o)+c.y*(b.y+h*n-g.y-d*j))};H.prototype.IsLimitEnabled=function(){return this.m_enableLimit}; >+H.prototype.EnableLimit=function(d){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_enableLimit=d};H.prototype.GetLowerLimit=function(){return this.m_lowerTranslation};H.prototype.GetUpperLimit=function(){return this.m_upperTranslation};H.prototype.SetLimits=function(d,h){if(d===undefined)d=0;if(h===undefined)h=0;this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_lowerTranslation=d;this.m_upperTranslation=h};H.prototype.IsMotorEnabled=function(){return this.m_enableMotor}; >+H.prototype.EnableMotor=function(d){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_enableMotor=d};H.prototype.SetMotorSpeed=function(d){if(d===undefined)d=0;this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_motorSpeed=d};H.prototype.GetMotorSpeed=function(){return this.m_motorSpeed};H.prototype.SetMaxMotorForce=function(d){if(d===undefined)d=0;this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_maxMotorForce=d};H.prototype.GetMotorForce=function(){return this.m_motorImpulse}; >+H.prototype.b2PrismaticJoint=function(d){this.__super.b2Joint.call(this,d);this.m_localAnchor1.SetV(d.localAnchorA);this.m_localAnchor2.SetV(d.localAnchorB);this.m_localXAxis1.SetV(d.localAxisA);this.m_localYAxis1.x=-this.m_localXAxis1.y;this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_refAngle=d.referenceAngle;this.m_impulse.SetZero();this.m_motorImpulse=this.m_motorMass=0;this.m_lowerTranslation=d.lowerTranslation;this.m_upperTranslation=d.upperTranslation;this.m_maxMotorForce=d.maxMotorForce;this.m_motorSpeed= >+d.motorSpeed;this.m_enableLimit=d.enableLimit;this.m_enableMotor=d.enableMotor;this.m_limitState=I.e_inactiveLimit;this.m_axis.SetZero();this.m_perp.SetZero()};H.prototype.InitVelocityConstraints=function(d){var h=this.m_bodyA,l=this.m_bodyB,j,o=0;this.m_localCenterA.SetV(h.GetLocalCenter());this.m_localCenterB.SetV(l.GetLocalCenter());var q=h.GetTransform();l.GetTransform();j=h.m_xf.R;var n=this.m_localAnchor1.x-this.m_localCenterA.x,a=this.m_localAnchor1.y-this.m_localCenterA.y;o=j.col1.x*n+j.col2.x* >+a;a=j.col1.y*n+j.col2.y*a;n=o;j=l.m_xf.R;var c=this.m_localAnchor2.x-this.m_localCenterB.x,g=this.m_localAnchor2.y-this.m_localCenterB.y;o=j.col1.x*c+j.col2.x*g;g=j.col1.y*c+j.col2.y*g;c=o;j=l.m_sweep.c.x+c-h.m_sweep.c.x-n;o=l.m_sweep.c.y+g-h.m_sweep.c.y-a;this.m_invMassA=h.m_invMass;this.m_invMassB=l.m_invMass;this.m_invIA=h.m_invI;this.m_invIB=l.m_invI;this.m_axis.SetV(y.MulMV(q.R,this.m_localXAxis1));this.m_a1=(j+n)*this.m_axis.y-(o+a)*this.m_axis.x;this.m_a2=c*this.m_axis.y-g*this.m_axis.x;this.m_motorMass= >+this.m_invMassA+this.m_invMassB+this.m_invIA*this.m_a1*this.m_a1+this.m_invIB*this.m_a2*this.m_a2;if(this.m_motorMass>Number.MIN_VALUE)this.m_motorMass=1/this.m_motorMass;this.m_perp.SetV(y.MulMV(q.R,this.m_localYAxis1));this.m_s1=(j+n)*this.m_perp.y-(o+a)*this.m_perp.x;this.m_s2=c*this.m_perp.y-g*this.m_perp.x;q=this.m_invMassA;n=this.m_invMassB;a=this.m_invIA;c=this.m_invIB;this.m_K.col1.x=q+n+a*this.m_s1*this.m_s1+c*this.m_s2*this.m_s2;this.m_K.col1.y=a*this.m_s1+c*this.m_s2;this.m_K.col1.z=a* >+this.m_s1*this.m_a1+c*this.m_s2*this.m_a2;this.m_K.col2.x=this.m_K.col1.y;this.m_K.col2.y=a+c;this.m_K.col2.z=a*this.m_a1+c*this.m_a2;this.m_K.col3.x=this.m_K.col1.z;this.m_K.col3.y=this.m_K.col2.z;this.m_K.col3.z=q+n+a*this.m_a1*this.m_a1+c*this.m_a2*this.m_a2;if(this.m_enableLimit){j=this.m_axis.x*j+this.m_axis.y*o;if(y.Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*F.b2_linearSlop)this.m_limitState=I.e_equalLimits;else if(j<=this.m_lowerTranslation){if(this.m_limitState!=I.e_atLowerLimit){this.m_limitState= >+I.e_atLowerLimit;this.m_impulse.z=0}}else if(j>=this.m_upperTranslation){if(this.m_limitState!=I.e_atUpperLimit){this.m_limitState=I.e_atUpperLimit;this.m_impulse.z=0}}else{this.m_limitState=I.e_inactiveLimit;this.m_impulse.z=0}}else this.m_limitState=I.e_inactiveLimit;if(this.m_enableMotor==false)this.m_motorImpulse=0;if(d.warmStarting){this.m_impulse.x*=d.dtRatio;this.m_impulse.y*=d.dtRatio;this.m_motorImpulse*=d.dtRatio;d=this.m_impulse.x*this.m_perp.x+(this.m_motorImpulse+this.m_impulse.z)*this.m_axis.x; >+j=this.m_impulse.x*this.m_perp.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_axis.y;o=this.m_impulse.x*this.m_s1+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a1;q=this.m_impulse.x*this.m_s2+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a2;h.m_linearVelocity.x-=this.m_invMassA*d;h.m_linearVelocity.y-=this.m_invMassA*j;h.m_angularVelocity-=this.m_invIA*o;l.m_linearVelocity.x+=this.m_invMassB*d;l.m_linearVelocity.y+=this.m_invMassB*j;l.m_angularVelocity+=this.m_invIB* >+q}else{this.m_impulse.SetZero();this.m_motorImpulse=0}};H.prototype.SolveVelocityConstraints=function(d){var h=this.m_bodyA,l=this.m_bodyB,j=h.m_linearVelocity,o=h.m_angularVelocity,q=l.m_linearVelocity,n=l.m_angularVelocity,a=0,c=0,g=0,b=0;if(this.m_enableMotor&&this.m_limitState!=I.e_equalLimits){b=this.m_motorMass*(this.m_motorSpeed-(this.m_axis.x*(q.x-j.x)+this.m_axis.y*(q.y-j.y)+this.m_a2*n-this.m_a1*o));a=this.m_motorImpulse;d=d.dt*this.m_maxMotorForce;this.m_motorImpulse=y.Clamp(this.m_motorImpulse+ >+b,-d,d);b=this.m_motorImpulse-a;a=b*this.m_axis.x;c=b*this.m_axis.y;g=b*this.m_a1;b=b*this.m_a2;j.x-=this.m_invMassA*a;j.y-=this.m_invMassA*c;o-=this.m_invIA*g;q.x+=this.m_invMassB*a;q.y+=this.m_invMassB*c;n+=this.m_invIB*b}g=this.m_perp.x*(q.x-j.x)+this.m_perp.y*(q.y-j.y)+this.m_s2*n-this.m_s1*o;c=n-o;if(this.m_enableLimit&&this.m_limitState!=I.e_inactiveLimit){d=this.m_axis.x*(q.x-j.x)+this.m_axis.y*(q.y-j.y)+this.m_a2*n-this.m_a1*o;a=this.m_impulse.Copy();d=this.m_K.Solve33(new A,-g,-c,-d);this.m_impulse.Add(d); >+if(this.m_limitState==I.e_atLowerLimit)this.m_impulse.z=y.Max(this.m_impulse.z,0);else if(this.m_limitState==I.e_atUpperLimit)this.m_impulse.z=y.Min(this.m_impulse.z,0);g=-g-(this.m_impulse.z-a.z)*this.m_K.col3.x;c=-c-(this.m_impulse.z-a.z)*this.m_K.col3.y;c=this.m_K.Solve22(new w,g,c);c.x+=a.x;c.y+=a.y;this.m_impulse.x=c.x;this.m_impulse.y=c.y;d.x=this.m_impulse.x-a.x;d.y=this.m_impulse.y-a.y;d.z=this.m_impulse.z-a.z;a=d.x*this.m_perp.x+d.z*this.m_axis.x;c=d.x*this.m_perp.y+d.z*this.m_axis.y;g=d.x* >+this.m_s1+d.y+d.z*this.m_a1;b=d.x*this.m_s2+d.y+d.z*this.m_a2}else{d=this.m_K.Solve22(new w,-g,-c);this.m_impulse.x+=d.x;this.m_impulse.y+=d.y;a=d.x*this.m_perp.x;c=d.x*this.m_perp.y;g=d.x*this.m_s1+d.y;b=d.x*this.m_s2+d.y}j.x-=this.m_invMassA*a;j.y-=this.m_invMassA*c;o-=this.m_invIA*g;q.x+=this.m_invMassB*a;q.y+=this.m_invMassB*c;n+=this.m_invIB*b;h.m_linearVelocity.SetV(j);h.m_angularVelocity=o;l.m_linearVelocity.SetV(q);l.m_angularVelocity=n};H.prototype.SolvePositionConstraints=function(){var d= >+this.m_bodyA,h=this.m_bodyB,l=d.m_sweep.c,j=d.m_sweep.a,o=h.m_sweep.c,q=h.m_sweep.a,n,a=0,c=0,g=0,b=a=n=0,e=0;c=false;var f=0,m=G.FromAngle(j),r=G.FromAngle(q);n=m;e=this.m_localAnchor1.x-this.m_localCenterA.x;var s=this.m_localAnchor1.y-this.m_localCenterA.y;a=n.col1.x*e+n.col2.x*s;s=n.col1.y*e+n.col2.y*s;e=a;n=r;r=this.m_localAnchor2.x-this.m_localCenterB.x;g=this.m_localAnchor2.y-this.m_localCenterB.y;a=n.col1.x*r+n.col2.x*g;g=n.col1.y*r+n.col2.y*g;r=a;n=o.x+r-l.x-e;a=o.y+g-l.y-s;if(this.m_enableLimit){this.m_axis= >+y.MulMV(m,this.m_localXAxis1);this.m_a1=(n+e)*this.m_axis.y-(a+s)*this.m_axis.x;this.m_a2=r*this.m_axis.y-g*this.m_axis.x;var v=this.m_axis.x*n+this.m_axis.y*a;if(y.Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*F.b2_linearSlop){f=y.Clamp(v,-F.b2_maxLinearCorrection,F.b2_maxLinearCorrection);b=y.Abs(v);c=true}else if(v<=this.m_lowerTranslation){f=y.Clamp(v-this.m_lowerTranslation+F.b2_linearSlop,-F.b2_maxLinearCorrection,0);b=this.m_lowerTranslation-v;c=true}else if(v>=this.m_upperTranslation){f= >+y.Clamp(v-this.m_upperTranslation+F.b2_linearSlop,0,F.b2_maxLinearCorrection);b=v-this.m_upperTranslation;c=true}}this.m_perp=y.MulMV(m,this.m_localYAxis1);this.m_s1=(n+e)*this.m_perp.y-(a+s)*this.m_perp.x;this.m_s2=r*this.m_perp.y-g*this.m_perp.x;m=new A;s=this.m_perp.x*n+this.m_perp.y*a;r=q-j-this.m_refAngle;b=y.Max(b,y.Abs(s));e=y.Abs(r);if(c){c=this.m_invMassA;g=this.m_invMassB;n=this.m_invIA;a=this.m_invIB;this.m_K.col1.x=c+g+n*this.m_s1*this.m_s1+a*this.m_s2*this.m_s2;this.m_K.col1.y=n*this.m_s1+ >+a*this.m_s2;this.m_K.col1.z=n*this.m_s1*this.m_a1+a*this.m_s2*this.m_a2;this.m_K.col2.x=this.m_K.col1.y;this.m_K.col2.y=n+a;this.m_K.col2.z=n*this.m_a1+a*this.m_a2;this.m_K.col3.x=this.m_K.col1.z;this.m_K.col3.y=this.m_K.col2.z;this.m_K.col3.z=c+g+n*this.m_a1*this.m_a1+a*this.m_a2*this.m_a2;this.m_K.Solve33(m,-s,-r,-f)}else{c=this.m_invMassA;g=this.m_invMassB;n=this.m_invIA;a=this.m_invIB;f=n*this.m_s1+a*this.m_s2;v=n+a;this.m_K.col1.Set(c+g+n*this.m_s1*this.m_s1+a*this.m_s2*this.m_s2,f,0);this.m_K.col2.Set(f, >+v,0);f=this.m_K.Solve22(new w,-s,-r);m.x=f.x;m.y=f.y;m.z=0}f=m.x*this.m_perp.x+m.z*this.m_axis.x;c=m.x*this.m_perp.y+m.z*this.m_axis.y;s=m.x*this.m_s1+m.y+m.z*this.m_a1;m=m.x*this.m_s2+m.y+m.z*this.m_a2;l.x-=this.m_invMassA*f;l.y-=this.m_invMassA*c;j-=this.m_invIA*s;o.x+=this.m_invMassB*f;o.y+=this.m_invMassB*c;q+=this.m_invIB*m;d.m_sweep.a=j;h.m_sweep.a=q;d.SynchronizeTransform();h.SynchronizeTransform();return b<=F.b2_linearSlop&&e<=F.b2_angularSlop};Box2D.inherit(O,Box2D.Dynamics.Joints.b2JointDef); >+O.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;O.b2PrismaticJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA=new w;this.localAnchorB=new w;this.localAxisA=new w};O.prototype.b2PrismaticJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_prismaticJoint;this.localAxisA.Set(1,0);this.referenceAngle=0;this.enableLimit=false;this.upperTranslation=this.lowerTranslation=0;this.enableMotor=false;this.motorSpeed=this.maxMotorForce= >+0};O.prototype.Initialize=function(d,h,l,j){this.bodyA=d;this.bodyB=h;this.localAnchorA=this.bodyA.GetLocalPoint(l);this.localAnchorB=this.bodyB.GetLocalPoint(l);this.localAxisA=this.bodyA.GetLocalVector(j);this.referenceAngle=this.bodyB.GetAngle()-this.bodyA.GetAngle()};Box2D.inherit(E,Box2D.Dynamics.Joints.b2Joint);E.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;E.b2PulleyJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_groundAnchor1=new w;this.m_groundAnchor2= >+new w;this.m_localAnchor1=new w;this.m_localAnchor2=new w;this.m_u1=new w;this.m_u2=new w};E.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};E.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};E.prototype.GetReactionForce=function(d){if(d===undefined)d=0;return new w(d*this.m_impulse*this.m_u2.x,d*this.m_impulse*this.m_u2.y)};E.prototype.GetReactionTorque=function(){return 0};E.prototype.GetGroundAnchorA=function(){var d= >+this.m_ground.m_xf.position.Copy();d.Add(this.m_groundAnchor1);return d};E.prototype.GetGroundAnchorB=function(){var d=this.m_ground.m_xf.position.Copy();d.Add(this.m_groundAnchor2);return d};E.prototype.GetLength1=function(){var d=this.m_bodyA.GetWorldPoint(this.m_localAnchor1),h=d.x-(this.m_ground.m_xf.position.x+this.m_groundAnchor1.x);d=d.y-(this.m_ground.m_xf.position.y+this.m_groundAnchor1.y);return Math.sqrt(h*h+d*d)};E.prototype.GetLength2=function(){var d=this.m_bodyB.GetWorldPoint(this.m_localAnchor2), >+h=d.x-(this.m_ground.m_xf.position.x+this.m_groundAnchor2.x);d=d.y-(this.m_ground.m_xf.position.y+this.m_groundAnchor2.y);return Math.sqrt(h*h+d*d)};E.prototype.GetRatio=function(){return this.m_ratio};E.prototype.b2PulleyJoint=function(d){this.__super.b2Joint.call(this,d);this.m_ground=this.m_bodyA.m_world.m_groundBody;this.m_groundAnchor1.x=d.groundAnchorA.x-this.m_ground.m_xf.position.x;this.m_groundAnchor1.y=d.groundAnchorA.y-this.m_ground.m_xf.position.y;this.m_groundAnchor2.x=d.groundAnchorB.x- >+this.m_ground.m_xf.position.x;this.m_groundAnchor2.y=d.groundAnchorB.y-this.m_ground.m_xf.position.y;this.m_localAnchor1.SetV(d.localAnchorA);this.m_localAnchor2.SetV(d.localAnchorB);this.m_ratio=d.ratio;this.m_constant=d.lengthA+this.m_ratio*d.lengthB;this.m_maxLength1=y.Min(d.maxLengthA,this.m_constant-this.m_ratio*E.b2_minPulleyLength);this.m_maxLength2=y.Min(d.maxLengthB,(this.m_constant-E.b2_minPulleyLength)/this.m_ratio);this.m_limitImpulse2=this.m_limitImpulse1=this.m_impulse=0};E.prototype.InitVelocityConstraints= >+function(d){var h=this.m_bodyA,l=this.m_bodyB,j;j=h.m_xf.R;var o=this.m_localAnchor1.x-h.m_sweep.localCenter.x,q=this.m_localAnchor1.y-h.m_sweep.localCenter.y,n=j.col1.x*o+j.col2.x*q;q=j.col1.y*o+j.col2.y*q;o=n;j=l.m_xf.R;var a=this.m_localAnchor2.x-l.m_sweep.localCenter.x,c=this.m_localAnchor2.y-l.m_sweep.localCenter.y;n=j.col1.x*a+j.col2.x*c;c=j.col1.y*a+j.col2.y*c;a=n;j=l.m_sweep.c.x+a;n=l.m_sweep.c.y+c;var g=this.m_ground.m_xf.position.x+this.m_groundAnchor2.x,b=this.m_ground.m_xf.position.y+ >+this.m_groundAnchor2.y;this.m_u1.Set(h.m_sweep.c.x+o-(this.m_ground.m_xf.position.x+this.m_groundAnchor1.x),h.m_sweep.c.y+q-(this.m_ground.m_xf.position.y+this.m_groundAnchor1.y));this.m_u2.Set(j-g,n-b);j=this.m_u1.Length();n=this.m_u2.Length();j>F.b2_linearSlop?this.m_u1.Multiply(1/j):this.m_u1.SetZero();n>F.b2_linearSlop?this.m_u2.Multiply(1/n):this.m_u2.SetZero();if(this.m_constant-j-this.m_ratio*n>0){this.m_state=I.e_inactiveLimit;this.m_impulse=0}else this.m_state=I.e_atUpperLimit;if(j<this.m_maxLength1){this.m_limitState1= >+I.e_inactiveLimit;this.m_limitImpulse1=0}else this.m_limitState1=I.e_atUpperLimit;if(n<this.m_maxLength2){this.m_limitState2=I.e_inactiveLimit;this.m_limitImpulse2=0}else this.m_limitState2=I.e_atUpperLimit;j=o*this.m_u1.y-q*this.m_u1.x;n=a*this.m_u2.y-c*this.m_u2.x;this.m_limitMass1=h.m_invMass+h.m_invI*j*j;this.m_limitMass2=l.m_invMass+l.m_invI*n*n;this.m_pulleyMass=this.m_limitMass1+this.m_ratio*this.m_ratio*this.m_limitMass2;this.m_limitMass1=1/this.m_limitMass1;this.m_limitMass2=1/this.m_limitMass2; >+this.m_pulleyMass=1/this.m_pulleyMass;if(d.warmStarting){this.m_impulse*=d.dtRatio;this.m_limitImpulse1*=d.dtRatio;this.m_limitImpulse2*=d.dtRatio;d=(-this.m_impulse-this.m_limitImpulse1)*this.m_u1.x;j=(-this.m_impulse-this.m_limitImpulse1)*this.m_u1.y;n=(-this.m_ratio*this.m_impulse-this.m_limitImpulse2)*this.m_u2.x;g=(-this.m_ratio*this.m_impulse-this.m_limitImpulse2)*this.m_u2.y;h.m_linearVelocity.x+=h.m_invMass*d;h.m_linearVelocity.y+=h.m_invMass*j;h.m_angularVelocity+=h.m_invI*(o*j-q*d);l.m_linearVelocity.x+= >+l.m_invMass*n;l.m_linearVelocity.y+=l.m_invMass*g;l.m_angularVelocity+=l.m_invI*(a*g-c*n)}else this.m_limitImpulse2=this.m_limitImpulse1=this.m_impulse=0};E.prototype.SolveVelocityConstraints=function(){var d=this.m_bodyA,h=this.m_bodyB,l;l=d.m_xf.R;var j=this.m_localAnchor1.x-d.m_sweep.localCenter.x,o=this.m_localAnchor1.y-d.m_sweep.localCenter.y,q=l.col1.x*j+l.col2.x*o;o=l.col1.y*j+l.col2.y*o;j=q;l=h.m_xf.R;var n=this.m_localAnchor2.x-h.m_sweep.localCenter.x,a=this.m_localAnchor2.y-h.m_sweep.localCenter.y; >+q=l.col1.x*n+l.col2.x*a;a=l.col1.y*n+l.col2.y*a;n=q;var c=q=l=0,g=0;l=g=l=g=c=q=l=0;if(this.m_state==I.e_atUpperLimit){l=d.m_linearVelocity.x+-d.m_angularVelocity*o;q=d.m_linearVelocity.y+d.m_angularVelocity*j;c=h.m_linearVelocity.x+-h.m_angularVelocity*a;g=h.m_linearVelocity.y+h.m_angularVelocity*n;l=-(this.m_u1.x*l+this.m_u1.y*q)-this.m_ratio*(this.m_u2.x*c+this.m_u2.y*g);g=this.m_pulleyMass*-l;l=this.m_impulse;this.m_impulse=y.Max(0,this.m_impulse+g);g=this.m_impulse-l;l=-g*this.m_u1.x;q=-g*this.m_u1.y; >+c=-this.m_ratio*g*this.m_u2.x;g=-this.m_ratio*g*this.m_u2.y;d.m_linearVelocity.x+=d.m_invMass*l;d.m_linearVelocity.y+=d.m_invMass*q;d.m_angularVelocity+=d.m_invI*(j*q-o*l);h.m_linearVelocity.x+=h.m_invMass*c;h.m_linearVelocity.y+=h.m_invMass*g;h.m_angularVelocity+=h.m_invI*(n*g-a*c)}if(this.m_limitState1==I.e_atUpperLimit){l=d.m_linearVelocity.x+-d.m_angularVelocity*o;q=d.m_linearVelocity.y+d.m_angularVelocity*j;l=-(this.m_u1.x*l+this.m_u1.y*q);g=-this.m_limitMass1*l;l=this.m_limitImpulse1;this.m_limitImpulse1= >+y.Max(0,this.m_limitImpulse1+g);g=this.m_limitImpulse1-l;l=-g*this.m_u1.x;q=-g*this.m_u1.y;d.m_linearVelocity.x+=d.m_invMass*l;d.m_linearVelocity.y+=d.m_invMass*q;d.m_angularVelocity+=d.m_invI*(j*q-o*l)}if(this.m_limitState2==I.e_atUpperLimit){c=h.m_linearVelocity.x+-h.m_angularVelocity*a;g=h.m_linearVelocity.y+h.m_angularVelocity*n;l=-(this.m_u2.x*c+this.m_u2.y*g);g=-this.m_limitMass2*l;l=this.m_limitImpulse2;this.m_limitImpulse2=y.Max(0,this.m_limitImpulse2+g);g=this.m_limitImpulse2-l;c=-g*this.m_u2.x; >+g=-g*this.m_u2.y;h.m_linearVelocity.x+=h.m_invMass*c;h.m_linearVelocity.y+=h.m_invMass*g;h.m_angularVelocity+=h.m_invI*(n*g-a*c)}};E.prototype.SolvePositionConstraints=function(){var d=this.m_bodyA,h=this.m_bodyB,l,j=this.m_ground.m_xf.position.x+this.m_groundAnchor1.x,o=this.m_ground.m_xf.position.y+this.m_groundAnchor1.y,q=this.m_ground.m_xf.position.x+this.m_groundAnchor2.x,n=this.m_ground.m_xf.position.y+this.m_groundAnchor2.y,a=0,c=0,g=0,b=0,e=l=0,f=0,m=0,r=e=m=l=e=l=0;if(this.m_state==I.e_atUpperLimit){l= >+d.m_xf.R;a=this.m_localAnchor1.x-d.m_sweep.localCenter.x;c=this.m_localAnchor1.y-d.m_sweep.localCenter.y;e=l.col1.x*a+l.col2.x*c;c=l.col1.y*a+l.col2.y*c;a=e;l=h.m_xf.R;g=this.m_localAnchor2.x-h.m_sweep.localCenter.x;b=this.m_localAnchor2.y-h.m_sweep.localCenter.y;e=l.col1.x*g+l.col2.x*b;b=l.col1.y*g+l.col2.y*b;g=e;l=d.m_sweep.c.x+a;e=d.m_sweep.c.y+c;f=h.m_sweep.c.x+g;m=h.m_sweep.c.y+b;this.m_u1.Set(l-j,e-o);this.m_u2.Set(f-q,m-n);l=this.m_u1.Length();e=this.m_u2.Length();l>F.b2_linearSlop?this.m_u1.Multiply(1/ >+l):this.m_u1.SetZero();e>F.b2_linearSlop?this.m_u2.Multiply(1/e):this.m_u2.SetZero();l=this.m_constant-l-this.m_ratio*e;r=y.Max(r,-l);l=y.Clamp(l+F.b2_linearSlop,-F.b2_maxLinearCorrection,0);m=-this.m_pulleyMass*l;l=-m*this.m_u1.x;e=-m*this.m_u1.y;f=-this.m_ratio*m*this.m_u2.x;m=-this.m_ratio*m*this.m_u2.y;d.m_sweep.c.x+=d.m_invMass*l;d.m_sweep.c.y+=d.m_invMass*e;d.m_sweep.a+=d.m_invI*(a*e-c*l);h.m_sweep.c.x+=h.m_invMass*f;h.m_sweep.c.y+=h.m_invMass*m;h.m_sweep.a+=h.m_invI*(g*m-b*f);d.SynchronizeTransform(); >+h.SynchronizeTransform()}if(this.m_limitState1==I.e_atUpperLimit){l=d.m_xf.R;a=this.m_localAnchor1.x-d.m_sweep.localCenter.x;c=this.m_localAnchor1.y-d.m_sweep.localCenter.y;e=l.col1.x*a+l.col2.x*c;c=l.col1.y*a+l.col2.y*c;a=e;l=d.m_sweep.c.x+a;e=d.m_sweep.c.y+c;this.m_u1.Set(l-j,e-o);l=this.m_u1.Length();if(l>F.b2_linearSlop){this.m_u1.x*=1/l;this.m_u1.y*=1/l}else this.m_u1.SetZero();l=this.m_maxLength1-l;r=y.Max(r,-l);l=y.Clamp(l+F.b2_linearSlop,-F.b2_maxLinearCorrection,0);m=-this.m_limitMass1*l; >+l=-m*this.m_u1.x;e=-m*this.m_u1.y;d.m_sweep.c.x+=d.m_invMass*l;d.m_sweep.c.y+=d.m_invMass*e;d.m_sweep.a+=d.m_invI*(a*e-c*l);d.SynchronizeTransform()}if(this.m_limitState2==I.e_atUpperLimit){l=h.m_xf.R;g=this.m_localAnchor2.x-h.m_sweep.localCenter.x;b=this.m_localAnchor2.y-h.m_sweep.localCenter.y;e=l.col1.x*g+l.col2.x*b;b=l.col1.y*g+l.col2.y*b;g=e;f=h.m_sweep.c.x+g;m=h.m_sweep.c.y+b;this.m_u2.Set(f-q,m-n);e=this.m_u2.Length();if(e>F.b2_linearSlop){this.m_u2.x*=1/e;this.m_u2.y*=1/e}else this.m_u2.SetZero(); >+l=this.m_maxLength2-e;r=y.Max(r,-l);l=y.Clamp(l+F.b2_linearSlop,-F.b2_maxLinearCorrection,0);m=-this.m_limitMass2*l;f=-m*this.m_u2.x;m=-m*this.m_u2.y;h.m_sweep.c.x+=h.m_invMass*f;h.m_sweep.c.y+=h.m_invMass*m;h.m_sweep.a+=h.m_invI*(g*m-b*f);h.SynchronizeTransform()}return r<F.b2_linearSlop};Box2D.postDefs.push(function(){Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength=2});Box2D.inherit(R,Box2D.Dynamics.Joints.b2JointDef);R.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;R.b2PulleyJointDef= >+function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.groundAnchorA=new w;this.groundAnchorB=new w;this.localAnchorA=new w;this.localAnchorB=new w};R.prototype.b2PulleyJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_pulleyJoint;this.groundAnchorA.Set(-1,1);this.groundAnchorB.Set(1,1);this.localAnchorA.Set(-1,0);this.localAnchorB.Set(1,0);this.maxLengthB=this.lengthB=this.maxLengthA=this.lengthA=0;this.ratio=1;this.collideConnected=true};R.prototype.Initialize= >+function(d,h,l,j,o,q,n){if(n===undefined)n=0;this.bodyA=d;this.bodyB=h;this.groundAnchorA.SetV(l);this.groundAnchorB.SetV(j);this.localAnchorA=this.bodyA.GetLocalPoint(o);this.localAnchorB=this.bodyB.GetLocalPoint(q);d=o.x-l.x;l=o.y-l.y;this.lengthA=Math.sqrt(d*d+l*l);l=q.x-j.x;j=q.y-j.y;this.lengthB=Math.sqrt(l*l+j*j);this.ratio=n;n=this.lengthA+this.ratio*this.lengthB;this.maxLengthA=n-this.ratio*E.b2_minPulleyLength;this.maxLengthB=(n-E.b2_minPulleyLength)/this.ratio};Box2D.inherit(N,Box2D.Dynamics.Joints.b2Joint); >+N.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;N.b2RevoluteJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.K=new G;this.K1=new G;this.K2=new G;this.K3=new G;this.impulse3=new A;this.impulse2=new w;this.reduced=new w;this.m_localAnchor1=new w;this.m_localAnchor2=new w;this.m_impulse=new A;this.m_mass=new K};N.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};N.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)}; >+N.prototype.GetReactionForce=function(d){if(d===undefined)d=0;return new w(d*this.m_impulse.x,d*this.m_impulse.y)};N.prototype.GetReactionTorque=function(d){if(d===undefined)d=0;return d*this.m_impulse.z};N.prototype.GetJointAngle=function(){return this.m_bodyB.m_sweep.a-this.m_bodyA.m_sweep.a-this.m_referenceAngle};N.prototype.GetJointSpeed=function(){return this.m_bodyB.m_angularVelocity-this.m_bodyA.m_angularVelocity};N.prototype.IsLimitEnabled=function(){return this.m_enableLimit};N.prototype.EnableLimit= >+function(d){this.m_enableLimit=d};N.prototype.GetLowerLimit=function(){return this.m_lowerAngle};N.prototype.GetUpperLimit=function(){return this.m_upperAngle};N.prototype.SetLimits=function(d,h){if(d===undefined)d=0;if(h===undefined)h=0;this.m_lowerAngle=d;this.m_upperAngle=h};N.prototype.IsMotorEnabled=function(){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);return this.m_enableMotor};N.prototype.EnableMotor=function(d){this.m_enableMotor=d};N.prototype.SetMotorSpeed=function(d){if(d=== >+undefined)d=0;this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_motorSpeed=d};N.prototype.GetMotorSpeed=function(){return this.m_motorSpeed};N.prototype.SetMaxMotorTorque=function(d){if(d===undefined)d=0;this.m_maxMotorTorque=d};N.prototype.GetMotorTorque=function(){return this.m_maxMotorTorque};N.prototype.b2RevoluteJoint=function(d){this.__super.b2Joint.call(this,d);this.m_localAnchor1.SetV(d.localAnchorA);this.m_localAnchor2.SetV(d.localAnchorB);this.m_referenceAngle=d.referenceAngle; >+this.m_impulse.SetZero();this.m_motorImpulse=0;this.m_lowerAngle=d.lowerAngle;this.m_upperAngle=d.upperAngle;this.m_maxMotorTorque=d.maxMotorTorque;this.m_motorSpeed=d.motorSpeed;this.m_enableLimit=d.enableLimit;this.m_enableMotor=d.enableMotor;this.m_limitState=I.e_inactiveLimit};N.prototype.InitVelocityConstraints=function(d){var h=this.m_bodyA,l=this.m_bodyB,j,o=0;j=h.m_xf.R;var q=this.m_localAnchor1.x-h.m_sweep.localCenter.x,n=this.m_localAnchor1.y-h.m_sweep.localCenter.y;o=j.col1.x*q+j.col2.x* >+n;n=j.col1.y*q+j.col2.y*n;q=o;j=l.m_xf.R;var a=this.m_localAnchor2.x-l.m_sweep.localCenter.x,c=this.m_localAnchor2.y-l.m_sweep.localCenter.y;o=j.col1.x*a+j.col2.x*c;c=j.col1.y*a+j.col2.y*c;a=o;j=h.m_invMass;o=l.m_invMass;var g=h.m_invI,b=l.m_invI;this.m_mass.col1.x=j+o+n*n*g+c*c*b;this.m_mass.col2.x=-n*q*g-c*a*b;this.m_mass.col3.x=-n*g-c*b;this.m_mass.col1.y=this.m_mass.col2.x;this.m_mass.col2.y=j+o+q*q*g+a*a*b;this.m_mass.col3.y=q*g+a*b;this.m_mass.col1.z=this.m_mass.col3.x;this.m_mass.col2.z=this.m_mass.col3.y; >+this.m_mass.col3.z=g+b;this.m_motorMass=1/(g+b);if(this.m_enableMotor==false)this.m_motorImpulse=0;if(this.m_enableLimit){var e=l.m_sweep.a-h.m_sweep.a-this.m_referenceAngle;if(y.Abs(this.m_upperAngle-this.m_lowerAngle)<2*F.b2_angularSlop)this.m_limitState=I.e_equalLimits;else if(e<=this.m_lowerAngle){if(this.m_limitState!=I.e_atLowerLimit)this.m_impulse.z=0;this.m_limitState=I.e_atLowerLimit}else if(e>=this.m_upperAngle){if(this.m_limitState!=I.e_atUpperLimit)this.m_impulse.z=0;this.m_limitState= >+I.e_atUpperLimit}else{this.m_limitState=I.e_inactiveLimit;this.m_impulse.z=0}}else this.m_limitState=I.e_inactiveLimit;if(d.warmStarting){this.m_impulse.x*=d.dtRatio;this.m_impulse.y*=d.dtRatio;this.m_motorImpulse*=d.dtRatio;d=this.m_impulse.x;e=this.m_impulse.y;h.m_linearVelocity.x-=j*d;h.m_linearVelocity.y-=j*e;h.m_angularVelocity-=g*(q*e-n*d+this.m_motorImpulse+this.m_impulse.z);l.m_linearVelocity.x+=o*d;l.m_linearVelocity.y+=o*e;l.m_angularVelocity+=b*(a*e-c*d+this.m_motorImpulse+this.m_impulse.z)}else{this.m_impulse.SetZero(); >+this.m_motorImpulse=0}};N.prototype.SolveVelocityConstraints=function(d){var h=this.m_bodyA,l=this.m_bodyB,j=0,o=j=0,q=0,n=0,a=0,c=h.m_linearVelocity,g=h.m_angularVelocity,b=l.m_linearVelocity,e=l.m_angularVelocity,f=h.m_invMass,m=l.m_invMass,r=h.m_invI,s=l.m_invI;if(this.m_enableMotor&&this.m_limitState!=I.e_equalLimits){o=this.m_motorMass*-(e-g-this.m_motorSpeed);q=this.m_motorImpulse;n=d.dt*this.m_maxMotorTorque;this.m_motorImpulse=y.Clamp(this.m_motorImpulse+o,-n,n);o=this.m_motorImpulse-q;g-= >+r*o;e+=s*o}if(this.m_enableLimit&&this.m_limitState!=I.e_inactiveLimit){d=h.m_xf.R;o=this.m_localAnchor1.x-h.m_sweep.localCenter.x;q=this.m_localAnchor1.y-h.m_sweep.localCenter.y;j=d.col1.x*o+d.col2.x*q;q=d.col1.y*o+d.col2.y*q;o=j;d=l.m_xf.R;n=this.m_localAnchor2.x-l.m_sweep.localCenter.x;a=this.m_localAnchor2.y-l.m_sweep.localCenter.y;j=d.col1.x*n+d.col2.x*a;a=d.col1.y*n+d.col2.y*a;n=j;d=b.x+-e*a-c.x- -g*q;var v=b.y+e*n-c.y-g*o;this.m_mass.Solve33(this.impulse3,-d,-v,-(e-g));if(this.m_limitState== >+I.e_equalLimits)this.m_impulse.Add(this.impulse3);else if(this.m_limitState==I.e_atLowerLimit){j=this.m_impulse.z+this.impulse3.z;if(j<0){this.m_mass.Solve22(this.reduced,-d,-v);this.impulse3.x=this.reduced.x;this.impulse3.y=this.reduced.y;this.impulse3.z=-this.m_impulse.z;this.m_impulse.x+=this.reduced.x;this.m_impulse.y+=this.reduced.y;this.m_impulse.z=0}}else if(this.m_limitState==I.e_atUpperLimit){j=this.m_impulse.z+this.impulse3.z;if(j>0){this.m_mass.Solve22(this.reduced,-d,-v);this.impulse3.x= >+this.reduced.x;this.impulse3.y=this.reduced.y;this.impulse3.z=-this.m_impulse.z;this.m_impulse.x+=this.reduced.x;this.m_impulse.y+=this.reduced.y;this.m_impulse.z=0}}c.x-=f*this.impulse3.x;c.y-=f*this.impulse3.y;g-=r*(o*this.impulse3.y-q*this.impulse3.x+this.impulse3.z);b.x+=m*this.impulse3.x;b.y+=m*this.impulse3.y;e+=s*(n*this.impulse3.y-a*this.impulse3.x+this.impulse3.z)}else{d=h.m_xf.R;o=this.m_localAnchor1.x-h.m_sweep.localCenter.x;q=this.m_localAnchor1.y-h.m_sweep.localCenter.y;j=d.col1.x*o+ >+d.col2.x*q;q=d.col1.y*o+d.col2.y*q;o=j;d=l.m_xf.R;n=this.m_localAnchor2.x-l.m_sweep.localCenter.x;a=this.m_localAnchor2.y-l.m_sweep.localCenter.y;j=d.col1.x*n+d.col2.x*a;a=d.col1.y*n+d.col2.y*a;n=j;this.m_mass.Solve22(this.impulse2,-(b.x+-e*a-c.x- -g*q),-(b.y+e*n-c.y-g*o));this.m_impulse.x+=this.impulse2.x;this.m_impulse.y+=this.impulse2.y;c.x-=f*this.impulse2.x;c.y-=f*this.impulse2.y;g-=r*(o*this.impulse2.y-q*this.impulse2.x);b.x+=m*this.impulse2.x;b.y+=m*this.impulse2.y;e+=s*(n*this.impulse2.y- >+a*this.impulse2.x)}h.m_linearVelocity.SetV(c);h.m_angularVelocity=g;l.m_linearVelocity.SetV(b);l.m_angularVelocity=e};N.prototype.SolvePositionConstraints=function(){var d=0,h,l=this.m_bodyA,j=this.m_bodyB,o=0,q=h=0,n=0,a=0;if(this.m_enableLimit&&this.m_limitState!=I.e_inactiveLimit){d=j.m_sweep.a-l.m_sweep.a-this.m_referenceAngle;var c=0;if(this.m_limitState==I.e_equalLimits){d=y.Clamp(d-this.m_lowerAngle,-F.b2_maxAngularCorrection,F.b2_maxAngularCorrection);c=-this.m_motorMass*d;o=y.Abs(d)}else if(this.m_limitState== >+I.e_atLowerLimit){d=d-this.m_lowerAngle;o=-d;d=y.Clamp(d+F.b2_angularSlop,-F.b2_maxAngularCorrection,0);c=-this.m_motorMass*d}else if(this.m_limitState==I.e_atUpperLimit){o=d=d-this.m_upperAngle;d=y.Clamp(d-F.b2_angularSlop,0,F.b2_maxAngularCorrection);c=-this.m_motorMass*d}l.m_sweep.a-=l.m_invI*c;j.m_sweep.a+=j.m_invI*c;l.SynchronizeTransform();j.SynchronizeTransform()}h=l.m_xf.R;c=this.m_localAnchor1.x-l.m_sweep.localCenter.x;d=this.m_localAnchor1.y-l.m_sweep.localCenter.y;q=h.col1.x*c+h.col2.x* >+d;d=h.col1.y*c+h.col2.y*d;c=q;h=j.m_xf.R;var g=this.m_localAnchor2.x-j.m_sweep.localCenter.x,b=this.m_localAnchor2.y-j.m_sweep.localCenter.y;q=h.col1.x*g+h.col2.x*b;b=h.col1.y*g+h.col2.y*b;g=q;n=j.m_sweep.c.x+g-l.m_sweep.c.x-c;a=j.m_sweep.c.y+b-l.m_sweep.c.y-d;var e=n*n+a*a;h=Math.sqrt(e);q=l.m_invMass;var f=j.m_invMass,m=l.m_invI,r=j.m_invI,s=10*F.b2_linearSlop;if(e>s*s){e=1/(q+f);n=e*-n;a=e*-a;l.m_sweep.c.x-=0.5*q*n;l.m_sweep.c.y-=0.5*q*a;j.m_sweep.c.x+=0.5*f*n;j.m_sweep.c.y+=0.5*f*a;n=j.m_sweep.c.x+ >+g-l.m_sweep.c.x-c;a=j.m_sweep.c.y+b-l.m_sweep.c.y-d}this.K1.col1.x=q+f;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=q+f;this.K2.col1.x=m*d*d;this.K2.col2.x=-m*c*d;this.K2.col1.y=-m*c*d;this.K2.col2.y=m*c*c;this.K3.col1.x=r*b*b;this.K3.col2.x=-r*g*b;this.K3.col1.y=-r*g*b;this.K3.col2.y=r*g*g;this.K.SetM(this.K1);this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Solve(N.tImpulse,-n,-a);n=N.tImpulse.x;a=N.tImpulse.y;l.m_sweep.c.x-=l.m_invMass*n;l.m_sweep.c.y-=l.m_invMass*a;l.m_sweep.a-=l.m_invI*(c* >+a-d*n);j.m_sweep.c.x+=j.m_invMass*n;j.m_sweep.c.y+=j.m_invMass*a;j.m_sweep.a+=j.m_invI*(g*a-b*n);l.SynchronizeTransform();j.SynchronizeTransform();return h<=F.b2_linearSlop&&o<=F.b2_angularSlop};Box2D.postDefs.push(function(){Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse=new w});Box2D.inherit(S,Box2D.Dynamics.Joints.b2JointDef);S.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;S.b2RevoluteJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA= >+new w;this.localAnchorB=new w};S.prototype.b2RevoluteJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_revoluteJoint;this.localAnchorA.Set(0,0);this.localAnchorB.Set(0,0);this.motorSpeed=this.maxMotorTorque=this.upperAngle=this.lowerAngle=this.referenceAngle=0;this.enableMotor=this.enableLimit=false};S.prototype.Initialize=function(d,h,l){this.bodyA=d;this.bodyB=h;this.localAnchorA=this.bodyA.GetLocalPoint(l);this.localAnchorB=this.bodyB.GetLocalPoint(l);this.referenceAngle=this.bodyB.GetAngle()- >+this.bodyA.GetAngle()};Box2D.inherit(aa,Box2D.Dynamics.Joints.b2Joint);aa.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;aa.b2WeldJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchorA=new w;this.m_localAnchorB=new w;this.m_impulse=new A;this.m_mass=new K};aa.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchorA)};aa.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchorB)};aa.prototype.GetReactionForce= >+function(d){if(d===undefined)d=0;return new w(d*this.m_impulse.x,d*this.m_impulse.y)};aa.prototype.GetReactionTorque=function(d){if(d===undefined)d=0;return d*this.m_impulse.z};aa.prototype.b2WeldJoint=function(d){this.__super.b2Joint.call(this,d);this.m_localAnchorA.SetV(d.localAnchorA);this.m_localAnchorB.SetV(d.localAnchorB);this.m_referenceAngle=d.referenceAngle;this.m_impulse.SetZero();this.m_mass=new K};aa.prototype.InitVelocityConstraints=function(d){var h,l=0,j=this.m_bodyA,o=this.m_bodyB; >+h=j.m_xf.R;var q=this.m_localAnchorA.x-j.m_sweep.localCenter.x,n=this.m_localAnchorA.y-j.m_sweep.localCenter.y;l=h.col1.x*q+h.col2.x*n;n=h.col1.y*q+h.col2.y*n;q=l;h=o.m_xf.R;var a=this.m_localAnchorB.x-o.m_sweep.localCenter.x,c=this.m_localAnchorB.y-o.m_sweep.localCenter.y;l=h.col1.x*a+h.col2.x*c;c=h.col1.y*a+h.col2.y*c;a=l;h=j.m_invMass;l=o.m_invMass;var g=j.m_invI,b=o.m_invI;this.m_mass.col1.x=h+l+n*n*g+c*c*b;this.m_mass.col2.x=-n*q*g-c*a*b;this.m_mass.col3.x=-n*g-c*b;this.m_mass.col1.y=this.m_mass.col2.x; >+this.m_mass.col2.y=h+l+q*q*g+a*a*b;this.m_mass.col3.y=q*g+a*b;this.m_mass.col1.z=this.m_mass.col3.x;this.m_mass.col2.z=this.m_mass.col3.y;this.m_mass.col3.z=g+b;if(d.warmStarting){this.m_impulse.x*=d.dtRatio;this.m_impulse.y*=d.dtRatio;this.m_impulse.z*=d.dtRatio;j.m_linearVelocity.x-=h*this.m_impulse.x;j.m_linearVelocity.y-=h*this.m_impulse.y;j.m_angularVelocity-=g*(q*this.m_impulse.y-n*this.m_impulse.x+this.m_impulse.z);o.m_linearVelocity.x+=l*this.m_impulse.x;o.m_linearVelocity.y+=l*this.m_impulse.y; >+o.m_angularVelocity+=b*(a*this.m_impulse.y-c*this.m_impulse.x+this.m_impulse.z)}else this.m_impulse.SetZero()};aa.prototype.SolveVelocityConstraints=function(){var d,h=0,l=this.m_bodyA,j=this.m_bodyB,o=l.m_linearVelocity,q=l.m_angularVelocity,n=j.m_linearVelocity,a=j.m_angularVelocity,c=l.m_invMass,g=j.m_invMass,b=l.m_invI,e=j.m_invI;d=l.m_xf.R;var f=this.m_localAnchorA.x-l.m_sweep.localCenter.x,m=this.m_localAnchorA.y-l.m_sweep.localCenter.y;h=d.col1.x*f+d.col2.x*m;m=d.col1.y*f+d.col2.y*m;f=h;d= >+j.m_xf.R;var r=this.m_localAnchorB.x-j.m_sweep.localCenter.x,s=this.m_localAnchorB.y-j.m_sweep.localCenter.y;h=d.col1.x*r+d.col2.x*s;s=d.col1.y*r+d.col2.y*s;r=h;d=n.x-a*s-o.x+q*m;h=n.y+a*r-o.y-q*f;var v=a-q,t=new A;this.m_mass.Solve33(t,-d,-h,-v);this.m_impulse.Add(t);o.x-=c*t.x;o.y-=c*t.y;q-=b*(f*t.y-m*t.x+t.z);n.x+=g*t.x;n.y+=g*t.y;a+=e*(r*t.y-s*t.x+t.z);l.m_angularVelocity=q;j.m_angularVelocity=a};aa.prototype.SolvePositionConstraints=function(){var d,h=0,l=this.m_bodyA,j=this.m_bodyB;d=l.m_xf.R; >+var o=this.m_localAnchorA.x-l.m_sweep.localCenter.x,q=this.m_localAnchorA.y-l.m_sweep.localCenter.y;h=d.col1.x*o+d.col2.x*q;q=d.col1.y*o+d.col2.y*q;o=h;d=j.m_xf.R;var n=this.m_localAnchorB.x-j.m_sweep.localCenter.x,a=this.m_localAnchorB.y-j.m_sweep.localCenter.y;h=d.col1.x*n+d.col2.x*a;a=d.col1.y*n+d.col2.y*a;n=h;d=l.m_invMass;h=j.m_invMass;var c=l.m_invI,g=j.m_invI,b=j.m_sweep.c.x+n-l.m_sweep.c.x-o,e=j.m_sweep.c.y+a-l.m_sweep.c.y-q,f=j.m_sweep.a-l.m_sweep.a-this.m_referenceAngle,m=10*F.b2_linearSlop, >+r=Math.sqrt(b*b+e*e),s=y.Abs(f);if(r>m){c*=1;g*=1}this.m_mass.col1.x=d+h+q*q*c+a*a*g;this.m_mass.col2.x=-q*o*c-a*n*g;this.m_mass.col3.x=-q*c-a*g;this.m_mass.col1.y=this.m_mass.col2.x;this.m_mass.col2.y=d+h+o*o*c+n*n*g;this.m_mass.col3.y=o*c+n*g;this.m_mass.col1.z=this.m_mass.col3.x;this.m_mass.col2.z=this.m_mass.col3.y;this.m_mass.col3.z=c+g;m=new A;this.m_mass.Solve33(m,-b,-e,-f);l.m_sweep.c.x-=d*m.x;l.m_sweep.c.y-=d*m.y;l.m_sweep.a-=c*(o*m.y-q*m.x+m.z);j.m_sweep.c.x+=h*m.x;j.m_sweep.c.y+=h*m.y; >+j.m_sweep.a+=g*(n*m.y-a*m.x+m.z);l.SynchronizeTransform();j.SynchronizeTransform();return r<=F.b2_linearSlop&&s<=F.b2_angularSlop};Box2D.inherit(Z,Box2D.Dynamics.Joints.b2JointDef);Z.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;Z.b2WeldJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA=new w;this.localAnchorB=new w};Z.prototype.b2WeldJointDef=function(){this.__super.b2JointDef.call(this);this.type=I.e_weldJoint;this.referenceAngle= >+0};Z.prototype.Initialize=function(d,h,l){this.bodyA=d;this.bodyB=h;this.localAnchorA.SetV(this.bodyA.GetLocalPoint(l));this.localAnchorB.SetV(this.bodyB.GetLocalPoint(l));this.referenceAngle=this.bodyB.GetAngle()-this.bodyA.GetAngle()}})(); >+(function(){var F=Box2D.Dynamics.b2DebugDraw;F.b2DebugDraw=function(){this.m_xformScale=this.m_fillAlpha=this.m_alpha=this.m_lineThickness=this.m_drawScale=1;var G=this;this.m_sprite={graphics:{clear:function(){G.m_ctx.clearRect(0,0,G.m_ctx.canvas.width,G.m_ctx.canvas.height)}}}};F.prototype._color=function(G,K){return"rgba("+((G&16711680)>>16)+","+((G&65280)>>8)+","+(G&255)+","+K+")"};F.prototype.b2DebugDraw=function(){this.m_drawFlags=0};F.prototype.SetFlags=function(G){if(G===undefined)G=0;this.m_drawFlags= >+G};F.prototype.GetFlags=function(){return this.m_drawFlags};F.prototype.AppendFlags=function(G){if(G===undefined)G=0;this.m_drawFlags|=G};F.prototype.ClearFlags=function(G){if(G===undefined)G=0;this.m_drawFlags&=~G};F.prototype.SetSprite=function(G){this.m_ctx=G};F.prototype.GetSprite=function(){return this.m_ctx};F.prototype.SetDrawScale=function(G){if(G===undefined)G=0;this.m_drawScale=G};F.prototype.GetDrawScale=function(){return this.m_drawScale};F.prototype.SetLineThickness=function(G){if(G=== >+undefined)G=0;this.m_lineThickness=G;this.m_ctx.strokeWidth=G};F.prototype.GetLineThickness=function(){return this.m_lineThickness};F.prototype.SetAlpha=function(G){if(G===undefined)G=0;this.m_alpha=G};F.prototype.GetAlpha=function(){return this.m_alpha};F.prototype.SetFillAlpha=function(G){if(G===undefined)G=0;this.m_fillAlpha=G};F.prototype.GetFillAlpha=function(){return this.m_fillAlpha};F.prototype.SetXFormScale=function(G){if(G===undefined)G=0;this.m_xformScale=G};F.prototype.GetXFormScale=function(){return this.m_xformScale}; >+F.prototype.DrawPolygon=function(G,K,y){if(K){var w=this.m_ctx,A=this.m_drawScale;w.beginPath();w.strokeStyle=this._color(y.color,this.m_alpha);w.moveTo(G[0].x*A,G[0].y*A);for(y=1;y<K;y++)w.lineTo(G[y].x*A,G[y].y*A);w.lineTo(G[0].x*A,G[0].y*A);w.closePath();w.stroke()}};F.prototype.DrawSolidPolygon=function(G,K,y){if(K){var w=this.m_ctx,A=this.m_drawScale;w.beginPath();w.strokeStyle=this._color(y.color,this.m_alpha);w.fillStyle=this._color(y.color,this.m_fillAlpha);w.moveTo(G[0].x*A,G[0].y*A);for(y= >+1;y<K;y++)w.lineTo(G[y].x*A,G[y].y*A);w.lineTo(G[0].x*A,G[0].y*A);w.closePath();w.fill();w.stroke()}};F.prototype.DrawCircle=function(G,K,y){if(K){var w=this.m_ctx,A=this.m_drawScale;w.beginPath();w.strokeStyle=this._color(y.color,this.m_alpha);w.arc(G.x*A,G.y*A,K*A,0,Math.PI*2,true);w.closePath();w.stroke()}};F.prototype.DrawSolidCircle=function(G,K,y,w){if(K){var A=this.m_ctx,U=this.m_drawScale,p=G.x*U,B=G.y*U;A.moveTo(0,0);A.beginPath();A.strokeStyle=this._color(w.color,this.m_alpha);A.fillStyle= >+this._color(w.color,this.m_fillAlpha);A.arc(p,B,K*U,0,Math.PI*2,true);A.moveTo(p,B);A.lineTo((G.x+y.x*K)*U,(G.y+y.y*K)*U);A.closePath();A.fill();A.stroke()}};F.prototype.DrawSegment=function(G,K,y){var w=this.m_ctx,A=this.m_drawScale;w.strokeStyle=this._color(y.color,this.m_alpha);w.beginPath();w.moveTo(G.x*A,G.y*A);w.lineTo(K.x*A,K.y*A);w.closePath();w.stroke()};F.prototype.DrawTransform=function(G){var K=this.m_ctx,y=this.m_drawScale;K.beginPath();K.strokeStyle=this._color(16711680,this.m_alpha); >+K.moveTo(G.position.x*y,G.position.y*y);K.lineTo((G.position.x+this.m_xformScale*G.R.col1.x)*y,(G.position.y+this.m_xformScale*G.R.col1.y)*y);K.strokeStyle=this._color(65280,this.m_alpha);K.moveTo(G.position.x*y,G.position.y*y);K.lineTo((G.position.x+this.m_xformScale*G.R.col2.x)*y,(G.position.y+this.m_xformScale*G.R.col2.y)*y);K.closePath();K.stroke()}})();var i;for(i=0;i<Box2D.postDefs.length;++i)Box2D.postDefs[i]();delete Box2D.postDefs; >+ >+// Copyright 2013 the V8 project authors. All rights reserved. >+ >+// This program is free software; you can redistribute it and/or modify >+// it under the terms of the GNU General Public License as published by >+// the Free Software Foundation; either version 2 of the License, or >+// (at your option) any later version. >+// >+// This program is distributed in the hope that it will be useful, >+// but WITHOUT ANY WARRANTY; without even the implied warranty of >+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+// GNU General Public License for more details. >+// >+// You should have received a copy of the GNU General Public License >+// along with this program; if not, write to the Free Software >+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA >+ >+function MakeNewWorld () { >+ var Vec2 = Box2D.Common.Math.b2Vec2, >+ BodyDef = Box2D.Dynamics.b2BodyDef, >+ Body = Box2D.Dynamics.b2Body, >+ FixtureDef = Box2D.Dynamics.b2FixtureDef, >+ Fixture = Box2D.Dynamics.b2Fixture, >+ World = Box2D.Dynamics.b2World, >+ MassData = Box2D.Collision.Shapes.b2MassData, >+ PolygonShape = Box2D.Collision.Shapes.b2PolygonShape, >+ CircleShape = Box2D.Collision.Shapes.b2CircleShape; >+ >+ var gravity = new Vec2(0, -10); >+ var world = new World(gravity, true); >+ >+ var shape = new PolygonShape(); >+ shape.SetAsEdge(new Vec2(-40.0, 0), new Vec2(40.0, 0)); >+ >+ var fd = new FixtureDef(); >+ fd.density = 0.0; >+ fd.shape = shape; >+ var bd = new BodyDef(); >+ var ground = world.CreateBody(bd); >+ ground.CreateFixture(fd); >+ >+ var a = .5; >+ var shape = new PolygonShape(); >+ shape.SetAsBox(a, a); >+ >+ var x = new Vec2(-7.0, 0.75); >+ var y = new Vec2(); >+ var deltaX = new Vec2(0.5625, 1); >+ var deltaY = new Vec2(1.125, 0.0); >+ >+ for (var i = 0; i < 10; ++i) { >+ y.Set(x.x, x.y); >+ >+ for (var j = 0; j < 5; ++j) { >+ var fd = new FixtureDef(); >+ fd.density = 5.0; >+ fd.shape = shape; >+ >+ var bd = new BodyDef(); >+ bd.type = Body.b2_dynamicBody; >+ bd.position.Set(y.x, y.y); >+ var body = world.CreateBody(bd); >+ body.CreateFixture(fd); >+ y.Add(deltaY); >+ } >+ >+ x.Add(deltaX); >+ } >+ >+ return world; >+} >+ >+var world = null; >+ >+function runBox2D() { >+ var world = MakeNewWorld(); >+ for (var i = 0; i < 20; i++) { >+ world.Step(1 / 60, 10, 3); >+ } >+} >+function setupBox2D() { >+} >+ >+function tearDownBox2D() { >+ world = null; >+ Box2D = null; >+} >+ >+ >+for (let i = 0; i < 10; ++i) >+ runBox2D(); >+tearDownBox2D(); >+ >Index: PerformanceTests/testmem/crypto-md5.js >=================================================================== >--- PerformanceTests/testmem/crypto-md5.js (nonexistent) >+++ PerformanceTests/testmem/crypto-md5.js (working copy) >@@ -0,0 +1,292 @@ >+/* >+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message >+ * Digest Algorithm, as defined in RFC 1321. >+ * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. >+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet >+ * Distributed under the BSD License >+ * See http://pajhome.org.uk/crypt/md5 for more info. >+ */ >+ >+/* >+ * Configurable variables. You may need to tweak these to be compatible with >+ * the server-side, but the defaults work in most cases. >+ */ >+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ >+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ >+var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ >+ >+/* >+ * These are the functions you'll usually want to call >+ * They take string arguments and return either hex or base-64 encoded strings >+ */ >+function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));} >+function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));} >+function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));} >+function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); } >+function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); } >+function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); } >+ >+/* >+ * Perform a simple self-test to see if the VM is working >+ */ >+function md5_vm_test() >+{ >+ return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; >+} >+ >+/* >+ * Calculate the MD5 of an array of little-endian words, and a bit length >+ */ >+function core_md5(x, len) >+{ >+ /* append padding */ >+ x[len >> 5] |= 0x80 << ((len) % 32); >+ x[(((len + 64) >>> 9) << 4) + 14] = len; >+ >+ var a = 1732584193; >+ var b = -271733879; >+ var c = -1732584194; >+ var d = 271733878; >+ >+ for(var i = 0; i < x.length; i += 16) >+ { >+ var olda = a; >+ var oldb = b; >+ var oldc = c; >+ var oldd = d; >+ >+ a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); >+ d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); >+ c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); >+ b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); >+ a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); >+ d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); >+ c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); >+ b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); >+ a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); >+ d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); >+ c = md5_ff(c, d, a, b, x[i+10], 17, -42063); >+ b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); >+ a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); >+ d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); >+ c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); >+ b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); >+ >+ a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); >+ d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); >+ c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); >+ b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); >+ a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); >+ d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); >+ c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); >+ b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); >+ a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); >+ d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); >+ c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); >+ b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); >+ a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); >+ d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); >+ c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); >+ b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); >+ >+ a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); >+ d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); >+ c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); >+ b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); >+ a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); >+ d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); >+ c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); >+ b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); >+ a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); >+ d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); >+ c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); >+ b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); >+ a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); >+ d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); >+ c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); >+ b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); >+ >+ a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); >+ d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); >+ c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); >+ b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); >+ a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); >+ d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); >+ c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); >+ b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); >+ a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); >+ d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); >+ c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); >+ b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); >+ a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); >+ d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); >+ c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); >+ b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); >+ >+ a = safe_add(a, olda); >+ b = safe_add(b, oldb); >+ c = safe_add(c, oldc); >+ d = safe_add(d, oldd); >+ } >+ return Array(a, b, c, d); >+ >+} >+ >+/* >+ * These functions implement the four basic operations the algorithm uses. >+ */ >+function md5_cmn(q, a, b, x, s, t) >+{ >+ return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); >+} >+function md5_ff(a, b, c, d, x, s, t) >+{ >+ return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); >+} >+function md5_gg(a, b, c, d, x, s, t) >+{ >+ return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); >+} >+function md5_hh(a, b, c, d, x, s, t) >+{ >+ return md5_cmn(b ^ c ^ d, a, b, x, s, t); >+} >+function md5_ii(a, b, c, d, x, s, t) >+{ >+ return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); >+} >+ >+/* >+ * Calculate the HMAC-MD5, of a key and some data >+ */ >+function core_hmac_md5(key, data) >+{ >+ var bkey = str2binl(key); >+ if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz); >+ >+ var ipad = Array(16), opad = Array(16); >+ for(var i = 0; i < 16; i++) >+ { >+ ipad[i] = bkey[i] ^ 0x36363636; >+ opad[i] = bkey[i] ^ 0x5C5C5C5C; >+ } >+ >+ var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); >+ return core_md5(opad.concat(hash), 512 + 128); >+} >+ >+/* >+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally >+ * to work around bugs in some JS interpreters. >+ */ >+function safe_add(x, y) >+{ >+ var lsw = (x & 0xFFFF) + (y & 0xFFFF); >+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16); >+ return (msw << 16) | (lsw & 0xFFFF); >+} >+ >+/* >+ * Bitwise rotate a 32-bit number to the left. >+ */ >+function bit_rol(num, cnt) >+{ >+ return (num << cnt) | (num >>> (32 - cnt)); >+} >+ >+/* >+ * Convert a string to an array of little-endian words >+ * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. >+ */ >+function str2binl(str) >+{ >+ var bin = Array(); >+ var mask = (1 << chrsz) - 1; >+ for(var i = 0; i < str.length * chrsz; i += chrsz) >+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32); >+ return bin; >+} >+ >+/* >+ * Convert an array of little-endian words to a string >+ */ >+function binl2str(bin) >+{ >+ var str = ""; >+ var mask = (1 << chrsz) - 1; >+ for(var i = 0; i < bin.length * 32; i += chrsz) >+ str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask); >+ return str; >+} >+ >+/* >+ * Convert an array of little-endian words to a hex string. >+ */ >+function binl2hex(binarray) >+{ >+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; >+ var str = ""; >+ for(var i = 0; i < binarray.length * 4; i++) >+ { >+ str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + >+ hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); >+ } >+ return str; >+} >+ >+/* >+ * Convert an array of little-endian words to a base-64 string >+ */ >+function binl2b64(binarray) >+{ >+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; >+ var str = ""; >+ for(var i = 0; i < binarray.length * 4; i += 3) >+ { >+ var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) >+ | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) >+ | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF); >+ for(var j = 0; j < 4; j++) >+ { >+ if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; >+ else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); >+ } >+ } >+ return str; >+} >+ >+var plainText = "Rebellious subjects, enemies to peace,\n\ >+Profaners of this neighbour-stained steel,--\n\ >+Will they not hear? What, ho! you men, you beasts,\n\ >+That quench the fire of your pernicious rage\n\ >+With purple fountains issuing from your veins,\n\ >+On pain of torture, from those bloody hands\n\ >+Throw your mistemper'd weapons to the ground,\n\ >+And hear the sentence of your moved prince.\n\ >+Three civil brawls, bred of an airy word,\n\ >+By thee, old Capulet, and Montague,\n\ >+Have thrice disturb'd the quiet of our streets,\n\ >+And made Verona's ancient citizens\n\ >+Cast by their grave beseeming ornaments,\n\ >+To wield old partisans, in hands as old,\n\ >+Canker'd with peace, to part your canker'd hate:\n\ >+If ever you disturb our streets again,\n\ >+Your lives shall pay the forfeit of the peace.\n\ >+For this time, all the rest depart away:\n\ >+You Capulet; shall go along with me:\n\ >+And, Montague, come you this afternoon,\n\ >+To know our further pleasure in this case,\n\ >+To old Free-town, our common judgment-place.\n\ >+Once more, on pain of death, all men depart." >+ >+for (var i = 0; i <4; i++) { >+ plainText += plainText; >+} >+ >+var md5Output = hex_md5(plainText); >+ >+var expected = "a831e91e0f70eddcb70dc61c6f82f6cd"; >+ >+if (md5Output != expected) >+ throw "ERROR: bad result: expected " + expected + " but got " + md5Output; >+ >Index: PerformanceTests/testmem/date-format-tofte.js >=================================================================== >--- PerformanceTests/testmem/date-format-tofte.js (nonexistent) >+++ PerformanceTests/testmem/date-format-tofte.js (working copy) >@@ -0,0 +1,301 @@ >+function arrayExists(array, x) { >+ for (var i = 0; i < array.length; i++) { >+ if (array[i] == x) return true; >+ } >+ return false; >+} >+ >+Date.prototype.formatDate = function (input,time) { >+ // formatDate : >+ // a PHP date like function, for formatting date strings >+ // See: http://www.php.net/date >+ // >+ // input : format string >+ // time : epoch time (seconds, and optional) >+ // >+ // if time is not passed, formatting is based on >+ // the current "this" date object's set time. >+ // >+ // supported: >+ // a, A, B, d, D, F, g, G, h, H, i, j, l (lowercase L), L, >+ // m, M, n, O, r, s, S, t, U, w, W, y, Y, z >+ // >+ // unsupported: >+ // I (capital i), T, Z >+ >+ var switches = ["a", "A", "B", "d", "D", "F", "g", "G", "h", "H", >+ "i", "j", "l", "L", "m", "M", "n", "O", "r", "s", >+ "S", "t", "U", "w", "W", "y", "Y", "z"]; >+ var daysLong = ["Sunday", "Monday", "Tuesday", "Wednesday", >+ "Thursday", "Friday", "Saturday"]; >+ var daysShort = ["Sun", "Mon", "Tue", "Wed", >+ "Thu", "Fri", "Sat"]; >+ var monthsShort = ["Jan", "Feb", "Mar", "Apr", >+ "May", "Jun", "Jul", "Aug", "Sep", >+ "Oct", "Nov", "Dec"]; >+ var monthsLong = ["January", "February", "March", "April", >+ "May", "June", "July", "August", "September", >+ "October", "November", "December"]; >+ var daysSuffix = ["st", "nd", "rd", "th", "th", "th", "th", // 1st - 7th >+ "th", "th", "th", "th", "th", "th", "th", // 8th - 14th >+ "th", "th", "th", "th", "th", "th", "st", // 15th - 21st >+ "nd", "rd", "th", "th", "th", "th", "th", // 22nd - 28th >+ "th", "th", "st"]; // 29th - 31st >+ >+ function a() { >+ // Lowercase Ante meridiem and Post meridiem >+ return self.getHours() > 11? "pm" : "am"; >+ } >+ function A() { >+ // Uppercase Ante meridiem and Post meridiem >+ return self.getHours() > 11? "PM" : "AM"; >+ } >+ >+ function B(){ >+ // Swatch internet time. code simply grabbed from ppk, >+ // since I was feeling lazy: >+ // http://www.xs4all.nl/~ppk/js/beat.html >+ var off = (self.getTimezoneOffset() + 60)*60; >+ var theSeconds = (self.getHours() * 3600) + >+ (self.getMinutes() * 60) + >+ self.getSeconds() + off; >+ var beat = Math.floor(theSeconds/86.4); >+ if (beat > 1000) beat -= 1000; >+ if (beat < 0) beat += 1000; >+ if ((""+beat).length == 1) beat = "00"+beat; >+ if ((""+beat).length == 2) beat = "0"+beat; >+ return beat; >+ } >+ >+ function d() { >+ // Day of the month, 2 digits with leading zeros >+ return new String(self.getDate()).length == 1? >+ "0"+self.getDate() : self.getDate(); >+ } >+ function D() { >+ // A textual representation of a day, three letters >+ return daysShort[self.getDay()]; >+ } >+ function F() { >+ // A full textual representation of a month >+ return monthsLong[self.getMonth()]; >+ } >+ function g() { >+ // 12-hour format of an hour without leading zeros >+ return self.getHours() > 12? self.getHours()-12 : self.getHours(); >+ } >+ function G() { >+ // 24-hour format of an hour without leading zeros >+ return self.getHours(); >+ } >+ function h() { >+ // 12-hour format of an hour with leading zeros >+ if (self.getHours() > 12) { >+ var s = new String(self.getHours()-12); >+ return s.length == 1? >+ "0"+ (self.getHours()-12) : self.getHours()-12; >+ } else { >+ var s = new String(self.getHours()); >+ return s.length == 1? >+ "0"+self.getHours() : self.getHours(); >+ } >+ } >+ function H() { >+ // 24-hour format of an hour with leading zeros >+ return new String(self.getHours()).length == 1? >+ "0"+self.getHours() : self.getHours(); >+ } >+ function i() { >+ // Minutes with leading zeros >+ return new String(self.getMinutes()).length == 1? >+ "0"+self.getMinutes() : self.getMinutes(); >+ } >+ function j() { >+ // Day of the month without leading zeros >+ return self.getDate(); >+ } >+ function l() { >+ // A full textual representation of the day of the week >+ return daysLong[self.getDay()]; >+ } >+ function L() { >+ // leap year or not. 1 if leap year, 0 if not. >+ // the logic should match iso's 8601 standard. >+ var y_ = Y(); >+ if ( >+ (y_ % 4 == 0 && y_ % 100 != 0) || >+ (y_ % 4 == 0 && y_ % 100 == 0 && y_ % 400 == 0) >+ ) { >+ return 1; >+ } else { >+ return 0; >+ } >+ } >+ function m() { >+ // Numeric representation of a month, with leading zeros >+ return self.getMonth() < 9? >+ "0"+(self.getMonth()+1) : >+ self.getMonth()+1; >+ } >+ function M() { >+ // A short textual representation of a month, three letters >+ return monthsShort[self.getMonth()]; >+ } >+ function n() { >+ // Numeric representation of a month, without leading zeros >+ return self.getMonth()+1; >+ } >+ function O() { >+ // Difference to Greenwich time (GMT) in hours >+ var os = Math.abs(self.getTimezoneOffset()); >+ var h = ""+Math.floor(os/60); >+ var m = ""+(os%60); >+ h.length == 1? h = "0"+h:1; >+ m.length == 1? m = "0"+m:1; >+ return self.getTimezoneOffset() < 0 ? "+"+h+m : "-"+h+m; >+ } >+ function r() { >+ // RFC 822 formatted date >+ var r; // result >+ // Thu , 21 Dec 2000 >+ r = D() + ", " + j() + " " + M() + " " + Y() + >+ // 16 : 01 : 07 +0200 >+ " " + H() + ":" + i() + ":" + s() + " " + O(); >+ return r; >+ } >+ function S() { >+ // English ordinal suffix for the day of the month, 2 characters >+ return daysSuffix[self.getDate()-1]; >+ } >+ function s() { >+ // Seconds, with leading zeros >+ return new String(self.getSeconds()).length == 1? >+ "0"+self.getSeconds() : self.getSeconds(); >+ } >+ function t() { >+ >+ // thanks to Matt Bannon for some much needed code-fixes here! >+ var daysinmonths = [null,31,28,31,30,31,30,31,31,30,31,30,31]; >+ if (L()==1 && n()==2) return 29; // leap day >+ return daysinmonths[n()]; >+ } >+ function U() { >+ // Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) >+ return Math.round(self.getTime()/1000); >+ } >+ function W() { >+ // Weeknumber, as per ISO specification: >+ // http://www.cl.cam.ac.uk/~mgk25/iso-time.html >+ >+ // if the day is three days before newyears eve, >+ // there's a chance it's "week 1" of next year. >+ // here we check for that. >+ var beforeNY = 364+L() - z(); >+ var afterNY = z(); >+ var weekday = w()!=0?w()-1:6; // makes sunday (0), into 6. >+ if (beforeNY <= 2 && weekday <= 2-beforeNY) { >+ return 1; >+ } >+ // similarly, if the day is within threedays of newyears >+ // there's a chance it belongs in the old year. >+ var ny = new Date("January 1 " + Y() + " 00:00:00"); >+ var nyDay = ny.getDay()!=0?ny.getDay()-1:6; >+ if ( >+ (afterNY <= 2) && >+ (nyDay >=4) && >+ (afterNY >= (6-nyDay)) >+ ) { >+ // Since I'm not sure we can just always return 53, >+ // i call the function here again, using the last day >+ // of the previous year, as the date, and then just >+ // return that week. >+ var prevNY = new Date("December 31 " + (Y()-1) + " 00:00:00"); >+ return prevNY.formatDate("W"); >+ } >+ >+ // week 1, is the week that has the first thursday in it. >+ // note that this value is not zero index. >+ if (nyDay <= 3) { >+ // first day of the year fell on a thursday, or earlier. >+ return 1 + Math.floor( ( z() + nyDay ) / 7 ); >+ } else { >+ // first day of the year fell on a friday, or later. >+ return 1 + Math.floor( ( z() - ( 7 - nyDay ) ) / 7 ); >+ } >+ } >+ function w() { >+ // Numeric representation of the day of the week >+ return self.getDay(); >+ } >+ >+ function Y() { >+ // A full numeric representation of a year, 4 digits >+ >+ // we first check, if getFullYear is supported. if it >+ // is, we just use that. ppks code is nice, but wont >+ // work with dates outside 1900-2038, or something like that >+ if (self.getFullYear) { >+ var newDate = new Date("January 1 2001 00:00:00 +0000"); >+ var x = newDate .getFullYear(); >+ if (x == 2001) { >+ // i trust the method now >+ return self.getFullYear(); >+ } >+ } >+ // else, do this: >+ // codes thanks to ppk: >+ // http://www.xs4all.nl/~ppk/js/introdate.html >+ var x = self.getYear(); >+ var y = x % 100; >+ y += (y < 38) ? 2000 : 1900; >+ return y; >+ } >+ function y() { >+ // A two-digit representation of a year >+ var y = Y()+""; >+ return y.substring(y.length-2,y.length); >+ } >+ function z() { >+ // The day of the year, zero indexed! 0 through 366 >+ var t = new Date("January 1 " + Y() + " 00:00:00"); >+ var diff = self.getTime() - t.getTime(); >+ return Math.floor(diff/1000/60/60/24); >+ } >+ >+ var self = this; >+ if (time) { >+ // save time >+ var prevTime = self.getTime(); >+ self.setTime(time); >+ } >+ >+ var ia = input.split(""); >+ var ij = 0; >+ while (ia[ij]) { >+ if (ia[ij] == "\\") { >+ // this is our way of allowing users to escape stuff >+ ia.splice(ij,1); >+ } else { >+ if (arrayExists(switches,ia[ij])) { >+ ia[ij] = eval(ia[ij] + "()"); >+ } >+ } >+ ij++; >+ } >+ // reset time, back to what it was >+ if (prevTime) { >+ self.setTime(prevTime); >+ } >+ return ia.join(""); >+} >+ >+var date = new Date("1/1/2007 1:11:11"); >+ >+for (i = 0; i < 500; ++i) { >+ var shortFormat = date.formatDate("Y-m-d"); >+ var longFormat = date.formatDate("l, F d, Y g:i:s A"); >+ date.setTime(date.getTime() + 84266956); >+} >+ >+// FIXME: Find a way to validate this test. >+// https://bugs.webkit.org/show_bug.cgi?id=114849 >Index: PerformanceTests/testmem/earley-boyer.js >=================================================================== >--- PerformanceTests/testmem/earley-boyer.js (nonexistent) >+++ PerformanceTests/testmem/earley-boyer.js (working copy) >@@ -0,0 +1,4685 @@ >+// This file is automatically generated by scheme2js, except for the >+// benchmark harness code at the beginning and end of the file. >+ >+//var EarleyBoyer = new BenchmarkSuite('EarleyBoyer', [666463], [ >+// new Benchmark("Earley", true, false, function () { BgL_earleyzd2benchmarkzd2(); }), >+// new Benchmark("Boyer", true, false, function () { BgL_nboyerzd2benchmarkzd2(); }) >+//]); >+ >+ >+/************* GENERATED FILE - DO NOT EDIT *************/ >+/************* GENERATED FILE - DO NOT EDIT *************/ >+/************* GENERATED FILE - DO NOT EDIT *************/ >+/************* GENERATED FILE - DO NOT EDIT *************/ >+/************* GENERATED FILE - DO NOT EDIT *************/ >+/************* GENERATED FILE - DO NOT EDIT *************/ >+/************* GENERATED FILE - DO NOT EDIT *************/ >+/************* GENERATED FILE - DO NOT EDIT *************/ >+/* >+ * To use write/prints/... the default-output port has to be set first. >+ * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values >+ * should do the trick. >+ * In the following example the std-out and error-port are redirected to >+ * a DIV. >+function initRuntime() { >+ function escapeHTML(s) { >+ var tmp = s; >+ tmp = tmp.replace(/&/g, "&"); >+ tmp = tmp.replace(/</g, "<"); >+ tmp = tmp.replace(/>/g, ">"); >+ tmp = tmp.replace(/ /g, " "); >+ tmp = tmp.replace(/\n/g, "<br />"); >+ tmp = tmp.replace(/\t/g, "  "); >+ return tmp; >+ >+ } >+ >+ document.write("<div id='stdout'></div>"); >+ SC_DEFAULT_OUT = new sc_GenericOutputPort( >+ function(s) { >+ var stdout = document.getElementById('stdout'); >+ stdout.innerHTML = stdout.innerHTML + escapeHTML(s); >+ }); >+ SC_ERROR_OUT = SC_DEFAULT_OUT; >+} >+*/ >+ >+ >+function sc_print_debug() { >+ sc_print.apply(null, arguments); >+} >+/*** META ((export *js*)) */ >+var sc_JS_GLOBALS = this; >+ >+var __sc_LINE=-1; >+var __sc_FILE=""; >+ >+/*** META ((export #t)) */ >+function sc_alert() { >+ var len = arguments.length; >+ var s = ""; >+ var i; >+ >+ for( i = 0; i < len; i++ ) { >+ s += sc_toDisplayString(arguments[ i ]); >+ } >+ >+ return alert( s ); >+} >+ >+/*** META ((export #t)) */ >+function sc_typeof( x ) { >+ return typeof x; >+} >+ >+/*** META ((export #t)) */ >+function sc_error() { >+ var a = [sc_jsstring2symbol("*error*")]; >+ for (var i = 0; i < arguments.length; i++) { >+ a[i+1] = arguments[i]; >+ } >+ throw a; >+} >+ >+/*** META ((export #t) >+ (peephole (prefix "throw "))) >+ */ >+function sc_raise(obj) { >+ throw obj; >+} >+ >+/*** META ((export with-handler-lambda)) */ >+function sc_withHandlerLambda(handler, body) { >+ try { >+ return body(); >+ } catch(e) { >+ if (!e._internalException) >+ return handler(e); >+ else >+ throw e; >+ } >+} >+ >+var sc_properties = new Object(); >+ >+/*** META ((export #t)) */ >+function sc_putpropBang(sym, key, val) { >+ var ht = sc_properties[sym]; >+ if (!ht) { >+ ht = new Object(); >+ sc_properties[sym] = ht; >+ } >+ ht[key] = val; >+} >+ >+/*** META ((export #t)) */ >+function sc_getprop(sym, key) { >+ var ht = sc_properties[sym]; >+ if (ht) { >+ if (key in ht) >+ return ht[key]; >+ else >+ return false; >+ } else >+ return false; >+} >+ >+/*** META ((export #t)) */ >+function sc_rempropBang(sym, key) { >+ var ht = sc_properties[sym]; >+ if (ht) >+ delete ht[key]; >+} >+ >+/*** META ((export #t)) */ >+function sc_any2String(o) { >+ return jsstring2string(sc_toDisplayString(o)); >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 "===")) >+ (type bool)) >+ */ >+function sc_isEqv(o1, o2) { >+ return (o1 === o2); >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 "===")) >+ (type bool)) >+ */ >+function sc_isEq(o1, o2) { >+ return (o1 === o2); >+} >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isNumber(n) { >+ return (typeof n === "number"); >+} >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isComplex(n) { >+ return sc_isNumber(n); >+} >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isReal(n) { >+ return sc_isNumber(n); >+} >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isRational(n) { >+ return sc_isReal(n); >+} >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isInteger(n) { >+ return (parseInt(n) === n); >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix ", false"))) >+ */ >+// we don't have exact numbers... >+function sc_isExact(n) { >+ return false; >+} >+ >+/*** META ((export #t) >+ (peephole (postfix ", true")) >+ (type bool)) >+ */ >+function sc_isInexact(n) { >+ return true; >+} >+ >+/*** META ((export = =fx =fl) >+ (type bool) >+ (peephole (infix 2 2 "==="))) >+ */ >+function sc_equal(x) { >+ for (var i = 1; i < arguments.length; i++) >+ if (x !== arguments[i]) >+ return false; >+ return true; >+} >+ >+/*** META ((export < <fx <fl) >+ (type bool) >+ (peephole (infix 2 2 "<"))) >+ */ >+function sc_less(x) { >+ for (var i = 1; i < arguments.length; i++) { >+ if (x >= arguments[i]) >+ return false; >+ x = arguments[i]; >+ } >+ return true; >+} >+ >+/*** META ((export > >fx >fl) >+ (type bool) >+ (peephole (infix 2 2 ">"))) >+ */ >+function sc_greater(x, y) { >+ for (var i = 1; i < arguments.length; i++) { >+ if (x <= arguments[i]) >+ return false; >+ x = arguments[i]; >+ } >+ return true; >+} >+ >+/*** META ((export <= <=fx <=fl) >+ (type bool) >+ (peephole (infix 2 2 "<="))) >+ */ >+function sc_lessEqual(x, y) { >+ for (var i = 1; i < arguments.length; i++) { >+ if (x > arguments[i]) >+ return false; >+ x = arguments[i]; >+ } >+ return true; >+} >+ >+/*** META ((export >= >=fl >=fx) >+ (type bool) >+ (peephole (infix 2 2 ">="))) >+ */ >+function sc_greaterEqual(x, y) { >+ for (var i = 1; i < arguments.length; i++) { >+ if (x < arguments[i]) >+ return false; >+ x = arguments[i]; >+ } >+ return true; >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix "=== 0"))) >+ */ >+function sc_isZero(x) { >+ return (x === 0); >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix "> 0"))) >+ */ >+function sc_isPositive(x) { >+ return (x > 0); >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix "< 0"))) >+ */ >+function sc_isNegative(x) { >+ return (x < 0); >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix "%2===1"))) >+ */ >+function sc_isOdd(x) { >+ return (x % 2 === 1); >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix "%2===0"))) >+ */ >+function sc_isEven(x) { >+ return (x % 2 === 0); >+} >+ >+/*** META ((export #t)) */ >+var sc_max = Math.max; >+/*** META ((export #t)) */ >+var sc_min = Math.min; >+ >+/*** META ((export + +fx +fl) >+ (peephole (infix 0 #f "+" "0"))) >+ */ >+function sc_plus() { >+ var sum = 0; >+ for (var i = 0; i < arguments.length; i++) >+ sum += arguments[i]; >+ return sum; >+} >+ >+/*** META ((export * *fx *fl) >+ (peephole (infix 0 #f "*" "1"))) >+ */ >+function sc_multi() { >+ var product = 1; >+ for (var i = 0; i < arguments.length; i++) >+ product *= arguments[i]; >+ return product; >+} >+ >+/*** META ((export - -fx -fl) >+ (peephole (minus))) >+ */ >+function sc_minus(x) { >+ if (arguments.length === 1) >+ return -x; >+ else { >+ var res = x; >+ for (var i = 1; i < arguments.length; i++) >+ res -= arguments[i]; >+ return res; >+ } >+} >+ >+/*** META ((export / /fl) >+ (peephole (div))) >+ */ >+function sc_div(x) { >+ if (arguments.length === 1) >+ return 1/x; >+ else { >+ var res = x; >+ for (var i = 1; i < arguments.length; i++) >+ res /= arguments[i]; >+ return res; >+ } >+} >+ >+/*** META ((export #t)) */ >+var sc_abs = Math.abs; >+ >+/*** META ((export quotient /fx) >+ (peephole (hole 2 "parseInt(" x "/" y ")"))) >+ */ >+function sc_quotient(x, y) { >+ return parseInt(x / y); >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 "%"))) >+ */ >+function sc_remainder(x, y) { >+ return x % y; >+} >+ >+/*** META ((export #t) >+ (peephole (modulo))) >+ */ >+function sc_modulo(x, y) { >+ var remainder = x % y; >+ // if they don't have the same sign >+ if ((remainder * y) < 0) >+ return remainder + y; >+ else >+ return remainder; >+} >+ >+function sc_euclid_gcd(a, b) { >+ var temp; >+ if (a === 0) return b; >+ if (b === 0) return a; >+ if (a < 0) {a = -a;}; >+ if (b < 0) {b = -b;}; >+ if (b > a) {temp = a; a = b; b = temp;}; >+ while (true) { >+ a %= b; >+ if(a === 0) {return b;}; >+ b %= a; >+ if(b === 0) {return a;}; >+ }; >+ return b; >+} >+ >+/*** META ((export #t)) */ >+function sc_gcd() { >+ var gcd = 0; >+ for (var i = 0; i < arguments.length; i++) >+ gcd = sc_euclid_gcd(gcd, arguments[i]); >+ return gcd; >+} >+ >+/*** META ((export #t)) */ >+function sc_lcm() { >+ var lcm = 1; >+ for (var i = 0; i < arguments.length; i++) { >+ var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm)); >+ lcm *= Math.abs(f); >+ } >+ return lcm; >+} >+ >+// LIMITATION: numerator and denominator don't make sense in floating point world. >+//var SC_MAX_DECIMALS = 1000000 >+// >+// function sc_numerator(x) { >+// var rounded = Math.round(x * SC_MAX_DECIMALS); >+// return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); >+// } >+ >+// function sc_denominator(x) { >+// var rounded = Math.round(x * SC_MAX_DECIMALS); >+// return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); >+// } >+ >+/*** META ((export #t)) */ >+var sc_floor = Math.floor; >+/*** META ((export #t)) */ >+var sc_ceiling = Math.ceil; >+/*** META ((export #t)) */ >+var sc_truncate = parseInt; >+/*** META ((export #t)) */ >+var sc_round = Math.round; >+ >+// LIMITATION: sc_rationalize doesn't make sense in a floating point world. >+ >+/*** META ((export #t)) */ >+var sc_exp = Math.exp; >+/*** META ((export #t)) */ >+var sc_log = Math.log; >+/*** META ((export #t)) */ >+var sc_sin = Math.sin; >+/*** META ((export #t)) */ >+var sc_cos = Math.cos; >+/*** META ((export #t)) */ >+var sc_tan = Math.tan; >+/*** META ((export #t)) */ >+var sc_asin = Math.asin; >+/*** META ((export #t)) */ >+var sc_acos = Math.acos; >+/*** META ((export #t)) */ >+var sc_atan = Math.atan; >+ >+/*** META ((export #t)) */ >+var sc_sqrt = Math.sqrt; >+/*** META ((export #t)) */ >+var sc_expt = Math.pow; >+ >+// LIMITATION: we don't have complex numbers. >+// LIMITATION: the following functions are hence not implemented. >+// LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle >+// LIMITATION: 2 argument atan >+ >+/*** META ((export #t) >+ (peephole (id))) >+ */ >+function sc_exact2inexact(x) { >+ return x; >+} >+ >+/*** META ((export #t) >+ (peephole (id))) >+ */ >+function sc_inexact2exact(x) { >+ return x; >+} >+ >+function sc_number2jsstring(x, radix) { >+ if (radix) >+ return x.toString(radix); >+ else >+ return x.toString(); >+} >+ >+function sc_jsstring2number(s, radix) { >+ if (s === "") return false; >+ >+ if (radix) { >+ var t = parseInt(s, radix); >+ if (!t && t !== 0) return false; >+ // verify that each char is in range. (parseInt ignores leading >+ // white and trailing chars) >+ var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1); >+ if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s)) >+ return t; >+ else return false; >+ } else { >+ var t = +s; // does not ignore trailing chars. >+ if (!t && t !== 0) return false; >+ // simply verify that first char is not whitespace. >+ var c = s.charAt(0); >+ // if +c is 0, but the char is not "0", then we have a whitespace. >+ if (+c === 0 && c !== "0") return false; >+ return t; >+ } >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (not))) >+ */ >+function sc_not(b) { >+ return b === false; >+} >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isBoolean(b) { >+ return (b === true) || (b === false); >+} >+ >+function sc_Pair(car, cdr) { >+ this.car = car; >+ this.cdr = cdr; >+} >+ >+sc_Pair.prototype.toString = function() { >+ return sc_toDisplayString(this); >+}; >+sc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { >+ var current = this; >+ >+ var res = "("; >+ >+ while(true) { >+ res += writeOrDisplay(current.car); >+ if (sc_isPair(current.cdr)) { >+ res += " "; >+ current = current.cdr; >+ } else if (current.cdr !== null) { >+ res += " . " + writeOrDisplay(current.cdr); >+ break; >+ } else // current.cdr == null >+ break; >+ } >+ >+ res += ")"; >+ >+ return res; >+}; >+sc_Pair.prototype.sc_toDisplayString = function() { >+ return this.sc_toWriteOrDisplayString(sc_toDisplayString); >+}; >+sc_Pair.prototype.sc_toWriteString = function() { >+ return this.sc_toWriteOrDisplayString(sc_toWriteString); >+}; >+// sc_Pair.prototype.sc_toWriteCircleString in IO.js >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix " instanceof sc_Pair"))) >+ */ >+function sc_isPair(p) { >+ return (p instanceof sc_Pair); >+} >+ >+function sc_isPairEqual(p1, p2, comp) { >+ return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr)); >+} >+ >+/*** META ((export #t) >+ (peephole (hole 2 "new sc_Pair(" car ", " cdr ")"))) >+ */ >+function sc_cons(car, cdr) { >+ return new sc_Pair(car, cdr); >+} >+ >+/*** META ((export cons*)) */ >+function sc_consStar() { >+ var res = arguments[arguments.length - 1]; >+ for (var i = arguments.length-2; i >= 0; i--) >+ res = new sc_Pair(arguments[i], res); >+ return res; >+} >+ >+/*** META ((export #t) >+ (peephole (postfix ".car"))) >+ */ >+function sc_car(p) { >+ return p.car; >+} >+ >+/*** META ((export #t) >+ (peephole (postfix ".cdr"))) >+ */ >+function sc_cdr(p) { >+ return p.cdr; >+} >+ >+/*** META ((export #t) >+ (peephole (hole 2 p ".car = " val))) >+ */ >+function sc_setCarBang(p, val) { >+ p.car = val; >+} >+ >+/*** META ((export #t) >+ (peephole (hole 2 p ".cdr = " val))) >+ */ >+function sc_setCdrBang(p, val) { >+ p.cdr = val; >+} >+ >+/*** META ((export #t) >+ (peephole (postfix ".car.car"))) >+ */ >+function sc_caar(p) { return p.car.car; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.car"))) >+ */ >+function sc_cadr(p) { return p.cdr.car; } >+/*** META ((export #t) >+ (peephole (postfix ".car.cdr"))) >+ */ >+function sc_cdar(p) { return p.car.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.cdr"))) >+ */ >+function sc_cddr(p) { return p.cdr.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".car.car.car"))) >+ */ >+function sc_caaar(p) { return p.car.car.car; } >+/*** META ((export #t) >+ (peephole (postfix ".car.cdr.car"))) >+ */ >+function sc_cadar(p) { return p.car.cdr.car; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.car.car"))) >+ */ >+function sc_caadr(p) { return p.cdr.car.car; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.cdr.car"))) >+ */ >+function sc_caddr(p) { return p.cdr.cdr.car; } >+/*** META ((export #t) >+ (peephole (postfix ".car.car.cdr"))) >+ */ >+function sc_cdaar(p) { return p.car.car.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.car.cdr"))) >+ */ >+function sc_cdadr(p) { return p.cdr.car.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".car.cdr.cdr"))) >+ */ >+function sc_cddar(p) { return p.car.cdr.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.cdr.cdr"))) >+ */ >+function sc_cdddr(p) { return p.cdr.cdr.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".car.car.car.car"))) >+ */ >+function sc_caaaar(p) { return p.car.car.car.car; } >+/*** META ((export #t) >+ (peephole (postfix ".car.cdr.car.car"))) >+ */ >+function sc_caadar(p) { return p.car.cdr.car.car; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.car.car.car"))) >+ */ >+function sc_caaadr(p) { return p.cdr.car.car.car; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.cdr.car.car"))) >+ */ >+function sc_caaddr(p) { return p.cdr.cdr.car.car; } >+/*** META ((export #t) >+ (peephole (postfix ".car.car.car.cdr"))) >+ */ >+function sc_cdaaar(p) { return p.car.car.car.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".car.cdr.car.cdr"))) >+ */ >+function sc_cdadar(p) { return p.car.cdr.car.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.car.car.cdr"))) >+ */ >+function sc_cdaadr(p) { return p.cdr.car.car.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.cdr.car.cdr"))) >+ */ >+function sc_cdaddr(p) { return p.cdr.cdr.car.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".car.car.cdr.car"))) >+ */ >+function sc_cadaar(p) { return p.car.car.cdr.car; } >+/*** META ((export #t) >+ (peephole (postfix ".car.cdr.cdr.car"))) >+ */ >+function sc_caddar(p) { return p.car.cdr.cdr.car; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.car.cdr.car"))) >+ */ >+function sc_cadadr(p) { return p.cdr.car.cdr.car; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.cdr.cdr.car"))) >+ */ >+function sc_cadddr(p) { return p.cdr.cdr.cdr.car; } >+/*** META ((export #t) >+ (peephole (postfix ".car.car.cdr.cdr"))) >+ */ >+function sc_cddaar(p) { return p.car.car.cdr.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".car.cdr.cdr.cdr"))) >+ */ >+function sc_cdddar(p) { return p.car.cdr.cdr.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.car.cdr.cdr"))) >+ */ >+function sc_cddadr(p) { return p.cdr.car.cdr.cdr; } >+/*** META ((export #t) >+ (peephole (postfix ".cdr.cdr.cdr.cdr"))) >+ */ >+function sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; } >+ >+/*** META ((export #t)) */ >+function sc_lastPair(l) { >+ if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected"); >+ var res = l; >+ var cdr = l.cdr; >+ while (sc_isPair(cdr)) { >+ res = cdr; >+ cdr = res.cdr; >+ } >+ return res; >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix " === null"))) >+ */ >+function sc_isNull(o) { >+ return (o === null); >+} >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isList(o) { >+ var rabbit; >+ var turtle; >+ >+ var rabbit = o; >+ var turtle = o; >+ while (true) { >+ if (rabbit === null || >+ (rabbit instanceof sc_Pair && rabbit.cdr === null)) >+ return true; // end of list >+ else if ((rabbit instanceof sc_Pair) && >+ (rabbit.cdr instanceof sc_Pair)) { >+ rabbit = rabbit.cdr.cdr; >+ turtle = turtle.cdr; >+ if (rabbit === turtle) return false; // cycle >+ } else >+ return false; // not pair >+ } >+} >+ >+/*** META ((export #t)) */ >+function sc_list() { >+ var res = null; >+ var a = arguments; >+ for (var i = a.length-1; i >= 0; i--) >+ res = new sc_Pair(a[i], res); >+ return res; >+} >+ >+/*** META ((export #t)) */ >+function sc_iota(num, init) { >+ var res = null; >+ if (!init) init = 0; >+ for (var i = num - 1; i >= 0; i--) >+ res = new sc_Pair(i + init, res); >+ return res; >+} >+ >+/*** META ((export #t)) */ >+function sc_makeList(nbEls, fill) { >+ var res = null; >+ for (var i = 0; i < nbEls; i++) >+ res = new sc_Pair(fill, res); >+ return res; >+} >+ >+/*** META ((export #t)) */ >+function sc_length(l) { >+ var res = 0; >+ while (l !== null) { >+ res++; >+ l = l.cdr; >+ } >+ return res; >+} >+ >+/*** META ((export #t)) */ >+function sc_remq(o, l) { >+ var dummy = { cdr : null }; >+ var tail = dummy; >+ while (l !== null) { >+ if (l.car !== o) { >+ tail.cdr = sc_cons(l.car, null); >+ tail = tail.cdr; >+ } >+ l = l.cdr; >+ } >+ return dummy.cdr; >+} >+ >+/*** META ((export #t)) */ >+function sc_remqBang(o, l) { >+ var dummy = { cdr : null }; >+ var tail = dummy; >+ var needsAssig = true; >+ while (l !== null) { >+ if (l.car === o) { >+ needsAssig = true; >+ } else { >+ if (needsAssig) { >+ tail.cdr = l; >+ needsAssig = false; >+ } >+ tail = l; >+ } >+ l = l.cdr; >+ } >+ tail.cdr = null; >+ return dummy.cdr; >+} >+ >+/*** META ((export #t)) */ >+function sc_delete(o, l) { >+ var dummy = { cdr : null }; >+ var tail = dummy; >+ while (l !== null) { >+ if (!sc_isEqual(l.car, o)) { >+ tail.cdr = sc_cons(l.car, null); >+ tail = tail.cdr; >+ } >+ l = l.cdr; >+ } >+ return dummy.cdr; >+} >+ >+/*** META ((export #t)) */ >+function sc_deleteBang(o, l) { >+ var dummy = { cdr : null }; >+ var tail = dummy; >+ var needsAssig = true; >+ while (l !== null) { >+ if (sc_isEqual(l.car, o)) { >+ needsAssig = true; >+ } else { >+ if (needsAssig) { >+ tail.cdr = l; >+ needsAssig = false; >+ } >+ tail = l; >+ } >+ l = l.cdr; >+ } >+ tail.cdr = null; >+ return dummy.cdr; >+} >+ >+function sc_reverseAppendBang(l1, l2) { >+ var res = l2; >+ while (l1 !== null) { >+ var tmp = res; >+ res = l1; >+ l1 = l1.cdr; >+ res.cdr = tmp; >+ } >+ return res; >+} >+ >+function sc_dualAppend(l1, l2) { >+ if (l1 === null) return l2; >+ if (l2 === null) return l1; >+ var rev = sc_reverse(l1); >+ return sc_reverseAppendBang(rev, l2); >+} >+ >+/*** META ((export #t)) */ >+function sc_append() { >+ if (arguments.length === 0) >+ return null; >+ var res = arguments[arguments.length - 1]; >+ for (var i = arguments.length - 2; i >= 0; i--) >+ res = sc_dualAppend(arguments[i], res); >+ return res; >+} >+ >+function sc_dualAppendBang(l1, l2) { >+ if (l1 === null) return l2; >+ if (l2 === null) return l1; >+ var tmp = l1; >+ while (tmp.cdr !== null) tmp=tmp.cdr; >+ tmp.cdr = l2; >+ return l1; >+} >+ >+/*** META ((export #t)) */ >+function sc_appendBang() { >+ var res = null; >+ for (var i = 0; i < arguments.length; i++) >+ res = sc_dualAppendBang(res, arguments[i]); >+ return res; >+} >+ >+/*** META ((export #t)) */ >+function sc_reverse(l1) { >+ var res = null; >+ while (l1 !== null) { >+ res = sc_cons(l1.car, res); >+ l1 = l1.cdr; >+ } >+ return res; >+} >+ >+/*** META ((export #t)) */ >+function sc_reverseBang(l) { >+ return sc_reverseAppendBang(l, null); >+} >+ >+/*** META ((export #t)) */ >+function sc_listTail(l, k) { >+ var res = l; >+ for (var i = 0; i < k; i++) { >+ res = res.cdr; >+ } >+ return res; >+} >+ >+/*** META ((export #t)) */ >+function sc_listRef(l, k) { >+ return sc_listTail(l, k).car; >+} >+ >+/* // unoptimized generic versions >+function sc_memX(o, l, comp) { >+ while (l != null) { >+ if (comp(l.car, o)) >+ return l; >+ l = l.cdr; >+ } >+ return false; >+} >+function sc_memq(o, l) { return sc_memX(o, l, sc_isEq); } >+function sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); } >+function sc_member(o, l) { return sc_memX(o, l, sc_isEqual); } >+*/ >+ >+/* optimized versions */ >+/*** META ((export #t)) */ >+function sc_memq(o, l) { >+ while (l !== null) { >+ if (l.car === o) >+ return l; >+ l = l.cdr; >+ } >+ return false; >+} >+/*** META ((export #t)) */ >+function sc_memv(o, l) { >+ while (l !== null) { >+ if (l.car === o) >+ return l; >+ l = l.cdr; >+ } >+ return false; >+} >+/*** META ((export #t)) */ >+function sc_member(o, l) { >+ while (l !== null) { >+ if (sc_isEqual(l.car,o)) >+ return l; >+ l = l.cdr; >+ } >+ return false; >+} >+ >+/* // generic unoptimized versions >+function sc_assX(o, al, comp) { >+ while (al != null) { >+ if (comp(al.car.car, o)) >+ return al.car; >+ al = al.cdr; >+ } >+ return false; >+} >+function sc_assq(o, al) { return sc_assX(o, al, sc_isEq); } >+function sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); } >+function sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); } >+*/ >+// optimized versions >+/*** META ((export #t)) */ >+function sc_assq(o, al) { >+ while (al !== null) { >+ if (al.car.car === o) >+ return al.car; >+ al = al.cdr; >+ } >+ return false; >+} >+/*** META ((export #t)) */ >+function sc_assv(o, al) { >+ while (al !== null) { >+ if (al.car.car === o) >+ return al.car; >+ al = al.cdr; >+ } >+ return false; >+} >+/*** META ((export #t)) */ >+function sc_assoc(o, al) { >+ while (al !== null) { >+ if (sc_isEqual(al.car.car, o)) >+ return al.car; >+ al = al.cdr; >+ } >+ return false; >+} >+ >+/* can be used for mutable strings and characters */ >+function sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; } >+function sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; } >+function sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; } >+function sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; } >+function sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; } >+function sc_isCharStringCIEqual(cs1, cs2) >+{ return cs1.val.toLowerCase() === cs2.val.toLowerCase(); } >+function sc_isCharStringCILess(cs1, cs2) >+{ return cs1.val.toLowerCase() < cs2.val.toLowerCase(); } >+function sc_isCharStringCIGreater(cs1, cs2) >+{ return cs1.val.toLowerCase() > cs2.val.toLowerCase(); } >+function sc_isCharStringCILessEqual(cs1, cs2) >+{ return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); } >+function sc_isCharStringCIGreaterEqual(cs1, cs2) >+{ return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); } >+ >+ >+ >+ >+function sc_Char(c) { >+ var cached = sc_Char.lazy[c]; >+ if (cached) >+ return cached; >+ this.val = c; >+ sc_Char.lazy[c] = this; >+ // add return, so FF does not complain. >+ return undefined; >+} >+sc_Char.lazy = new Object(); >+// thanks to Eric >+sc_Char.char2readable = { >+ "\000": "#\\null", >+ "\007": "#\\bell", >+ "\010": "#\\backspace", >+ "\011": "#\\tab", >+ "\012": "#\\newline", >+ "\014": "#\\page", >+ "\015": "#\\return", >+ "\033": "#\\escape", >+ "\040": "#\\space", >+ "\177": "#\\delete", >+ >+ /* poeticless names */ >+ "\001": "#\\soh", >+ "\002": "#\\stx", >+ "\003": "#\\etx", >+ "\004": "#\\eot", >+ "\005": "#\\enq", >+ "\006": "#\\ack", >+ >+ "\013": "#\\vt", >+ "\016": "#\\so", >+ "\017": "#\\si", >+ >+ "\020": "#\\dle", >+ "\021": "#\\dc1", >+ "\022": "#\\dc2", >+ "\023": "#\\dc3", >+ "\024": "#\\dc4", >+ "\025": "#\\nak", >+ "\026": "#\\syn", >+ "\027": "#\\etb", >+ >+ "\030": "#\\can", >+ "\031": "#\\em", >+ "\032": "#\\sub", >+ "\033": "#\\esc", >+ "\034": "#\\fs", >+ "\035": "#\\gs", >+ "\036": "#\\rs", >+ "\037": "#\\us"}; >+ >+sc_Char.readable2char = { >+ "null": "\000", >+ "bell": "\007", >+ "backspace": "\010", >+ "tab": "\011", >+ "newline": "\012", >+ "page": "\014", >+ "return": "\015", >+ "escape": "\033", >+ "space": "\040", >+ "delete": "\000", >+ "soh": "\001", >+ "stx": "\002", >+ "etx": "\003", >+ "eot": "\004", >+ "enq": "\005", >+ "ack": "\006", >+ "bel": "\007", >+ "bs": "\010", >+ "ht": "\011", >+ "nl": "\012", >+ "vt": "\013", >+ "np": "\014", >+ "cr": "\015", >+ "so": "\016", >+ "si": "\017", >+ "dle": "\020", >+ "dc1": "\021", >+ "dc2": "\022", >+ "dc3": "\023", >+ "dc4": "\024", >+ "nak": "\025", >+ "syn": "\026", >+ "etb": "\027", >+ "can": "\030", >+ "em": "\031", >+ "sub": "\032", >+ "esc": "\033", >+ "fs": "\034", >+ "gs": "\035", >+ "rs": "\036", >+ "us": "\037", >+ "sp": "\040", >+ "del": "\177"}; >+ >+sc_Char.prototype.toString = function() { >+ return this.val; >+}; >+// sc_toDisplayString == toString >+sc_Char.prototype.sc_toWriteString = function() { >+ var entry = sc_Char.char2readable[this.val]; >+ if (entry) >+ return entry; >+ else >+ return "#\\" + this.val; >+}; >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix "instanceof sc_Char"))) >+ */ >+function sc_isChar(c) { >+ return (c instanceof sc_Char); >+} >+ >+/*** META ((export char=?) >+ (type bool) >+ (peephole (hole 2 c1 ".val === " c2 ".val"))) >+ */ >+var sc_isCharEqual = sc_isCharStringEqual; >+/*** META ((export char<?) >+ (type bool) >+ (peephole (hole 2 c1 ".val < " c2 ".val"))) >+ */ >+var sc_isCharLess = sc_isCharStringLess; >+/*** META ((export char>?) >+ (type bool) >+ (peephole (hole 2 c1 ".val > " c2 ".val"))) >+ */ >+var sc_isCharGreater = sc_isCharStringGreater; >+/*** META ((export char<=?) >+ (type bool) >+ (peephole (hole 2 c1 ".val <= " c2 ".val"))) >+ */ >+var sc_isCharLessEqual = sc_isCharStringLessEqual; >+/*** META ((export char>=?) >+ (type bool) >+ (peephole (hole 2 c1 ".val >= " c2 ".val"))) >+ */ >+var sc_isCharGreaterEqual = sc_isCharStringGreaterEqual; >+/*** META ((export char-ci=?) >+ (type bool) >+ (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()"))) >+ */ >+var sc_isCharCIEqual = sc_isCharStringCIEqual; >+/*** META ((export char-ci<?) >+ (type bool) >+ (peephole (hole 2 c1 ".val.toLowerCase() < " c2 ".val.toLowerCase()"))) >+ */ >+var sc_isCharCILess = sc_isCharStringCILess; >+/*** META ((export char-ci>?) >+ (type bool) >+ (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()"))) >+ */ >+var sc_isCharCIGreater = sc_isCharStringCIGreater; >+/*** META ((export char-ci<=?) >+ (type bool) >+ (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()"))) >+ */ >+var sc_isCharCILessEqual = sc_isCharStringCILessEqual; >+/*** META ((export char-ci>=?) >+ (type bool) >+ (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()"))) >+ */ >+var sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual; >+ >+var SC_NUMBER_CLASS = "0123456789"; >+var SC_WHITESPACE_CLASS = ' \r\n\t\f'; >+var SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz'; >+var SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; >+ >+function sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); } >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isCharAlphabetic(c) >+{ return sc_isCharOfClass(c.val, SC_LOWER_CLASS) || >+ sc_isCharOfClass(c.val, SC_UPPER_CLASS); } >+/*** META ((export #t) >+ (type bool) >+ (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1"))) >+ */ >+function sc_isCharNumeric(c) >+{ return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); } >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isCharWhitespace(c) { >+ var tmp = c.val; >+ return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f"; >+} >+/*** META ((export #t) >+ (type bool) >+ (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1"))) >+ */ >+function sc_isCharUpperCase(c) >+{ return sc_isCharOfClass(c.val, SC_UPPER_CLASS); } >+/*** META ((export #t) >+ (type bool) >+ (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1"))) >+ */ >+function sc_isCharLowerCase(c) >+{ return sc_isCharOfClass(c.val, SC_LOWER_CLASS); } >+ >+/*** META ((export #t) >+ (peephole (postfix ".val.charCodeAt(0)"))) >+ */ >+function sc_char2integer(c) >+{ return c.val.charCodeAt(0); } >+/*** META ((export #t) >+ (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))"))) >+ */ >+function sc_integer2char(n) >+{ return new sc_Char(String.fromCharCode(n)); } >+ >+/*** META ((export #t) >+ (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())"))) >+ */ >+function sc_charUpcase(c) >+{ return new sc_Char(c.val.toUpperCase()); } >+/*** META ((export #t) >+ (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())"))) >+ */ >+function sc_charDowncase(c) >+{ return new sc_Char(c.val.toLowerCase()); } >+ >+function sc_makeJSStringOfLength(k, c) { >+ var fill; >+ if (c === undefined) >+ fill = " "; >+ else >+ fill = c; >+ var res = ""; >+ var len = 1; >+ // every round doubles the size of fill. >+ while (k >= len) { >+ if (k & len) >+ res = res.concat(fill); >+ fill = fill.concat(fill); >+ len *= 2; >+ } >+ return res; >+} >+ >+function sc_makejsString(k, c) { >+ var fill; >+ if (c) >+ fill = c.val; >+ else >+ fill = " "; >+ return sc_makeJSStringOfLength(k, fill); >+} >+ >+function sc_jsstring2list(s) { >+ var res = null; >+ for (var i = s.length - 1; i >= 0; i--) >+ res = sc_cons(new sc_Char(s.charAt(i)), res); >+ return res; >+} >+ >+function sc_list2jsstring(l) { >+ var a = new Array(); >+ while(l !== null) { >+ a.push(l.car.val); >+ l = l.cdr; >+ } >+ return "".concat.apply("", a); >+} >+ >+var sc_Vector = Array; >+ >+sc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { >+ if (this.length === 0) return "#()"; >+ >+ var res = "#(" + writeOrDisplay(this[0]); >+ for (var i = 1; i < this.length; i++) >+ res += " " + writeOrDisplay(this[i]); >+ res += ")"; >+ return res; >+}; >+sc_Vector.prototype.sc_toDisplayString = function() { >+ return this.sc_toWriteOrDisplayString(sc_toDisplayString); >+}; >+sc_Vector.prototype.sc_toWriteString = function() { >+ return this.sc_toWriteOrDisplayString(sc_toWriteString); >+}; >+ >+/*** META ((export vector? array?) >+ (type bool) >+ (peephole (postfix " instanceof sc_Vector"))) >+ */ >+function sc_isVector(v) { >+ return (v instanceof sc_Vector); >+} >+ >+// only applies to vectors >+function sc_isVectorEqual(v1, v2, comp) { >+ if (v1.length !== v2.length) return false; >+ for (var i = 0; i < v1.length; i++) >+ if (!comp(v1[i], v2[i])) return false; >+ return true; >+} >+ >+/*** META ((export make-vector make-array)) */ >+function sc_makeVector(size, fill) { >+ var a = new sc_Vector(size); >+ if (fill !== undefined) >+ sc_vectorFillBang(a, fill); >+ return a; >+} >+ >+/*** META ((export vector array) >+ (peephole (vector))) >+ */ >+function sc_vector() { >+ var a = new sc_Vector(); >+ for (var i = 0; i < arguments.length; i++) >+ a.push(arguments[i]); >+ return a; >+} >+ >+/*** META ((export vector-length array-length) >+ (peephole (postfix ".length"))) >+ */ >+function sc_vectorLength(v) { >+ return v.length; >+} >+ >+/*** META ((export vector-ref array-ref) >+ (peephole (hole 2 v "[" pos "]"))) >+ */ >+function sc_vectorRef(v, pos) { >+ return v[pos]; >+} >+ >+/*** META ((export vector-set! array-set!) >+ (peephole (hole 3 v "[" pos "] = " val))) >+ */ >+function sc_vectorSetBang(v, pos, val) { >+ v[pos] = val; >+} >+ >+/*** META ((export vector->list array->list)) */ >+function sc_vector2list(a) { >+ var res = null; >+ for (var i = a.length-1; i >= 0; i--) >+ res = sc_cons(a[i], res); >+ return res; >+} >+ >+/*** META ((export list->vector list->array)) */ >+function sc_list2vector(l) { >+ var a = new sc_Vector(); >+ while(l !== null) { >+ a.push(l.car); >+ l = l.cdr; >+ } >+ return a; >+} >+ >+/*** META ((export vector-fill! array-fill!)) */ >+function sc_vectorFillBang(a, fill) { >+ for (var i = 0; i < a.length; i++) >+ a[i] = fill; >+} >+ >+ >+/*** META ((export #t)) */ >+function sc_copyVector(a, len) { >+ if (len <= a.length) >+ return a.slice(0, len); >+ else { >+ var tmp = a.concat(); >+ tmp.length = len; >+ return tmp; >+ } >+} >+ >+/*** META ((export #t) >+ (peephole (hole 3 a ".slice(" start "," end ")"))) >+ */ >+function sc_vectorCopy(a, start, end) { >+ return a.slice(start, end); >+} >+ >+/*** META ((export #t)) */ >+function sc_vectorCopyBang(target, tstart, source, sstart, send) { >+ if (!sstart) sstart = 0; >+ if (!send) send = source.length; >+ >+ // if target == source we don't want to overwrite not yet copied elements. >+ if (tstart <= sstart) { >+ for (var i = tstart, j = sstart; j < send; i++, j++) { >+ target[i] = source[j]; >+ } >+ } else { >+ var diff = send - sstart; >+ for (var i = tstart + diff - 1, j = send - 1; >+ j >= sstart; >+ i--, j--) { >+ target[i] = source[j]; >+ } >+ } >+ return target; >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (hole 1 "typeof " o " === 'function'"))) >+ */ >+function sc_isProcedure(o) { >+ return (typeof o === "function"); >+} >+ >+/*** META ((export #t)) */ >+function sc_apply(proc) { >+ var args = new Array(); >+ // first part of arguments are not in list-form. >+ for (var i = 1; i < arguments.length - 1; i++) >+ args.push(arguments[i]); >+ var l = arguments[arguments.length - 1]; >+ while (l !== null) { >+ args.push(l.car); >+ l = l.cdr; >+ } >+ return proc.apply(null, args); >+} >+ >+/*** META ((export #t)) */ >+function sc_map(proc, l1) { >+ if (l1 === undefined) >+ return null; >+ // else >+ var nbApplyArgs = arguments.length - 1; >+ var applyArgs = new Array(nbApplyArgs); >+ var revres = null; >+ while (l1 !== null) { >+ for (var i = 0; i < nbApplyArgs; i++) { >+ applyArgs[i] = arguments[i + 1].car; >+ arguments[i + 1] = arguments[i + 1].cdr; >+ } >+ revres = sc_cons(proc.apply(null, applyArgs), revres); >+ } >+ return sc_reverseAppendBang(revres, null); >+} >+ >+/*** META ((export #t)) */ >+function sc_mapBang(proc, l1) { >+ if (l1 === undefined) >+ return null; >+ // else >+ var l1_orig = l1; >+ var nbApplyArgs = arguments.length - 1; >+ var applyArgs = new Array(nbApplyArgs); >+ while (l1 !== null) { >+ var tmp = l1; >+ for (var i = 0; i < nbApplyArgs; i++) { >+ applyArgs[i] = arguments[i + 1].car; >+ arguments[i + 1] = arguments[i + 1].cdr; >+ } >+ tmp.car = proc.apply(null, applyArgs); >+ } >+ return l1_orig; >+} >+ >+/*** META ((export #t)) */ >+function sc_forEach(proc, l1) { >+ if (l1 === undefined) >+ return undefined; >+ // else >+ var nbApplyArgs = arguments.length - 1; >+ var applyArgs = new Array(nbApplyArgs); >+ while (l1 !== null) { >+ for (var i = 0; i < nbApplyArgs; i++) { >+ applyArgs[i] = arguments[i + 1].car; >+ arguments[i + 1] = arguments[i + 1].cdr; >+ } >+ proc.apply(null, applyArgs); >+ } >+ // add return so FF does not complain. >+ return undefined; >+} >+ >+/*** META ((export #t)) */ >+function sc_filter(proc, l1) { >+ var dummy = { cdr : null }; >+ var tail = dummy; >+ while (l1 !== null) { >+ if (proc(l1.car) !== false) { >+ tail.cdr = sc_cons(l1.car, null); >+ tail = tail.cdr; >+ } >+ l1 = l1.cdr; >+ } >+ return dummy.cdr; >+} >+ >+/*** META ((export #t)) */ >+function sc_filterBang(proc, l1) { >+ var head = sc_cons("dummy", l1); >+ var it = head; >+ var next = l1; >+ while (next !== null) { >+ if (proc(next.car) !== false) { >+ it.cdr = next >+ it = next; >+ } >+ next = next.cdr; >+ } >+ it.cdr = null; >+ return head.cdr; >+} >+ >+function sc_filterMap1(proc, l1) { >+ var revres = null; >+ while (l1 !== null) { >+ var tmp = proc(l1.car) >+ if (tmp !== false) revres = sc_cons(tmp, revres); >+ l1 = l1.cdr; >+ } >+ return sc_reverseAppendBang(revres, null); >+} >+function sc_filterMap2(proc, l1, l2) { >+ var revres = null; >+ while (l1 !== null) { >+ var tmp = proc(l1.car, l2.car); >+ if(tmp !== false) revres = sc_cons(tmp, revres); >+ l1 = l1.cdr; >+ l2 = l2.cdr >+ } >+ return sc_reverseAppendBang(revres, null); >+} >+ >+/*** META ((export #t)) */ >+function sc_filterMap(proc, l1, l2, l3) { >+ if (l2 === undefined) >+ return sc_filterMap1(proc, l1); >+ else if (l3 === undefined) >+ return sc_filterMap2(proc, l1, l2); >+ // else >+ var nbApplyArgs = arguments.length - 1; >+ var applyArgs = new Array(nbApplyArgs); >+ var revres = null; >+ while (l1 !== null) { >+ for (var i = 0; i < nbApplyArgs; i++) { >+ applyArgs[i] = arguments[i + 1].car; >+ arguments[i + 1] = arguments[i + 1].cdr; >+ } >+ var tmp = proc.apply(null, applyArgs); >+ if(tmp !== false) revres = sc_cons(tmp, revres); >+ } >+ return sc_reverseAppendBang(revres, null); >+} >+ >+/*** META ((export #t)) */ >+function sc_any(proc, l) { >+ var revres = null; >+ while (l !== null) { >+ var tmp = proc(l.car); >+ if(tmp !== false) return tmp; >+ l = l.cdr; >+ } >+ return false; >+} >+ >+/*** META ((export any?) >+ (peephole (hole 2 "sc_any(" proc "," l ") !== false"))) >+ */ >+function sc_anyPred(proc, l) { >+ return sc_any(proc, l)!== false; >+} >+ >+/*** META ((export #t)) */ >+function sc_every(proc, l) { >+ var revres = null; >+ var tmp = true; >+ while (l !== null) { >+ tmp = proc(l.car); >+ if (tmp === false) return false; >+ l = l.cdr; >+ } >+ return tmp; >+} >+ >+/*** META ((export every?) >+ (peephole (hole 2 "sc_every(" proc "," l ") !== false"))) >+ */ >+function sc_everyPred(proc, l) { >+ var tmp = sc_every(proc, l); >+ if (tmp !== false) return true; >+ return false; >+} >+ >+/*** META ((export #t) >+ (peephole (postfix "()"))) >+ */ >+function sc_force(o) { >+ return o(); >+} >+ >+/*** META ((export #t)) */ >+function sc_makePromise(proc) { >+ var isResultReady = false; >+ var result = undefined; >+ return function() { >+ if (!isResultReady) { >+ var tmp = proc(); >+ if (!isResultReady) { >+ isResultReady = true; >+ result = tmp; >+ } >+ } >+ return result; >+ }; >+} >+ >+function sc_Values(values) { >+ this.values = values; >+} >+ >+/*** META ((export #t) >+ (peephole (values))) >+ */ >+function sc_values() { >+ if (arguments.length === 1) >+ return arguments[0]; >+ else >+ return new sc_Values(arguments); >+} >+ >+/*** META ((export #t)) */ >+function sc_callWithValues(producer, consumer) { >+ var produced = producer(); >+ if (produced instanceof sc_Values) >+ return consumer.apply(null, produced.values); >+ else >+ return consumer(produced); >+} >+ >+/*** META ((export #t)) */ >+function sc_dynamicWind(before, thunk, after) { >+ before(); >+ try { >+ var res = thunk(); >+ return res; >+ } finally { >+ after(); >+ } >+} >+ >+ >+// TODO: eval/scheme-report-environment/null-environment/interaction-environment >+ >+// LIMITATION: 'load' doesn't exist without files. >+// LIMITATION: transcript-on/transcript-off doesn't exist without files. >+ >+ >+function sc_Struct(name) { >+ this.name = name; >+} >+sc_Struct.prototype.sc_toDisplayString = function() { >+ return "#<struct" + sc_hash(this) + ">"; >+}; >+sc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString; >+ >+/*** META ((export #t) >+ (peephole (hole 1 "new sc_Struct(" name ")"))) >+ */ >+function sc_makeStruct(name) { >+ return new sc_Struct(name); >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix " instanceof sc_Struct"))) >+ */ >+function sc_isStruct(o) { >+ return (o instanceof sc_Struct); >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")"))) >+ */ >+function sc_isStructNamed(name, s) { >+ return ((s instanceof sc_Struct) && (s.name === name)); >+} >+ >+/*** META ((export struct-field) >+ (peephole (hole 3 0 "[" 2 "]"))) >+ */ >+function sc_getStructField(s, name, field) { >+ return s[field]; >+} >+ >+/*** META ((export struct-field-set!) >+ (peephole (hole 4 0 "[" 2 "] = " 3))) >+ */ >+function sc_setStructFieldBang(s, name, field, val) { >+ s[field] = val; >+} >+ >+/*** META ((export #t) >+ (peephole (prefix "~"))) >+ */ >+function sc_bitNot(x) { >+ return ~x; >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 "&"))) >+ */ >+function sc_bitAnd(x, y) { >+ return x & y; >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 "|"))) >+ */ >+function sc_bitOr(x, y) { >+ return x | y; >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 "^"))) >+ */ >+function sc_bitXor(x, y) { >+ return x ^ y; >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 "<<"))) >+ */ >+function sc_bitLsh(x, y) { >+ return x << y; >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 ">>"))) >+ */ >+function sc_bitRsh(x, y) { >+ return x >> y; >+} >+ >+/*** META ((export #t) >+ (peephole (infix 2 2 ">>>"))) >+ */ >+function sc_bitUrsh(x, y) { >+ return x >>> y; >+} >+ >+/*** META ((export js-field js-property) >+ (peephole (hole 2 o "[" field "]"))) >+ */ >+function sc_jsField(o, field) { >+ return o[field]; >+} >+ >+/*** META ((export js-field-set! js-property-set!) >+ (peephole (hole 3 o "[" field "] = " val))) >+ */ >+function sc_setJsFieldBang(o, field, val) { >+ return o[field] = val; >+} >+ >+/*** META ((export js-field-delete! js-property-delete!) >+ (peephole (hole 2 "delete" o "[" field "]"))) >+ */ >+function sc_deleteJsFieldBang(o, field) { >+ delete o[field]; >+} >+ >+/*** META ((export #t) >+ (peephole (jsCall))) >+ */ >+function sc_jsCall(o, fun) { >+ var args = new Array(); >+ for (var i = 2; i < arguments.length; i++) >+ args[i-2] = arguments[i]; >+ return fun.apply(o, args); >+} >+ >+/*** META ((export #t) >+ (peephole (jsMethodCall))) >+ */ >+function sc_jsMethodCall(o, field) { >+ var args = new Array(); >+ for (var i = 2; i < arguments.length; i++) >+ args[i-2] = arguments[i]; >+ return o[field].apply(o, args); >+} >+ >+/*** META ((export new js-new) >+ (peephole (jsNew))) >+ */ >+function sc_jsNew(c) { >+ var evalStr = "new c("; >+ evalStr +=arguments.length > 1? "arguments[1]": ""; >+ for (var i = 2; i < arguments.length; i++) >+ evalStr += ", arguments[" + i + "]"; >+ evalStr +=")"; >+ return eval(evalStr); >+} >+ >+// ======================== RegExp ==================== >+/*** META ((export #t)) */ >+function sc_pregexp(re) { >+ return new RegExp(sc_string2jsstring(re)); >+} >+ >+/*** META ((export #t)) */ >+function sc_pregexpMatch(re, s) { >+ var reg = (re instanceof RegExp) ? re : sc_pregexp(re); >+ var tmp = reg.exec(sc_string2jsstring(s)); >+ >+ if (tmp == null) return false; >+ >+ var res = null; >+ for (var i = tmp.length-1; i >= 0; i--) { >+ if (tmp[i] !== null) { >+ res = sc_cons(sc_jsstring2string(tmp[i]), res); >+ } else { >+ res = sc_cons(false, res); >+ } >+ } >+ return res; >+} >+ >+/*** META ((export #t)) */ >+function sc_pregexpReplace(re, s1, s2) { >+ var reg; >+ var jss1 = sc_string2jsstring(s1); >+ var jss2 = sc_string2jsstring(s2); >+ >+ if (re instanceof RegExp) { >+ if (re.global) >+ reg = re; >+ else >+ reg = new RegExp(re.source); >+ } else { >+ reg = new RegExp(sc_string2jsstring(re)); >+ } >+ >+ return jss1.replace(reg, jss2); >+} >+ >+/*** META ((export pregexp-replace*)) */ >+function sc_pregexpReplaceAll(re, s1, s2) { >+ var reg; >+ var jss1 = sc_string2jsstring(s1); >+ var jss2 = sc_string2jsstring(s2); >+ >+ if (re instanceof RegExp) { >+ if (re.global) >+ reg = re; >+ else >+ reg = new RegExp(re.source, "g"); >+ } else { >+ reg = new RegExp(sc_string2jsstring(re), "g"); >+ } >+ >+ return jss1.replace(reg, jss2); >+} >+ >+/*** META ((export #t)) */ >+function sc_pregexpSplit(re, s) { >+ var reg = ((re instanceof RegExp) ? >+ re : >+ new RegExp(sc_string2jsstring(re))); >+ var jss = sc_string2jsstring(s); >+ var tmp = jss.split(reg); >+ >+ if (tmp == null) return false; >+ >+ return sc_vector2list(tmp); >+} >+ >+ >+/* =========================================================================== */ >+/* Other library stuff */ >+/* =========================================================================== */ >+ >+/*** META ((export #t) >+ (peephole (hole 1 "Math.floor(Math.random()*" 'n ")"))) >+ */ >+function sc_random(n) { >+ return Math.floor(Math.random()*n); >+} >+ >+/*** META ((export current-date) >+ (peephole (hole 0 "new Date()"))) >+ */ >+function sc_currentDate() { >+ return new Date(); >+} >+ >+function sc_Hashtable() { >+} >+sc_Hashtable.prototype.toString = function() { >+ return "#{%hashtable}"; >+}; >+// sc_toWriteString == sc_toDisplayString == toString >+ >+function sc_HashtableElement(key, val) { >+ this.key = key; >+ this.val = val; >+} >+ >+/*** META ((export #t) >+ (peephole (hole 0 "new sc_Hashtable()"))) >+ */ >+function sc_makeHashtable() { >+ return new sc_Hashtable(); >+} >+ >+/*** META ((export #t)) */ >+function sc_hashtablePutBang(ht, key, val) { >+ var hash = sc_hash(key); >+ ht[hash] = new sc_HashtableElement(key, val); >+} >+ >+/*** META ((export #t)) */ >+function sc_hashtableGet(ht, key) { >+ var hash = sc_hash(key); >+ if (hash in ht) >+ return ht[hash].val; >+ else >+ return false; >+} >+ >+/*** META ((export #t)) */ >+function sc_hashtableForEach(ht, f) { >+ for (var v in ht) { >+ if (ht[v] instanceof sc_HashtableElement) >+ f(ht[v].key, ht[v].val); >+ } >+} >+ >+/*** META ((export hashtable-contains?) >+ (peephole (hole 2 "sc_hash(" 1 ") in " 0))) >+ */ >+function sc_hashtableContains(ht, key) { >+ var hash = sc_hash(key); >+ if (hash in ht) >+ return true; >+ else >+ return false; >+} >+ >+var SC_HASH_COUNTER = 0; >+ >+function sc_hash(o) { >+ if (o === null) >+ return "null"; >+ else if (o === undefined) >+ return "undefined"; >+ else if (o === true) >+ return "true"; >+ else if (o === false) >+ return "false"; >+ else if (typeof o === "number") >+ return "num-" + o; >+ else if (typeof o === "string") >+ return "jsstr-" + o; >+ else if (o.sc_getHash) >+ return o.sc_getHash(); >+ else >+ return sc_counterHash.call(o); >+} >+function sc_counterHash() { >+ if (!this.sc_hash) { >+ this.sc_hash = "hash-" + SC_HASH_COUNTER; >+ SC_HASH_COUNTER++; >+ } >+ return this.sc_hash; >+} >+ >+function sc_Trampoline(args, maxTailCalls) { >+ this['__trampoline return__'] = true; >+ this.args = args; >+ this.MAX_TAIL_CALLs = maxTailCalls; >+} >+// TODO: call/cc stuff >+sc_Trampoline.prototype.restart = function() { >+ var o = this; >+ while (true) { >+ // set both globals. >+ SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1; >+ var fun = o.args.callee; >+ var res = fun.apply(SC_TAIL_OBJECT, o.args); >+ if (res instanceof sc_Trampoline) >+ o = res; >+ else >+ return res; >+ } >+} >+ >+/*** META ((export bind-exit-lambda)) */ >+function sc_bindExitLambda(proc) { >+ var escape_obj = new sc_BindExitException(); >+ var escape = function(res) { >+ escape_obj.res = res; >+ throw escape_obj; >+ }; >+ try { >+ return proc(escape); >+ } catch(e) { >+ if (e === escape_obj) { >+ return e.res; >+ } >+ throw e; >+ } >+} >+function sc_BindExitException() { >+ this._internalException = true; >+} >+ >+var SC_SCM2JS_GLOBALS = new Object(); >+ >+// default tail-call depth. >+// normally the program should set it again. but just in case... >+var SC_TAIL_OBJECT = new Object(); >+SC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT; >+// ======================== I/O ======================= >+ >+/*------------------------------------------------------------------*/ >+ >+function sc_EOF() { >+} >+var SC_EOF_OBJECT = new sc_EOF(); >+ >+function sc_Port() { >+} >+ >+/* --------------- Input ports -------------------------------------*/ >+ >+function sc_InputPort() { >+} >+sc_InputPort.prototype = new sc_Port(); >+ >+sc_InputPort.prototype.peekChar = function() { >+ if (!("peeked" in this)) >+ this.peeked = this.getNextChar(); >+ return this.peeked; >+} >+sc_InputPort.prototype.readChar = function() { >+ var tmp = this.peekChar(); >+ delete this.peeked; >+ return tmp; >+} >+sc_InputPort.prototype.isCharReady = function() { >+ return true; >+} >+sc_InputPort.prototype.close = function() { >+ // do nothing >+} >+ >+/* .............. String port ..........................*/ >+function sc_ErrorInputPort() { >+}; >+sc_ErrorInputPort.prototype = new sc_InputPort(); >+sc_ErrorInputPort.prototype.getNextChar = function() { >+ throw "can't read from error-port."; >+}; >+sc_ErrorInputPort.prototype.isCharReady = function() { >+ return false; >+}; >+ >+ >+/* .............. String port ..........................*/ >+ >+function sc_StringInputPort(jsStr) { >+ // we are going to do some charAts on the str. >+ // instead of recreating all the time a String-object, we >+ // create one in the beginning. (not sure, if this is really an optim) >+ this.str = new String(jsStr); >+ this.pos = 0; >+} >+sc_StringInputPort.prototype = new sc_InputPort(); >+sc_StringInputPort.prototype.getNextChar = function() { >+ if (this.pos >= this.str.length) >+ return SC_EOF_OBJECT; >+ return this.str.charAt(this.pos++); >+}; >+ >+/* ------------- Read and other lib-funs -------------------------------*/ >+function sc_Token(type, val, pos) { >+ this.type = type; >+ this.val = val; >+ this.pos = pos; >+} >+sc_Token.EOF = 0/*EOF*/; >+sc_Token.OPEN_PAR = 1/*OPEN_PAR*/; >+sc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/; >+sc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/; >+sc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/; >+sc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/; >+sc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/; >+sc_Token.WHITESPACE = 7/*WHITESPACE*/; >+sc_Token.QUOTE = 8/*QUOTE*/; >+sc_Token.ID = 9/*ID*/; >+sc_Token.DOT = 10/*DOT*/; >+sc_Token.STRING = 11/*STRING*/; >+sc_Token.NUMBER = 12/*NUMBER*/; >+sc_Token.ERROR = 13/*ERROR*/; >+sc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/; >+sc_Token.TRUE = 15/*TRUE*/; >+sc_Token.FALSE = 16/*FALSE*/; >+sc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/; >+sc_Token.REFERENCE = 18/*REFERENCE*/; >+sc_Token.STORE = 19/*STORE*/; >+sc_Token.CHAR = 20/*CHAR*/; >+ >+var SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~"; >+function sc_Tokenizer(port) { >+ this.port = port; >+} >+sc_Tokenizer.prototype.peekToken = function() { >+ if (this.peeked) >+ return this.peeked; >+ var newToken = this.nextToken(); >+ this.peeked = newToken; >+ return newToken; >+}; >+sc_Tokenizer.prototype.readToken = function() { >+ var tmp = this.peekToken(); >+ delete this.peeked; >+ return tmp; >+}; >+sc_Tokenizer.prototype.nextToken = function() { >+ var port = this.port; >+ >+ function isNumberChar(c) { >+ return (c >= "0" && c <= "9"); >+ }; >+ function isIdOrNumberChar(c) { >+ return SC_ID_CLASS.indexOf(c) != -1 || // ID-char >+ (c >= "0" && c <= "9"); >+ } >+ function isWhitespace(c) { >+ return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f"; >+ }; >+ function isWhitespaceOrEOF(c) { >+ return isWhitespace(c) || c === SC_EOF_OBJECT; >+ }; >+ >+ function readString() { >+ res = ""; >+ while (true) { >+ var c = port.readChar(); >+ switch (c) { >+ case '"': >+ return new sc_Token(11/*STRING*/, res); >+ case "\\": >+ var tmp = port.readChar(); >+ switch (tmp) { >+ case '0': res += "\0"; break; >+ case 'a': res += "\a"; break; >+ case 'b': res += "\b"; break; >+ case 'f': res += "\f"; break; >+ case 'n': res += "\n"; break; >+ case 'r': res += "\r"; break; >+ case 't': res += "\t"; break; >+ case 'v': res += "\v"; break; >+ case '"': res += '"'; break; >+ case '\\': res += '\\'; break; >+ case 'x': >+ /* hexa-number */ >+ var nb = 0; >+ while (true) { >+ var hexC = port.peekChar(); >+ if (hexC >= '0' && hexC <= '9') { >+ port.readChar(); >+ nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0); >+ } else if (hexC >= 'a' && hexC <= 'f') { >+ port.readChar(); >+ nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0); >+ } else if (hexC >= 'A' && hexC <= 'F') { >+ port.readChar(); >+ nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0); >+ } else { >+ // next char isn't part of hex. >+ res += String.fromCharCode(nb); >+ break; >+ } >+ } >+ break; >+ default: >+ if (tmp === SC_EOF_OBJECT) { >+ return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); >+ } >+ res += tmp; >+ } >+ break; >+ default: >+ if (c === SC_EOF_OBJECT) { >+ return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); >+ } >+ res += c; >+ } >+ } >+ }; >+ function readIdOrNumber(firstChar) { >+ var res = firstChar; >+ while (isIdOrNumberChar(port.peekChar())) >+ res += port.readChar(); >+ if (isNaN(res)) >+ return new sc_Token(9/*ID*/, res); >+ else >+ return new sc_Token(12/*NUMBER*/, res - 0); >+ }; >+ >+ function skipWhitespaceAndComments() { >+ var done = false; >+ while (!done) { >+ done = true; >+ while (isWhitespace(port.peekChar())) >+ port.readChar(); >+ if (port.peekChar() === ';') { >+ port.readChar(); >+ done = false; >+ while (true) { >+ curChar = port.readChar(); >+ if (curChar === SC_EOF_OBJECT || >+ curChar === '\n') >+ break; >+ } >+ } >+ } >+ }; >+ >+ function readDot() { >+ if (isWhitespace(port.peekChar())) >+ return new sc_Token(10/*DOT*/); >+ else >+ return readIdOrNumber("."); >+ }; >+ >+ function readSharp() { >+ var c = port.readChar(); >+ if (isWhitespace(c)) >+ return new sc_Token(13/*ERROR*/, "bad #-pattern0."); >+ >+ // reference >+ if (isNumberChar(c)) { >+ var nb = c - 0; >+ while (isNumberChar(port.peekChar())) >+ nb = nb*10 + (port.readChar() - 0); >+ switch (port.readChar()) { >+ case '#': >+ return new sc_Token(18/*REFERENCE*/, nb); >+ case '=': >+ return new sc_Token(19/*STORE*/, nb); >+ default: >+ return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb); >+ } >+ } >+ >+ if (c === "(") >+ return new sc_Token(14/*VECTOR_BEGIN*/); >+ >+ if (c === "\\") { // character >+ var tmp = "" >+ while (!isWhitespaceOrEOF(port.peekChar())) >+ tmp += port.readChar(); >+ switch (tmp.length) { >+ case 0: // it's escaping a whitespace char: >+ if (sc_isEOFObject(port.peekChar)) >+ return new sc_Token(13/*ERROR*/, "bad #-pattern2."); >+ else >+ return new sc_Token(20/*CHAR*/, port.readChar()); >+ case 1: >+ return new sc_Token(20/*CHAR*/, tmp); >+ default: >+ var entry = sc_Char.readable2char[tmp.toLowerCase()]; >+ if (entry) >+ return new sc_Token(20/*CHAR*/, entry); >+ else >+ return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp); >+ } >+ } >+ >+ // some constants (#t, #f, #unspecified) >+ var res; >+ var needing; >+ switch (c) { >+ case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break; >+ case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break; >+ case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break; >+ default: >+ return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c); >+ } >+ while(true) { >+ c = port.peekChar(); >+ if ((isWhitespaceOrEOF(c) || c === ')') && >+ needing == "") >+ return res; >+ else if (isWhitespace(c) || needing == "") >+ return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing); >+ else if (needing.charAt(0) == c) { >+ port.readChar(); // consume >+ needing = needing.slice(1); >+ } else >+ return new sc_Token(13/*ERROR*/, "bad #-pattern5"); >+ } >+ >+ }; >+ >+ skipWhitespaceAndComments(); >+ var curChar = port.readChar(); >+ if (curChar === SC_EOF_OBJECT) >+ return new sc_Token(0/*EOF*/, curChar); >+ switch (curChar) >+ { >+ case " ": >+ case "\n": >+ case "\t": >+ return readWhitespace(); >+ case "(": >+ return new sc_Token(1/*OPEN_PAR*/); >+ case ")": >+ return new sc_Token(2/*CLOSE_PAR*/); >+ case "{": >+ return new sc_Token(3/*OPEN_BRACE*/); >+ case "}": >+ return new sc_Token(4/*CLOSE_BRACE*/); >+ case "[": >+ return new sc_Token(5/*OPEN_BRACKET*/); >+ case "]": >+ return new sc_Token(6/*CLOSE_BRACKET*/); >+ case "'": >+ return new sc_Token(8/*QUOTE*/); >+ case "#": >+ return readSharp(); >+ case ".": >+ return readDot(); >+ case '"': >+ return readString(); >+ default: >+ if (isIdOrNumberChar(curChar)) >+ return readIdOrNumber(curChar); >+ throw "unexpected character: " + curChar; >+ } >+}; >+ >+function sc_Reader(tokenizer) { >+ this.tokenizer = tokenizer; >+ this.backref = new Array(); >+} >+sc_Reader.prototype.read = function() { >+ function readList(listBeginType) { >+ function matchesPeer(open, close) { >+ return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/ >+ || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/ >+ || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/; >+ }; >+ var res = null; >+ >+ while (true) { >+ var token = tokenizer.peekToken(); >+ >+ switch (token.type) { >+ case 2/*CLOSE_PAR*/: >+ case 4/*CLOSE_BRACE*/: >+ case 6/*CLOSE_BRACKET*/: >+ if (matchesPeer(listBeginType, token.type)) { >+ tokenizer.readToken(); // consume token >+ return sc_reverseBang(res); >+ } else >+ throw "closing par doesn't match: " + listBeginType >+ + " " + listEndType; >+ >+ case 0/*EOF*/: >+ throw "unexpected end of file"; >+ >+ case 10/*DOT*/: >+ tokenizer.readToken(); // consume token >+ var cdr = this.read(); >+ var par = tokenizer.readToken(); >+ if (!matchesPeer(listBeginType, par.type)) >+ throw "closing par doesn't match: " + listBeginType >+ + " " + par.type; >+ else >+ return sc_reverseAppendBang(res, cdr); >+ >+ >+ default: >+ res = sc_cons(this.read(), res); >+ } >+ } >+ }; >+ function readQuote() { >+ return sc_cons("quote", sc_cons(this.read(), null)); >+ }; >+ function readVector() { >+ // opening-parenthesis is already consumed >+ var a = new Array(); >+ while (true) { >+ var token = tokenizer.peekToken(); >+ switch (token.type) { >+ case 2/*CLOSE_PAR*/: >+ tokenizer.readToken(); >+ return a; >+ >+ default: >+ a.push(this.read()); >+ } >+ } >+ }; >+ >+ function storeRefence(nb) { >+ var tmp = this.read(); >+ this.backref[nb] = tmp; >+ return tmp; >+ }; >+ >+ function readReference(nb) { >+ if (nb in this.backref) >+ return this.backref[nb]; >+ else >+ throw "bad reference: " + nb; >+ }; >+ >+ var tokenizer = this.tokenizer; >+ >+ var token = tokenizer.readToken(); >+ >+ // handle error >+ if (token.type === 13/*ERROR*/) >+ throw token.val; >+ >+ switch (token.type) { >+ case 1/*OPEN_PAR*/: >+ case 3/*OPEN_BRACE*/: >+ case 5/*OPEN_BRACKET*/: >+ return readList.call(this, token.type); >+ case 8/*QUOTE*/: >+ return readQuote.call(this); >+ case 11/*STRING*/: >+ return sc_jsstring2string(token.val); >+ case 20/*CHAR*/: >+ return new sc_Char(token.val); >+ case 14/*VECTOR_BEGIN*/: >+ return readVector.call(this); >+ case 18/*REFERENCE*/: >+ return readReference.call(this, token.val); >+ case 19/*STORE*/: >+ return storeRefence.call(this, token.val); >+ case 9/*ID*/: >+ return sc_jsstring2symbol(token.val); >+ case 0/*EOF*/: >+ case 12/*NUMBER*/: >+ case 15/*TRUE*/: >+ case 16/*FALSE*/: >+ case 17/*UNSPECIFIED*/: >+ return token.val; >+ default: >+ throw "unexpected token " + token.type + " " + token.val; >+ } >+}; >+ >+/*** META ((export #t)) */ >+function sc_read(port) { >+ if (port === undefined) // we assume the port hasn't been given. >+ port = SC_DEFAULT_IN; // THREAD: shared var... >+ var reader = new sc_Reader(new sc_Tokenizer(port)); >+ return reader.read(); >+} >+/*** META ((export #t)) */ >+function sc_readChar(port) { >+ if (port === undefined) // we assume the port hasn't been given. >+ port = SC_DEFAULT_IN; // THREAD: shared var... >+ var t = port.readChar(); >+ return t === SC_EOF_OBJECT? t: new sc_Char(t); >+} >+/*** META ((export #t)) */ >+function sc_peekChar(port) { >+ if (port === undefined) // we assume the port hasn't been given. >+ port = SC_DEFAULT_IN; // THREAD: shared var... >+ var t = port.peekChar(); >+ return t === SC_EOF_OBJECT? t: new sc_Char(t); >+} >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isCharReady(port) { >+ if (port === undefined) // we assume the port hasn't been given. >+ port = SC_DEFAULT_IN; // THREAD: shared var... >+ return port.isCharReady(); >+} >+/*** META ((export #t) >+ (peephole (postfix ".close()"))) >+ */ >+function sc_closeInputPort(p) { >+ return p.close(); >+} >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix " instanceof sc_InputPort"))) >+ */ >+function sc_isInputPort(o) { >+ return (o instanceof sc_InputPort); >+} >+ >+/*** META ((export eof-object?) >+ (type bool) >+ (peephole (postfix " === SC_EOF_OBJECT"))) >+ */ >+function sc_isEOFObject(o) { >+ return o === SC_EOF_OBJECT; >+} >+ >+/*** META ((export #t) >+ (peephole (hole 0 "SC_DEFAULT_IN"))) >+ */ >+function sc_currentInputPort() { >+ return SC_DEFAULT_IN; >+} >+ >+/* ------------ file operations are not supported -----------*/ >+/*** META ((export #t)) */ >+function sc_callWithInputFile(s, proc) { >+ throw "can't open " + s; >+} >+ >+/*** META ((export #t)) */ >+function sc_callWithOutputFile(s, proc) { >+ throw "can't open " + s; >+} >+ >+/*** META ((export #t)) */ >+function sc_withInputFromFile(s, thunk) { >+ throw "can't open " + s; >+} >+ >+/*** META ((export #t)) */ >+function sc_withOutputToFile(s, thunk) { >+ throw "can't open " + s; >+} >+ >+/*** META ((export #t)) */ >+function sc_openInputFile(s) { >+ throw "can't open " + s; >+} >+ >+/*** META ((export #t)) */ >+function sc_openOutputFile(s) { >+ throw "can't open " + s; >+} >+ >+/* ----------------------------------------------------------------------------*/ >+/*** META ((export #t)) */ >+function sc_basename(p) { >+ var i = p.lastIndexOf('/'); >+ >+ if(i >= 0) >+ return p.substring(i + 1, p.length); >+ else >+ return ''; >+} >+ >+/*** META ((export #t)) */ >+function sc_dirname(p) { >+ var i = p.lastIndexOf('/'); >+ >+ if(i >= 0) >+ return p.substring(0, i); >+ else >+ return ''; >+} >+ >+/* ----------------------------------------------------------------------------*/ >+ >+/*** META ((export #t)) */ >+function sc_withInputFromPort(p, thunk) { >+ try { >+ var tmp = SC_DEFAULT_IN; // THREAD: shared var. >+ SC_DEFAULT_IN = p; >+ return thunk(); >+ } finally { >+ SC_DEFAULT_IN = tmp; >+ } >+} >+ >+/*** META ((export #t)) */ >+function sc_withInputFromString(s, thunk) { >+ return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk); >+} >+ >+/*** META ((export #t)) */ >+function sc_withOutputToPort(p, thunk) { >+ try { >+ var tmp = SC_DEFAULT_OUT; // THREAD: shared var. >+ SC_DEFAULT_OUT = p; >+ return thunk(); >+ } finally { >+ SC_DEFAULT_OUT = tmp; >+ } >+} >+ >+/*** META ((export #t)) */ >+function sc_withOutputToString(thunk) { >+ var p = new sc_StringOutputPort(); >+ sc_withOutputToPort(p, thunk); >+ return p.close(); >+} >+ >+/*** META ((export #t)) */ >+function sc_withOutputToProcedure(proc, thunk) { >+ var t = function(s) { proc(sc_jsstring2string(s)); }; >+ return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk); >+} >+ >+/*** META ((export #t) >+ (peephole (hole 0 "new sc_StringOutputPort()"))) >+ */ >+function sc_openOutputString() { >+ return new sc_StringOutputPort(); >+} >+ >+/*** META ((export #t)) */ >+function sc_openInputString(str) { >+ return new sc_StringInputPort(sc_string2jsstring(str)); >+} >+ >+/* ----------------------------------------------------------------------------*/ >+ >+function sc_OutputPort() { >+} >+sc_OutputPort.prototype = new sc_Port(); >+sc_OutputPort.prototype.appendJSString = function(obj) { >+ /* do nothing */ >+} >+sc_OutputPort.prototype.close = function() { >+ /* do nothing */ >+} >+ >+function sc_StringOutputPort() { >+ this.res = ""; >+} >+sc_StringOutputPort.prototype = new sc_OutputPort(); >+sc_StringOutputPort.prototype.appendJSString = function(s) { >+ this.res += s; >+} >+sc_StringOutputPort.prototype.close = function() { >+ return sc_jsstring2string(this.res); >+} >+ >+/*** META ((export #t)) */ >+function sc_getOutputString(sp) { >+ return sc_jsstring2string(sp.res); >+} >+ >+ >+function sc_ErrorOutputPort() { >+} >+sc_ErrorOutputPort.prototype = new sc_OutputPort(); >+sc_ErrorOutputPort.prototype.appendJSString = function(s) { >+ throw "don't write on ErrorPort!"; >+} >+sc_ErrorOutputPort.prototype.close = function() { >+ /* do nothing */ >+} >+ >+function sc_GenericOutputPort(appendJSString, close) { >+ this.appendJSString = appendJSString; >+ if (close) >+ this.close = close; >+} >+sc_GenericOutputPort.prototype = new sc_OutputPort(); >+ >+/*** META ((export #t) >+ (type bool) >+ (peephole (postfix " instanceof sc_OutputPort"))) >+ */ >+function sc_isOutputPort(o) { >+ return (o instanceof sc_OutputPort); >+} >+ >+/*** META ((export #t) >+ (peephole (postfix ".close()"))) >+ */ >+function sc_closeOutputPort(p) { >+ return p.close(); >+} >+ >+/* ------------------ write ---------------------------------------------------*/ >+ >+/*** META ((export #t)) */ >+function sc_write(o, p) { >+ if (p === undefined) // we assume not given >+ p = SC_DEFAULT_OUT; >+ p.appendJSString(sc_toWriteString(o)); >+} >+ >+function sc_toWriteString(o) { >+ if (o === null) >+ return "()"; >+ else if (o === true) >+ return "#t"; >+ else if (o === false) >+ return "#f"; >+ else if (o === undefined) >+ return "#unspecified"; >+ else if (typeof o === 'function') >+ return "#<procedure " + sc_hash(o) + ">"; >+ else if (o.sc_toWriteString) >+ return o.sc_toWriteString(); >+ else >+ return o.toString(); >+} >+ >+function sc_escapeWriteString(s) { >+ var res = ""; >+ var j = 0; >+ for (i = 0; i < s.length; i++) { >+ switch (s.charAt(i)) { >+ case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break; >+ case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break; >+ case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break; >+ case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break; >+ case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break; >+ case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break; >+ case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break; >+ case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break; >+ case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break; >+ default: >+ var c = s.charAt(i); >+ if ("\a" !== "a" && c == "\a") { >+ res += s.substring(j, i) + "\\a"; j = i + 1; continue; >+ } >+ if ("\v" !== "v" && c == "\v") { >+ res += s.substring(j, i) + "\\v"; j = i + 1; continue; >+ } >+ //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) { >+ // CARE: Manuel is this OK with HOP? >+ if (s.charAt(i) < ' ') { >+ /* non printable character and special chars */ >+ res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16); >+ j = i + 1; >+ } >+ // else just let i increase... >+ } >+ } >+ res += s.substring(j, i); >+ return res; >+} >+ >+/* ------------------ display ---------------------------------------------------*/ >+ >+/*** META ((export #t)) */ >+function sc_display(o, p) { >+ if (p === undefined) // we assume not given >+ p = SC_DEFAULT_OUT; >+ p.appendJSString(sc_toDisplayString(o)); >+} >+ >+function sc_toDisplayString(o) { >+ if (o === null) >+ return "()"; >+ else if (o === true) >+ return "#t"; >+ else if (o === false) >+ return "#f"; >+ else if (o === undefined) >+ return "#unspecified"; >+ else if (typeof o === 'function') >+ return "#<procedure " + sc_hash(o) + ">"; >+ else if (o.sc_toDisplayString) >+ return o.sc_toDisplayString(); >+ else >+ return o.toString(); >+} >+ >+/* ------------------ newline ---------------------------------------------------*/ >+ >+/*** META ((export #t)) */ >+function sc_newline(p) { >+ if (p === undefined) // we assume not given >+ p = SC_DEFAULT_OUT; >+ p.appendJSString("\n"); >+} >+ >+/* ------------------ write-char ---------------------------------------------------*/ >+ >+/*** META ((export #t)) */ >+function sc_writeChar(c, p) { >+ if (p === undefined) // we assume not given >+ p = SC_DEFAULT_OUT; >+ p.appendJSString(c.val); >+} >+ >+/* ------------------ write-circle ---------------------------------------------------*/ >+ >+/*** META ((export #t)) */ >+function sc_writeCircle(o, p) { >+ if (p === undefined) // we assume not given >+ p = SC_DEFAULT_OUT; >+ p.appendJSString(sc_toWriteCircleString(o)); >+} >+ >+function sc_toWriteCircleString(o) { >+ var symb = sc_gensym("writeCircle"); >+ var nbPointer = new Object(); >+ nbPointer.nb = 0; >+ sc_prepWriteCircle(o, symb, nbPointer); >+ return sc_genToWriteCircleString(o, symb); >+} >+ >+function sc_prepWriteCircle(o, symb, nbPointer) { >+ // TODO sc_Struct >+ if (o instanceof sc_Pair || >+ o instanceof sc_Vector) { >+ if (o[symb] !== undefined) { >+ // not the first visit. >+ o[symb]++; >+ // unless there is already a number, assign one. >+ if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++; >+ return; >+ } >+ o[symb] = 0; >+ if (o instanceof sc_Pair) { >+ sc_prepWriteCircle(o.car, symb, nbPointer); >+ sc_prepWriteCircle(o.cdr, symb, nbPointer); >+ } else { >+ for (var i = 0; i < o.length; i++) >+ sc_prepWriteCircle(o[i], symb, nbPointer); >+ } >+ } >+} >+ >+function sc_genToWriteCircleString(o, symb) { >+ if (!(o instanceof sc_Pair || >+ o instanceof sc_Vector)) >+ return sc_toWriteString(o); >+ return o.sc_toWriteCircleString(symb); >+} >+sc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) { >+ if (this[symb + "use"]) { // use-flag is set. Just use it. >+ var nb = this[symb + "nb"]; >+ if (this[symb]-- === 0) { // if we are the last use. remove all fields. >+ delete this[symb]; >+ delete this[symb + "nb"]; >+ delete this[symb + "use"]; >+ } >+ if (inList) >+ return '. #' + nb + '#'; >+ else >+ return '#' + nb + '#'; >+ } >+ if (this[symb]-- === 0) { // if we are the last use. remove all fields. >+ delete this[symb]; >+ delete this[symb + "nb"]; >+ delete this[symb + "use"]; >+ } >+ >+ var res = ""; >+ >+ if (this[symb] !== undefined) { // implies > 0 >+ this[symb + "use"] = true; >+ if (inList) >+ res += '. #' + this[symb + "nb"] + '='; >+ else >+ res += '#' + this[symb + "nb"] + '='; >+ inList = false; >+ } >+ >+ if (!inList) >+ res += "("; >+ >+ // print car >+ res += sc_genToWriteCircleString(this.car, symb); >+ >+ if (sc_isPair(this.cdr)) { >+ res += " " + this.cdr.sc_toWriteCircleString(symb, true); >+ } else if (this.cdr !== null) { >+ res += " . " + sc_genToWriteCircleString(this.cdr, symb); >+ } >+ if (!inList) >+ res += ")"; >+ return res; >+}; >+sc_Vector.prototype.sc_toWriteCircleString = function(symb) { >+ if (this[symb + "use"]) { // use-flag is set. Just use it. >+ var nb = this[symb + "nb"]; >+ if (this[symb]-- === 0) { // if we are the last use. remove all fields. >+ delete this[symb]; >+ delete this[symb + "nb"]; >+ delete this[symb + "use"]; >+ } >+ return '#' + nb + '#'; >+ } >+ if (this[symb]-- === 0) { // if we are the last use. remove all fields. >+ delete this[symb]; >+ delete this[symb + "nb"]; >+ delete this[symb + "use"]; >+ } >+ >+ var res = ""; >+ if (this[symb] !== undefined) { // implies > 0 >+ this[symb + "use"] = true; >+ res += '#' + this[symb + "nb"] + '='; >+ } >+ res += "#("; >+ for (var i = 0; i < this.length; i++) { >+ res += sc_genToWriteCircleString(this[i], symb); >+ if (i < this.length - 1) res += " "; >+ } >+ res += ")"; >+ return res; >+}; >+ >+ >+/* ------------------ print ---------------------------------------------------*/ >+ >+/*** META ((export #t)) */ >+function sc_print(s) { >+ if (arguments.length === 1) { >+ sc_display(s); >+ sc_newline(); >+ } >+ else { >+ for (var i = 0; i < arguments.length; i++) >+ sc_display(arguments[i]); >+ sc_newline(); >+ } >+} >+ >+/* ------------------ format ---------------------------------------------------*/ >+/*** META ((export #t)) */ >+function sc_format(s, args) { >+ var len = s.length; >+ var p = new sc_StringOutputPort(); >+ var i = 0, j = 1; >+ >+ while( i < len ) { >+ var i2 = s.indexOf("~", i); >+ >+ if (i2 == -1) { >+ p.appendJSString( s.substring( i, len ) ); >+ return p.close(); >+ } else { >+ if (i2 > i) { >+ if (i2 == (len - 1)) { >+ p.appendJSString(s.substring(i, len)); >+ return p.close(); >+ } else { >+ p.appendJSString(s.substring(i, i2)); >+ i = i2; >+ } >+ } >+ >+ switch(s.charCodeAt(i2 + 1)) { >+ case 65: >+ case 97: >+ // a >+ sc_display(arguments[j], p); >+ i += 2; j++; >+ break; >+ >+ case 83: >+ case 115: >+ // s >+ sc_write(arguments[j], p); >+ i += 2; j++; >+ break; >+ >+ case 86: >+ case 118: >+ // v >+ sc_display(arguments[j], p); >+ p.appendJSString("\n"); >+ i += 2; j++; >+ break; >+ >+ case 67: >+ case 99: >+ // c >+ p.appendJSString(String.fromCharCode(arguments[j])); >+ i += 2; j++; >+ break; >+ >+ case 88: >+ case 120: >+ // x >+ p.appendJSString(arguments[j].toString(6)); >+ i += 2; j++; >+ break; >+ >+ case 79: >+ case 111: >+ // o >+ p.appendJSString(arguments[j].toString(8)); >+ i += 2; j++; >+ break; >+ >+ case 66: >+ case 98: >+ // b >+ p.appendJSString(arguments[j].toString(2)); >+ i += 2; j++; >+ break; >+ >+ case 37: >+ case 110: >+ // %, n >+ p.appendJSString("\n"); >+ i += 2; break; >+ >+ case 114: >+ // r >+ p.appendJSString("\r"); >+ i += 2; break; >+ >+ case 126: >+ // ~ >+ p.appendJSString("~"); >+ i += 2; break; >+ >+ default: >+ sc_error( "format: illegal ~" >+ + String.fromCharCode(s.charCodeAt(i2 + 1)) >+ + " sequence" ); >+ return ""; >+ } >+ } >+ } >+ >+ return p.close(); >+} >+ >+/* ------------------ global ports ---------------------------------------------------*/ >+ >+var SC_DEFAULT_IN = new sc_ErrorInputPort(); >+var SC_DEFAULT_OUT = new sc_ErrorOutputPort(); >+var SC_ERROR_OUT = new sc_ErrorOutputPort(); >+ >+var sc_SYMBOL_PREFIX = "\u1E9C"; >+var sc_KEYWORD_PREFIX = "\u1E9D"; >+ >+/*** META ((export #t) >+ (peephole (id))) */ >+function sc_jsstring2string(s) { >+ return s; >+} >+ >+/*** META ((export #t) >+ (peephole (prefix "'\\u1E9C' +"))) >+ */ >+function sc_jsstring2symbol(s) { >+ return sc_SYMBOL_PREFIX + s; >+} >+ >+/*** META ((export #t) >+ (peephole (id))) >+ */ >+function sc_string2jsstring(s) { >+ return s; >+} >+ >+/*** META ((export #t) >+ (peephole (symbol2jsstring_immutable))) >+ */ >+function sc_symbol2jsstring(s) { >+ return s.slice(1); >+} >+ >+/*** META ((export #t) >+ (peephole (postfix ".slice(1)"))) >+ */ >+function sc_keyword2jsstring(k) { >+ return k.slice(1); >+} >+ >+/*** META ((export #t) >+ (peephole (prefix "'\\u1E9D' +"))) >+ */ >+function sc_jsstring2keyword(s) { >+ return sc_KEYWORD_PREFIX + s; >+} >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isKeyword(s) { >+ return (typeof s === "string") && >+ (s.charAt(0) === sc_KEYWORD_PREFIX); >+} >+ >+ >+/*** META ((export #t)) */ >+var sc_gensym = function() { >+ var counter = 1000; >+ return function(sym) { >+ counter++; >+ if (!sym) sym = sc_SYMBOL_PREFIX; >+ return sym + "s" + counter + "~" + "^sC-GeNsYm "; >+ }; >+}(); >+ >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isEqual(o1, o2) { >+ return ((o1 === o2) || >+ (sc_isPair(o1) && sc_isPair(o2) >+ && sc_isPairEqual(o1, o2, sc_isEqual)) || >+ (sc_isVector(o1) && sc_isVector(o2) >+ && sc_isVectorEqual(o1, o2, sc_isEqual))); >+} >+ >+/*** META ((export number->symbol integer->symbol)) */ >+function sc_number2symbol(x, radix) { >+ return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix); >+} >+ >+/*** META ((export number->string integer->string)) */ >+var sc_number2string = sc_number2jsstring; >+ >+/*** META ((export #t)) */ >+function sc_symbol2number(s, radix) { >+ return sc_jsstring2number(s.slice(1), radix); >+} >+ >+/*** META ((export #t)) */ >+var sc_string2number = sc_jsstring2number; >+ >+/*** META ((export #t) >+ (peephole (prefix "+" s))) >+ ;; peephole will only apply if no radix is given. >+ */ >+function sc_string2integer(s, radix) { >+ if (!radix) return +s; >+ return parseInt(s, radix); >+} >+ >+/*** META ((export #t) >+ (peephole (prefix "+"))) >+ */ >+function sc_string2real(s) { >+ return +s; >+} >+ >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isSymbol(s) { >+ return (typeof s === "string") && >+ (s.charAt(0) === sc_SYMBOL_PREFIX); >+} >+ >+/*** META ((export #t) >+ (peephole (symbol2string_immutable))) >+ */ >+function sc_symbol2string(s) { >+ return s.slice(1); >+} >+ >+/*** META ((export #t) >+ (peephole (prefix "'\\u1E9C' +"))) >+ */ >+function sc_string2symbol(s) { >+ return sc_SYMBOL_PREFIX + s; >+} >+ >+/*** META ((export symbol-append) >+ (peephole (symbolAppend_immutable))) >+ */ >+function sc_symbolAppend() { >+ var res = sc_SYMBOL_PREFIX; >+ for (var i = 0; i < arguments.length; i++) >+ res += arguments[i].slice(1); >+ return res; >+} >+ >+/*** META ((export #t) >+ (peephole (postfix ".val"))) >+ */ >+function sc_char2string(c) { return c.val; } >+ >+/*** META ((export #t) >+ (peephole (hole 1 "'\\u1E9C' + " c ".val"))) >+ */ >+function sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; } >+ >+/*** META ((export #t) >+ (type bool)) >+ */ >+function sc_isString(s) { >+ return (typeof s === "string") && >+ (s.charAt(0) !== sc_SYMBOL_PREFIX); >+} >+ >+/*** META ((export #t)) */ >+var sc_makeString = sc_makejsString; >+ >+ >+/*** META ((export #t)) */ >+function sc_string() { >+ for (var i = 0; i < arguments.length; i++) >+ arguments[i] = arguments[i].val; >+ return "".concat.apply("", arguments); >+} >+ >+/*** META ((export #t) >+ (peephole (postfix ".length"))) >+ */ >+function sc_stringLength(s) { return s.length; } >+ >+/*** META ((export #t)) */ >+function sc_stringRef(s, k) { >+ return new sc_Char(s.charAt(k)); >+} >+ >+/* there's no stringSet in the immutable version >+function sc_stringSet(s, k, c) >+*/ >+ >+ >+/*** META ((export string=?) >+ (type bool) >+ (peephole (hole 2 str1 " === " str2))) >+ */ >+function sc_isStringEqual(s1, s2) { >+ return s1 === s2; >+} >+/*** META ((export string<?) >+ (type bool) >+ (peephole (hole 2 str1 " < " str2))) >+ */ >+function sc_isStringLess(s1, s2) { >+ return s1 < s2; >+} >+/*** META ((export string>?) >+ (type bool) >+ (peephole (hole 2 str1 " > " str2))) >+ */ >+function sc_isStringGreater(s1, s2) { >+ return s1 > s2; >+} >+/*** META ((export string<=?) >+ (type bool) >+ (peephole (hole 2 str1 " <= " str2))) >+ */ >+function sc_isStringLessEqual(s1, s2) { >+ return s1 <= s2; >+} >+/*** META ((export string>=?) >+ (type bool) >+ (peephole (hole 2 str1 " >= " str2))) >+ */ >+function sc_isStringGreaterEqual(s1, s2) { >+ return s1 >= s2; >+} >+/*** META ((export string-ci=?) >+ (type bool) >+ (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()"))) >+ */ >+function sc_isStringCIEqual(s1, s2) { >+ return s1.toLowerCase() === s2.toLowerCase(); >+} >+/*** META ((export string-ci<?) >+ (type bool) >+ (peephole (hole 2 str1 ".toLowerCase() < " str2 ".toLowerCase()"))) >+ */ >+function sc_isStringCILess(s1, s2) { >+ return s1.toLowerCase() < s2.toLowerCase(); >+} >+/*** META ((export string-ci>?) >+ (type bool) >+ (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()"))) >+ */ >+function sc_isStringCIGreater(s1, s2) { >+ return s1.toLowerCase() > s2.toLowerCase(); >+} >+/*** META ((export string-ci<=?) >+ (type bool) >+ (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()"))) >+ */ >+function sc_isStringCILessEqual(s1, s2) { >+ return s1.toLowerCase() <= s2.toLowerCase(); >+} >+/*** META ((export string-ci>=?) >+ (type bool) >+ (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()"))) >+ */ >+function sc_isStringCIGreaterEqual(s1, s2) { >+ return s1.toLowerCase() >= s2.toLowerCase(); >+} >+ >+/*** META ((export #t) >+ (peephole (hole 3 s ".substring(" start ", " end ")"))) >+ */ >+function sc_substring(s, start, end) { >+ return s.substring(start, end); >+} >+ >+/*** META ((export #t)) >+*/ >+function sc_isSubstring_at(s1, s2, i) { >+ return s2 == s1.substring(i, i+ s2.length); >+} >+ >+/*** META ((export #t) >+ (peephole (infix 0 #f "+" "''"))) >+ */ >+function sc_stringAppend() { >+ return "".concat.apply("", arguments); >+} >+ >+/*** META ((export #t)) */ >+var sc_string2list = sc_jsstring2list; >+ >+/*** META ((export #t)) */ >+var sc_list2string = sc_list2jsstring; >+ >+/*** META ((export #t) >+ (peephole (id))) >+ */ >+function sc_stringCopy(s) { >+ return s; >+} >+ >+/* there's no string-fill in the immutable version >+function sc_stringFill(s, c) >+*/ >+ >+/*** META ((export #t) >+ (peephole (postfix ".slice(1)"))) >+ */ >+function sc_keyword2string(o) { >+ return o.slice(1); >+} >+ >+/*** META ((export #t) >+ (peephole (prefix "'\\u1E9D' +"))) >+ */ >+function sc_string2keyword(o) { >+ return sc_KEYWORD_PREFIX + o; >+} >+ >+String.prototype.sc_toDisplayString = function() { >+ if (this.charAt(0) === sc_SYMBOL_PREFIX) >+ // TODO: care for symbols with spaces (escape-chars symbols). >+ return this.slice(1); >+ else if (this.charAt(0) === sc_KEYWORD_PREFIX) >+ return ":" + this.slice(1); >+ else >+ return this.toString(); >+}; >+ >+String.prototype.sc_toWriteString = function() { >+ if (this.charAt(0) === sc_SYMBOL_PREFIX) >+ // TODO: care for symbols with spaces (escape-chars symbols). >+ return this.slice(1); >+ else if (this.charAt(0) === sc_KEYWORD_PREFIX) >+ return ":" + this.slice(1); >+ else >+ return '"' + sc_escapeWriteString(this) + '"'; >+}; >+/* Exported Variables */ >+var BgL_testzd2boyerzd2; >+var BgL_nboyerzd2benchmarkzd2; >+var BgL_setupzd2boyerzd2; >+/* End Exports */ >+ >+var translate_term_nboyer; >+var translate_args_nboyer; >+var untranslate_term_nboyer; >+var BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer; >+var BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer; >+var translate_alist_nboyer; >+var apply_subst_nboyer; >+var apply_subst_lst_nboyer; >+var tautologyp_nboyer; >+var if_constructor_nboyer; >+var rewrite_count_nboyer; >+var rewrite_nboyer; >+var rewrite_args_nboyer; >+var unify_subst_nboyer; >+var one_way_unify1_nboyer; >+var false_term_nboyer; >+var true_term_nboyer; >+var trans_of_implies1_nboyer; >+var is_term_equal_nboyer; >+var is_term_member_nboyer; >+var const_nboyer; >+var sc_const_3_nboyer; >+var sc_const_4_nboyer; >+{ >+ (sc_const_4_nboyer = (new sc_Pair("\u1E9Cimplies",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cu",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cw",null)))))),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cw",null)))))),null))))))); >+ (sc_const_3_nboyer = sc_list((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccompile",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Ccodegen",(new sc_Pair((new sc_Pair("\u1E9Coptimize",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreaterp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clesseqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cboolean",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ciff",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceven1",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Codd",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccountps-",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccountps-loop",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfact-",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfact-loop",(new sc_Pair("\u1E9Ci",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdivides",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-true",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-false",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctautology-checker",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctautologyp",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfalsify",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfalsify1",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime1",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair("\u1E9Cp",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))))),(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cc",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cplus-fringe",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair("\u1E9Cenvrn",null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmc-flatten",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cintersect",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Ck",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ck",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Csort-lp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus1",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Ci",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cbase",null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cj",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cj",(new sc_Pair((1),null)))))),null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Ci",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cw",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cz",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnlistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csamefringe",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cz",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cw",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair(sc_list("\u1E9Cand", (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Ca",null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cb",null)))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cl",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cl",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdsort",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx1",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx2",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx3",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx4",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx5",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx6",(new sc_Pair("\u1E9Cx7",null)))))),null)))))),null)))))),null)))))),null)))))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((6),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx7",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cy",(new sc_Pair((2),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csigma",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Ci",null)))),null)))))),(new sc_Pair((2),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cz",null)))),null)))))),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Ca",null)))),null)))),(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Cb",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair("\u1E9Cz",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cassignedp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair((new sc_Pair("\u1E9Cset",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cval",(new sc_Pair("\u1E9Cmem",null)))))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair("\u1E9Cval",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cmem",null)))))),null)))))))),null)))))))); >+ (const_nboyer = (new sc_Pair((new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))))),null))))))))))); >+ BgL_nboyerzd2benchmarkzd2 = function() { >+ var args = null; >+ for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { >+ args = sc_cons(arguments[sc_tmp], args); >+ } >+ var n; >+ return ((n = ((args === null)?(0):(args.car))), (BgL_setupzd2boyerzd2()), (BgL_runzd2benchmarkzd2(("nboyer"+(sc_number2string(n))), (1), function() { >+ return (BgL_testzd2boyerzd2(n)); >+ }, function(rewrites) { >+ if ((sc_isNumber(rewrites))) >+ switch (n) { >+ case (0): >+ return (rewrites===(95024)); >+ break; >+ case (1): >+ return (rewrites===(591777)); >+ break; >+ case (2): >+ return (rewrites===(1813975)); >+ break; >+ case (3): >+ return (rewrites===(5375678)); >+ break; >+ case (4): >+ return (rewrites===(16445406)); >+ break; >+ case (5): >+ return (rewrites===(51507739)); >+ break; >+ default: >+ return true; >+ break; >+ } >+ else >+ return false; >+ }))); >+ }; >+BgL_setupzd2boyerzd2 = function() { >+ return true; >+}; >+BgL_testzd2boyerzd2 = function() { >+ return true; >+}; >+translate_term_nboyer = function(term) { >+ var lst; >+ return (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((translate_term_nboyer((lst.car))), (translate_args_nboyer((lst.cdr)))))))))); >+}; >+translate_args_nboyer = function(lst) { >+ var sc_lst_5; >+ var term; >+ return ((lst === null)?null:(new sc_Pair(((term = (lst.car)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))), ((sc_lst_5 = (lst.cdr)), ((sc_lst_5 === null)?null:(new sc_Pair((translate_term_nboyer((sc_lst_5.car))), (translate_args_nboyer((sc_lst_5.cdr)))))))))); >+}; >+untranslate_term_nboyer = function(term) { >+ var optrOpnd; >+ var tail1131; >+ var L1127; >+ var falseHead1130; >+ var symbol_record; >+ if (!(term instanceof sc_Pair)) >+ return term; >+ else >+ { >+ (falseHead1130 = (new sc_Pair(null, null))); >+ (L1127 = (term.cdr)); >+ (tail1131 = falseHead1130); >+ while (!(L1127 === null)) { >+ { >+ (tail1131.cdr = (new sc_Pair((untranslate_term_nboyer((L1127.car))), null))); >+ (tail1131 = (tail1131.cdr)); >+ (L1127 = (L1127.cdr)); >+ } >+ } >+ (optrOpnd = (falseHead1130.cdr)); >+ return (new sc_Pair(((symbol_record = (term.car)), (symbol_record[(0)])), optrOpnd)); >+ } >+}; >+BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer = function(sym) { >+ var r; >+ var x; >+ return ((x = (sc_assq(sym, BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), ((x!== false)?(x.cdr):((r = [sym, null]), (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = (new sc_Pair((new sc_Pair(sym, r)), BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), r))); >+}; >+(BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); >+translate_alist_nboyer = function(alist) { >+ var sc_alist_6; >+ var term; >+ return ((alist === null)?null:(new sc_Pair((new sc_Pair((alist.car.car), ((term = (alist.car.cdr)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))))), ((sc_alist_6 = (alist.cdr)), ((sc_alist_6 === null)?null:(new sc_Pair((new sc_Pair((sc_alist_6.car.car), (translate_term_nboyer((sc_alist_6.car.cdr))))), (translate_alist_nboyer((sc_alist_6.cdr)))))))))); >+}; >+apply_subst_nboyer = function(alist, term) { >+ var lst; >+ var temp_temp; >+ return (!(term instanceof sc_Pair)?((temp_temp = (sc_assq(term, alist))), ((temp_temp!== false)?(temp_temp.cdr):term)):(new sc_Pair((term.car), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), (apply_subst_lst_nboyer(alist, (lst.cdr)))))))))); >+}; >+apply_subst_lst_nboyer = function(alist, lst) { >+ var sc_lst_7; >+ return ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), ((sc_lst_7 = (lst.cdr)), ((sc_lst_7 === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (sc_lst_7.car))), (apply_subst_lst_nboyer(alist, (sc_lst_7.cdr)))))))))); >+}; >+tautologyp_nboyer = function(sc_x_11, true_lst, false_lst) { >+ var tmp1125; >+ var x; >+ var tmp1126; >+ var sc_x_8; >+ var sc_tmp1125_9; >+ var sc_tmp1126_10; >+ var sc_x_11; >+ var true_lst; >+ var false_lst; >+ while (true) { >+ if ((((sc_tmp1126_10 = (is_term_equal_nboyer(sc_x_11, true_term_nboyer))), ((sc_tmp1126_10!== false)?sc_tmp1126_10:(is_term_member_nboyer(sc_x_11, true_lst))))!== false)) >+ return true; >+ else >+ if ((((sc_tmp1125_9 = (is_term_equal_nboyer(sc_x_11, false_term_nboyer))), ((sc_tmp1125_9!== false)?sc_tmp1125_9:(is_term_member_nboyer(sc_x_11, false_lst))))!== false)) >+ return false; >+ else >+ if (!(sc_x_11 instanceof sc_Pair)) >+ return false; >+ else >+ if (((sc_x_11.car)===if_constructor_nboyer)) >+ if ((((sc_x_8 = (sc_x_11.cdr.car)), (tmp1126 = (is_term_equal_nboyer(sc_x_8, true_term_nboyer))), ((tmp1126!== false)?tmp1126:(is_term_member_nboyer(sc_x_8, true_lst))))!== false)) >+ (sc_x_11 = (sc_x_11.cdr.cdr.car)); >+ else >+ if ((((x = (sc_x_11.cdr.car)), (tmp1125 = (is_term_equal_nboyer(x, false_term_nboyer))), ((tmp1125!== false)?tmp1125:(is_term_member_nboyer(x, false_lst))))!== false)) >+ (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); >+ else >+ if (((tautologyp_nboyer((sc_x_11.cdr.cdr.car), (new sc_Pair((sc_x_11.cdr.car), true_lst)), false_lst))!== false)) >+ { >+ (false_lst = (new sc_Pair((sc_x_11.cdr.car), false_lst))); >+ (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); >+ } >+ else >+ return false; >+ else >+ return false; >+ } >+}; >+(if_constructor_nboyer = "\u1E9C*"); >+(rewrite_count_nboyer = (0)); >+rewrite_nboyer = function(term) { >+ var term2; >+ var sc_term_12; >+ var lst; >+ var symbol_record; >+ var sc_lst_13; >+ { >+ (++rewrite_count_nboyer); >+ if (!(term instanceof sc_Pair)) >+ return term; >+ else >+ { >+ (sc_term_12 = (new sc_Pair((term.car), ((sc_lst_13 = (term.cdr)), ((sc_lst_13 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_13.car))), (rewrite_args_nboyer((sc_lst_13.cdr)))))))))); >+ (lst = ((symbol_record = (term.car)), (symbol_record[(1)]))); >+ while (true) { >+ if ((lst === null)) >+ return sc_term_12; >+ else >+ if ((((term2 = ((lst.car).cdr.car)), (unify_subst_nboyer = null), (one_way_unify1_nboyer(sc_term_12, term2)))!== false)) >+ return (rewrite_nboyer((apply_subst_nboyer(unify_subst_nboyer, ((lst.car).cdr.cdr.car))))); >+ else >+ (lst = (lst.cdr)); >+ } >+ } >+ } >+}; >+rewrite_args_nboyer = function(lst) { >+ var sc_lst_14; >+ return ((lst === null)?null:(new sc_Pair((rewrite_nboyer((lst.car))), ((sc_lst_14 = (lst.cdr)), ((sc_lst_14 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_14.car))), (rewrite_args_nboyer((sc_lst_14.cdr)))))))))); >+}; >+(unify_subst_nboyer = "\u1E9C*"); >+one_way_unify1_nboyer = function(term1, term2) { >+ var lst1; >+ var lst2; >+ var temp_temp; >+ if (!(term2 instanceof sc_Pair)) >+ { >+ (temp_temp = (sc_assq(term2, unify_subst_nboyer))); >+ if ((temp_temp!== false)) >+ return (is_term_equal_nboyer(term1, (temp_temp.cdr))); >+ else >+ if ((sc_isNumber(term2))) >+ return (sc_isEqual(term1, term2)); >+ else >+ { >+ (unify_subst_nboyer = (new sc_Pair((new sc_Pair(term2, term1)), unify_subst_nboyer))); >+ return true; >+ } >+ } >+ else >+ if (!(term1 instanceof sc_Pair)) >+ return false; >+ else >+ if (((term1.car)===(term2.car))) >+ { >+ (lst1 = (term1.cdr)); >+ (lst2 = (term2.cdr)); >+ while (true) { >+ if ((lst1 === null)) >+ return (lst2 === null); >+ else >+ if ((lst2 === null)) >+ return false; >+ else >+ if (((one_way_unify1_nboyer((lst1.car), (lst2.car)))!== false)) >+ { >+ (lst1 = (lst1.cdr)); >+ (lst2 = (lst2.cdr)); >+ } >+ else >+ return false; >+ } >+ } >+ else >+ return false; >+}; >+(false_term_nboyer = "\u1E9C*"); >+(true_term_nboyer = "\u1E9C*"); >+trans_of_implies1_nboyer = function(n) { >+ var sc_n_15; >+ return ((sc_isEqual(n, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (n-(1)), n)), ((sc_n_15 = (n-(1))), ((sc_isEqual(sc_n_15, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (sc_n_15-(1)), sc_n_15)), (trans_of_implies1_nboyer((sc_n_15-(1))))))))))); >+}; >+is_term_equal_nboyer = function(x, y) { >+ var lst1; >+ var lst2; >+ var r2; >+ var r1; >+ if ((x instanceof sc_Pair)) >+ if ((y instanceof sc_Pair)) >+ if ((((r1 = (x.car)), (r2 = (y.car)), (r1===r2))!== false)) >+ { >+ (lst1 = (x.cdr)); >+ (lst2 = (y.cdr)); >+ while (true) { >+ if ((lst1 === null)) >+ return (lst2 === null); >+ else >+ if ((lst2 === null)) >+ return false; >+ else >+ if (((is_term_equal_nboyer((lst1.car), (lst2.car)))!== false)) >+ { >+ (lst1 = (lst1.cdr)); >+ (lst2 = (lst2.cdr)); >+ } >+ else >+ return false; >+ } >+ } >+ else >+ return false; >+ else >+ return false; >+ else >+ return (sc_isEqual(x, y)); >+}; >+is_term_member_nboyer = function(x, lst) { >+ var x; >+ var lst; >+ while (true) { >+ if ((lst === null)) >+ return false; >+ else >+ if (((is_term_equal_nboyer(x, (lst.car)))!== false)) >+ return true; >+ else >+ (lst = (lst.cdr)); >+ } >+}; >+BgL_setupzd2boyerzd2 = function() { >+ var symbol_record; >+ var value; >+ var BgL_sc_symbolzd2record_16zd2; >+ var sym; >+ var sc_sym_17; >+ var term; >+ var lst; >+ var sc_term_18; >+ var sc_term_19; >+ { >+ (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); >+ (if_constructor_nboyer = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer("\u1E9Cif"))); >+ (false_term_nboyer = ((sc_term_19 = (new sc_Pair("\u1E9Cf",null))), (!(sc_term_19 instanceof sc_Pair)?sc_term_19:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_19.car))), (translate_args_nboyer((sc_term_19.cdr)))))))); >+ (true_term_nboyer = ((sc_term_18 = (new sc_Pair("\u1E9Ct",null))), (!(sc_term_18 instanceof sc_Pair)?sc_term_18:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_18.car))), (translate_args_nboyer((sc_term_18.cdr)))))))); >+ (lst = sc_const_3_nboyer); >+ while (!(lst === null)) { >+ { >+ (term = (lst.car)); >+ if (((term instanceof sc_Pair)&&(((term.car)==="\u1E9Cequal")&&((term.cdr.car) instanceof sc_Pair)))) >+ { >+ (sc_sym_17 = ((term.cdr.car).car)); >+ (value = (new sc_Pair((!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr)))))), ((sym = ((term.cdr.car).car)), (BgL_sc_symbolzd2record_16zd2 = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sym))), (BgL_sc_symbolzd2record_16zd2[(1)]))))); >+ (symbol_record = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sc_sym_17))); >+ (symbol_record[(1)] = value); >+ } >+ else >+ (sc_error("ADD-LEMMA did not like term: ", term)); >+ (lst = (lst.cdr)); >+ } >+ } >+ return true; >+ } >+}; >+BgL_testzd2boyerzd2 = function(n) { >+ var optrOpnd; >+ var term; >+ var sc_n_20; >+ var answer; >+ var sc_term_21; >+ var sc_term_22; >+ { >+ (rewrite_count_nboyer = (0)); >+ (term = sc_const_4_nboyer); >+ (sc_n_20 = n); >+ while (!(sc_n_20=== 0)) { >+ { >+ (term = (sc_list("\u1E9Cor", term, (new sc_Pair("\u1E9Cf",null))))); >+ (--sc_n_20); >+ } >+ } >+ (sc_term_22 = term); >+ if (!(sc_term_22 instanceof sc_Pair)) >+ (optrOpnd = sc_term_22); >+ else >+ (optrOpnd = (new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_22.car))), (translate_args_nboyer((sc_term_22.cdr)))))); >+ (sc_term_21 = (apply_subst_nboyer(((const_nboyer === null)?null:(new sc_Pair((new sc_Pair((const_nboyer.car.car), (translate_term_nboyer((const_nboyer.car.cdr))))), (translate_alist_nboyer((const_nboyer.cdr)))))), optrOpnd))); >+ (answer = (tautologyp_nboyer((rewrite_nboyer(sc_term_21)), null, null))); >+ (sc_write(rewrite_count_nboyer)); >+ (sc_display(" rewrites")); >+ (sc_newline()); >+ if ((answer!== false)) >+ return rewrite_count_nboyer; >+ else >+ return false; >+ } >+}; >+} >+/* Exported Variables */ >+var BgL_parsezd2ze3nbzd2treesze3; >+var BgL_earleyzd2benchmarkzd2; >+var BgL_parsezd2ze3parsedzf3zc2; >+var test; >+var BgL_parsezd2ze3treesz31; >+var BgL_makezd2parserzd2; >+/* End Exports */ >+ >+var const_earley; >+{ >+ (const_earley = (new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair((new sc_Pair("\u1E9Ca",null)),(new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair("\u1E9Cs",null)))),null)))))),null))); >+ BgL_makezd2parserzd2 = function(grammar, lexer) { >+ var i; >+ var parser_descr; >+ var def_loop; >+ var nb_nts; >+ var names; >+ var steps; >+ var predictors; >+ var enders; >+ var starters; >+ var nts; >+ var sc_names_1; >+ var sc_steps_2; >+ var sc_predictors_3; >+ var sc_enders_4; >+ var sc_starters_5; >+ var nb_confs; >+ var BgL_sc_defzd2loop_6zd2; >+ var BgL_sc_nbzd2nts_7zd2; >+ var sc_nts_8; >+ var BgL_sc_defzd2loop_9zd2; >+ var ind; >+ { >+ ind = function(nt, sc_nts_10) { >+ var i; >+ { >+ (i = ((sc_nts_10.length)-(1))); >+ while (true) { >+ if ((i>=(0))) >+ if ((sc_isEqual((sc_nts_10[i]), nt))) >+ return i; >+ else >+ (--i); >+ else >+ return false; >+ } >+ } >+ }; >+ (sc_nts_8 = ((BgL_sc_defzd2loop_9zd2 = function(defs, sc_nts_11) { >+ var rule_loop; >+ var head; >+ var def; >+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, sc_nts_12) { >+ var nt; >+ var l; >+ var sc_nts_13; >+ var rule; >+ if ((rules instanceof sc_Pair)) >+ { >+ (rule = (rules.car)); >+ (l = rule); >+ (sc_nts_13 = sc_nts_12); >+ while ((l instanceof sc_Pair)) { >+ { >+ (nt = (l.car)); >+ (l = (l.cdr)); >+ (sc_nts_13 = (((sc_member(nt, sc_nts_13))!== false)?sc_nts_13:(new sc_Pair(nt, sc_nts_13)))); >+ } >+ } >+ return (rule_loop((rules.cdr), sc_nts_13)); >+ } >+ else >+ return (BgL_sc_defzd2loop_9zd2((defs.cdr), sc_nts_12)); >+ }), (rule_loop((def.cdr), (((sc_member(head, sc_nts_11))!== false)?sc_nts_11:(new sc_Pair(head, sc_nts_11)))))):(sc_list2vector((sc_reverse(sc_nts_11))))); >+ }), (BgL_sc_defzd2loop_9zd2(grammar, null)))); >+ (BgL_sc_nbzd2nts_7zd2 = (sc_nts_8.length)); >+ (nb_confs = (((BgL_sc_defzd2loop_6zd2 = function(defs, BgL_sc_nbzd2confs_14zd2) { >+ var rule_loop; >+ var def; >+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (rule_loop = function(rules, BgL_sc_nbzd2confs_15zd2) { >+ var l; >+ var BgL_sc_nbzd2confs_16zd2; >+ var rule; >+ if ((rules instanceof sc_Pair)) >+ { >+ (rule = (rules.car)); >+ (l = rule); >+ (BgL_sc_nbzd2confs_16zd2 = BgL_sc_nbzd2confs_15zd2); >+ while ((l instanceof sc_Pair)) { >+ { >+ (l = (l.cdr)); >+ (++BgL_sc_nbzd2confs_16zd2); >+ } >+ } >+ return (rule_loop((rules.cdr), (BgL_sc_nbzd2confs_16zd2+(1)))); >+ } >+ else >+ return (BgL_sc_defzd2loop_6zd2((defs.cdr), BgL_sc_nbzd2confs_15zd2)); >+ }), (rule_loop((def.cdr), BgL_sc_nbzd2confs_14zd2))):BgL_sc_nbzd2confs_14zd2); >+ }), (BgL_sc_defzd2loop_6zd2(grammar, (0))))+BgL_sc_nbzd2nts_7zd2)); >+ (sc_starters_5 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); >+ (sc_enders_4 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); >+ (sc_predictors_3 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); >+ (sc_steps_2 = (sc_makeVector(nb_confs, false))); >+ (sc_names_1 = (sc_makeVector(nb_confs, false))); >+ (nts = sc_nts_8); >+ (starters = sc_starters_5); >+ (enders = sc_enders_4); >+ (predictors = sc_predictors_3); >+ (steps = sc_steps_2); >+ (names = sc_names_1); >+ (nb_nts = (sc_nts_8.length)); >+ (i = (nb_nts-(1))); >+ while ((i>=(0))) { >+ { >+ (sc_steps_2[i] = (i-nb_nts)); >+ (sc_names_1[i] = (sc_list((sc_nts_8[i]), (0)))); >+ (sc_enders_4[i] = (sc_list(i))); >+ (--i); >+ } >+ } >+ def_loop = function(defs, conf) { >+ var rule_loop; >+ var head; >+ var def; >+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, conf, rule_num) { >+ var i; >+ var sc_i_17; >+ var nt; >+ var l; >+ var sc_conf_18; >+ var sc_i_19; >+ var rule; >+ if ((rules instanceof sc_Pair)) >+ { >+ (rule = (rules.car)); >+ (names[conf] = (sc_list(head, rule_num))); >+ (sc_i_19 = (ind(head, nts))); >+ (starters[sc_i_19] = (new sc_Pair(conf, (starters[sc_i_19])))); >+ (l = rule); >+ (sc_conf_18 = conf); >+ while ((l instanceof sc_Pair)) { >+ { >+ (nt = (l.car)); >+ (steps[sc_conf_18] = (ind(nt, nts))); >+ (sc_i_17 = (ind(nt, nts))); >+ (predictors[sc_i_17] = (new sc_Pair(sc_conf_18, (predictors[sc_i_17])))); >+ (l = (l.cdr)); >+ (++sc_conf_18); >+ } >+ } >+ (steps[sc_conf_18] = ((ind(head, nts))-nb_nts)); >+ (i = (ind(head, nts))); >+ (enders[i] = (new sc_Pair(sc_conf_18, (enders[i])))); >+ return (rule_loop((rules.cdr), (sc_conf_18+(1)), (rule_num+(1)))); >+ } >+ else >+ return (def_loop((defs.cdr), conf)); >+ }), (rule_loop((def.cdr), conf, (1)))):undefined); >+ }; >+ (def_loop(grammar, (sc_nts_8.length))); >+ (parser_descr = [lexer, sc_nts_8, sc_starters_5, sc_enders_4, sc_predictors_3, sc_steps_2, sc_names_1]); >+ return function(input) { >+ var optrOpnd; >+ var sc_optrOpnd_20; >+ var sc_optrOpnd_21; >+ var sc_optrOpnd_22; >+ var loop1; >+ var BgL_sc_stateza2_23za2; >+ var toks; >+ var BgL_sc_nbzd2nts_24zd2; >+ var sc_steps_25; >+ var sc_enders_26; >+ var state_num; >+ var BgL_sc_statesza2_27za2; >+ var states; >+ var i; >+ var conf; >+ var l; >+ var tok_nts; >+ var sc_i_28; >+ var sc_i_29; >+ var l1; >+ var l2; >+ var tok; >+ var tail1129; >+ var L1125; >+ var goal_enders; >+ var BgL_sc_statesza2_30za2; >+ var BgL_sc_nbzd2nts_31zd2; >+ var BgL_sc_nbzd2confs_32zd2; >+ var nb_toks; >+ var goal_starters; >+ var sc_states_33; >+ var BgL_sc_nbzd2confs_34zd2; >+ var BgL_sc_nbzd2toks_35zd2; >+ var sc_toks_36; >+ var falseHead1128; >+ var sc_names_37; >+ var sc_steps_38; >+ var sc_predictors_39; >+ var sc_enders_40; >+ var sc_starters_41; >+ var sc_nts_42; >+ var lexer; >+ var sc_ind_43; >+ var make_states; >+ var BgL_sc_confzd2setzd2getza2_44za2; >+ var conf_set_merge_new_bang; >+ var conf_set_adjoin; >+ var BgL_sc_confzd2setzd2adjoinza2_45za2; >+ var BgL_sc_confzd2setzd2adjoinza2za2_46z00; >+ var conf_set_union; >+ var forw; >+ var is_parsed; >+ var deriv_trees; >+ var BgL_sc_derivzd2treesza2_47z70; >+ var nb_deriv_trees; >+ var BgL_sc_nbzd2derivzd2treesza2_48za2; >+ { >+ sc_ind_43 = function(nt, sc_nts_49) { >+ var i; >+ { >+ (i = ((sc_nts_49.length)-(1))); >+ while (true) { >+ if ((i>=(0))) >+ if ((sc_isEqual((sc_nts_49[i]), nt))) >+ return i; >+ else >+ (--i); >+ else >+ return false; >+ } >+ } >+ }; >+ make_states = function(BgL_sc_nbzd2toks_50zd2, BgL_sc_nbzd2confs_51zd2) { >+ var v; >+ var i; >+ var sc_states_52; >+ { >+ (sc_states_52 = (sc_makeVector((BgL_sc_nbzd2toks_50zd2+(1)), false))); >+ (i = BgL_sc_nbzd2toks_50zd2); >+ while ((i>=(0))) { >+ { >+ (v = (sc_makeVector((BgL_sc_nbzd2confs_51zd2+(1)), false))); >+ (v[(0)] = (-1)); >+ (sc_states_52[i] = v); >+ (--i); >+ } >+ } >+ return sc_states_52; >+ } >+ }; >+ BgL_sc_confzd2setzd2getza2_44za2 = function(state, BgL_sc_statezd2num_53zd2, sc_conf_54) { >+ var conf_set; >+ var BgL_sc_confzd2set_55zd2; >+ return ((BgL_sc_confzd2set_55zd2 = (state[(sc_conf_54+(1))])), ((BgL_sc_confzd2set_55zd2!== false)?BgL_sc_confzd2set_55zd2:((conf_set = (sc_makeVector((BgL_sc_statezd2num_53zd2+(6)), false))), (conf_set[(1)] = (-3)), (conf_set[(2)] = (-1)), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)), (state[(sc_conf_54+(1))] = conf_set), conf_set))); >+ }; >+ conf_set_merge_new_bang = function(conf_set) { >+ return ((conf_set[((conf_set[(1)])+(5))] = (conf_set[(4)])), (conf_set[(1)] = (conf_set[(3)])), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1))); >+ }; >+ conf_set_adjoin = function(state, conf_set, sc_conf_56, i) { >+ var tail; >+ return ((tail = (conf_set[(3)])), (conf_set[(i+(5))] = (-1)), (conf_set[(tail+(5))] = i), (conf_set[(3)] = i), ((tail<(0))?((conf_set[(0)] = (state[(0)])), (state[(0)] = sc_conf_56)):undefined)); >+ }; >+ BgL_sc_confzd2setzd2adjoinza2_45za2 = function(sc_states_57, BgL_sc_statezd2num_58zd2, l, i) { >+ var conf_set; >+ var sc_conf_59; >+ var l1; >+ var state; >+ { >+ (state = (sc_states_57[BgL_sc_statezd2num_58zd2])); >+ (l1 = l); >+ while ((l1 instanceof sc_Pair)) { >+ { >+ (sc_conf_59 = (l1.car)); >+ (conf_set = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_58zd2, sc_conf_59))); >+ if (((conf_set[(i+(5))])=== false)) >+ { >+ (conf_set_adjoin(state, conf_set, sc_conf_59, i)); >+ (l1 = (l1.cdr)); >+ } >+ else >+ (l1 = (l1.cdr)); >+ } >+ } >+ return undefined; >+ } >+ }; >+ BgL_sc_confzd2setzd2adjoinza2za2_46z00 = function(sc_states_60, BgL_sc_statesza2_61za2, BgL_sc_statezd2num_62zd2, sc_conf_63, i) { >+ var BgL_sc_confzd2setza2_64z70; >+ var BgL_sc_stateza2_65za2; >+ var conf_set; >+ var state; >+ return ((state = (sc_states_60[BgL_sc_statezd2num_62zd2])), ((((conf_set = (state[(sc_conf_63+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)?((BgL_sc_stateza2_65za2 = (BgL_sc_statesza2_61za2[BgL_sc_statezd2num_62zd2])), (BgL_sc_confzd2setza2_64z70 = (BgL_sc_confzd2setzd2getza2_44za2(BgL_sc_stateza2_65za2, BgL_sc_statezd2num_62zd2, sc_conf_63))), (((BgL_sc_confzd2setza2_64z70[(i+(5))])=== false)?(conf_set_adjoin(BgL_sc_stateza2_65za2, BgL_sc_confzd2setza2_64z70, sc_conf_63, i)):undefined), true):false)); >+ }; >+ conf_set_union = function(state, conf_set, sc_conf_66, other_set) { >+ var i; >+ { >+ (i = (other_set[(2)])); >+ while ((i>=(0))) { >+ if (((conf_set[(i+(5))])=== false)) >+ { >+ (conf_set_adjoin(state, conf_set, sc_conf_66, i)); >+ (i = (other_set[(i+(5))])); >+ } >+ else >+ (i = (other_set[(i+(5))])); >+ } >+ return undefined; >+ } >+ }; >+ forw = function(sc_states_67, BgL_sc_statezd2num_68zd2, sc_starters_69, sc_enders_70, sc_predictors_71, sc_steps_72, sc_nts_73) { >+ var next_set; >+ var next; >+ var conf_set; >+ var ender; >+ var l; >+ var starter_set; >+ var starter; >+ var sc_l_74; >+ var sc_loop1_75; >+ var head; >+ var BgL_sc_confzd2set_76zd2; >+ var BgL_sc_statezd2num_77zd2; >+ var state; >+ var sc_states_78; >+ var preds; >+ var BgL_sc_confzd2set_79zd2; >+ var step; >+ var sc_conf_80; >+ var BgL_sc_nbzd2nts_81zd2; >+ var sc_state_82; >+ { >+ (sc_state_82 = (sc_states_67[BgL_sc_statezd2num_68zd2])); >+ (BgL_sc_nbzd2nts_81zd2 = (sc_nts_73.length)); >+ while (true) { >+ { >+ (sc_conf_80 = (sc_state_82[(0)])); >+ if ((sc_conf_80>=(0))) >+ { >+ (step = (sc_steps_72[sc_conf_80])); >+ (BgL_sc_confzd2set_79zd2 = (sc_state_82[(sc_conf_80+(1))])); >+ (head = (BgL_sc_confzd2set_79zd2[(4)])); >+ (sc_state_82[(0)] = (BgL_sc_confzd2set_79zd2[(0)])); >+ (conf_set_merge_new_bang(BgL_sc_confzd2set_79zd2)); >+ if ((step>=(0))) >+ { >+ (sc_l_74 = (sc_starters_69[step])); >+ while ((sc_l_74 instanceof sc_Pair)) { >+ { >+ (starter = (sc_l_74.car)); >+ (starter_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, starter))); >+ if (((starter_set[(BgL_sc_statezd2num_68zd2+(5))])=== false)) >+ { >+ (conf_set_adjoin(sc_state_82, starter_set, starter, BgL_sc_statezd2num_68zd2)); >+ (sc_l_74 = (sc_l_74.cdr)); >+ } >+ else >+ (sc_l_74 = (sc_l_74.cdr)); >+ } >+ } >+ (l = (sc_enders_70[step])); >+ while ((l instanceof sc_Pair)) { >+ { >+ (ender = (l.car)); >+ if ((((conf_set = (sc_state_82[(ender+(1))])), ((conf_set!== false)?(conf_set[(BgL_sc_statezd2num_68zd2+(5))]):false))!== false)) >+ { >+ (next = (sc_conf_80+(1))); >+ (next_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, next))); >+ (conf_set_union(sc_state_82, next_set, next, BgL_sc_confzd2set_79zd2)); >+ (l = (l.cdr)); >+ } >+ else >+ (l = (l.cdr)); >+ } >+ } >+ } >+ else >+ { >+ (preds = (sc_predictors_71[(step+BgL_sc_nbzd2nts_81zd2)])); >+ (sc_states_78 = sc_states_67); >+ (state = sc_state_82); >+ (BgL_sc_statezd2num_77zd2 = BgL_sc_statezd2num_68zd2); >+ (BgL_sc_confzd2set_76zd2 = BgL_sc_confzd2set_79zd2); >+ sc_loop1_75 = function(l) { >+ var sc_state_83; >+ var BgL_sc_nextzd2set_84zd2; >+ var sc_next_85; >+ var pred_set; >+ var i; >+ var pred; >+ if ((l instanceof sc_Pair)) >+ { >+ (pred = (l.car)); >+ (i = head); >+ while ((i>=(0))) { >+ { >+ (pred_set = ((sc_state_83 = (sc_states_78[i])), (sc_state_83[(pred+(1))]))); >+ if ((pred_set!== false)) >+ { >+ (sc_next_85 = (pred+(1))); >+ (BgL_sc_nextzd2set_84zd2 = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_77zd2, sc_next_85))); >+ (conf_set_union(state, BgL_sc_nextzd2set_84zd2, sc_next_85, pred_set)); >+ } >+ (i = (BgL_sc_confzd2set_76zd2[(i+(5))])); >+ } >+ } >+ return (sc_loop1_75((l.cdr))); >+ } >+ else >+ return undefined; >+ }; >+ (sc_loop1_75(preds)); >+ } >+ } >+ else >+ return undefined; >+ } >+ } >+ } >+ }; >+ is_parsed = function(nt, i, j, sc_nts_86, sc_enders_87, sc_states_88) { >+ var conf_set; >+ var state; >+ var sc_conf_89; >+ var l; >+ var BgL_sc_ntza2_90za2; >+ { >+ (BgL_sc_ntza2_90za2 = (sc_ind_43(nt, sc_nts_86))); >+ if ((BgL_sc_ntza2_90za2!== false)) >+ { >+ (sc_nts_86.length); >+ (l = (sc_enders_87[BgL_sc_ntza2_90za2])); >+ while (true) { >+ if ((l instanceof sc_Pair)) >+ { >+ (sc_conf_89 = (l.car)); >+ if ((((state = (sc_states_88[j])), (conf_set = (state[(sc_conf_89+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) >+ return true; >+ else >+ (l = (l.cdr)); >+ } >+ else >+ return false; >+ } >+ } >+ else >+ return false; >+ } >+ }; >+ deriv_trees = function(sc_conf_91, i, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2) { >+ var sc_loop1_98; >+ var prev; >+ var name; >+ return ((name = (sc_names_94[sc_conf_91])), ((name!== false)?((sc_conf_91<BgL_sc_nbzd2nts_97zd2)?(sc_list((sc_list(name, ((sc_toks_95[i]).car))))):(sc_list((sc_list(name))))):((prev = (sc_conf_91-(1))), (sc_loop1_98 = function(l1, l2) { >+ var loop2; >+ var ender_set; >+ var state; >+ var ender; >+ var l1; >+ var l2; >+ while (true) { >+ if ((l1 instanceof sc_Pair)) >+ { >+ (ender = (l1.car)); >+ (ender_set = ((state = (sc_states_96[j])), (state[(ender+(1))]))); >+ if ((ender_set!== false)) >+ { >+ loop2 = function(k, l2) { >+ var loop3; >+ var ender_trees; >+ var prev_trees; >+ var conf_set; >+ var sc_state_99; >+ var k; >+ var l2; >+ while (true) { >+ if ((k>=(0))) >+ if (((k>=i)&&(((sc_state_99 = (sc_states_96[k])), (conf_set = (sc_state_99[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))) >+ { >+ (prev_trees = (deriv_trees(prev, i, k, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2))); >+ (ender_trees = (deriv_trees(ender, k, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2))); >+ loop3 = function(l3, l2) { >+ var l4; >+ var sc_l2_100; >+ var ender_tree; >+ if ((l3 instanceof sc_Pair)) >+ { >+ (ender_tree = (sc_list((l3.car)))); >+ (l4 = prev_trees); >+ (sc_l2_100 = l2); >+ while ((l4 instanceof sc_Pair)) { >+ { >+ (sc_l2_100 = (new sc_Pair((sc_append((l4.car), ender_tree)), sc_l2_100))); >+ (l4 = (l4.cdr)); >+ } >+ } >+ return (loop3((l3.cdr), sc_l2_100)); >+ } >+ else >+ return (loop2((ender_set[(k+(5))]), l2)); >+ }; >+ return (loop3(ender_trees, l2)); >+ } >+ else >+ (k = (ender_set[(k+(5))])); >+ else >+ return (sc_loop1_98((l1.cdr), l2)); >+ } >+ }; >+ return (loop2((ender_set[(2)]), l2)); >+ } >+ else >+ (l1 = (l1.cdr)); >+ } >+ else >+ return l2; >+ } >+ }), (sc_loop1_98((sc_enders_92[(sc_steps_93[prev])]), null))))); >+ }; >+ BgL_sc_derivzd2treesza2_47z70 = function(nt, i, j, sc_nts_101, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106) { >+ var conf_set; >+ var state; >+ var sc_conf_107; >+ var l; >+ var trees; >+ var BgL_sc_nbzd2nts_108zd2; >+ var BgL_sc_ntza2_109za2; >+ { >+ (BgL_sc_ntza2_109za2 = (sc_ind_43(nt, sc_nts_101))); >+ if ((BgL_sc_ntza2_109za2!== false)) >+ { >+ (BgL_sc_nbzd2nts_108zd2 = (sc_nts_101.length)); >+ (l = (sc_enders_102[BgL_sc_ntza2_109za2])); >+ (trees = null); >+ while ((l instanceof sc_Pair)) { >+ { >+ (sc_conf_107 = (l.car)); >+ if ((((state = (sc_states_106[j])), (conf_set = (state[(sc_conf_107+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) >+ { >+ (l = (l.cdr)); >+ (trees = (sc_append((deriv_trees(sc_conf_107, i, j, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106, BgL_sc_nbzd2nts_108zd2)), trees))); >+ } >+ else >+ (l = (l.cdr)); >+ } >+ } >+ return trees; >+ } >+ else >+ return false; >+ } >+ }; >+ nb_deriv_trees = function(sc_conf_110, i, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2) { >+ var sc_loop1_116; >+ var tmp1124; >+ var prev; >+ return ((prev = (sc_conf_110-(1))), ((((tmp1124 = (sc_conf_110<BgL_sc_nbzd2nts_115zd2)), ((tmp1124!== false)?tmp1124:((sc_steps_112[prev])<(0))))!== false)?(1):((sc_loop1_116 = function(l, sc_n_118) { >+ var nb_ender_trees; >+ var nb_prev_trees; >+ var conf_set; >+ var state; >+ var k; >+ var n; >+ var ender_set; >+ var sc_state_117; >+ var ender; >+ var l; >+ var sc_n_118; >+ while (true) { >+ if ((l instanceof sc_Pair)) >+ { >+ (ender = (l.car)); >+ (ender_set = ((sc_state_117 = (sc_states_114[j])), (sc_state_117[(ender+(1))]))); >+ if ((ender_set!== false)) >+ { >+ (k = (ender_set[(2)])); >+ (n = sc_n_118); >+ while ((k>=(0))) { >+ if (((k>=i)&&(((state = (sc_states_114[k])), (conf_set = (state[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))) >+ { >+ (nb_prev_trees = (nb_deriv_trees(prev, i, k, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2))); >+ (nb_ender_trees = (nb_deriv_trees(ender, k, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2))); >+ (k = (ender_set[(k+(5))])); >+ (n +=(nb_prev_trees*nb_ender_trees)); >+ } >+ else >+ (k = (ender_set[(k+(5))])); >+ } >+ return (sc_loop1_116((l.cdr), n)); >+ } >+ else >+ (l = (l.cdr)); >+ } >+ else >+ return sc_n_118; >+ } >+ }), (sc_loop1_116((sc_enders_111[(sc_steps_112[prev])]), (0)))))); >+ }; >+ BgL_sc_nbzd2derivzd2treesza2_48za2 = function(nt, i, j, sc_nts_119, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123) { >+ var conf_set; >+ var state; >+ var sc_conf_124; >+ var l; >+ var nb_trees; >+ var BgL_sc_nbzd2nts_125zd2; >+ var BgL_sc_ntza2_126za2; >+ { >+ (BgL_sc_ntza2_126za2 = (sc_ind_43(nt, sc_nts_119))); >+ if ((BgL_sc_ntza2_126za2!== false)) >+ { >+ (BgL_sc_nbzd2nts_125zd2 = (sc_nts_119.length)); >+ (l = (sc_enders_120[BgL_sc_ntza2_126za2])); >+ (nb_trees = (0)); >+ while ((l instanceof sc_Pair)) { >+ { >+ (sc_conf_124 = (l.car)); >+ if ((((state = (sc_states_123[j])), (conf_set = (state[(sc_conf_124+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) >+ { >+ (l = (l.cdr)); >+ (nb_trees = ((nb_deriv_trees(sc_conf_124, i, j, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123, BgL_sc_nbzd2nts_125zd2))+nb_trees)); >+ } >+ else >+ (l = (l.cdr)); >+ } >+ } >+ return nb_trees; >+ } >+ else >+ return false; >+ } >+ }; >+ (lexer = (parser_descr[(0)])); >+ (sc_nts_42 = (parser_descr[(1)])); >+ (sc_starters_41 = (parser_descr[(2)])); >+ (sc_enders_40 = (parser_descr[(3)])); >+ (sc_predictors_39 = (parser_descr[(4)])); >+ (sc_steps_38 = (parser_descr[(5)])); >+ (sc_names_37 = (parser_descr[(6)])); >+ (falseHead1128 = (new sc_Pair(null, null))); >+ (L1125 = (lexer(input))); >+ (tail1129 = falseHead1128); >+ while (!(L1125 === null)) { >+ { >+ (tok = (L1125.car)); >+ (l1 = (tok.cdr)); >+ (l2 = null); >+ while ((l1 instanceof sc_Pair)) { >+ { >+ (sc_i_29 = (sc_ind_43((l1.car), sc_nts_42))); >+ if ((sc_i_29!== false)) >+ { >+ (l1 = (l1.cdr)); >+ (l2 = (new sc_Pair(sc_i_29, l2))); >+ } >+ else >+ (l1 = (l1.cdr)); >+ } >+ } >+ (sc_optrOpnd_22 = (new sc_Pair((tok.car), (sc_reverse(l2))))); >+ (sc_optrOpnd_21 = (new sc_Pair(sc_optrOpnd_22, null))); >+ (tail1129.cdr = sc_optrOpnd_21); >+ (tail1129 = (tail1129.cdr)); >+ (L1125 = (L1125.cdr)); >+ } >+ } >+ (sc_optrOpnd_20 = (falseHead1128.cdr)); >+ (sc_toks_36 = (sc_list2vector(sc_optrOpnd_20))); >+ (BgL_sc_nbzd2toks_35zd2 = (sc_toks_36.length)); >+ (BgL_sc_nbzd2confs_34zd2 = (sc_steps_38.length)); >+ (sc_states_33 = (make_states(BgL_sc_nbzd2toks_35zd2, BgL_sc_nbzd2confs_34zd2))); >+ (goal_starters = (sc_starters_41[(0)])); >+ (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (0), goal_starters, (0))); >+ (forw(sc_states_33, (0), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); >+ (sc_i_28 = (0)); >+ while ((sc_i_28<BgL_sc_nbzd2toks_35zd2)) { >+ { >+ (tok_nts = ((sc_toks_36[sc_i_28]).cdr)); >+ (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (sc_i_28+(1)), tok_nts, sc_i_28)); >+ (forw(sc_states_33, (sc_i_28+(1)), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); >+ (++sc_i_28); >+ } >+ } >+ (nb_toks = (sc_toks_36.length)); >+ (BgL_sc_nbzd2confs_32zd2 = (sc_steps_38.length)); >+ (BgL_sc_nbzd2nts_31zd2 = (sc_nts_42.length)); >+ (BgL_sc_statesza2_30za2 = (make_states(nb_toks, BgL_sc_nbzd2confs_32zd2))); >+ (goal_enders = (sc_enders_40[(0)])); >+ (l = goal_enders); >+ while ((l instanceof sc_Pair)) { >+ { >+ (conf = (l.car)); >+ (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_33, BgL_sc_statesza2_30za2, nb_toks, conf, (0))); >+ (l = (l.cdr)); >+ } >+ } >+ (i = nb_toks); >+ while ((i>=(0))) { >+ { >+ (states = sc_states_33); >+ (BgL_sc_statesza2_27za2 = BgL_sc_statesza2_30za2); >+ (state_num = i); >+ (sc_enders_26 = sc_enders_40); >+ (sc_steps_25 = sc_steps_38); >+ (BgL_sc_nbzd2nts_24zd2 = BgL_sc_nbzd2nts_31zd2); >+ (toks = sc_toks_36); >+ (BgL_sc_stateza2_23za2 = (BgL_sc_statesza2_30za2[i])); >+ loop1 = function() { >+ var sc_loop1_127; >+ var prev; >+ var BgL_sc_statesza2_128za2; >+ var sc_states_129; >+ var j; >+ var i; >+ var sc_i_130; >+ var head; >+ var conf_set; >+ var sc_conf_131; >+ { >+ (sc_conf_131 = (BgL_sc_stateza2_23za2[(0)])); >+ if ((sc_conf_131>=(0))) >+ { >+ (conf_set = (BgL_sc_stateza2_23za2[(sc_conf_131+(1))])); >+ (head = (conf_set[(4)])); >+ (BgL_sc_stateza2_23za2[(0)] = (conf_set[(0)])); >+ (conf_set_merge_new_bang(conf_set)); >+ (sc_i_130 = head); >+ while ((sc_i_130>=(0))) { >+ { >+ (i = sc_i_130); >+ (j = state_num); >+ (sc_states_129 = states); >+ (BgL_sc_statesza2_128za2 = BgL_sc_statesza2_27za2); >+ (prev = (sc_conf_131-(1))); >+ if (((sc_conf_131>=BgL_sc_nbzd2nts_24zd2)&&((sc_steps_25[prev])>=(0)))) >+ { >+ sc_loop1_127 = function(l) { >+ var k; >+ var ender_set; >+ var state; >+ var ender; >+ var l; >+ while (true) { >+ if ((l instanceof sc_Pair)) >+ { >+ (ender = (l.car)); >+ (ender_set = ((state = (sc_states_129[j])), (state[(ender+(1))]))); >+ if ((ender_set!== false)) >+ { >+ (k = (ender_set[(2)])); >+ while ((k>=(0))) { >+ { >+ if ((k>=i)) >+ if (((BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, k, prev, i))!== false)) >+ (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, j, ender, k)); >+ (k = (ender_set[(k+(5))])); >+ } >+ } >+ return (sc_loop1_127((l.cdr))); >+ } >+ else >+ (l = (l.cdr)); >+ } >+ else >+ return undefined; >+ } >+ }; >+ (sc_loop1_127((sc_enders_26[(sc_steps_25[prev])]))); >+ } >+ (sc_i_130 = (conf_set[(sc_i_130+(5))])); >+ } >+ } >+ return (loop1()); >+ } >+ else >+ return undefined; >+ } >+ }; >+ (loop1()); >+ (--i); >+ } >+ } >+ (optrOpnd = BgL_sc_statesza2_30za2); >+ return [sc_nts_42, sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_names_37, sc_toks_36, optrOpnd, is_parsed, BgL_sc_derivzd2treesza2_47z70, BgL_sc_nbzd2derivzd2treesza2_48za2]; >+ } >+ }; >+ } >+ }; >+ BgL_parsezd2ze3parsedzf3zc2 = function(parse, nt, i, j) { >+ var is_parsed; >+ var states; >+ var enders; >+ var nts; >+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (states = (parse[(7)])), (is_parsed = (parse[(8)])), (is_parsed(nt, i, j, nts, enders, states))); >+ }; >+ BgL_parsezd2ze3treesz31 = function(parse, nt, i, j) { >+ var BgL_sc_derivzd2treesza2_132z70; >+ var states; >+ var toks; >+ var names; >+ var steps; >+ var enders; >+ var nts; >+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (names = (parse[(5)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_derivzd2treesza2_132z70 = (parse[(9)])), (BgL_sc_derivzd2treesza2_132z70(nt, i, j, nts, enders, steps, names, toks, states))); >+ }; >+ BgL_parsezd2ze3nbzd2treesze3 = function(parse, nt, i, j) { >+ var BgL_sc_nbzd2derivzd2treesza2_133za2; >+ var states; >+ var toks; >+ var steps; >+ var enders; >+ var nts; >+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_nbzd2derivzd2treesza2_133za2 = (parse[(10)])), (BgL_sc_nbzd2derivzd2treesza2_133za2(nt, i, j, nts, enders, steps, toks, states))); >+ }; >+ test = function(k) { >+ var x; >+ var p; >+ return ((p = (BgL_makezd2parserzd2(const_earley, function(l) { >+ var sc_x_134; >+ var tail1134; >+ var L1130; >+ var falseHead1133; >+ { >+ (falseHead1133 = (new sc_Pair(null, null))); >+ (tail1134 = falseHead1133); >+ (L1130 = l); >+ while (!(L1130 === null)) { >+ { >+ (tail1134.cdr = (new sc_Pair(((sc_x_134 = (L1130.car)), (sc_list(sc_x_134, sc_x_134))), null))); >+ (tail1134 = (tail1134.cdr)); >+ (L1130 = (L1130.cdr)); >+ } >+ } >+ return (falseHead1133.cdr); >+ } >+ }))), (x = (p((sc_vector2list((sc_makeVector(k, "\u1E9Ca"))))))), (sc_length((BgL_parsezd2ze3treesz31(x, "\u1E9Cs", (0), k))))); >+ }; >+ BgL_earleyzd2benchmarkzd2 = function() { >+ var args = null; >+ for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { >+ args = sc_cons(arguments[sc_tmp], args); >+ } >+ var k; >+ return ((k = ((args === null)?(7):(args.car))), (BgL_runzd2benchmarkzd2("earley", (1), function() { >+ return (test(k)); >+ }, function(result) { >+ return ((sc_display(result)), (sc_newline()), result == 132); >+ }))); >+ }; >+} >+ >+ >+/************* END OF GENERATED CODE *************/ >+// Invoke this function to run a benchmark. >+// The first argument is a string identifying the benchmark. >+// The second argument is the number of times to run the benchmark. >+// The third argument is a function that runs the benchmark. >+// The fourth argument is a unary function that warns if the result >+// returned by the benchmark is incorrect. >+// >+// Example: >+// RunBenchmark("new Array()", >+// 1, >+// function () { new Array(1000000); } >+// function (v) { >+// return (v instanceof Array) && (v.length == 1000000); >+// }); >+ >+SC_DEFAULT_OUT = new sc_GenericOutputPort(function(s) {}); >+SC_ERROR_OUT = SC_DEFAULT_OUT; >+ >+function RunBenchmark(name, count, run, warn) { >+ for (var n = 0; n < count; ++n) { >+ result = run(); >+ if (!warn(result)) { >+ throw new Error("Earley or Boyer did incorrect number of rewrites"); >+ } >+ } >+} >+ >+for (let i = 0; i < 500; ++i) >+ RunBenchmark(); >Index: PerformanceTests/testmem/hash-map.js >=================================================================== >--- PerformanceTests/testmem/hash-map.js (nonexistent) >+++ PerformanceTests/testmem/hash-map.js (working copy) >@@ -0,0 +1,602 @@ >+//@ runDefault >+ >+/* >+ * Licensed to the Apache Software Foundation (ASF) under one or more >+ * contributor license agreements. See the NOTICE below for additional >+ * information regarding copyright ownership. >+ * The ASF licenses this file to You under the Apache License, Version 2.0 >+ * (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * >+ * http://www.apache.org/licenses/LICENSE-2.0 >+ * >+ * Unless required by applicable law or agreed to in writing, software >+ * distributed under the License is distributed on an "AS IS" BASIS, >+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >+ * See the License for the specific language governing permissions and >+ * limitations under the License. >+ */ >+ >+/******* NOTICE ********* >+ >+Apache Harmony >+Copyright 2006, 2010 The Apache Software Foundation. >+ >+This product includes software developed at >+The Apache Software Foundation (http://www.apache.org/). >+ >+Portions of Apache Harmony were originally developed by >+Intel Corporation and are licensed to the Apache Software >+Foundation under the "Software Grant and Corporate Contribution >+License Agreement" and for which the following copyright notices >+apply >+ (C) Copyright 2005 Intel Corporation >+ (C) Copyright 2005-2006 Intel Corporation >+ (C) Copyright 2006 Intel Corporation >+ >+ >+The following copyright notice(s) were affixed to portions of the code >+with which this file is now or was at one time distributed >+and are placed here unaltered. >+ >+(C) Copyright 1997,2004 International Business Machines Corporation. >+All rights reserved. >+ >+(C) Copyright IBM Corp. 2003. >+ >+ >+This software contains code derived from UNIX V7, Copyright(C) >+Caldera International Inc. >+ >+************************/ >+ >+// This code is a manual translation of Apache Harmony's HashMap class to >+// JavaScript. >+ >+var HashMap = (function() { >+ var DEFAULT_SIZE = 16; >+ >+ function calculateCapacity(x) >+ { >+ if (x >= 1 << 30) >+ return 1 << 30; >+ if (x == 0) >+ return 16; >+ x = x - 1; >+ x |= x >> 1; >+ x |= x >> 2; >+ x |= x >> 4; >+ x |= x >> 8; >+ x |= x >> 16; >+ return x + 1; >+ } >+ >+ function computeHashCode(key) >+ { >+ switch (typeof key) { >+ case "undefined": >+ return 0; >+ case "object": >+ if (!key) >+ return 0; >+ case "function": >+ return key.hashCode(); >+ case "boolean": >+ return key | 0; >+ case "number": >+ if ((key | 0) == key) >+ return key; >+ key = "" + key; // Compute string hash of the double. It's the best we can do. >+ case "string": >+ // source: http://en.wikipedia.org/wiki/Java_hashCode()#Sample_implementations_of_the_java.lang.String_algorithm >+ var h = 0; >+ var len = key.length; >+ for (var index = 0; index < len; index++) { >+ h = (((31 * h) | 0) + key.charCodeAt(index)) | 0; >+ } >+ return h; >+ default: >+ throw new Error("Internal error: Bad JavaScript value type"); >+ } >+ } >+ >+ function equals(a, b) >+ { >+ if (typeof a != typeof b) >+ return false; >+ switch (typeof a) { >+ case "object": >+ if (!a) >+ return !b; >+ case "function": >+ switch (typeof b) { >+ case "object": >+ case "function": >+ return a.equals(b); >+ default: >+ return false; >+ } >+ default: >+ return a == b; >+ } >+ } >+ >+ function Entry(key, hash, value) >+ { >+ this._key = key; >+ this._value = value; >+ this._origKeyHash = hash; >+ this._next = null; >+ } >+ >+ Entry.prototype = { >+ clone: function() >+ { >+ var result = new Entry(this._key, this._hash, this._value); >+ if (this._next) >+ result._next = this._next.clone(); >+ return result; >+ }, >+ >+ toString: function() >+ { >+ return this._key + "=" + this._value; >+ }, >+ >+ get key() >+ { >+ return this._key; >+ }, >+ >+ get value() >+ { >+ return this._value; >+ } >+ }; >+ >+ function AbstractMapIterator(map) >+ { >+ this._associatedMap = map; >+ this._expectedModCount = map._modCount; >+ this._futureEntry = null; >+ this._currentEntry = null; >+ this._prevEntry = null; >+ this._position = 0; >+ } >+ >+ AbstractMapIterator.prototype = { >+ hasNext: function() >+ { >+ if (this._futureEntry) >+ return true; >+ while (this._position < this._associatedMap._elementData.length) { >+ if (!this._associatedMap._elementData[this._position]) >+ this._position++; >+ else >+ return true; >+ } >+ return false; >+ }, >+ >+ _checkConcurrentMod: function() >+ { >+ if (this._expectedModCount != this._associatedMap._modCount) >+ throw new Error("Concurrent HashMap modification detected"); >+ }, >+ >+ _makeNext: function() >+ { >+ this._checkConcurrentMod(); >+ if (!this.hasNext()) >+ throw new Error("No such element"); >+ if (!this._futureEntry) { >+ this._currentEntry = this._associatedMap._elementData[this._position++]; >+ this._futureEntry = this._currentEntry._next; >+ this._prevEntry = null; >+ return; >+ } >+ if (this._currentEntry) >+ this._prevEntry = this._currentEntry; >+ this._currentEntry = this._futureEntry; >+ this._futureEntry = this._futureEntry._next; >+ }, >+ >+ remove: function() >+ { >+ this._checkConcurrentMod(); >+ if (!this._currentEntry) >+ throw new Error("Illegal state"); >+ if (!this._prevEntry) { >+ var index = this._currentEntry._origKeyHash & (this._associatedMap._elementData.length - 1); >+ this._associatedMap._elementData[index] = this._associatedMap._elementData[index]._next; >+ } else >+ this._prevEntry._next = this._currentEntry._next; >+ this._currentEntry = null; >+ this._expectedModCount++; >+ this._associatedMap._modCount++; >+ this._associatedMap._elementCount--; >+ } >+ }; >+ >+ function EntryIterator(map) >+ { >+ AbstractMapIterator.call(this, map); >+ } >+ >+ EntryIterator.prototype = { >+ next: function() >+ { >+ this._makeNext(); >+ return this._currentEntry; >+ } >+ }; >+ EntryIterator.prototype.__proto__ = AbstractMapIterator.prototype; >+ >+ function KeyIterator(map) >+ { >+ AbstractMapIterator.call(this, map); >+ } >+ >+ KeyIterator.prototype = { >+ next: function() >+ { >+ this.makeNext(); >+ return this._currentEntry._key; >+ } >+ }; >+ KeyIterator.prototype.__proto__ = AbstractMapIterator.prototype; >+ >+ function ValueIterator(map) >+ { >+ AbstractMapIterator.call(this, map); >+ } >+ >+ ValueIterator.prototype = { >+ next: function() >+ { >+ this.makeNext(); >+ return this._currentEntry._value; >+ } >+ }; >+ ValueIterator.prototype.__proto__ = AbstractMapIterator.prototype; >+ >+ function EntrySet(map) >+ { >+ this._associatedMap = map; >+ } >+ >+ EntrySet.prototype = { >+ size: function() >+ { >+ return this._associatedMap._elementCount; >+ }, >+ >+ clear: function() >+ { >+ this._associatedMap.clear(); >+ }, >+ >+ remove: function(object) >+ { >+ var entry = this._associatedMap._getEntry(object.key); >+ if (!entry) >+ return false; >+ if (!equals(entry._value, object.value)) >+ return false; >+ this._associatedMap._removeEntry(entry); >+ return true; >+ }, >+ >+ contains: function(object) >+ { >+ var entry = this._associatedMap._getEntry(object.key); >+ if (!entry) >+ return false; >+ return equals(entry._value, object.value); >+ }, >+ >+ iterator: function() >+ { >+ return new EntryIterator(this._associatedMap); >+ } >+ }; >+ >+ function KeySet(map) >+ { >+ this._associatedMap = map; >+ } >+ >+ KeySet.prototype = { >+ contains: function(object) >+ { >+ return this._associatedMap.contains(object); >+ }, >+ >+ size: function() >+ { >+ return this._associatedMap._elementCount; >+ }, >+ >+ clear: function() >+ { >+ this._associatedMap.clear(); >+ }, >+ >+ remove: function(key) >+ { >+ return !!this._associatedMap.remove(key); >+ }, >+ >+ iterator: function() >+ { >+ return new KeyIterator(this._associatedMap); >+ } >+ }; >+ >+ function ValueCollection(map) >+ { >+ this._associatedMap = map; >+ } >+ >+ ValueCollection.prototype = { >+ contains: function(object) >+ { >+ return this._associatedMap.containsValue(object); >+ }, >+ >+ size: function() >+ { >+ return this._associatedMap._elementCount; >+ }, >+ >+ clear: function() >+ { >+ this._associatedMap.clear(); >+ }, >+ >+ iterator: function() >+ { >+ return new ValueIterator(this._associatedMap); >+ } >+ }; >+ >+ function HashMap(capacity, loadFactor) >+ { >+ if (capacity == null) >+ capacity = DEFAULT_SIZE; >+ if (loadFactor == null) >+ loadFactor = 0.75; >+ >+ if (capacity < 0) >+ throw new Error("Invalid argument to HashMap constructor: capacity is negative"); >+ if (loadFactor <= 0) >+ throw new Error("Invalid argument to HashMap constructor: loadFactor is not positive"); >+ >+ this._capacity = calculateCapacity(capacity); >+ this._elementCount = 0; >+ this._elementData = new Array(this.capacity); >+ this._loadFactor = loadFactor; >+ this._modCount = 0; >+ this._computeThreshold(); >+ } >+ >+ HashMap.prototype = { >+ _computeThreshold: function() >+ { >+ this._threshold = (this._elementData.length * this._loadFactor) | 0; >+ }, >+ >+ clear: function() >+ { >+ if (!this._elementCount) >+ return; >+ >+ this._elementCount = 0; >+ for (var i = this._elementData.length; i--;) >+ this._elementData[i] = null; >+ this._modCount++; >+ }, >+ >+ clone: function() >+ { >+ var result = new HashMap(this._elementData.length, this._loadFactor); >+ result.putAll(this); >+ return result; >+ }, >+ >+ containsKey: function(key) >+ { >+ return !!this._getEntry(key); >+ }, >+ >+ containsValue: function(value) >+ { >+ for (var i = this._elementData.length; i--;) { >+ for (var entry = this._elementData[i]; entry; entry = entry._next) { >+ if (equals(value, entry._value)) >+ return true; >+ } >+ } >+ return false; >+ }, >+ >+ entrySet: function() >+ { >+ return new EntrySet(this); >+ }, >+ >+ get: function(key) >+ { >+ var entry = this._getEntry(key); >+ if (entry) >+ return entry._value; >+ return null; >+ }, >+ >+ _getEntry: function(key) >+ { >+ var hash = computeHashCode(key); >+ var index = hash & (this._elementData.length - 1); >+ return this._findKeyEntry(key, index, hash); >+ }, >+ >+ _findKeyEntry: function(key, index, keyHash) >+ { >+ var entry = this._elementData[index]; >+ while (entry && (entry._origKeyHash != keyHash || !equals(key, entry._key))) >+ entry = entry._next; >+ return entry; >+ }, >+ >+ isEmpty: function() >+ { >+ return !this._elementCount; >+ }, >+ >+ keySet: function() >+ { >+ return new KeySet(this); >+ }, >+ >+ put: function(key, value) >+ { >+ var hash = computeHashCode(key); >+ var index = hash & (this._elementData.length - 1); >+ var entry = this._findKeyEntry(key, index, hash); >+ if (!entry) { >+ this._modCount++; >+ entry = this._createHashedEntry(key, index, hash); >+ if (++this._elementCount > this._threshold) >+ this._rehash(); >+ } >+ >+ var result = entry._value; >+ entry._value = value; >+ return result; >+ }, >+ >+ _createHashedEntry: function(key, index, hash) >+ { >+ var entry = new Entry(key, hash, null); >+ entry._next = this._elementData[index]; >+ this._elementData[index] = entry; >+ return entry; >+ }, >+ >+ putAll: function(map) >+ { >+ if (map.isEmpty()) >+ return; >+ for (var iter = map.entrySet().iterator(); iter.hasNext();) { >+ var entry = iter.next(); >+ put(entry.key, entry.value); >+ } >+ }, >+ >+ _rehash: function(capacity) >+ { >+ if (capacity == null) >+ capacity = this._elementData.length; >+ >+ var length = calculateCapacity(!capacity ? 1 : capacity << 1); >+ var newData = new Array(length); >+ for (var i = 0; i < this._elementData.length; ++i) { >+ var entry = this._elementData[i]; >+ this._elementData[i] = null; >+ while (entry) { >+ var index = entry._origKeyHash & (length - 1); >+ var next = entry._next; >+ entry._next = newData[index]; >+ newData[index] = entry; >+ entry = next; >+ } >+ } >+ this._elementData = newData; >+ this._computeThreshold(); >+ }, >+ >+ remove: function(key) >+ { >+ var entry = this._removeEntryForKey(key); >+ if (!entry) >+ return null; >+ return entry._value; >+ }, >+ >+ _removeEntry: function(entry) >+ { >+ var index = entry._origKeyHash & (this._elementData.length - 1); >+ var current = this._elementData[index]; >+ if (current == entry) >+ this._elementData[index] = entry._next; >+ else { >+ while (current._next != entry) >+ current = current._next; >+ current._next = entry._next; >+ } >+ this._modCount++; >+ this._elementCount--; >+ }, >+ >+ _removeEntryForKey: function(key) >+ { >+ var hash = computeHashCode(key); >+ var index = hash & (this._elementData.length - 1); >+ var entry = this._elementData[index]; >+ var last = null; >+ while (entry != null && !(entry._origKeyHash == hash && equals(key, entry._key))) { >+ last = entry; >+ entry = entry._next; >+ } >+ if (!entry) >+ return null; >+ if (!last) >+ this._elementData[index] = entry._next; >+ else >+ last._next = entry._next; >+ this._modCount++; >+ this._elementCount--; >+ return entry; >+ }, >+ >+ size: function() >+ { >+ return this._elementCount; >+ }, >+ >+ values: function() >+ { >+ return new ValueCollection(this); >+ } >+ }; >+ >+ return HashMap; >+})(); >+ >+var map = new HashMap(); >+var COUNT = 200000; >+ >+for (var i = 0; i < COUNT; ++i) >+ map.put(i, 42); >+ >+var result = 0; >+for (var j = 0; j < 5; ++j) { >+ for (var i = 0; i < COUNT; ++i) >+ result += map.get(i); >+} >+ >+var keySum = 0; >+var valueSum = 0; >+for (var iterator = map.entrySet().iterator(); iterator.hasNext();) { >+ var entry = iterator.next(); >+ keySum += entry.key; >+ valueSum += entry.value; >+} >+ >+ >+if (result != 5 * COUNT * 42) >+ throw "Error: result = " + result; >+if (keySum != COUNT*((COUNT+1)/2 - 1)) >+ throw "Error: keySum = " + keySum + " " + ((COUNT*(COUNT+1)/2)); >+if (valueSum != COUNT*42) >+ throw "Error: valueSum = " + valueSum; >Index: PerformanceTests/testmem/regex-dna.js >=================================================================== >--- PerformanceTests/testmem/regex-dna.js (nonexistent) >+++ PerformanceTests/testmem/regex-dna.js (working copy) >@@ -0,0 +1,1721 @@ >+// The Computer Language Shootout >+// http://shootout.alioth.debian.org/ >+// >+// contributed by Jesse Millikan >+// Base on the Ruby version by jose fco. gonzalez >+ >+var l; >+var dnaInput = ">ONE Homo sapiens alu\n\ >+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA\n\ >+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT\n\ >+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG\n\ >+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG\n\ >+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT\n\ >+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA\n\ >+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA\n\ >+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG\n\ >+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA\n\ >+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT\n\ >+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC\n\ >+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG\n\ >+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC\n\ >+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG\n\ >+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT\n\ >+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA\n\ >+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT\n\ >+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG\n\ >+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT\n\ >+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG\n\ >+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG\n\ >+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA\n\ >+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG\n\ >+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG\n\ >+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC\n\ >+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA\n\ >+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA\n\ >+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT\n\ >+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC\n\ >+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT\n\ >+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC\n\ >+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG\n\ >+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG\n\ >+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC\n\ >+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT\n\ >+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC\n\ >+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA\n\ >+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA\n\ >+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA\n\ >+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG\n\ >+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT\n\ >+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA\n\ >+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA\n\ >+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC\n\ >+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT\n\ >+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG\n\ >+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC\n\ >+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC\n\ >+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG\n\ >+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA\n\ >+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG\n\ >+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT\n\ >+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC\n\ >+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG\n\ >+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC\n\ >+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA\n\ >+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA\n\ >+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA\n\ >+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA\n\ >+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG\n\ >+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG\n\ >+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC\n\ >+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG\n\ >+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC\n\ >+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG\n\ >+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG\n\ >+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG\n\ >+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC\n\ >+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA\n\ >+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC\n\ >+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC\n\ >+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG\n\ >+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG\n\ >+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT\n\ >+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA\n\ >+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC\n\ >+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA\n\ >+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG\n\ >+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT\n\ >+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG\n\ >+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG\n\ >+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG\n\ >+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG\n\ >+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT\n\ >+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT\n\ >+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT\n\ >+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG\n\ >+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC\n\ >+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT\n\ >+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG\n\ >+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG\n\ >+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG\n\ >+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA\n\ >+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG\n\ >+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC\n\ >+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC\n\ >+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC\n\ >+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG\n\ >+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT\n\ >+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG\n\ >+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA\n\ >+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG\n\ >+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC\n\ >+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG\n\ >+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA\n\ >+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG\n\ >+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA\n\ >+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC\n\ >+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT\n\ >+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA\n\ >+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG\n\ >+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC\n\ >+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA\n\ >+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC\n\ >+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG\n\ >+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC\n\ >+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA\n\ >+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA\n\ >+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC\n\ >+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG\n\ >+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC\n\ >+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT\n\ >+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC\n\ >+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA\n\ >+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT\n\ >+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC\n\ >+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC\n\ >+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG\n\ >+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG\n\ >+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG\n\ >+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC\n\ >+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT\n\ >+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC\n\ >+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC\n\ >+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC\n\ >+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA\n\ >+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG\n\ >+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC\n\ >+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT\n\ >+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG\n\ >+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG\n\ >+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC\n\ >+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT\n\ >+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC\n\ >+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC\n\ >+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG\n\ >+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG\n\ >+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG\n\ >+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG\n\ >+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT\n\ >+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA\n\ >+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC\n\ >+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA\n\ >+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG\n\ >+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC\n\ >+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG\n\ >+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT\n\ >+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG\n\ >+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG\n\ >+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA\n\ >+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA\n\ >+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC\n\ >+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC\n\ >+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA\n\ >+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG\n\ >+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG\n\ >+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG\n\ >+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC\n\ >+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC\n\ >+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC\n\ >+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG\n\ >+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT\n\ >+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC\n\ >+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC\n\ >+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA\n\ >+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA\n\ >+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG\n\ >+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT\n\ >+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA\n\ >+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG\n\ >+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC\n\ >+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG\n\ >+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG\n\ >+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT\n\ >+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA\n\ >+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG\n\ >+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA\n\ >+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA\n\ >+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG\n\ >+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC\n\ >+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA\n\ >+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT\n\ >+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT\n\ >+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG\n\ >+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT\n\ >+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC\n\ >+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC\n\ >+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT\n\ >+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC\n\ >+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA\n\ >+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG\n\ >+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT\n\ >+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT\n\ >+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG\n\ >+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG\n\ >+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA\n\ >+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT\n\ >+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC\n\ >+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC\n\ >+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG\n\ >+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC\n\ >+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG\n\ >+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG\n\ >+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG\n\ >+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG\n\ >+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG\n\ >+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA\n\ >+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC\n\ >+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG\n\ >+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA\n\ >+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG\n\ >+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA\n\ >+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG\n\ >+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG\n\ >+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG\n\ >+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT\n\ >+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA\n\ >+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG\n\ >+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC\n\ >+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT\n\ >+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA\n\ >+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG\n\ >+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA\n\ >+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC\n\ >+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC\n\ >+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA\n\ >+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC\n\ >+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA\n\ >+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC\n\ >+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA\n\ >+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC\n\ >+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC\n\ >+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC\n\ >+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC\n\ >+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA\n\ >+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA\n\ >+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT\n\ >+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA\n\ >+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC\n\ >+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA\n\ >+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA\n\ >+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT\n\ >+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC\n\ >+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT\n\ >+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC\n\ >+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG\n\ >+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG\n\ >+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC\n\ >+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG\n\ >+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG\n\ >+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA\n\ >+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG\n\ >+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC\n\ >+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG\n\ >+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT\n\ >+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC\n\ >+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA\n\ >+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC\n\ >+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA\n\ >+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC\n\ >+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC\n\ >+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA\n\ >+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG\n\ >+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG\n\ >+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG\n\ >+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT\n\ >+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC\n\ >+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG\n\ >+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC\n\ >+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG\n\ >+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC\n\ >+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC\n\ >+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC\n\ >+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA\n\ >+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC\n\ >+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG\n\ >+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA\n\ >+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA\n\ >+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT\n\ >+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG\n\ >+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG\n\ >+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT\n\ >+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA\n\ >+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA\n\ >+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG\n\ >+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA\n\ >+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT\n\ >+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC\n\ >+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG\n\ >+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC\n\ >+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG\n\ >+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT\n\ >+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA\n\ >+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT\n\ >+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG\n\ >+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT\n\ >+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG\n\ >+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG\n\ >+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA\n\ >+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG\n\ >+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG\n\ >+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC\n\ >+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA\n\ >+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA\n\ >+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT\n\ >+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC\n\ >+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT\n\ >+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC\n\ >+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG\n\ >+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG\n\ >+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC\n\ >+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT\n\ >+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC\n\ >+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA\n\ >+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA\n\ >+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA\n\ >+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG\n\ >+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT\n\ >+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA\n\ >+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA\n\ >+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC\n\ >+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT\n\ >+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG\n\ >+GAGGCTGAGGCAGGAGAATC\n\ >+>TWO IUB ambiguity codes\n\ >+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg\n\ >+tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa\n\ >+NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt\n\ >+cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga\n\ >+gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa\n\ >+HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca\n\ >+tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt\n\ >+tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt\n\ >+acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct\n\ >+tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt\n\ >+gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa\n\ >+accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt\n\ >+RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt\n\ >+tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag\n\ >+cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg\n\ >+ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat\n\ >+actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg\n\ >+YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa\n\ >+KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata\n\ >+aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa\n\ >+aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg\n\ >+gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc\n\ >+tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK\n\ >+tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt\n\ >+ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg\n\ >+ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa\n\ >+BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt\n\ >+aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc\n\ >+tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc\n\ >+cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac\n\ >+aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga\n\ >+tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga\n\ >+aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD\n\ >+gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg\n\ >+ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV\n\ >+taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa\n\ >+ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat\n\ >+gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg\n\ >+gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa\n\ >+tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt\n\ >+tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt\n\ >+taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca\n\ >+cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag\n\ >+aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt\n\ >+cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt\n\ >+ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW\n\ >+attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag\n\ >+ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa\n\ >+attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc\n\ >+tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta\n\ >+aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata\n\ >+cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc\n\ >+gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg\n\ >+attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca\n\ >+BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga\n\ >+DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat\n\ >+tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM\n\ >+tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR\n\ >+tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg\n\ >+taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc\n\ >+aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc\n\ >+DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa\n\ >+VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt\n\ >+agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat\n\ >+gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt\n\ >+tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt\n\ >+catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt\n\ >+tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR\n\ >+aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat\n\ >+aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac\n\ >+acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS\n\ >+tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga\n\ >+aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM\n\ >+acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt\n\ >+RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt\n\ >+RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta\n\ >+tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac\n\ >+gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt\n\ >+YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc\n\ >+ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt\n\ >+ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat\n\ >+gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta\n\ >+KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD\n\ >+aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg\n\ >+gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH\n\ >+taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact\n\ >+VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV\n\ >+NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa\n\ >+MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag\n\ >+cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata\n\ >+ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg\n\ >+tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN\n\ >+aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc\n\ >+actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg\n\ >+tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga\n\ >+gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa\n\ >+BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca\n\ >+aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata\n\ >+aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat\n\ >+YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt\n\ >+aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW\n\ >+cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata\n\ >+tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata\n\ >+tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt\n\ >+MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac\n\ >+taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta\n\ >+tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS\n\ >+RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc\n\ >+agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata\n\ >+NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa\n\ >+gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata\n\ >+aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt\n\ >+ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW\n\ >+cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt\n\ >+tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa\n\ >+RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt\n\ >+tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD\n\ >+gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc\n\ >+tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta\n\ >+ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM\n\ >+tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc\n\ >+ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc\n\ >+BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt\n\ >+gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga\n\ >+acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag\n\ >+gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc\n\ >+taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat\n\ >+acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta\n\ >+tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt\n\ >+catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa\n\ >+tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB\n\ >+atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR\n\ >+ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta\n\ >+ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta\n\ >+cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK\n\ >+SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW\n\ >+VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc\n\ >+BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct\n\ >+NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt\n\ >+tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa\n\ >+ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa\n\ >+cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa\n\ >+VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR\n\ >+atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac\n\ >+aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc\n\ >+tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac\n\ >+RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag\n\ >+gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc\n\ >+tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact\n\ >+attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc\n\ >+atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga\n\ >+cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt\n\ >+NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR\n\ >+ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat\n\ >+cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg\n\ >+aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac\n\ >+agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR\n\ >+tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga\n\ >+ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg\n\ >+ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa\n\ >+tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag\n\ >+taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg\n\ >+tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN\n\ >+YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt\n\ >+ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa\n\ >+tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat\n\ >+ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg\n\ >+attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt\n\ >+atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW\n\ >+YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta\n\ >+gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV\n\ >+MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta\n\ >+tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt\n\ >+ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa\n\ >+aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa\n\ >+BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM\n\ >+tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK\n\ >+StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV\n\ >+cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN\n\ >+atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg\n\ >+atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg\n\ >+ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct\n\ >+gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM\n\ >+tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD\n\ >+BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc\n\ >+agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga\n\ >+HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR\n\ >+tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt\n\ >+aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa\n\ >+catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB\n\ >+aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat\n\ >+tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt\n\ >+cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag\n\ >+DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat\n\ >+gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta\n\ >+tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM\n\ >+atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc\n\ >+KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt\n\ >+tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata\n\ >+tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK\n\ >+taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt\n\ >+NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa\n\ >+HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa\n\ >+ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg\n\ >+tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK\n\ >+cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga\n\ >+ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca\n\ >+HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg\n\ >+gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS\n\ >+BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg\n\ >+gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat\n\ >+KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact\n\ >+cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat\n\ >+tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD\n\ >+taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM\n\ >+gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt\n\ >+aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat\n\ >+acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta\n\ >+RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc\n\ >+attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac\n\ >+KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS\n\ >+KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD\n\ >+gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB\n\ >+aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct\n\ >+aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga\n\ >+ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY\n\ >+tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga\n\ >+aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta\n\ >+tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY\n\ >+MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc\n\ >+cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta\n\ >+caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt\n\ >+ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc\n\ >+acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat\n\ >+tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc\n\ >+gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa\n\ >+atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga\n\ >+aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat\n\ >+NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt\n\ >+taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa\n\ >+aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat\n\ >+ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca\n\ >+DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata\n\ >+tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat\n\ >+aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa\n\ >+ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM\n\ >+ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca\n\ >+RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa\n\ >+aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac\n\ >+aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt\n\ >+aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK\n\ >+tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat\n\ >+atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR\n\ >+BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc\n\ >+gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct\n\ >+cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN\n\ >+RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat\n\ >+taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt\n\ >+aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt\n\ >+gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct\n\ >+gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa\n\ >+aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta\n\ >+gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg\n\ >+ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat\n\ >+MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct\n\ >+SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY\n\ >+aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt\n\ >+VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat\n\ >+HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc\n\ >+agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt\n\ >+gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg\n\ >+agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg\n\ >+tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag\n\ >+gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga\n\ >+VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg\n\ >+tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV\n\ >+MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt\n\ >+actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa\n\ >+WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa\n\ >+tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD\n\ >+KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct\n\ >+BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac\n\ >+attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB\n\ >+VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD\n\ >+aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca\n\ >+tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat\n\ >+tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK\n\ >+tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt\n\ >+VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta\n\ >+tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat\n\ >+ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa\n\ >+tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg\n\ >+WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta\n\ >+tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc\n\ >+tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct\n\ >+MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat\n\ >+tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac\n\ >+atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg\n\ >+aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt\n\ >+aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa\n\ >+aatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtaga\n\ >+YctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVtt\n\ >+WtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBt\n\ >+ttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatg\n\ >+aDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtc\n\ >+ctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttD\n\ >+gaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtat\n\ >+NgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtD\n\ >+atttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKM\n\ >+tHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttattt\n\ >+aacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNa\n\ >+gtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttat\n\ >+gtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaag\n\ >+tYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaa\n\ >+aRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMaccc\n\ >+ttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRta\n\ >+tStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatN\n\ >+catacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgtt\n\ >+cttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatc\n\ >+aYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRag\n\ >+NtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacR\n\ >+ctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSgg\n\ >+RaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatH\n\ >+SaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVM\n\ >+RSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagc\n\ >+agaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcW\n\ >+gKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaacttt\n\ >+MctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattW\n\ >+aHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaN\n\ >+cttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgta\n\ >+ctgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHg\n\ >+accaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagat\n\ >+tgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtc\n\ >+acaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcat\n\ >+SVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaa\n\ >+tgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattg\n\ >+gatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtctt\n\ >+attDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNcc\n\ >+DtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDc\n\ >+aDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtac\n\ >+tggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttc\n\ >+ttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaR\n\ >+ctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMR\n\ >+tgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYa\n\ >+tagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttc\n\ >+attaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHta\n\ >+aggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgt\n\ >+cttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcag\n\ >+aMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttc\n\ >+VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa\n\ >+catYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctg\n\ >+taggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatatttta\n\ >+cVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBa\n\ >+DtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDga\n\ >+tgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctM\n\ >+acaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMta\n\ >+tgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStct\n\ >+YSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSc\n\ >+cKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtD\n\ >+actaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacV\n\ >+KgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVct\n\ >+WgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtc\n\ >+ScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRca\n\ >+aatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRtt\n\ >+aaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKtt\n\ >+agDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatM\n\ >+NYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccc\n\ >+taDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttat\n\ >+RtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNg\n\ >+aNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWH\n\ >+tWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagc\n\ >+aSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacM\n\ >+tRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgta\n\ >+aattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRV\n\ >+tccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHa\n\ >+DaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaata\n\ >+YaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagc\n\ >+tNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStga\n\ >+ccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccacta\n\ >+cgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtag\n\ >+atcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaat\n\ >+cttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBB\n\ >+aKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHac\n\ >+acRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaa\n\ >+tagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaa\n\ >+ccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYa\n\ >+gacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgat\n\ >+ttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcg\n\ >+aWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcat\n\ >+cagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaat\n\ >+MctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHg\n\ >+atctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDat\n\ >+taggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcg\n\ >+taDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVga\n\ >+ttaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgB\n\ >+cgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtata\n\ >+BaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBat\n\ >+tgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKt\n\ >+gBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacag\n\ >+gatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMa\n\ >+ataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBca\n\ >+aaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtt\n\ >+taaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDta\n\ >+atatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVt\n\ >+atattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSat\n\ >+aggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYta\n\ >+cYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttt\n\ >+tgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYc\n\ >+aHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNt\n\ >+acKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgt\n\ >+gatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKD\n\ >+gcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaa\n\ >+gMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgc\n\ >+MaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHa\n\ >+cMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagc\n\ >+agttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgt\n\ >+taaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRa\n\ >+ttttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaSc\n\ >+aatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRtttta\n\ >+VaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaa\n\ >+ccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatga\n\ >+tagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNa\n\ >+tcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggt\n\ >+gaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagat\n\ >+tYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcH\n\ >+DtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHa\n\ >+acttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWV\n\ >+aagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttg\n\ >+gataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcaca\n\ >+agagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMa\n\ >+aataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcB\n\ >+gttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaa\n\ >+ttgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMS\n\ >+gggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaR\n\ >+SataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttM\n\ >+tattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYt\n\ >+aNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRH\n\ >+MaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttc\n\ >+aggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaa\n\ >+ggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKt\n\ >+aNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYtt\n\ >+YaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHta\n\ >+aaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRY\n\ >+aMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBtt\n\ >+ctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaa\n\ >+atVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaa\n\ >+cVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMt\n\ >+attattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatY\n\ >+BtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatcc\n\ >+aagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataa\n\ >+agtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtact\n\ >+BtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVta\n\ >+agaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNtt\n\ >+KgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaM\n\ >+attaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattat\n\ >+BRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggat\n\ >+StattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWW\n\ >+atMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDa\n\ >+HggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggttt\n\ >+gHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWK\n\ >+gaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMactta\n\ >+caaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtg\n\ >+gattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMag\n\ >+aggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtca\n\ >+aKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcV\n\ >+HtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcS\n\ >+gRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaact\n\ >+ttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBcca\n\ >+taatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgta\n\ >+atatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacaca\n\ >+gtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagc\n\ >+YRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaa\n\ >+aacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatgg\n\ >+tDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStcta\n\ >+tttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtN\n\ >+HaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHttt\n\ >+gaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVt\n\ >+SttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcg\n\ >+HattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRac\n\ >+tctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNataca\n\ >+tttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWat\n\ >+caatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttN\n\ >+atWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNc\n\ >+ttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataM\n\ >+aaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaa\n\ >+acaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtc\n\ >+aagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNat\n\ >+ttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVg\n\ >+tVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaacca\n\ >+actMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagag\n\ >+cSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBc\n\ >+ttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaat\n\ >+tHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgH\n\ >+tgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataata\n\ >+YtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaD\n\ >+ggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcata\n\ >+aatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatg\n\ >+DtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaM\n\ >+tatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaa\n\ >+ctttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtSt\n\ >+>THREE Homo sapiens frequency\n\ >+agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct\n\ >+cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt\n\ >+tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat\n\ >+tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc\n\ >+gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc\n\ >+tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg\n\ >+tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat\n\ >+atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag\n\ >+cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa\n\ >+ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt\n\ >+ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat\n\ >+atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc\n\ >+gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact\n\ >+tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag\n\ >+gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg\n\ >+atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag\n\ >+tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac\n\ >+ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag\n\ >+tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta\n\ >+aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt\n\ >+gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa\n\ >+ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc\n\ >+agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt\n\ >+agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat\n\ >+acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc\n\ >+cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct\n\ >+cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct\n\ >+cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa\n\ >+aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt\n\ >+tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt\n\ >+atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct\n\ >+cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga\n\ >+tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat\n\ >+catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc\n\ >+tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg\n\ >+caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc\n\ >+tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc\n\ >+aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag\n\ >+aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat\n\ >+ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac\n\ >+gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag\n\ >+ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt\n\ >+cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta\n\ >+gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca\n\ >+ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt\n\ >+cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg\n\ >+taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg\n\ >+gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc\n\ >+taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt\n\ >+ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt\n\ >+aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt\n\ >+gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta\n\ >+acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct\n\ >+ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta\n\ >+tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt\n\ >+tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg\n\ >+tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa\n\ >+ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac\n\ >+aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga\n\ >+tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca\n\ >+gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt\n\ >+gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc\n\ >+cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg\n\ >+actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa\n\ >+tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg\n\ >+ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt\n\ >+ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta\n\ >+agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc\n\ >+gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa\n\ >+tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt\n\ >+atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca\n\ >+cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa\n\ >+tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca\n\ >+gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg\n\ >+gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat\n\ >+aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg\n\ >+gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat\n\ >+cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa\n\ >+taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg\n\ >+tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt\n\ >+ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac\n\ >+aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc\n\ >+gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag\n\ >+aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc\n\ >+tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa\n\ >+tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata\n\ >+aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta\n\ >+ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc\n\ >+ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc\n\ >+caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct\n\ >+gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg\n\ >+cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc\n\ >+ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta\n\ >+tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg\n\ >+atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc\n\ >+ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc\n\ >+acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc\n\ >+taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga\n\ >+ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga\n\ >+aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat\n\ >+cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc\n\ >+tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact\n\ >+gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa\n\ >+aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag\n\ >+cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc\n\ >+cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa\n\ >+gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg\n\ >+cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg\n\ >+gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca\n\ >+agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac\n\ >+aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt\n\ >+aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg\n\ >+cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt\n\ >+agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg\n\ >+cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa\n\ >+agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga\n\ >+gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta\n\ >+aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata\n\ >+agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc\n\ >+cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc\n\ >+agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca\n\ >+ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga\n\ >+tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag\n\ >+gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat\n\ >+gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt\n\ >+ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg\n\ >+gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc\n\ >+atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc\n\ >+tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata\n\ >+ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg\n\ >+tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag\n\ >+cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg\n\ >+ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat\n\ >+aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg\n\ >+gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat\n\ >+ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag\n\ >+atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac\n\ >+aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct\n\ >+gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga\n\ >+atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt\n\ >+aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt\n\ >+tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg\n\ >+ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta\n\ >+gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac\n\ >+cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct\n\ >+ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga\n\ >+ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg\n\ >+ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat\n\ >+cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga\n\ >+tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt\n\ >+tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc\n\ >+cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt\n\ >+gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct\n\ >+ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt\n\ >+ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa\n\ >+tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc\n\ >+agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta\n\ >+ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc\n\ >+cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct\n\ >+agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc\n\ >+tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc\n\ >+gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga\n\ >+ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa\n\ >+ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca\n\ >+agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata\n\ >+attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact\n\ >+ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat\n\ >+agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat\n\ >+aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata\n\ >+gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta\n\ >+gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg\n\ >+ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac\n\ >+gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata\n\ >+ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat\n\ >+taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta\n\ >+aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata\n\ >+tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata\n\ >+ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga\n\ >+agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt\n\ >+ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt\n\ >+agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg\n\ >+gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa\n\ >+tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg\n\ >+gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct\n\ >+cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc\n\ >+ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta\n\ >+cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt\n\ >+gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc\n\ >+gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc\n\ >+tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt\n\ >+cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca\n\ >+aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac\n\ >+ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac\n\ >+gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag\n\ >+aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga\n\ >+gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct\n\ >+aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta\n\ >+gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat\n\ >+agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat\n\ >+caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta\n\ >+gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta\n\ >+aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt\n\ >+tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt\n\ >+tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc\n\ >+ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg\n\ >+ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg\n\ >+gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa\n\ >+ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa\n\ >+aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa\n\ >+tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat\n\ >+acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac\n\ >+atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga\n\ >+gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac\n\ >+tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc\n\ >+cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa\n\ >+gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg\n\ >+acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga\n\ >+acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga\n\ >+attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg\n\ >+tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt\n\ >+cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag\n\ >+aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac\n\ >+ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac\n\ >+tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat\n\ >+gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga\n\ >+gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc\n\ >+acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta\n\ >+gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac\n\ >+gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc\n\ >+ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt\n\ >+taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg\n\ >+agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa\n\ >+gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag\n\ >+ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc\n\ >+accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag\n\ >+tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact\n\ >+taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga\n\ >+catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat\n\ >+tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga\n\ >+ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg\n\ >+aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa\n\ >+atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa\n\ >+tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt\n\ >+ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact\n\ >+tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt\n\ >+aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat\n\ >+agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc\n\ >+acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc\n\ >+aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct\n\ >+ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat\n\ >+gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat\n\ >+taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata\n\ >+taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga\n\ >+tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat\n\ >+gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg\n\ >+ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa\n\ >+atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat\n\ >+tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat\n\ >+cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt\n\ >+aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac\n\ >+taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag\n\ >+caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata\n\ >+ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct\n\ >+tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac\n\ >+tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg\n\ >+gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta\n\ >+gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat\n\ >+gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg\n\ >+ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa\n\ >+tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa\n\ >+taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac\n\ >+gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt\n\ >+ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga\n\ >+gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca\n\ >+tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc\n\ >+ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt\n\ >+tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc\n\ >+cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat\n\ >+ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg\n\ >+caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg\n\ >+cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat\n\ >+gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat\n\ >+cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg\n\ >+taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat\n\ >+tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata\n\ >+taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc\n\ >+tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac\n\ >+tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt\n\ >+tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt\n\ >+ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt\n\ >+aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg\n\ >+atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga\n\ >+actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta\n\ >+gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga\n\ >+ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga\n\ >+gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct\n\ >+tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc\n\ >+aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta\n\ >+atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt\n\ >+catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc\n\ >+taaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagag\n\ >+ctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagc\n\ >+cagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcacca\n\ >+agggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctga\n\ >+atccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccg\n\ >+tataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacatt\n\ >+gttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaa\n\ >+attacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataat\n\ >+tcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaacca\n\ >+tctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttccta\n\ >+gaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacag\n\ >+attctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaa\n\ >+aatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatct\n\ >+ggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaaca\n\ >+taggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggata\n\ >+atcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtcc\n\ >+aaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttagg\n\ >+agactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgttttt\n\ >+gtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacg\n\ >+tgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtt\n\ >+taccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttc\n\ >+cttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttct\n\ >+aacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggct\n\ >+ttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaag\n\ >+gttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgagg\n\ >+tagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttg\n\ >+ctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacg\n\ >+cagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgatta\n\ >+aagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactga\n\ >+cttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctc\n\ >+ccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacg\n\ >+tacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacg\n\ >+ttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaat\n\ >+atcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtt\n\ >+tatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcg\n\ >+ttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactc\n\ >+acgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggt\n\ >+ccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacg\n\ >+aaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagc\n\ >+gtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaac\n\ >+ctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggca\n\ >+tgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcacc\n\ >+gtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaat\n\ >+taattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattg\n\ >+aacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttca\n\ >+tgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaa\n\ >+gttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaat\n\ >+ttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcg\n\ >+tgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaac\n\ >+tccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagt\n\ >+tctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagt\n\ >+ttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttcca\n\ >+gagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagag\n\ >+ccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcatt\n\ >+gtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagt\n\ >+tagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttcta\n\ >+caaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcag\n\ >+tatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaa\n\ >+gacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgc\n\ >+tcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactaga\n\ >+cgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgc\n\ >+gctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccg\n\ >+tctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcag\n\ >+caaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaa\n\ >+agattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagcc\n\ >+atgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaat\n\ >+ttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaa\n\ >+atcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaaga\n\ >+tacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatg\n\ >+tggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctg\n\ >+ccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctg\n\ >+agtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtc\n\ >+acacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagtt\n\ >+cttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatat\n\ >+taacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggtt\n\ >+acaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaactt\n\ >+ggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgt\n\ >+ttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgata\n\ >+cgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattat\n\ >+ccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaac\n\ >+cttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataa\n\ >+attgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaacccc\n\ >+gcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccata\n\ >+ctggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgt\n\ >+aagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgtt\n\ >+acctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgc\n\ >+tttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaac\n\ >+tgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtact\n\ >+agtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagc\n\ >+ttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctt\n\ >+tattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaat\n\ >+ttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagc\n\ >+aattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtct\n\ >+cgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtg\n\ >+tactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgt\n\ >+tggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaat\n\ >+accgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaagga\n\ >+agaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattc\n\ >+aaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgag\n\ >+gctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgc\n\ >+aattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcag\n\ >+ttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaa\n\ >+cctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattc\n\ >+ctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctg\n\ >+tgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacaca\n\ >+tctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaata\n\ >+aggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatac\n\ >+gcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgc\n\ >+cggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtat\n\ >+aggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatatttt\n\ >+gataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaa\n\ >+gtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgc\n\ >+tgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcata\n\ >+tcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagt\n\ >+accctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacac\n\ >+atttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgc\n\ >+tgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaa\n\ >+atgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtc\n\ >+gtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatga\n\ >+ataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaacctta\n\ >+tgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttga\n\ >+gactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtt\n\ >+tatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtata\n\ >+gaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcg\n\ >+ttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggac\n\ >+agcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggt\n\ >+aacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacact\n\ >+tcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacg\n\ >+tatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacagga\n\ >+tagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcaca\n\ >+aactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatg\n\ >+aattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatg\n\ >+aagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgt\n\ >+ttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagcca\n\ >+gtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttag\n\ >+tcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatc\n\ >+atggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccat\n\ >+gtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagc\n\ >+tttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaact\n\ >+gtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgta\n\ >+atgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccatt\n\ >+gaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacatta\n\ >+ttttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgccta\n\ >+tagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagc\n\ >+gtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatga\n\ >+aaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggta\n\ >+acggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatcc\n\ >+acaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatact\n\ >+accatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcatt\n\ >+atatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtac\n\ >+aagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaa\n\ >+gtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaa\n\ >+aatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaa\n\ >+caatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggag\n\ >+cgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtcc\n\ >+ttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagag\n\ >+aaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcag\n\ >+tacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttc\n\ >+agacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattat\n\ >+caaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgcc\n\ >+gaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataaca\n\ >+gctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgt\n\ >+acttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatcta\n\ >+ttggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttat\n\ >+gcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatg\n\ >+cgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccac\n\ >+ctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccata\n\ >+actttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatca\n\ >+tataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcagg\n\ >+catatggccattatatatggccccagagcagaatgctacagcagacaaaatttggattta\n\ >+tgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaag\n\ >+tgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacg\n\ >+tcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaata\n\ >+cttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttg\n\ >+cagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagac\n\ >+tgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttg\n\ >+aagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtgg\n\ >+cactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaacctt\n\ >+caactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaa\n\ >+ctaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatgga\n\ >+tttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaatttta\n\ >+attacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgc\n\ >+tccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggt\n\ >+gttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaa\n\ >+cccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccac\n\ >+aactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcattta\n\ >+ttttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaa\n\ >+aagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtga\n\ >+gtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttctta\n\ >+gagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggaggg\n\ >+cagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgag\n\ >+gttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtact\n\ >+tcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtctta\n\ >+aacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattat\n\ >+atacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattc\n\ >+ctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagcca\n\ >+aatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgta\n\ >+aactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaact\n\ >+cccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaa\n\ >+gcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaacttt\n\ >+ccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttat\n\ >+tacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatattt\n\ >+gtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccag\n\ >+atttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctat\n\ >+ttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttc\n\ >+acagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagacca\n\ >+cacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctg\n\ >+atccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaatagg\n\ >+tttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgaga\n\ >+atgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtcta\n\ >+ttgattacccttttactattcgacttagagataggagatagaacctcagtgtactttttt\n\ >+agccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaa\n\ >+agtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaa\n\ >+atgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatg\n\ >+tcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcga\n\ >+tcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatca\n\ >+taagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataa\n\ >+aagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacg\n\ >+tcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggata\n\ >+acttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagagg\n\ >+tcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgat\n\ >+acctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttag\n\ >+ttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgat\n\ >+tctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaat\n\ >+aggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactata\n\ >+taatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggtt\n\ >+cgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcat\n\ >+ctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtga\n\ >+attcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagc\n\ >+caccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaag\n\ >+aaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatca\n\ >+atgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttact\n\ >+tcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagact\n\ >+cttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccct\n\ >+ggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagacca\n\ >+gatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagta\n\ >+actagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggcca\n\ >+cgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagc\n\ >+ttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaa\n\ >+aaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgc\n\ >+ggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgta\n\ >+gggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattcttt\n\ >+ttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattg\n\ >+cttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaat\n\ >+tcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctcc\n\ >+ttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaac\n\ >+cacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctcca\n\ >+ccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaat\n\ >+attagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtctttt\n\ >+agtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttc\n\ >+ggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctat\n\ >+aatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgaca\n\ >+aatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattga\n\ >+atatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaat\n\ >+cctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctac\n\ >+gtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgccca\n\ >+aaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgac\n\ >+atgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttc\n\ >+ggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcag\n\ >+cgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgt\n\ >+caacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaacta\n\ >+tcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatat\n\ >+catcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgata\n\ >+atcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctc\n\ >+tcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagct\n\ >+gtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttaca\n\ >+agcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatat\n\ >+actatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgt\n\ >+ctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtt\n\ >+tcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttat\n\ >+ttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtc\n\ >+gggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgc\n\ >+tctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcagg\n\ >+taactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgat\n\ >+agagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcg\n\ >+acatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaa\n\ >+cccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaatt\n\ >+attgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgat\n\ >+agaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatg\n\ >+gtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctact\n\ >+taatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgag\n\ >+ctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcg\n\ >+tgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtag\n\ >+tcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatccc\n\ >+aataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcg\n\ >+tctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaa\n\ >+atatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgt\n\ >+ctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaa\n\ >+aacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatc\n\ >+actgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaattt\n\ >+acgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacat\n\ >+aagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactac\n\ >+caatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctct\n\ >+aagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatct\n\ >+cccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaa\n\ >+atcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacatt\n\ >+ttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgtt\n\ >+agatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgt\n\ >+atcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataaga\n\ >+ttaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatat\n\ >+attaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattc\n\ >+ttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccg\n\ >+atcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgc\n\ >+taaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggc\n\ >+tttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacg\n\ >+aaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctat\n\ >+ttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagac\n\ >+gaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccg\n\ >+gcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagtt\n\ >+ccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatata\n\ >+cgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctca\n\ >+ctagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgttt\n\ >+aagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattg\n\ >+taaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatg\n\ >+gatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgc\n\ >+gatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctt\n\ >+tgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggat\n\ >+attgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagactt\n\ >+caactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgata\n\ >+acatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgt\n\ >+cgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaattta\n\ >+taataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccat\n\ >+taccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttag\n\ >+tctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaa\n\ >+ccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacc\n\ >+taccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgttta\n\ >+tcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttga\n\ >+gtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaatt\n\ >+gaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagc\n\ >+cctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatag\n\ >+aagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaa\n\ >+gattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcg\n\ >+agtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgt\n\ >+agtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaatta\n\ >+acaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttcc\n\ >+gttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgca\n\ >+tcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgt\n\ >+atatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtgga\n\ >+ccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaa\n\ >+gaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacaga\n\ >+gaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtg\n\ >+gtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataat\n\ >+atgatattaccttccttacataagacattaccggcataccctggttttcaacttgtgggg\n\ >+ctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaat\n\ >+acaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaa\n\ >+tttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcgg\n\ >+tcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagt\n\ >+cacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattcc\n\ >+aatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtc\n\ >+gacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgag\n\ >+ttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggc\n\ >+taggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaa\n\ >+gacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaacta\n\ >+tttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgttta\n\ >+tgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggc\n\ >+caaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggc\n\ >+ctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgct\n\ >+gtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaag\n\ >+ccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgc\n\ >+aaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaa\n\ >+ggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccagg\n\ >+tgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggc\n\ >+gcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtc\n\ >+aaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagcc\n\ >+ttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccaga\n\ >+cttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtagga\n\ >+attgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggct\n\ >+ccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatc\n\ >+gcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagt\n\ >+ctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaa\n\ >+atttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtag\n\ >+atgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagc\n\ >+atcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattca\n\ >+cgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttg\n\ >+cggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtg\n\ >+gtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtga\n\ >+accgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataac\n\ >+tgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagat\n\ >+aaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtg\n\ >+cccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttt\n\ >+tcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcg\n\ >+cctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaa\n\ >+acaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcata\n\ >+cgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgta\n\ >+ttacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgcta\n\ >+agtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagc\n\ >+cggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttcc\n\ >+acagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgcca\n\ >+gtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttaga\n\ >+gtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggag\n\ >+cataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatat\n\ >+gaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccatttt\n\ >+ccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagag\n\ >+ctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttac\n\ >+agacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtac\n\ >+gtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacata\n\ >+tgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaag\n\ >+tataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccg\n\ >+ccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaag\n\ >+ggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaat\n\ >+ataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctg\n\ >+catgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgat\n\ >+ttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacg\n\ >+tgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctcc\n\ >+aatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagct\n\ >+gttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctga\n\ >+agctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagat\n\ >+atcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttt\n\ >+taccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaag\n\ >+tgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagcttta\n\ >+cataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcc\n\ >+cggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgt\n\ >+tttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtc\n\ >+catctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttg\n\ >+catcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattat\n\ >+ctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgctta\n\ >+tctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgt\n\ >+ttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatc\n\ >+ccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtcctt\n\ >+ctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgct\n\ >+tgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatatt\n\ >+ttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaa\n\ >+tctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaacc\n\ >+aggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagta\n\ >+gctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgacc\n\ >+ctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcact\n\ >+agtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactc\n\ >+taacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttc\n\ >+ctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaagga\n\ >+agtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaa\n\ >+gtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtcca\n\ >+agaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttcta\n\ >+ttgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgact\n\ >+ttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaat\n\ >+acggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatat\n\ >+aaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttcta\n\ >+ctactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgta\n\ >+ggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtg\n\ >+tgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatatacc\n\ >+gttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatata\n\ >+ctattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctct\n\ >+tacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtata\n\ >+aaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatcta\n\ >+ttattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaa\n\ >+atattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggta\n\ >+acaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctatt\n\ >+gctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgtt\n\ >+acttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacgg\n\ >+ctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaa\n\ >+ttcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatg\n\ >+gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt\n\ >+agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc\n\ >+ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata\n\ >+ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt\n\ >+gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac\n\ >+gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac\n\ >+gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt\n\ >+cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga\n\ >+aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc\n\ >+cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac\n\ >+gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag\n\ >+ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga\n\ >+gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt\n\ >+atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa\n\ >+gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat\n\ >+acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat\n\ >+aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta\n\ >+cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta\n\ >+atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt\n\ >+tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt\n\ >+tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc\n\ >+ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg\n\ >+tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag\n\ >+gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca\n\ >+gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca\n\ >+aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca\n\ >+tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat\n\ >+tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc\n\ >+attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga\n\ >+catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc\n\ >+taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc\n\ >+ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa\n\ >+gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg\n\ >+aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga\n\ >+aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga\n\ >+agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg\n\ >+tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt\n\ >+aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg\n\ >+agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac\n\ >+ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc\n\ >+taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat\n\ >+ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga\n\ >+cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc\n\ >+tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa\n\ >+cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac\n\ >+gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc\n\ >+cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat\n\ >+tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg\n\ >+acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa\n\ >+ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag\n\ >+gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc\n\ >+taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag\n\ >+tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct\n\ >+tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata\n\ >+cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat\n\ >+tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta\n\ >+ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg\n\ >+aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa\n\ >+agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa\n\ >+gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt\n\ >+catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct\n\ >+tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt\n\ >+aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat\n\ >+acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc\n\ >+tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg\n\ >+aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt\n\ >+agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat\n\ >+gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat\n\ >+gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa\n\ >+taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga\n\ >+gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat\n\ >+gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg\n\ >+tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa\n\ >+agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat\n\ >+tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct\n\ >+caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat\n\ >+aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac\n\ >+gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat\n\ >+catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta\n\ >+ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt\n\ >+tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac\n\ >+gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg\n\ >+cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta\n\ >+gagatacctttgcaattttt\n"; >+ >+dnaInput = dnaInput + dnaInput + dnaInput; >+ >+var ilen, clen, >+ seqs = [ >+ /agggtaaa|tttaccct/ig, >+ /[cgt]gggtaaa|tttaccc[acg]/ig, >+ /a[act]ggtaaa|tttacc[agt]t/ig, >+ /ag[act]gtaaa|tttac[agt]ct/ig, >+ /agg[act]taaa|ttta[agt]cct/ig, >+ /aggg[acg]aaa|ttt[cgt]ccct/ig, >+ /agggt[cgt]aa|tt[acg]accct/ig, >+ /agggta[cgt]a|t[acg]taccct/ig, >+ /agggtaa[cgt]|[acg]ttaccct/ig], >+ subs = { >+ B: '(c|g|t)', D: '(a|g|t)', H: '(a|c|t)', K: '(g|t)', >+ M: '(a|c)', N: '(a|c|g|t)', R: '(a|g)', S: '(c|t)', >+ V: '(a|c|g)', W: '(a|t)', Y: '(c|t)' } >+ >+ilen = dnaInput.length; >+ >+// There is no in-place substitution >+dnaInput = dnaInput.replace(/>.*\n|\n/g,"") >+clen = dnaInput.length >+ >+var dnaOutputString = ""; >+ >+for(i in seqs) >+ dnaOutputString += seqs[i].source + " " + (dnaInput.match(seqs[i]) || []).length + "\n"; >+ // match returns null if no matches, so replace with empty >+ >+for(k in subs) >+ dnaInput = dnaInput.replace(k, subs[k]) // FIXME: Would like this to be a global substitution in a future version of SunSpider. >+ // search string, replacement string, flags >+ >+var expectedDNAOutputString = "agggtaaa|tttaccct 0\n[cgt]gggtaaa|tttaccc[acg] 9\na[act]ggtaaa|tttacc[agt]t 27\nag[act]gtaaa|tttac[agt]ct 24\nagg[act]taaa|ttta[agt]cct 30\naggg[acg]aaa|ttt[cgt]ccct 9\nagggt[cgt]aa|tt[acg]accct 12\nagggta[cgt]a|t[acg]taccct 9\nagggtaa[cgt]|[acg]ttaccct 15\n"; >+var expectedDNAInput = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCctt(c|g|t)tatcatatgcta(g|t)gg(a|c|g|t)cataaa(c|t)atgtaaa(a|g|t)cD(a|g)tBggDtctttataattcBgtcgtactDtDagcctatttS(a|c|g)(a|c|t)tHttKtgtH(a|c)aSattg(a|t)aHKHttttagacatWatgtRgaaaNtactMcSMt(c|t)tcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgtcattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcagagtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYaHgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRcatttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactttattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSStacaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaaccttacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYtgtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWaaccRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagtRDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgttgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacagcccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctgttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaatactcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKaggYtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSaKtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttataaaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBaaNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacggtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgctcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccKtcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMtttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacgggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNaBKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDttaRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacctttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatccgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcacaattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKgatacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcgaaacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaDgttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtgttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcVtaBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaaccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagatgaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgggaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaatYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctttYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactttaSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatcacBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBagaHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHtcgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctcttttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBWattccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatagttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaaattBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStctHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHcctaaagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaatacKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgcgYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcgattaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaacaBatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKgaDcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaattcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaMtgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtRtttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKgtaaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNcaRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHcDaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBaVYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMtagctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataatgtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKttWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVtcatNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatttggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYRaatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSataWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgacacaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaStccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtgaaNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNMacKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgttRtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMtRRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDcttatcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaacgaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgtYaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctcttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagttttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagatgctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgtaKBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagDaaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBggttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatHtaYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagactVWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtVNataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSaMtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDagcHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctatattaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcgtctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcNaHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtcactaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttgtattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttagagRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRaBaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcacaaKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacataaaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSatYaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYtaDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaWcggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacatatatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHatatKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVattMMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtactaaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRtatatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaSRgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDcagtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcataNctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNagatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaataaDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDtttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatWcDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagttctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaaRaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttttttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggDgKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccctDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYtttattVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagMtttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHcttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMcBtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWcttttgcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtgaacRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaaggWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYctaRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttatacgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgtatcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgtcatacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMatcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaBatggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSRggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaatttattaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgtacattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtKSttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBWVHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgaccBRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagctNYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRttatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaattacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaacgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaaVtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaRatgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStacaaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgctccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtacRttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtaggttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSctagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcactattcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgcatRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccgacNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWattNHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttRggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaatcHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVgaaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttacagtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWRtNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtagattaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatgataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMatacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcagtaagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccgtHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNNYcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacattataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaatatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWatttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatgattaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWtatttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaWYagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttattagcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSVMaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBtttatKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaatttccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaaaRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaaBttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatMtgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaKStNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStVcgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaNatVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtgatNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcgccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacctgYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVMtttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaDBggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMcagtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtgaHtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWRtttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgtaVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaacatttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYBaKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYattttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMtcctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtagDacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataatgccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWtatHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcMatttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVcKatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactttgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaatatcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataKtaRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBtNatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaaHaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaaScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYgtNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttKcRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWgattttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtacaHBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcggMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDSBHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatggDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtatKSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaactcagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHattVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaDtaWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRMgDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMtaatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactatacRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVtaRgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctcattttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaacKttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagSKaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagDgatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgBaaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtctaaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtgactattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtYtMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtgaaataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggtatcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaYMtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatccattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBattacaMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDtggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMcacatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgattYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagcgcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaaatBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatgaaatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccatNgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatttaatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaaaaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaatttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaacaDtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaatatctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaataNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaaccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgMttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMcaRcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNaaattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctacaatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggSttaBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHKtSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSatatatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMRBgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMcgRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattctcgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcNRatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaattaagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYttaaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRtgVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNctgaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHaaaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttattagNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatgttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHatMatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVctSVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaYaWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggttVcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatatHatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatcagDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggtgttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcgagtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMggtataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSaggRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDaggaVBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcgtRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaVMctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWtttactaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaaWBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYatVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWDKRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattctBtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaacattRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagBVtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgDaMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtccatgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgattgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtKtatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYttVcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtctatgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaatScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaatctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatggWgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVtatDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttctgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcctMtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaattcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtacatgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcgaSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHStaacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSaaatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtagaYctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVttWtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBtttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatgaDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtcctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttDgaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtatNgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtDatttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKMtHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttatttaacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNagtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttatgtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaagtYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaaaRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMacccttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRtatStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatNcatacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgttcttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatcaYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRagNtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacRctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSggRaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatHSaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVMRSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagcagaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcWgKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaactttMctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattWaHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaNcttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgtactgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHgaccaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagattgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtcacaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcatSVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaatgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattggatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtcttattDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNccDtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDcaDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtactggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttcttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaRctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMRtgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYatagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttcattaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHtaaggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgtcttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcagaMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttcVtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaacatYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctgtaggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatattttacVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBaDtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDgatgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctMacaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMtatgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStctYSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSccKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtDactaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacVKgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVctWgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtcScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRcaaatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRttaaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKttagDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatMNYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccctaDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttatRtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNgaNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWHtWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagcaSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacMtRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgtaaattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRVtccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHaDaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaataYaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagctNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStgaccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccactacgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtagatcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaatcttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBBaKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHacacRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaatagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaaccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYagacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgatttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcgaWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcatcagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaatMctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHgatctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDattaggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcgtaDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVgattaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgBcgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtataBaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBattgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKtgBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacaggatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMaataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBcaaaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtttaaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDtaatatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVtatattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSataggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYtacYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttttgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYcaHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNtacKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgtgatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKDgcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaagMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgcMaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHacMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagcagttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgttaaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRattttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaScaatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRttttaVaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaaccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatgatagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNatcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggtgaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagattYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcHDtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHaacttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWVaagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttggataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcacaagagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMaaataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcBgttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaattgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMSgggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaRSataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttMtattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYtaNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRHMaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttcaggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaaggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKtaNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYttYaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHtaaaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRYaMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBttctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaaatVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaacVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMtattattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatYBtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatccaagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataaagtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtactBtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVtaagaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNttKgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaMattaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattatBRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggatStattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWWatMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDaHggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggtttgHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWKgaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMacttacaaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtggattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMagaggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtcaaKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcVHtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcSgRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaactttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBccataatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgtaatatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacacagtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagcYRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaaaacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatggtDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStctatttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtNHaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHtttgaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVtSttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcgHattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRactctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNatacatttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWatcaatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttNatWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNcttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataMaaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaaacaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtcaagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNatttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVgtVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaaccaactMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagagcSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBcttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaattHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgHtgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataataYtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaDggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcataaatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatgDtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaMtatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaactttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtStagagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgctcttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggattttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctcgttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacctgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatggtactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaaggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagtctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgcgattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatacttacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgaggacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaacccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagtgtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaaccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattcagatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagttttagtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataatacttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtccagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagctcataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaaaatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatttatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgtatcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatgatacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattatcatgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttctagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacgcaggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatcccaaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatagaattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatatttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcacgcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaagggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgttagtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggtcctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgggcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagctaatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagtttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaacccttaaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaattaacgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcctctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatttattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttgtgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtacaatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaagggatggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattcagtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagtgagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcccgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtgactacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaatcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcgctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgtctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagtaagccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtccgaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagtatgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgccacctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaacagccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctggtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaataatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattatcggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaataaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgtccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgacaaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataataaatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagttaataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgacccccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgctgagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattgcgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaaccccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcatttatggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatggatcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttacccggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgcacgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaagactatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacaggaaaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatctcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcactgtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaaaaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacccttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaagtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccataggggcttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgggagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctcaagttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtacaggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgctttagatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcgcgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaagagggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagctaaaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacataagacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtccagcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgagatataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacaggaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatatgacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggtggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctggttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtcatctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttctataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaatattaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaagcgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatgttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattataacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatggcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacatttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaagatgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagacaaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatcttaagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttgttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagttagatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccaccttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggctttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtgccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaaggatgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatccccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaattgattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcctttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttccagttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtctaggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcccactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatctagatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatctacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttcgtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcgactacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaattgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagacaagccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggataattaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaactttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaatagtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggatagtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctactagtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacggttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttacgaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcatactcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagttaaactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgatatacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactatactcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccgaagcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagtttggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgccttagaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagggacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagctcgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttcccggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactcgctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctctggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatcaaagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaacctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccacgagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgagaaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctggagatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgctaacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggttagagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacatagaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatcctttagctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagttccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattttgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctaccttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcgttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtggactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaaaacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaatgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtatacaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatacatttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttactccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaagtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccgacctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattgaacggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcgaattcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggttcagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccagaggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggacttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattactactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagatgtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcgagcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactcacttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgacctagtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgacgttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattcccggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtttaattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaagacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaagggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataacttaatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctgacatcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattgaggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcattccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaacttgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgcacggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattccaataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgctctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaatgccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagatataggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatgatgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttatgccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagaggggttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataaatccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaattgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaatcccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattattaacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatactaagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaagcaagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaataggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatactacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtggatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttactagatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctatgagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaatttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgtttctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttacatggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgccctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactttgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatatttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacgcttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgatgttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccatcgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtattagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaatataacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtctccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcactgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagttatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgtaatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcgatatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtgaactaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctactttagtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatgattctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctagggagacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtacttaatgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatctaaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagagctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagccagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcaccaagggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctgaatccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccgtataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacattgttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataattcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaaccatctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttcctagaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaaaatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatctggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaacataggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggataatcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtccaaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttaggagactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacgtgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtttaccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttccttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttctaacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggctttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaaggttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgaggtagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttgctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacgcagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgattaaagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactgacttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctcccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacgtacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacgttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactcacgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggtccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacgaaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagcgtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggcatgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaattaattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaagttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcgtgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaactccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagttctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcattgtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagttagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcagtatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgctcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactagacgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgcgctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccgtctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcagcaaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaaagattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagccatgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaaatcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaagatacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctgagtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtcacacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagttcttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatattaacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggttacaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaacttggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgtttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgatacgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaaccttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataaattgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccatactggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgtaagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgttacctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgctttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaactgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtactagtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagcttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctttattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagcaattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtgtactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgttggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaataccgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattcaaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgaggctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattcctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctgtgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacacatctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaataaggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgccggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtataggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatattttgataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaagtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgctgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcatatcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagtaccctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacacatttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgctgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaaatgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtcgtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatgaataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaaccttatgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttgagactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtttatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtatagaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggacagcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggtaacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacacttcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacgtatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacaggatagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatgaattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatgaagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgtttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagccagtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatcatggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccatgtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagctttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccattgaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacattattttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagcgtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatgaaaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatccacaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatactaccatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcattatatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaaaatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaacaatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggagcgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtccttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagagaaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcagtacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttcagacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattatcaaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgccgaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataacagctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatctattggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttatgcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccacctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccataactttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatcatataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcaggcatatggccattatatatggccccagagcagaatgctacagcagacaaaatttggatttatgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacgtcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaatacttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttgcagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagactgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtggcactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaaccttcaactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatggatttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgctccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaacccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccacaactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcatttattttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaaaagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtgagtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgaggttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtacttcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtcttaaacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattatatacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattcctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgtaaactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaactcccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaagcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaactttccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttattacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatatttgtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccagatttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctatttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttcacagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagaccacacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctgatccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaataggtttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgagaatgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtctattgattacccttttactattcgacttagagataggagatagaacctcagtgtacttttttagccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaaagtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaaatgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatgtcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcgatcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatcataagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataaaagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacgtcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggataacttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagaggtcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgatacctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttagttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgattctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaataggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactatataatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggttcgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcatctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtgaattcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagccaccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaagaaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatcaatgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttacttcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagactcttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccctggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagaccagatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagtaactagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggccacgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagcttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaaaaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgcggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgtagggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattctttttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattgcttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaattcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctccttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaaccacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctccaccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaatattagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtcttttagtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttcggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctataatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgacaaatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattgaatatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaatcctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctacgtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgcccaaaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgacatgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttcggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcagcgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgtcaacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaactatcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatatcatcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgataatcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctctcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagctgtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttacaagcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatatactatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgtctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtttcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttatttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtcgggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgctctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcaggtaactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgatagagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcgacatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaacccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaattattgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgatagaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatggtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctacttaatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgagctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcgtgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtagtcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatcccaataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcgtctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaaatatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgtctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaaaacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatcactgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaatttacgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacataagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactaccaatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctctaagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatctcccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaaatcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacattttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgttagatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgtatcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataagattaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatatattaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattcttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccgatcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgctaaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggctttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacgaaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctatttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagacgaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccggcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagttccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatatacgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctcactagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgtttaagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattgtaaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatggatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgcgatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctttgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggatattgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagacttcaactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgataacatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgtcgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaatttataataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccattaccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttagtctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaaccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacctaccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgtttatcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttgagtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaattgaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagccctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatagaagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaagattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcgagtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgtagtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaattaacaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttccgttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgcatcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgtatatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtggaccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaagaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacagagaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtggtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataatatgatattaccttccttacataagacattaccggcataccctggttttcaacttgtggggctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaatacaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaatttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcggtcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagtcacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattccaatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtcgacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgagttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggctaggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaagacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaactatttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgtttatgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggccaaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggcctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgctgtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaagccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgcaaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaaggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccaggtgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggcgcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtcaaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagccttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccagacttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtaggaattgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggctccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatcgcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagtctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaaatttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtagatgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagcatcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattcacgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttgcggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtggtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtgaaccgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataactgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagataaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtgcccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttttcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcgcctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaaacaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcatacgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgtattacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgctaagtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagccggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttccacagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgccagtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttagagtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggagcataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatatgaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccattttccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagagctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttacagacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtacgtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacatatgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaagtataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccgccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaagggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaatataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctgcatgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgatttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacgtgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctccaatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagctgttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctgaagctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagatatcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttttaccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaagtgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagctttacataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcccggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgttttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtccatctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttgcatcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattatctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgcttatctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgtttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatcccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtccttctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgcttgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatattttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaatctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaaccaggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagtagctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgaccctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcactagtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactctaacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttcctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaaggaagtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaagtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtccaagaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttctattgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgactttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaatacggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatataaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttctactactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgtaggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtgtgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatataccgttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatatactattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctcttacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtataaaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatctattattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaaatattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggtaacaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctattgctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgttacttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacggctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaattcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatggcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgtagtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggcccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaataccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggtgaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgacgagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagacgcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataatttcacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacagaaacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccccgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggacgtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatagataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatgagtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgtatagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaagactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagatacttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaataatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttattacagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagattaatatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactttcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatttgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgcggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttggtgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgaggtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggcagcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatcaaaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatcatcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataattataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcaccattcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgagacatcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacctaaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctccccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaagtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcgaaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaagaaacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttggaagtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctgtctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggacttttaacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccgagccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttacttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacctaagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctatggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacgacagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtctatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaacttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatacgtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggccgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttattatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctgacgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaactaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcaggcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctctaagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaagtcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagccttttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagatacagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcattttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacattaggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatgaatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaaagatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaagaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagcttcatcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtcccttccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcattaaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacatacccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatctacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacgaagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggtagtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaatgcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcatgaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaataactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactgagctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaatgaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtgggtgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaaagaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccattgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcctcaaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacataaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctacgttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacatcatagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggctaggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagttcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtacgtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtgcattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggtagagatacctttgcaatttttGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCcttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcgtactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaaNtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgtcattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcagagtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYaHgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRcatttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactttattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSStacaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaaccttacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYtgtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWaaccRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagtRDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgttgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacagcccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctgttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaatactcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKaggYtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSaKtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttataaaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBaaNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacggtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgctcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccKtcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMtttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacgggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNaBKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDttaRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacctttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatccgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcacaattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKgatacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcgaaacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaDgttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtgttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcVtaBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaaccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagatgaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgggaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaatYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctttYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactttaSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatcacBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBagaHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHtcgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctcttttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBWattccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatagttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaaattBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStctHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHcctaaagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaatacKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgcgYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcgattaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaacaBatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKgaDcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaattcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaMtgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtRtttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKgtaaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNcaRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHcDaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBaVYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMtagctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataatgtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKttWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVtcatNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatttggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYRaatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSataWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgacacaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaStccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtgaaNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNMacKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgttRtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMtRRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDcttatcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaacgaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgtYaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctcttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagttttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagatgctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgtaKBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagDaaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBggttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatHtaYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagactVWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtVNataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSaMtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDagcHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctatattaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcgtctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcNaHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtcactaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttgtattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttagagRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRaBaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcacaaKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacataaaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSatYaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYtaDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaWcggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacatatatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHatatKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVattMMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtactaaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRtatatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaSRgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDcagtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcataNctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNagatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaataaDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDtttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatWcDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagttctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaaRaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttttttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggDgKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccctDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYtttattVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagMtttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHcttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMcBtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWcttttgcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtgaacRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaaggWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYctaRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttatacgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgtatcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgtcatacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMatcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaBatggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSRggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaatttattaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgtacattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtKSttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBWVHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgaccBRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagctNYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRttatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaattacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaacgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaaVtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaRatgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStacaaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgctccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtacRttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtaggttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSctagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcactattcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgcatRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccgacNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWattNHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttRggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaatcHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVgaaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttacagtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWRtNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtagattaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatgataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMatacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcagtaagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccgtHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNNYcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacattataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaatatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWatttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatgattaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWtatttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaWYagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttattagcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSVMaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBtttatKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaatttccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaaaRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaaBttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatMtgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaKStNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStVcgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaNatVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtgatNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcgccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacctgYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVMtttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaDBggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMcagtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtgaHtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWRtttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgtaVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaacatttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYBaKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYattttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMtcctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtagDacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataatgccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWtatHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcMatttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVcKatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactttgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaatatcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataKtaRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBtNatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaaHaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaaScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYgtNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttKcRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWgattttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtacaHBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcggMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDSBHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatggDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtatKSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaactcagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHattVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaDtaWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRMgDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMtaatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactatacRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVtaRgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctcattttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaacKttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagSKaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagDgatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgBaaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtctaaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtgactattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtYtMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtgaaataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggtatcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaYMtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatccattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBattacaMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDtggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMcacatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgattYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagcgcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaaatBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatgaaatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccatNgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatttaatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaaaaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaatttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaacaDtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaatatctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaataNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaaccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgMttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMcaRcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNaaattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctacaatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggSttaBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHKtSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSatatatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMRBgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMcgRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattctcgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcNRatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaattaagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYttaaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRtgVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNctgaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHaaaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttattagNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatgttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHatMatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVctSVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaYaWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggttVcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatatHatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatcagDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggtgttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcgagtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMggtataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSaggRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDaggaVBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcgtRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaVMctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWtttactaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaaWBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYatVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWDKRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattctBtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaacattRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagBVtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgDaMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtccatgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgattgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtKtatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYttVcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtctatgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaatScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaatctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatggWgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVtatDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttctgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcctMtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaattcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtacatgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcgaSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHStaacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSaaatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtagaYctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVttWtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBtttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatgaDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtcctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttDgaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtatNgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtDatttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKMtHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttatttaacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNagtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttatgtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaagtYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaaaRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMacccttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRtatStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatNcatacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgttcttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatcaYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRagNtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacRctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSggRaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatHSaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVMRSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagcagaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcWgKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaactttMctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattWaHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaNcttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgtactgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHgaccaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagattgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtcacaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcatSVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaatgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattggatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtcttattDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNccDtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDcaDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtactggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttcttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaRctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMRtgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYatagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttcattaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHtaaggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgtcttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcagaMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttcVtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaacatYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctgtaggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatattttacVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBaDtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDgatgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctMacaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMtatgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStctYSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSccKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtDactaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacVKgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVctWgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtcScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRcaaatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRttaaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKttagDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatMNYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccctaDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttatRtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNgaNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWHtWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagcaSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacMtRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgtaaattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRVtccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHaDaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaataYaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagctNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStgaccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccactacgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtagatcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaatcttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBBaKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHacacRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaatagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaaccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYagacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgatttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcgaWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcatcagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaatMctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHgatctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDattaggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcgtaDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVgattaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgBcgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtataBaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBattgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKtgBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacaggatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMaataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBcaaaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtttaaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDtaatatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVtatattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSataggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYtacYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttttgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYcaHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNtacKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgtgatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKDgcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaagMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgcMaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHacMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagcagttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgttaaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRattttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaScaatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRttttaVaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaaccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatgatagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNatcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggtgaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagattYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcHDtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHaacttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWVaagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttggataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcacaagagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMaaataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcBgttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaattgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMSgggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaRSataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttMtattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYtaNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRHMaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttcaggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaaggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKtaNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYttYaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHtaaaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRYaMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBttctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaaatVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaacVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMtattattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatYBtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatccaagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataaagtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtactBtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVtaagaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNttKgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaMattaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattatBRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggatStattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWWatMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDaHggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggtttgHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWKgaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMacttacaaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtggattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMagaggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtcaaKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcVHtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcSgRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaactttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBccataatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgtaatatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacacagtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagcYRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaaaacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatggtDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStctatttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtNHaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHtttgaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVtSttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcgHattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRactctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNatacatttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWatcaatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttNatWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNcttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataMaaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaaacaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtcaagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNatttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVgtVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaaccaactMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagagcSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBcttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaattHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgHtgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataataYtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaDggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcataaatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatgDtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaMtatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaactttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtStagagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgctcttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggattttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctcgttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacctgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatggtactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaaggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagtctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgcgattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatacttacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgaggacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaacccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagtgtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaaccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattcagatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagttttagtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataatacttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtccagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagctcataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaaaatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatttatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgtatcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatgatacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattatcatgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttctagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacgcaggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatcccaaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatagaattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatatttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcacgcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaagggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgttagtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggtcctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgggcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagctaatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagtttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaacccttaaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaattaacgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcctctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatttattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttgtgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtacaatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaagggatggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattcagtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagtgagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcccgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtgactacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaatcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcgctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgtctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagtaagccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtccgaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagtatgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgccacctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaacagccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctggtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaataatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattatcggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaataaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgtccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgacaaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataataaatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagttaataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgacccccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgctgagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattgcgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaaccccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcatttatggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatggatcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttacccggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgcacgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaagactatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacaggaaaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatctcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcactgtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaaaaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacccttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaagtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccataggggcttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgggagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctcaagttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtacaggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgctttagatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcgcgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaagagggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagctaaaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacataagacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtccagcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgagatataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacaggaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatatgacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggtggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctggttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtcatctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttctataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaatattaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaagcgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatgttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattataacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatggcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacatttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaagatgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagacaaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatcttaagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttgttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagttagatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccaccttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggctttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtgccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaaggatgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatccccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaattgattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcctttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttccagttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtctaggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcccactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatctagatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatctacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttcgtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcgactacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaattgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagacaagccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggataattaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaactttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaatagtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggatagtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctactagtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacggttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttacgaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcatactcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagttaaactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgatatacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactatactcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccgaagcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagtttggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgccttagaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagggacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagctcgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttcccggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactcgctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctctggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatcaaagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaacctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccacgagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgagaaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctggagatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgctaacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggttagagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacatagaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatcctttagctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagttccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattttgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctaccttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcgttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtggactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaaaacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaatgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtatacaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatacatttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttactccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaagtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccgacctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattgaacggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcgaattcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggttcagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccagaggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggacttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattactactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagatgtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcgagcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactcacttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgacctagtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgacgttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattcccggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtttaattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaagacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaagggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataacttaatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctgacatcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattgaggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcattccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaacttgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgcacggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattccaataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgctctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaatgccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagatataggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatgatgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttatgccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagaggggttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataaatccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaattgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaatcccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattattaacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatactaagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaagcaagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaataggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatactacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtggatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttactagatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctatgagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaatttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgtttctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttacatggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgccctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactttgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatatttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacgcttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgatgttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccatcgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtattagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaatataacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtctccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcactgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagttatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgtaatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcgatatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtgaactaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctactttagtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatgattctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctagggagacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtacttaatgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatctaaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagagctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagccagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcaccaagggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctgaatccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccgtataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacattgttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataattcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaaccatctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttcctagaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaaaatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatctggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaacataggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggataatcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtccaaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttaggagactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacgtgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtttaccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttccttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttctaacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggctttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaaggttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgaggtagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttgctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacgcagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgattaaagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactgacttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctcccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacgtacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacgttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactcacgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggtccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacgaaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagcgtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggcatgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaattaattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaagttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcgtgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaactccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagttctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcattgtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagttagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcagtatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgctcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactagacgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgcgctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccgtctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcagcaaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaaagattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagccatgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaaatcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaagatacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctgagtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtcacacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagttcttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatattaacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggttacaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaacttggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgtttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgatacgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaaccttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataaattgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccatactggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgtaagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgttacctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgctttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaactgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtactagtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagcttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctttattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagcaattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtgtactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgttggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaataccgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattcaaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgaggctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattcctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctgtgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacacatctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaataaggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgccggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtataggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatattttgataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaagtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgctgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcatatcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagtaccctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacacatttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgctgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaaatgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtcgtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatgaataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaaccttatgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttgagactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtttatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtatagaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggacagcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggtaacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacacttcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacgtatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacaggatagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatgaattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatgaagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgtttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagccagtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatcatggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccatgtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagctttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccattgaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacattattttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagcgtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatgaaaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatccacaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatactaccatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcattatatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaaaatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaacaatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggagcgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtccttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagagaaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcagtacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttcagacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattatcaaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgccgaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataacagctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatctattggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttatgcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccacctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccataactttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatcatataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcaggcatatggccattatatatggccccagagcagaatgctacagcagacaaaatttggatttatgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacgtcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaatacttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttgcagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagactgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtggcactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaaccttcaactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatggatttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgctccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaacccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccacaactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcatttattttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaaaagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtgagtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgaggttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtacttcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtcttaaacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattatatacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattcctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgtaaactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaactcccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaagcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaactttccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttattacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatatttgtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccagatttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctatttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttcacagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagaccacacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctgatccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaataggtttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgagaatgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtctattgattacccttttactattcgacttagagataggagatagaacctcagtgtacttttttagccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaaagtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaaatgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatgtcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcgatcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatcataagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataaaagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacgtcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggataacttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagaggtcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgatacctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttagttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgattctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaataggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactatataatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggttcgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcatctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtgaattcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagccaccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaagaaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatcaatgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttacttcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagactcttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccctggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagaccagatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagtaactagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggccacgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagcttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaaaaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgcggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgtagggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattctttttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattgcttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaattcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctccttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaaccacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctccaccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaatattagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtcttttagtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttcggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctataatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgacaaatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattgaatatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaatcctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctacgtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgcccaaaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgacatgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttcggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcagcgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgtcaacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaactatcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatatcatcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgataatcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctctcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagctgtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttacaagcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatatactatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgtctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtttcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttatttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtcgggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgctctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcaggtaactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgatagagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcgacatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaacccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaattattgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgatagaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatggtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctacttaatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgagctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcgtgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtagtcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatcccaataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcgtctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaaatatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgtctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaaaacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatcactgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaatttacgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacataagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactaccaatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctctaagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatctcccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaaatcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacattttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgttagatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgtatcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataagattaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatatattaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattcttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccgatcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgctaaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggctttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacgaaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctatttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagacgaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccggcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagttccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatatacgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctcactagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgtttaagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattgtaaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatggatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgcgatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctttgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggatattgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagacttcaactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgataacatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgtcgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaatttataataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccattaccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttagtctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaaccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacctaccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgtttatcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttgagtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaattgaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagccctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatagaagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaagattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcgagtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgtagtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaattaacaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttccgttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgcatcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgtatatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtggaccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaagaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacagagaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtggtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataatatgatattaccttccttacataagacattaccggcataccctggttttcaacttgtggggctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaatacaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaatttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcggtcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagtcacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattccaatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtcgacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgagttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggctaggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaagacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaactatttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgtttatgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggccaaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggcctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgctgtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaagccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgcaaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaaggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccaggtgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggcgcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtcaaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagccttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccagacttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtaggaattgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggctccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatcgcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagtctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaaatttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtagatgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagcatcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattcacgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttgcggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtggtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtgaaccgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataactgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagataaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtgcccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttttcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcgcctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaaacaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcatacgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgtattacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgctaagtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagccggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttccacagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgccagtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttagagtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggagcataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatatgaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccattttccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagagctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttacagacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtacgtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacatatgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaagtataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccgccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaagggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaatataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctgcatgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgatttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacgtgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctccaatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagctgttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctgaagctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagatatcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttttaccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaagtgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagctttacataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcccggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgttttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtccatctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttgcatcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattatctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgcttatctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgtttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatcccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtccttctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgcttgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatattttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaatctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaaccaggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagtagctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgaccctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcactagtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactctaacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttcctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaaggaagtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaagtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtccaagaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttctattgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgactttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaatacggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatataaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttctactactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgtaggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtgtgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatataccgttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatatactattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctcttacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtataaaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatctattattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaaatattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggtaacaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctattgctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgttacttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacggctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaattcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatggcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgtagtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggcccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaataccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggtgaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgacgagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagacgcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataatttcacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacagaaacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccccgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggacgtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatagataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatgagtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgtatagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaagactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagatacttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaataatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttattacagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagattaatatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactttcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatttgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgcggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttggtgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgaggtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggcagcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatcaaaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatcatcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataattataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcaccattcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgagacatcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacctaaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctccccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaagtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcgaaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaagaaacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttggaagtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctgtctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggacttttaacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccgagccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttacttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacctaagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctatggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacgacagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtctatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaacttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatacgtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggccgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttattatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctgacgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaactaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcaggcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctctaagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaagtcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagccttttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagatacagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcattttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacattaggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatgaatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaaagatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaagaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagcttcatcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtcccttccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcattaaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacatacccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatctacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacgaagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggtagtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaatgcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcatgaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaataactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactgagctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaatgaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtgggtgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaaagaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccattgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcctcaaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacataaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctacgttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacatcatagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggctaggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagttcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtacgtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtgcattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggtagagatacctttgcaatttttGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCcttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcgtactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaaNtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgtcattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcagagtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYaHgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRcatttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactttattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSStacaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaaccttacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYtgtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWaaccRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagtRDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgttgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacagcccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctgttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaatactcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKaggYtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSaKtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttataaaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBaaNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacggtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgctcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccKtcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMtttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacgggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNaBKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDttaRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacctttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatccgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcacaattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKgatacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcgaaacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaDgttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtgttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcVtaBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaaccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagatgaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgggaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaatYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctttYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactttaSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatcacBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBagaHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHtcgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctcttttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBWattccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatagttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaaattBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStctHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHcctaaagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaatacKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgcgYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcgattaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaacaBatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKgaDcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaattcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaMtgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtRtttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKgtaaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNcaRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHcDaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBaVYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMtagctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataatgtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKttWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVtcatNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatttggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYRaatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSataWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgacacaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaStccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtgaaNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNMacKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgttRtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMtRRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDcttatcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaacgaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgtYaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctcttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagttttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagatgctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgtaKBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagDaaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBggttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatHtaYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagactVWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtVNataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSaMtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDagcHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctatattaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcgtctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcNaHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtcactaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttgtattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttagagRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRaBaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcacaaKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacataaaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSatYaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYtaDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaWcggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacatatatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHatatKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVattMMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtactaaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRtatatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaSRgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDcagtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcataNctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNagatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaataaDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDtttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatWcDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagttctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaaRaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttttttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggDgKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccctDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYtttattVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagMtttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHcttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMcBtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWcttttgcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtgaacRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaaggWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYctaRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttatacgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgtatcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgtcatacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMatcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaBatggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSRggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaatttattaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgtacattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtKSttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBWVHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgaccBRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagctNYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRttatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaattacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaacgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaaVtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaRatgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStacaaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgctccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtacRttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtaggttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSctagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcactattcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgcatRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccgacNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWattNHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttRggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaatcHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVgaaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttacagtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWRtNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtagattaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatgataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMatacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcagtaagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccgtHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNNYcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacattataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaatatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWatttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatgattaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWtatttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaWYagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttattagcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSVMaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBtttatKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaatttccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaaaRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaaBttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatMtgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaKStNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStVcgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaNatVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtgatNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcgccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacctgYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVMtttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaDBggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMcagtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtgaHtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWRtttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgtaVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaacatttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYBaKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYattttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMtcctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtagDacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataatgccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWtatHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcMatttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVcKatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactttgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaatatcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataKtaRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBtNatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaaHaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaaScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYgtNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttKcRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWgattttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtacaHBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcggMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDSBHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatggDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtatKSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaactcagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHattVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaDtaWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRMgDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMtaatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactatacRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVtaRgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctcattttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaacKttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagSKaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagDgatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgBaaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtctaaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtgactattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtYtMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtgaaataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggtatcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaYMtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatccattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBattacaMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDtggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMcacatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgattYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagcgcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaaatBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatgaaatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccatNgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatttaatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaaaaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaatttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaacaDtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaatatctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaataNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaaccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgMttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMcaRcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNaaattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctacaatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggSttaBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHKtSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSatatatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMRBgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMcgRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattctcgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcNRatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaattaagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYttaaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRtgVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNctgaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHaaaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttattagNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatgttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHatMatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVctSVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaYaWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggttVcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatatHatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatcagDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggtgttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcgagtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMggtataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSaggRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDaggaVBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcgtRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaVMctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWtttactaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaaWBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYatVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWDKRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattctBtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaacattRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagBVtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgDaMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtccatgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgattgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtKtatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYttVcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtctatgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaatScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaatctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatggWgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVtatDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttctgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcctMtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaattcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtacatgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcgaSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHStaacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSaaatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtagaYctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVttWtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBtttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatgaDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtcctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttDgaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtatNgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtDatttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKMtHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttatttaacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNagtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttatgtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaagtYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaaaRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMacccttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRtatStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatNcatacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgttcttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatcaYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRagNtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacRctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSggRaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatHSaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVMRSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagcagaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcWgKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaactttMctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattWaHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaNcttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgtactgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHgaccaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagattgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtcacaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcatSVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaatgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattggatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtcttattDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNccDtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDcaDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtactggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttcttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaRctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMRtgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYatagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttcattaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHtaaggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgtcttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcagaMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttcVtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaacatYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctgtaggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatattttacVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBaDtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDgatgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctMacaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMtatgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStctYSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSccKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtDactaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacVKgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVctWgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtcScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRcaaatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRttaaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKttagDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatMNYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccctaDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttatRtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNgaNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWHtWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagcaSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacMtRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgtaaattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRVtccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHaDaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaataYaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagctNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStgaccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccactacgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtagatcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaatcttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBBaKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHacacRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaatagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaaccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYagacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgatttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcgaWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcatcagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaatMctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHgatctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDattaggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcgtaDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVgattaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgBcgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtataBaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBattgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKtgBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacaggatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMaataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBcaaaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtttaaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDtaatatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVtatattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSataggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYtacYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttttgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYcaHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNtacKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgtgatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKDgcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaagMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgcMaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHacMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagcagttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgttaaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRattttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaScaatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRttttaVaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaaccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatgatagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNatcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggtgaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagattYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcHDtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHaacttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWVaagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttggataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcacaagagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMaaataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcBgttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaattgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMSgggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaRSataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttMtattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYtaNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRHMaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttcaggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaaggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKtaNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYttYaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHtaaaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRYaMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBttctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaaatVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaacVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMtattattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatYBtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatccaagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataaagtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtactBtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVtaagaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNttKgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaMattaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattatBRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggatStattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWWatMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDaHggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggtttgHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWKgaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMacttacaaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtggattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMagaggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtcaaKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcVHtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcSgRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaactttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBccataatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgtaatatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacacagtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagcYRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaaaacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatggtDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStctatttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtNHaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHtttgaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVtSttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcgHattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRactctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNatacatttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWatcaatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttNatWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNcttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataMaaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaaacaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtcaagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNatttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVgtVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaaccaactMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagagcSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBcttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaattHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgHtgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataataYtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaDggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcataaatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatgDtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaMtatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaactttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtStagagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgctcttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggattttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctcgttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacctgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatggtactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaaggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagtctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgcgattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatacttacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgaggacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaacccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagtgtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaaccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattcagatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagttttagtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataatacttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtccagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagctcataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaaaatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatttatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgtatcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatgatacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattatcatgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttctagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacgcaggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatcccaaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatagaattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatatttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcacgcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaagggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgttagtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggtcctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgggcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagctaatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagtttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaacccttaaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaattaacgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcctctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatttattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttgtgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtacaatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaagggatggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattcagtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagtgagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcccgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtgactacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaatcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcgctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgtctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagtaagccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtccgaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagtatgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgccacctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaacagccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctggtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaataatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattatcggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaataaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgtccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgacaaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataataaatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagttaataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgacccccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgctgagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattgcgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaaccccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcatttatggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatggatcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttacccggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgcacgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaagactatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacaggaaaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatctcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcactgtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaaaaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacccttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaagtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccataggggcttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgggagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctcaagttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtacaggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgctttagatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcgcgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaagagggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagctaaaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacataagacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtccagcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgagatataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacaggaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatatgacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggtggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctggttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtcatctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttctataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaatattaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaagcgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatgttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattataacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatggcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacatttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaagatgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagacaaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatcttaagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttgttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagttagatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccaccttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggctttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtgccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaaggatgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatccccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaattgattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcctttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttccagttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtctaggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcccactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatctagatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatctacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttcgtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcgactacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaattgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagacaagccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggataattaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaactttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaatagtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggatagtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctactagtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacggttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttacgaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcatactcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagttaaactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgatatacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactatactcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccgaagcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagtttggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgccttagaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagggacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagctcgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttcccggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactcgctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctctggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatcaaagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaacctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccacgagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgagaaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctggagatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgctaacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggttagagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacatagaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatcctttagctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagttccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattttgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctaccttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcgttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtggactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaaaacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaatgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtatacaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatacatttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttactccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaagtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccgacctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattgaacggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcgaattcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggttcagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccagaggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggacttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattactactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagatgtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcgagcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactcacttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgacctagtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgacgttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattcccggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtttaattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaagacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaagggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataacttaatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctgacatcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattgaggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcattccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaacttgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgcacggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattccaataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgctctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaatgccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagatataggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatgatgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttatgccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagaggggttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataaatccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaattgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaatcccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattattaacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatactaagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaagcaagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaataggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatactacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtggatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttactagatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctatgagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaatttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgtttctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttacatggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgccctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactttgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatatttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacgcttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgatgttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccatcgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtattagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaatataacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtctccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcactgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagttatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgtaatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcgatatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtgaactaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctactttagtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatgattctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctagggagacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtacttaatgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatctaaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagagctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagccagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcaccaagggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctgaatccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccgtataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacattgttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataattcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaaccatctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttcctagaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaaaatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatctggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaacataggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggataatcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtccaaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttaggagactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacgtgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtttaccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttccttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttctaacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggctttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaaggttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgaggtagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttgctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacgcagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgattaaagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactgacttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctcccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacgtacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacgttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactcacgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggtccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacgaaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagcgtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggcatgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaattaattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaagttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcgtgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaactccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagttctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcattgtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagttagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcagtatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgctcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactagacgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgcgctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccgtctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcagcaaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaaagattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagccatgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaaatcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaagatacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctgagtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtcacacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagttcttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatattaacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggttacaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaacttggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgtttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgatacgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaaccttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataaattgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccatactggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgtaagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgttacctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgctttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaactgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtactagtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagcttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctttattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagcaattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtgtactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgttggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaataccgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattcaaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgaggctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattcctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctgtgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacacatctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaataaggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgccggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtataggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatattttgataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaagtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgctgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcatatcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagtaccctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacacatttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgctgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaaatgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtcgtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatgaataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaaccttatgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttgagactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtttatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtatagaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggacagcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggtaacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacacttcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacgtatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacaggatagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatgaattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatgaagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgtttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagccagtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatcatggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccatgtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagctttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccattgaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacattattttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagcgtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatgaaaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatccacaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatactaccatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcattatatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaaaatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaacaatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggagcgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtccttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagagaaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcagtacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttcagacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattatcaaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgccgaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataacagctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatctattggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttatgcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccacctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccataactttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatcatataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcaggcatatggccattatatatggccccagagcagaatgctacagcagacaaaatttggatttatgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacgtcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaatacttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttgcagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagactgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtggcactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaaccttcaactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatggatttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgctccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaacccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccacaactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcatttattttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaaaagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtgagtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgaggttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtacttcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtcttaaacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattatatacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattcctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgtaaactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaactcccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaagcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaactttccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttattacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatatttgtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccagatttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctatttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttcacagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagaccacacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctgatccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaataggtttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgagaatgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtctattgattacccttttactattcgacttagagataggagatagaacctcagtgtacttttttagccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaaagtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaaatgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatgtcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcgatcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatcataagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataaaagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacgtcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggataacttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagaggtcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgatacctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttagttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgattctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaataggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactatataatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggttcgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcatctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtgaattcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagccaccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaagaaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatcaatgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttacttcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagactcttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccctggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagaccagatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagtaactagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggccacgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagcttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaaaaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgcggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgtagggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattctttttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattgcttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaattcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctccttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaaccacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctccaccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaatattagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtcttttagtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttcggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctataatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgacaaatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattgaatatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaatcctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctacgtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgcccaaaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgacatgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttcggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcagcgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgtcaacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaactatcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatatcatcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgataatcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctctcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagctgtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttacaagcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatatactatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgtctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtttcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttatttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtcgggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgctctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcaggtaactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgatagagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcgacatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaacccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaattattgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgatagaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatggtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctacttaatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgagctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcgtgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtagtcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatcccaataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcgtctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaaatatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgtctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaaaacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatcactgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaatttacgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacataagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactaccaatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctctaagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatctcccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaaatcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacattttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgttagatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgtatcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataagattaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatatattaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattcttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccgatcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgctaaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggctttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacgaaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctatttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagacgaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccggcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagttccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatatacgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctcactagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgtttaagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattgtaaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatggatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgcgatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctttgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggatattgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagacttcaactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgataacatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgtcgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaatttataataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccattaccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttagtctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaaccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacctaccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgtttatcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttgagtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaattgaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagccctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatagaagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaagattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcgagtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgtagtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaattaacaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttccgttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgcatcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgtatatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtggaccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaagaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacagagaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtggtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataatatgatattaccttccttacataagacattaccggcataccctggttttcaacttgtggggctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaatacaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaatttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcggtcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagtcacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattccaatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtcgacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgagttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggctaggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaagacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaactatttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgtttatgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggccaaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggcctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgctgtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaagccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgcaaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaaggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccaggtgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggcgcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtcaaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagccttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccagacttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtaggaattgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggctccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatcgcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagtctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaaatttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtagatgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagcatcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattcacgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttgcggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtggtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtgaaccgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataactgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagataaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtgcccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttttcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcgcctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaaacaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcatacgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgtattacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgctaagtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagccggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttccacagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgccagtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttagagtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggagcataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatatgaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccattttccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagagctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttacagacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtacgtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacatatgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaagtataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccgccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaagggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaatataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctgcatgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgatttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacgtgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctccaatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagctgttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctgaagctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagatatcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttttaccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaagtgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagctttacataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcccggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgttttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtccatctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttgcatcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattatctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgcttatctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgtttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatcccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtccttctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgcttgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatattttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaatctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaaccaggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagtagctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgaccctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcactagtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactctaacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttcctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaaggaagtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaagtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtccaagaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttctattgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgactttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaatacggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatataaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttctactactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgtaggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtgtgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatataccgttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatatactattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctcttacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtataaaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatctattattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaaatattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggtaacaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctattgctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgttacttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacggctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaattcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatggcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgtagtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggcccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaataccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggtgaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgacgagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagacgcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataatttcacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacagaaacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccccgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggacgtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatagataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatgagtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgtatagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaagactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagatacttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaataatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttattacagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagattaatatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactttcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatttgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgcggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttggtgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgaggtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggcagcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatcaaaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatcatcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataattataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcaccattcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgagacatcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacctaaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctccccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaagtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcgaaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaagaaacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttggaagtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctgtctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggacttttaacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccgagccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttacttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacctaagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctatggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacgacagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtctatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaacttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatacgtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggccgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttattatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctgacgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaactaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcaggcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctctaagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaagtcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagccttttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagatacagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcattttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacattaggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatgaatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaaagatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaagaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagcttcatcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtcccttccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcattaaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacatacccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatctacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacgaagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggtagtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaatgcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcatgaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaataactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactgagctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaatgaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtgggtgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaaagaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccattgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcctcaaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacataaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctacgttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacatcatagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggctaggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagttcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtacgtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtgcattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggtagagatacctttgcaattttt"; >+ >+if (dnaOutputString != expectedDNAOutputString) >+ throw "ERROR: bad result: expected " + JSON.stringify(expectedDNAOutputString) + " but got " + JSON.stringify(dnaOutputString); >+ >+if (dnaInput != expectedDNAInput) >+ throw "ERROR: bad result: expected " + JSON.stringify(expectedDNAInput) + " but got " + JSON.stringify(dnaInput); >Index: PerformanceTests/testmem/splay.js >=================================================================== >--- PerformanceTests/testmem/splay.js (nonexistent) >+++ PerformanceTests/testmem/splay.js (working copy) >@@ -0,0 +1,420 @@ >+// Copyright 2009 the V8 project authors. All rights reserved. >+// Copyright (C) 2015 Apple Inc. All rights reserved. >+// Redistribution and use in source and binary forms, with or without >+// modification, are permitted provided that the following conditions are >+// met: >+// >+// * Redistributions of source code must retain the above copyright >+// notice, this list of conditions and the following disclaimer. >+// * Redistributions in binary form must reproduce the above >+// copyright notice, this list of conditions and the following >+// disclaimer in the documentation and/or other materials provided >+// with the distribution. >+// * Neither the name of Google Inc. nor the names of its >+// contributors may be used to endorse or promote products derived >+// from this software without specific prior written permission. >+// >+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT >+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR >+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT >+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, >+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT >+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ >+// This benchmark is based on a JavaScript log processing module used >+// by the V8 profiler to generate execution time profiles for runs of >+// JavaScript applications, and it effectively measures how fast the >+// JavaScript engine is at allocating nodes and reclaiming the memory >+// used for old nodes. Because of the way splay trees work, the engine >+// also has to deal with a lot of changes to the large tree object >+// graph. >+ >+ >+// Configuration. >+var kSplayTreeSize = 8000; >+var kSplayTreeModifications = 80; >+var kSplayTreePayloadDepth = 5; >+ >+var splayTree = null; >+var splaySampleTimeStart = 0.0; >+ >+function GeneratePayloadTree(depth, tag) { >+ if (depth == 0) { >+ return { >+ array : [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], >+ string : 'String for key ' + tag + ' in leaf node' >+ }; >+ } else { >+ return { >+ left: GeneratePayloadTree(depth - 1, tag), >+ right: GeneratePayloadTree(depth - 1, tag) >+ }; >+ } >+} >+ >+ >+function GenerateKey() { >+ // The benchmark framework guarantees that Math.random is >+ // deterministic; see base.js. >+ return Math.random(); >+} >+ >+var splaySamples = []; >+ >+function SplayLatency() { >+ return splaySamples; >+} >+ >+function SplayUpdateStats(time) { >+ var pause = time - splaySampleTimeStart; >+ splaySampleTimeStart = time; >+ splaySamples.push(pause); >+} >+ >+function InsertNewNode() { >+ // Insert new node with a unique key. >+ var key; >+ do { >+ key = GenerateKey(); >+ } while (splayTree.find(key) != null); >+ var payload = GeneratePayloadTree(kSplayTreePayloadDepth, String(key)); >+ splayTree.insert(key, payload); >+ return key; >+} >+ >+ >+function SplaySetup() { >+ // Check if the platform has the performance.now high resolution timer. >+ // If not, throw exception and quit. >+ if (!performance.now) { >+ throw "PerformanceNowUnsupported"; >+ } >+ >+ splayTree = new SplayTree(); >+ splaySampleTimeStart = performance.now() >+ for (var i = 0; i < kSplayTreeSize; i++) { >+ InsertNewNode(); >+ if ((i+1) % 20 == 19) { >+ SplayUpdateStats(performance.now()); >+ } >+ } >+} >+ >+ >+function SplayTearDown() { >+ // Allow the garbage collector to reclaim the memory >+ // used by the splay tree no matter how we exit the >+ // tear down function. >+ var keys = splayTree.exportKeys(); >+ splayTree = null; >+ >+ splaySamples = []; >+ >+ // Verify that the splay tree has the right size. >+ var length = keys.length; >+ if (length != kSplayTreeSize) { >+ throw new Error("Splay tree has wrong size"); >+ } >+ >+ // Verify that the splay tree has sorted, unique keys. >+ for (var i = 0; i < length - 1; i++) { >+ if (keys[i] >= keys[i + 1]) { >+ throw new Error("Splay tree not sorted"); >+ } >+ } >+} >+ >+ >+function SplayRun() { >+ // Replace a few nodes in the splay tree. >+ for (var i = 0; i < kSplayTreeModifications; i++) { >+ var key = InsertNewNode(); >+ var greatest = splayTree.findGreatestLessThan(key); >+ if (greatest == null) splayTree.remove(key); >+ else splayTree.remove(greatest.key); >+ } >+ SplayUpdateStats(performance.now()); >+} >+ >+ >+/** >+ * Constructs a Splay tree. A splay tree is a self-balancing binary >+ * search tree with the additional property that recently accessed >+ * elements are quick to access again. It performs basic operations >+ * such as insertion, look-up and removal in O(log(n)) amortized time. >+ * >+ * @constructor >+ */ >+function SplayTree() { >+}; >+ >+ >+/** >+ * Pointer to the root node of the tree. >+ * >+ * @type {SplayTree.Node} >+ * @private >+ */ >+SplayTree.prototype.root_ = null; >+ >+ >+/** >+ * @return {boolean} Whether the tree is empty. >+ */ >+SplayTree.prototype.isEmpty = function() { >+ return !this.root_; >+}; >+ >+ >+/** >+ * Inserts a node into the tree with the specified key and value if >+ * the tree does not already contain a node with the specified key. If >+ * the value is inserted, it becomes the root of the tree. >+ * >+ * @param {number} key Key to insert into the tree. >+ * @param {*} value Value to insert into the tree. >+ */ >+SplayTree.prototype.insert = function(key, value) { >+ if (this.isEmpty()) { >+ this.root_ = new SplayTree.Node(key, value); >+ return; >+ } >+ // Splay on the key to move the last node on the search path for >+ // the key to the root of the tree. >+ this.splay_(key); >+ if (this.root_.key == key) { >+ return; >+ } >+ var node = new SplayTree.Node(key, value); >+ if (key > this.root_.key) { >+ node.left = this.root_; >+ node.right = this.root_.right; >+ this.root_.right = null; >+ } else { >+ node.right = this.root_; >+ node.left = this.root_.left; >+ this.root_.left = null; >+ } >+ this.root_ = node; >+}; >+ >+ >+/** >+ * Removes a node with the specified key from the tree if the tree >+ * contains a node with this key. The removed node is returned. If the >+ * key is not found, an exception is thrown. >+ * >+ * @param {number} key Key to find and remove from the tree. >+ * @return {SplayTree.Node} The removed node. >+ */ >+SplayTree.prototype.remove = function(key) { >+ if (this.isEmpty()) { >+ throw Error('Key not found: ' + key); >+ } >+ this.splay_(key); >+ if (this.root_.key != key) { >+ throw Error('Key not found: ' + key); >+ } >+ var removed = this.root_; >+ if (!this.root_.left) { >+ this.root_ = this.root_.right; >+ } else { >+ var right = this.root_.right; >+ this.root_ = this.root_.left; >+ // Splay to make sure that the new root has an empty right child. >+ this.splay_(key); >+ // Insert the original right child as the right child of the new >+ // root. >+ this.root_.right = right; >+ } >+ return removed; >+}; >+ >+ >+/** >+ * Returns the node having the specified key or null if the tree doesn't contain >+ * a node with the specified key. >+ * >+ * @param {number} key Key to find in the tree. >+ * @return {SplayTree.Node} Node having the specified key. >+ */ >+SplayTree.prototype.find = function(key) { >+ if (this.isEmpty()) { >+ return null; >+ } >+ this.splay_(key); >+ return this.root_.key == key ? this.root_ : null; >+}; >+ >+ >+/** >+ * @return {SplayTree.Node} Node having the maximum key value. >+ */ >+SplayTree.prototype.findMax = function(opt_startNode) { >+ if (this.isEmpty()) { >+ return null; >+ } >+ var current = opt_startNode || this.root_; >+ while (current.right) { >+ current = current.right; >+ } >+ return current; >+}; >+ >+ >+/** >+ * @return {SplayTree.Node} Node having the maximum key value that >+ * is less than the specified key value. >+ */ >+SplayTree.prototype.findGreatestLessThan = function(key) { >+ if (this.isEmpty()) { >+ return null; >+ } >+ // Splay on the key to move the node with the given key or the last >+ // node on the search path to the top of the tree. >+ this.splay_(key); >+ // Now the result is either the root node or the greatest node in >+ // the left subtree. >+ if (this.root_.key < key) { >+ return this.root_; >+ } else if (this.root_.left) { >+ return this.findMax(this.root_.left); >+ } else { >+ return null; >+ } >+}; >+ >+ >+/** >+ * @return {Array<*>} An array containing all the keys of tree's nodes. >+ */ >+SplayTree.prototype.exportKeys = function() { >+ var result = []; >+ if (!this.isEmpty()) { >+ this.root_.traverse_(function(node) { result.push(node.key); }); >+ } >+ return result; >+}; >+ >+ >+/** >+ * Perform the splay operation for the given key. Moves the node with >+ * the given key to the top of the tree. If no node has the given >+ * key, the last node on the search path is moved to the top of the >+ * tree. This is the simplified top-down splaying algorithm from: >+ * "Self-adjusting Binary Search Trees" by Sleator and Tarjan >+ * >+ * @param {number} key Key to splay the tree on. >+ * @private >+ */ >+SplayTree.prototype.splay_ = function(key) { >+ if (this.isEmpty()) { >+ return; >+ } >+ // Create a dummy node. The use of the dummy node is a bit >+ // counter-intuitive: The right child of the dummy node will hold >+ // the L tree of the algorithm. The left child of the dummy node >+ // will hold the R tree of the algorithm. Using a dummy node, left >+ // and right will always be nodes and we avoid special cases. >+ var dummy, left, right; >+ dummy = left = right = new SplayTree.Node(null, null); >+ var current = this.root_; >+ while (true) { >+ if (key < current.key) { >+ if (!current.left) { >+ break; >+ } >+ if (key < current.left.key) { >+ // Rotate right. >+ var tmp = current.left; >+ current.left = tmp.right; >+ tmp.right = current; >+ current = tmp; >+ if (!current.left) { >+ break; >+ } >+ } >+ // Link right. >+ right.left = current; >+ right = current; >+ current = current.left; >+ } else if (key > current.key) { >+ if (!current.right) { >+ break; >+ } >+ if (key > current.right.key) { >+ // Rotate left. >+ var tmp = current.right; >+ current.right = tmp.left; >+ tmp.left = current; >+ current = tmp; >+ if (!current.right) { >+ break; >+ } >+ } >+ // Link left. >+ left.right = current; >+ left = current; >+ current = current.right; >+ } else { >+ break; >+ } >+ } >+ // Assemble. >+ left.right = current.left; >+ right.left = current.right; >+ current.left = dummy.right; >+ current.right = dummy.left; >+ this.root_ = current; >+}; >+ >+ >+/** >+ * Constructs a Splay tree node. >+ * >+ * @param {number} key Key. >+ * @param {*} value Value. >+ */ >+SplayTree.Node = function(key, value) { >+ this.key = key; >+ this.value = value; >+}; >+ >+ >+/** >+ * @type {SplayTree.Node} >+ */ >+SplayTree.Node.prototype.left = null; >+ >+ >+/** >+ * @type {SplayTree.Node} >+ */ >+SplayTree.Node.prototype.right = null; >+ >+ >+/** >+ * Performs an ordered traversal of the subtree starting at >+ * this SplayTree.Node. >+ * >+ * @param {function(SplayTree.Node)} f Visitor function. >+ * @private >+ */ >+SplayTree.Node.prototype.traverse_ = function(f) { >+ var current = this; >+ while (current) { >+ var left = current.left; >+ if (left) left.traverse_(f); >+ f(current); >+ current = current.right; >+ } >+}; >+ >+performance = {now:Date.now.bind(Date)}; >+SplaySetup(); >+SplayRun(); >Index: PerformanceTests/testmem/tagcloud.js >=================================================================== >--- PerformanceTests/testmem/tagcloud.js (nonexistent) >+++ PerformanceTests/testmem/tagcloud.js (working copy) >@@ -0,0 +1,271 @@ >+ >+/* >+ * Copyright (C) 2007 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+/* >+ Portions from: >+ json.js >+ 2007-10-10 >+ >+ Public Domain >+*/ >+ >+// This test parses a JSON string giving tag names and popularity, and >+// generates html markup for a "tagcloud" view. >+ >+if (!Object.prototype.toJSONString) { >+ >+ Array.prototype.toJSONString = function (w) { >+ var a = [], // The array holding the partial texts. >+ i, // Loop counter. >+ l = this.length, >+ v; // The value to be stringified. >+ >+ for (i = 0; i < l; i += 1) { >+ v = this[i]; >+ switch (typeof v) { >+ case 'object': >+ >+ if (v && typeof v.toJSONString === 'function') { >+ a.push(v.toJSONString(w)); >+ } else { >+ a.push('null'); >+ } >+ break; >+ >+ case 'string': >+ case 'number': >+ case 'boolean': >+ a.push(v.toJSONString()); >+ break; >+ default: >+ a.push('null'); >+ } >+ } >+ >+ return '[' + a.join(',') + ']'; >+ }; >+ >+ >+ Boolean.prototype.toJSONString = function () { >+ return String(this); >+ }; >+ >+ >+ Date.prototype.toJSONString = function () { >+ >+ function f(n) { >+ >+ return n < 10 ? '0' + n : n; >+ } >+ >+ return '"' + this.getUTCFullYear() + '-' + >+ f(this.getUTCMonth() + 1) + '-' + >+ f(this.getUTCDate()) + 'T' + >+ f(this.getUTCHours()) + ':' + >+ f(this.getUTCMinutes()) + ':' + >+ f(this.getUTCSeconds()) + 'Z"'; >+ }; >+ >+ >+ Number.prototype.toJSONString = function () { >+ >+ return isFinite(this) ? String(this) : 'null'; >+ }; >+ >+ >+ Object.prototype.toJSONString = function (w) { >+ var a = [], // The array holding the partial texts. >+ k, // The current key. >+ i, // The loop counter. >+ v; // The current value. >+ >+ if (w) { >+ for (i = 0; i < w.length; i += 1) { >+ k = w[i]; >+ if (typeof k === 'string') { >+ v = this[k]; >+ switch (typeof v) { >+ case 'object': >+ >+ if (v) { >+ if (typeof v.toJSONString === 'function') { >+ a.push(k.toJSONString() + ':' + >+ v.toJSONString(w)); >+ } >+ } else { >+ a.push(k.toJSONString() + ':null'); >+ } >+ break; >+ >+ case 'string': >+ case 'number': >+ case 'boolean': >+ a.push(k.toJSONString() + ':' + v.toJSONString()); >+ >+ } >+ } >+ } >+ } else { >+ >+ for (k in this) { >+ if (typeof k === 'string' && >+ Object.prototype.hasOwnProperty.apply(this, [k])) { >+ v = this[k]; >+ switch (typeof v) { >+ case 'object': >+ >+ if (v) { >+ if (typeof v.toJSONString === 'function') { >+ a.push(k.toJSONString() + ':' + >+ v.toJSONString()); >+ } >+ } else { >+ a.push(k.toJSONString() + ':null'); >+ } >+ break; >+ >+ case 'string': >+ case 'number': >+ case 'boolean': >+ a.push(k.toJSONString() + ':' + v.toJSONString()); >+ >+ } >+ } >+ } >+ } >+ >+ return '{' + a.join(',') + '}'; >+ }; >+ >+ >+ (function (s) { >+ >+ var m = { >+ '\b': '\\b', >+ '\t': '\\t', >+ '\n': '\\n', >+ '\f': '\\f', >+ '\r': '\\r', >+ '"' : '\\"', >+ '\\': '\\\\' >+ }; >+ >+ >+ s.parseJSON = function (filter) { >+ var j; >+ >+ function walk(k, v) { >+ var i, n; >+ if (v && typeof v === 'object') { >+ for (i in v) { >+ if (Object.prototype.hasOwnProperty.apply(v, [i])) { >+ n = walk(i, v[i]); >+ if (n !== undefined) { >+ v[i] = n; >+ } >+ } >+ } >+ } >+ return filter(k, v); >+ } >+ >+ if (/^[\],:{}\s]*$/.test(this.replace(/\\./g, '@'). >+ replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(:?[eE][+\-]?\d+)?/g, ']'). >+ replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { >+ >+ j = eval('(' + this + ')'); >+ >+ return typeof filter === 'function' ? walk('', j) : j; >+ } >+ >+ throw new SyntaxError('parseJSON'); >+ }; >+ >+ >+ s.toJSONString = function () { >+ >+ if (/["\\\x00-\x1f]/.test(this)) { >+ return '"' + this.replace(/[\x00-\x1f\\"]/g, function (a) { >+ var c = m[a]; >+ if (c) { >+ return c; >+ } >+ c = a.charCodeAt(); >+ return '\\u00' + Math.floor(c / 16).toString(16) + >+ (c % 16).toString(16); >+ }) + '"'; >+ } >+ return '"' + this + '"'; >+ }; >+ })(String.prototype); >+} >+ >+var tagInfoJSON = '[\n {\n \"tag\": "titillation",\n \"popularity\": 4294967296\n },\n {\n \"tag\": "foamless",\n \"popularity\": 1257718401\n },\n {\n \"tag\": "snarler",\n \"popularity\": 613166183\n },\n {\n \"tag\": "multangularness",\n \"popularity\": 368304452\n },\n {\n \"tag\": "Fesapo unventurous",\n \"popularity\": 248026512\n },\n {\n \"tag\": "esthesioblast",\n \"popularity\": 179556755\n },\n {\n \"tag\": "echeneidoid",\n \"popularity\": 136641578\n },\n {\n \"tag\": "embryoctony",\n \"popularity\": 107852576\n },\n {\n \"tag\": "undilatory",\n \"popularity\": 87537981\n },\n {\n \"tag\": "predisregard",\n \"popularity\": 72630939\n },\n {\n \"tag\": "allergenic",\n \"popularity\": 61345190\n },\n {\n \"tag\": "uncloudy",\n \"popularity\": 52580571\n },\n {\n \"tag\": "unforeseeably",\n \"popularity\": 45628109\n },\n {\n \"tag\": "sturniform",\n \"popularity\": 40013489\n },\n {\n \"tag\": "anesthetize",\n \"popularity\": 35409226\n },\n {\n \"tag\": "ametabolia",\n \"popularity\": 31583050\n },\n {\n \"tag\": "angiopathy",\n \"popularity\": 28366350\n },\n {\n \"tag\": "sultanaship",\n \"popularity\": 25634218\n },\n {\n \"tag\": "Frenchwise",\n \"popularity\": 23292461\n },\n {\n \"tag\": "cerviconasal",\n \"popularity\": 21268909\n },\n {\n \"tag\": "mercurialness",\n \"popularity\": 19507481\n },\n {\n \"tag\": "glutelin venditate",\n \"popularity\": 17964042\n },\n {\n \"tag\": "acred overblack",\n \"popularity\": 16603454\n },\n {\n \"tag\": "Atik",\n \"popularity\": 15397451\n },\n {\n \"tag\": "puncturer",\n \"popularity\": 14323077\n },\n {\n \"tag\": "pukatea",\n \"popularity\": 13361525\n },\n {\n \"tag\": "suberize",\n \"popularity\": 12497261\n },\n {\n \"tag\": "Godfrey",\n \"popularity\": 11717365\n },\n {\n \"tag\": "tetraptote",\n \"popularity\": 11011011\n },\n {\n \"tag\": "lucidness",\n \"popularity\": 10369074\n },\n {\n \"tag\": "tartness",\n \"popularity\": 9783815\n },\n {\n \"tag\": "axfetch",\n \"popularity\": 9248634\n },\n {\n \"tag\": "preacquittal",\n \"popularity\": 8757877\n },\n {\n \"tag\": "matris",\n \"popularity\": 8306671\n },\n {\n \"tag\": "hyphenate",\n \"popularity\": 7890801\n },\n {\n \"tag\": "semifabulous",\n \"popularity\": 7506606\n },\n {\n \"tag\": "oppressiveness",\n \"popularity\": 7150890\n },\n {\n \"tag\": "Protococcales",\n \"popularity\": 6820856\n },\n {\n \"tag\": "unpreventive",\n \"popularity\": 6514045\n },\n {\n \"tag\": "Cordia",\n \"popularity\": 6228289\n },\n {\n \"tag\": "Wakamba leaflike",\n \"popularity\": 5961668\n },\n {\n \"tag\": "dacryoma",\n \"popularity\": 5712480\n },\n {\n \"tag\": "inguinal",\n \"popularity\": 5479211\n },\n {\n \"tag\": "responseless",\n \"popularity\": 5260507\n },\n {\n \"tag\": "supplementarily",\n \"popularity\": 5055158\n },\n {\n \"tag\": "emu",\n \"popularity\": 4862079\n },\n {\n \"tag\": "countermeet",\n \"popularity\": 4680292\n },\n {\n \"tag\": "purrer",\n \"popularity\": 4508918\n },\n {\n \"tag\": "Corallinaceae",\n \"popularity\": 4347162\n },\n {\n \"tag\": "speculum",\n \"popularity\": 4194304\n },\n {\n \"tag\": "crimpness",\n \"popularity\": 4049690\n },\n {\n \"tag\": "antidetonant",\n \"popularity\": 3912727\n },\n {\n \"tag\": "topeewallah",\n \"popularity\": 3782875\n },\n {\n \"tag\": "fidalgo ballant",\n \"popularity\": 3659640\n },\n {\n \"tag\": "utriculose",\n \"popularity\": 3542572\n },\n {\n \"tag\": "testata",\n \"popularity\": 3431259\n },\n {\n \"tag\": "beltmaking",\n \"popularity\": 3325322\n },\n {\n \"tag\": "necrotype",\n \"popularity\": 3224413\n },\n {\n \"tag\": "ovistic",\n \"popularity\": 3128215\n },\n {\n \"tag\": "swindlership",\n \"popularity\": 3036431\n },\n {\n \"tag\": "augustal",\n \"popularity\": 2948792\n },\n {\n \"tag\": "Titoist",\n \"popularity\": 2865047\n },\n {\n \"tag\": "trisoctahedral",\n \"popularity\": 2784963\n },\n {\n \"tag\": "sequestrator",\n \"popularity\": 2708327\n },\n {\n \"tag\": "sideburns",\n \"popularity\": 2634939\n },\n {\n \"tag\": "paraphrasia",\n \"popularity\": 2564616\n },\n {\n \"tag\": "graminology unbay",\n \"popularity\": 2497185\n },\n {\n \"tag\": "acaridomatium emargination",\n \"popularity\": 2432487\n },\n {\n \"tag\": "roofward",\n \"popularity\": 2370373\n },\n {\n \"tag\": "lauder",\n \"popularity\": 2310705\n },\n {\n \"tag\": "subjunctive",\n \"popularity\": 2253354\n },\n {\n \"tag\": "subelongate",\n \"popularity\": 2198199\n },\n {\n \"tag\": "guacimo",\n \"popularity\": 2145128\n },\n {\n \"tag\": "cockade",\n \"popularity\": 2094033\n },\n {\n \"tag\": "misgauge",\n \"popularity\": 2044818\n },\n {\n \"tag\": "unexpensive",\n \"popularity\": 1997388\n },\n {\n \"tag\": "chebel",\n \"popularity\": 1951657\n },\n {\n \"tag\": "unpursuing",\n \"popularity\": 1907543\n },\n {\n \"tag\": "kilobar",\n \"popularity\": 1864969\n },\n {\n \"tag\": "obsecration",\n \"popularity\": 1823863\n },\n {\n \"tag\": "nacarine",\n \"popularity\": 1784157\n },\n {\n \"tag\": "spirituosity",\n \"popularity\": 1745787\n },\n {\n \"tag\": "movableness deity",\n \"popularity\": 1708692\n },\n {\n \"tag\": "exostracism",\n \"popularity\": 1672816\n },\n {\n \"tag\": "archipterygium",\n \"popularity\": 1638104\n },\n {\n \"tag\": "monostrophic",\n \"popularity\": 1604506\n },\n {\n \"tag\": "gynecide",\n \"popularity\": 1571974\n },\n {\n \"tag\": "gladden",\n \"popularity\": 1540462\n },\n {\n \"tag\": "throughbred",\n \"popularity\": 1509927\n },\n {\n \"tag\": "groper",\n \"popularity\": 1480329\n },\n {\n \"tag\": "Xenosaurus",\n \"popularity\": 1451628\n },\n {\n \"tag\": "photoetcher",\n \"popularity\": 1423788\n },\n {\n \"tag\": "glucosid",\n \"popularity\": 1396775\n },\n {\n \"tag\": "Galtonian",\n \"popularity\": 1370555\n },\n {\n \"tag\": "mesosporic",\n \"popularity\": 1345097\n },\n {\n \"tag\": "theody",\n \"popularity\": 1320370\n },\n {\n \"tag\": "zaffer",\n \"popularity\": 1296348\n },\n {\n \"tag\": "probiology",\n \"popularity\": 1273003\n },\n {\n \"tag\": "rhizomic",\n \"popularity\": 1250308\n },\n {\n \"tag\": "superphosphate",\n \"popularity\": 1228240\n },\n {\n \"tag\": "Hippolytan",\n \"popularity\": 1206776\n },\n {\n \"tag\": "garget",\n \"popularity\": 1185892\n },\n {\n \"tag\": "diploplacula",\n \"popularity\": 1165568\n },\n {\n \"tag\": "orohydrographical",\n \"popularity\": 1145785\n },\n {\n \"tag\": "enhypostatize",\n \"popularity\": 1126521\n },\n {\n \"tag\": "polisman",\n \"popularity\": 1107759\n },\n {\n \"tag\": "acetometer",\n \"popularity\": 1089482\n },\n {\n \"tag\": "unsnatched",\n \"popularity\": 1071672\n },\n {\n \"tag\": "yabber",\n \"popularity\": 1054313\n },\n {\n \"tag\": "demiwolf",\n \"popularity\": 1037390\n },\n {\n \"tag\": "chromascope",\n \"popularity\": 1020888\n },\n {\n \"tag\": "seamanship",\n \"popularity\": 1004794\n },\n {\n \"tag\": "nonfenestrated",\n \"popularity\": 989092\n },\n {\n \"tag\": "hydrophytism",\n \"popularity\": 973771\n },\n {\n \"tag\": "dotter",\n \"popularity\": 958819\n },\n {\n \"tag\": "thermoperiodism",\n \"popularity\": 944222\n },\n {\n \"tag\": "unlawyerlike",\n \"popularity\": 929970\n },\n {\n \"tag\": "enantiomeride citywards",\n \"popularity\": 916052\n },\n {\n \"tag\": "unmetallurgical",\n \"popularity\": 902456\n },\n {\n \"tag\": "prickled",\n \"popularity\": 889174\n },\n {\n \"tag\": "strangerwise manioc",\n \"popularity\": 876195\n },\n {\n \"tag\": "incisorial",\n \"popularity\": 863510\n },\n {\n \"tag\": "irrationalize",\n \"popularity\": 851110\n },\n {\n \"tag\": "nasology",\n \"popularity\": 838987\n },\n {\n \"tag\": "fatuism",\n \"popularity\": 827131\n },\n {\n \"tag\": "Huk",\n \"popularity\": 815535\n },\n {\n \"tag\": "properispomenon",\n \"popularity\": 804192\n },\n {\n \"tag\": "unpummelled",\n \"popularity\": 793094\n },\n {\n \"tag\": "technographically",\n \"popularity\": 782233\n },\n {\n \"tag\": "underfurnish",\n \"popularity\": 771603\n },\n {\n \"tag\": "sinter",\n \"popularity\": 761198\n },\n {\n \"tag\": "lateroanterior",\n \"popularity\": 751010\n },\n {\n \"tag\": "nonpersonification",\n \"popularity\": 741034\n },\n {\n \"tag\": "Sitophilus",\n \"popularity\": 731264\n },\n {\n \"tag\": "unstudded overexerted",\n \"popularity\": 721694\n },\n {\n \"tag\": "tracheation",\n \"popularity\": 712318\n },\n {\n \"tag\": "thirteenth begloze",\n \"popularity\": 703131\n },\n {\n \"tag\": "bespice",\n \"popularity\": 694129\n },\n {\n \"tag\": "doppia",\n \"popularity\": 685305\n },\n {\n \"tag\": "unadorned",\n \"popularity\": 676656\n },\n {\n \"tag\": "dovelet engraff",\n \"popularity\": 668176\n },\n {\n \"tag\": "diphyozooid",\n \"popularity\": 659862\n },\n {\n \"tag\": "mure",\n \"popularity\": 651708\n },\n {\n \"tag\": "Tripitaka",\n \"popularity\": 643710\n },\n {\n \"tag\": "Billjim",\n \"popularity\": 635865\n },\n {\n \"tag\": "pyramidical",\n \"popularity\": 628169\n },\n {\n \"tag\": "circumlocutionist",\n \"popularity\": 620617\n },\n {\n \"tag\": "slapstick",\n \"popularity\": 613207\n },\n {\n \"tag\": "preobedience",\n \"popularity\": 605934\n },\n {\n \"tag\": "unfriarlike",\n \"popularity\": 598795\n },\n {\n \"tag\": "microchromosome",\n \"popularity\": 591786\n },\n {\n \"tag\": "Orphicism",\n \"popularity\": 584905\n },\n {\n \"tag\": "peel",\n \"popularity\": 578149\n },\n {\n \"tag\": "obediential",\n \"popularity\": 571514\n },\n {\n \"tag\": "Peripatidea",\n \"popularity\": 564997\n },\n {\n \"tag\": "undoubtful",\n \"popularity\": 558596\n },\n {\n \"tag\": "lodgeable",\n \"popularity\": 552307\n },\n {\n \"tag\": "pustulated woodchat",\n \"popularity\": 546129\n },\n {\n \"tag\": "antepast",\n \"popularity\": 540057\n },\n {\n \"tag\": "sagittoid matrimoniously",\n \"popularity\": 534091\n },\n {\n \"tag\": "Albizzia",\n \"popularity\": 528228\n },\n {\n \"tag\": "Elateridae unnewness",\n \"popularity\": 522464\n },\n {\n \"tag\": "convertingness",\n \"popularity\": 516798\n },\n {\n \"tag\": "Pelew",\n \"popularity\": 511228\n },\n {\n \"tag\": "recapitulation",\n \"popularity\": 505751\n },\n {\n \"tag\": "shack",\n \"popularity\": 500365\n },\n {\n \"tag\": "unmellowed",\n \"popularity\": 495069\n },\n {\n \"tag\": "pavis capering",\n \"popularity\": 489859\n },\n {\n \"tag\": "fanfare",\n \"popularity\": 484735\n },\n {\n \"tag\": "sole",\n \"popularity\": 479695\n },\n {\n \"tag\": "subarcuate",\n \"popularity\": 474735\n },\n {\n \"tag\": "multivious",\n \"popularity\": 469856\n },\n {\n \"tag\": "squandermania",\n \"popularity\": 465054\n },\n {\n \"tag\": "scintle",\n \"popularity\": 460329\n },\n {\n \"tag\": "hash chirognomic",\n \"popularity\": 455679\n },\n {\n \"tag\": "linseed",\n \"popularity\": 451101\n },\n {\n \"tag\": "redoubtable",\n \"popularity\": 446596\n },\n {\n \"tag\": "poachy reimpact",\n \"popularity\": 442160\n },\n {\n \"tag\": "limestone",\n \"popularity\": 437792\n },\n {\n \"tag\": "serranid",\n \"popularity\": 433492\n },\n {\n \"tag\": "pohna",\n \"popularity\": 429258\n },\n {\n \"tag\": "warwolf",\n \"popularity\": 425088\n },\n {\n \"tag\": "ruthenous",\n \"popularity\": 420981\n },\n {\n \"tag\": "dover",\n \"popularity\": 416935\n },\n {\n \"tag\": "deuteroalbumose",\n \"popularity\": 412950\n },\n {\n \"tag\": "pseudoprophetic",\n \"popularity\": 409025\n },\n {\n \"tag\": "dissoluteness",\n \"popularity\": 405157\n },\n {\n \"tag\": "preinvention",\n \"popularity\": 401347\n },\n {\n \"tag\": "swagbellied",\n \"popularity\": 397592\n },\n {\n \"tag\": "Ophidia",\n \"popularity\": 393892\n },\n {\n \"tag\": "equanimity",\n \"popularity\": 390245\n },\n {\n \"tag\": "troutful",\n \"popularity\": 386651\n },\n {\n \"tag\": "uke",\n \"popularity\": 383108\n },\n {\n \"tag\": "preacquaint",\n \"popularity\": 379616\n },\n {\n \"tag\": "shoq",\n \"popularity\": 376174\n },\n {\n \"tag\": "yox",\n \"popularity\": 372780\n },\n {\n \"tag\": "unelemental",\n \"popularity\": 369434\n },\n {\n \"tag\": "Yavapai",\n \"popularity\": 366134\n },\n {\n \"tag\": "joulean",\n \"popularity\": 362880\n },\n {\n \"tag\": "dracontine",\n \"popularity\": 359672\n },\n {\n \"tag\": "hardmouth",\n \"popularity\": 356507\n },\n {\n \"tag\": "sylvanize",\n \"popularity\": 353386\n },\n {\n \"tag\": "intraparenchymatous meadowbur",\n \"popularity\": 350308\n },\n {\n \"tag\": "uncharily",\n \"popularity\": 347271\n },\n {\n \"tag\": "redtab flexibly",\n \"popularity\": 344275\n },\n {\n \"tag\": "centervelic",\n \"popularity\": 341319\n },\n {\n \"tag\": "unravellable",\n \"popularity\": 338403\n },\n {\n \"tag\": "infortunately",\n \"popularity\": 335526\n },\n {\n \"tag\": "cannel",\n \"popularity\": 332687\n },\n {\n \"tag\": "oxyblepsia",\n \"popularity\": 329885\n },\n {\n \"tag\": "Damon",\n \"popularity\": 327120\n },\n {\n \"tag\": "etherin",\n \"popularity\": 324391\n },\n {\n \"tag\": "luminal",\n \"popularity\": 321697\n },\n {\n \"tag\": "interrogatorily presbyte",\n \"popularity\": 319038\n },\n {\n \"tag\": "hemiclastic",\n \"popularity\": 316414\n },\n {\n \"tag\": "poh flush",\n \"popularity\": 313823\n },\n {\n \"tag\": "Psoroptes",\n \"popularity\": 311265\n },\n {\n \"tag\": "dispirit",\n \"popularity\": 308740\n },\n {\n \"tag\": "nashgab",\n \"popularity\": 306246\n },\n {\n \"tag\": "Aphidiinae",\n \"popularity\": 303784\n },\n {\n \"tag\": "rhapsody nonconstruction",\n \"popularity\": 301353\n },\n {\n \"tag\": "Osmond",\n \"popularity\": 298952\n },\n {\n \"tag\": "Leonis",\n \"popularity\": 296581\n },\n {\n \"tag\": "Lemnian",\n \"popularity\": 294239\n },\n {\n \"tag\": "acetonic gnathonic",\n \"popularity\": 291926\n },\n {\n \"tag\": "surculus",\n \"popularity\": 289641\n },\n {\n \"tag\": "diagonally",\n \"popularity\": 287384\n },\n {\n \"tag\": "counterpenalty",\n \"popularity\": 285154\n },\n {\n \"tag\": "Eugenie",\n \"popularity\": 282952\n },\n {\n \"tag\": "hornbook",\n \"popularity\": 280776\n },\n {\n \"tag\": "miscoin",\n \"popularity\": 278626\n },\n {\n \"tag\": "admi",\n \"popularity\": 276501\n },\n {\n \"tag\": "Tarmac",\n \"popularity\": 274402\n },\n {\n \"tag\": "inexplicable",\n \"popularity\": 272328\n },\n {\n \"tag\": "rascallion",\n \"popularity\": 270278\n },\n {\n \"tag\": "dusterman",\n \"popularity\": 268252\n },\n {\n \"tag\": "osteostomous unhoroscopic",\n \"popularity\": 266250\n },\n {\n \"tag\": "spinibulbar",\n \"popularity\": 264271\n },\n {\n \"tag\": "phototelegraphically",\n \"popularity\": 262315\n },\n {\n \"tag\": "Manihot",\n \"popularity\": 260381\n },\n {\n \"tag\": "neighborhood",\n \"popularity\": 258470\n },\n {\n \"tag\": "Vincetoxicum",\n \"popularity\": 256581\n },\n {\n \"tag\": "khirka",\n \"popularity\": 254713\n },\n {\n \"tag\": "conscriptive",\n \"popularity\": 252866\n },\n {\n \"tag\": "synechthran",\n \"popularity\": 251040\n },\n {\n \"tag\": "Guttiferales",\n \"popularity\": 249235\n },\n {\n \"tag\": "roomful",\n \"popularity\": 247450\n },\n {\n \"tag\": "germinal",\n \"popularity\": 245685\n },\n {\n \"tag\": "untraitorous",\n \"popularity\": 243939\n },\n {\n \"tag\": "nondissenting",\n \"popularity\": 242213\n },\n {\n \"tag\": "amotion",\n \"popularity\": 240506\n },\n {\n \"tag\": "badious",\n \"popularity\": 238817\n },\n {\n \"tag\": "sumpit",\n \"popularity\": 237147\n },\n {\n \"tag\": "ectozoic",\n \"popularity\": 235496\n },\n {\n \"tag\": "elvet",\n \"popularity\": 233862\n },\n {\n \"tag\": "underclerk",\n \"popularity\": 232246\n },\n {\n \"tag\": "reticency",\n \"popularity\": 230647\n },\n {\n \"tag\": "neutroclusion",\n \"popularity\": 229065\n },\n {\n \"tag\": "unbelieving",\n \"popularity\": 227500\n },\n {\n \"tag\": "histogenetic",\n \"popularity\": 225952\n },\n {\n \"tag\": "dermamyiasis",\n \"popularity\": 224421\n },\n {\n \"tag\": "telenergy",\n \"popularity\": 222905\n },\n {\n \"tag\": "axiomatic",\n \"popularity\": 221406\n },\n {\n \"tag\": "undominoed",\n \"popularity\": 219922\n },\n {\n \"tag\": "periosteoma",\n \"popularity\": 218454\n },\n {\n \"tag\": "justiciaryship",\n \"popularity\": 217001\n },\n {\n \"tag\": "autoluminescence",\n \"popularity\": 215563\n },\n {\n \"tag\": "osmous",\n \"popularity\": 214140\n },\n {\n \"tag\": "borgh",\n \"popularity\": 212731\n },\n {\n \"tag\": "bedebt",\n \"popularity\": 211337\n },\n {\n \"tag\": "considerableness adenoidism",\n \"popularity\": 209957\n },\n {\n \"tag\": "sailorizing",\n \"popularity\": 208592\n },\n {\n \"tag\": "Montauk",\n \"popularity\": 207240\n },\n {\n \"tag\": "Bridget",\n \"popularity\": 205901\n },\n {\n \"tag\": "Gekkota",\n \"popularity\": 204577\n },\n {\n \"tag\": "subcorymbose",\n \"popularity\": 203265\n },\n {\n \"tag\": "undersap",\n \"popularity\": 201967\n },\n {\n \"tag\": "poikilothermic",\n \"popularity\": 200681\n },\n {\n \"tag\": "enneatical",\n \"popularity\": 199409\n },\n {\n \"tag\": "martinetism",\n \"popularity\": 198148\n },\n {\n \"tag\": "sustanedly",\n \"popularity\": 196901\n },\n {\n \"tag\": "declaration",\n \"popularity\": 195665\n },\n {\n \"tag\": "myringoplasty",\n \"popularity\": 194442\n },\n {\n \"tag\": "Ginkgo",\n \"popularity\": 193230\n },\n {\n \"tag\": "unrecurrent",\n \"popularity\": 192031\n },\n {\n \"tag\": "proprecedent",\n \"popularity\": 190843\n },\n {\n \"tag\": "roadman",\n \"popularity\": 189666\n },\n {\n \"tag\": "elemin",\n \"popularity\": 188501\n },\n {\n \"tag\": "maggot",\n \"popularity\": 187347\n },\n {\n \"tag\": "alitrunk",\n \"popularity\": 186204\n },\n {\n \"tag\": "introspection",\n \"popularity\": 185071\n },\n {\n \"tag\": "batiker",\n \"popularity\": 183950\n },\n {\n \"tag\": "backhatch oversettle",\n \"popularity\": 182839\n },\n {\n \"tag\": "thresherman",\n \"popularity\": 181738\n },\n {\n \"tag\": "protemperance",\n \"popularity\": 180648\n },\n {\n \"tag\": "undern",\n \"popularity\": 179568\n },\n {\n \"tag\": "tweeg",\n \"popularity\": 178498\n },\n {\n \"tag\": "crosspath",\n \"popularity\": 177438\n },\n {\n \"tag\": "Tangaridae",\n \"popularity\": 176388\n },\n {\n \"tag\": "scrutation",\n \"popularity\": 175348\n },\n {\n \"tag\": "piecemaker",\n \"popularity\": 174317\n },\n {\n \"tag\": "paster",\n \"popularity\": 173296\n },\n {\n \"tag\": "unpretendingness",\n \"popularity\": 172284\n },\n {\n \"tag\": "inframundane",\n \"popularity\": 171281\n },\n {\n \"tag\": "kiblah",\n \"popularity\": 170287\n },\n {\n \"tag\": "playwrighting",\n \"popularity\": 169302\n },\n {\n \"tag\": "gonepoiesis snowslip",\n \"popularity\": 168326\n },\n {\n \"tag\": "hoodwise",\n \"popularity\": 167359\n },\n {\n \"tag\": "postseason",\n \"popularity\": 166401\n },\n {\n \"tag\": "equivocality",\n \"popularity\": 165451\n },\n {\n \"tag\": "Opiliaceae nuclease",\n \"popularity\": 164509\n },\n {\n \"tag\": "sextipara",\n \"popularity\": 163576\n },\n {\n \"tag\": "weeper",\n \"popularity\": 162651\n },\n {\n \"tag\": "frambesia",\n \"popularity\": 161735\n },\n {\n \"tag\": "answerable",\n \"popularity\": 160826\n },\n {\n \"tag\": "Trichosporum",\n \"popularity\": 159925\n },\n {\n \"tag\": "cajuputol",\n \"popularity\": 159033\n },\n {\n \"tag\": "pleomorphous",\n \"popularity\": 158148\n },\n {\n \"tag\": "aculeolate",\n \"popularity\": 157270\n },\n {\n \"tag\": "wherever",\n \"popularity\": 156400\n },\n {\n \"tag\": "collapse",\n \"popularity\": 155538\n },\n {\n \"tag\": "porky",\n \"popularity\": 154683\n },\n {\n \"tag\": "perule",\n \"popularity\": 153836\n },\n {\n \"tag\": "Nevada",\n \"popularity\": 152996\n },\n {\n \"tag\": "conalbumin",\n \"popularity\": 152162\n },\n {\n \"tag\": "tsunami",\n \"popularity\": 151336\n },\n {\n \"tag\": "Gulf",\n \"popularity\": 150517\n },\n {\n \"tag\": "hertz",\n \"popularity\": 149705\n },\n {\n \"tag\": "limmock",\n \"popularity\": 148900\n },\n {\n \"tag\": "Tartarize",\n \"popularity\": 148101\n },\n {\n \"tag\": "entosphenoid",\n \"popularity\": 147310\n },\n {\n \"tag\": "ibis",\n \"popularity\": 146524\n },\n {\n \"tag\": "unyeaned",\n \"popularity\": 145746\n },\n {\n \"tag\": "tritural",\n \"popularity\": 144973\n },\n {\n \"tag\": "hundredary",\n \"popularity\": 144207\n },\n {\n \"tag\": "stolonlike",\n \"popularity\": 143448\n },\n {\n \"tag\": "chorister",\n \"popularity\": 142694\n },\n {\n \"tag\": "mismove",\n \"popularity\": 141947\n },\n {\n \"tag\": "Andine",\n \"popularity\": 141206\n },\n {\n \"tag\": "Annette proneur escribe",\n \"popularity\": 140471\n },\n {\n \"tag\": "exoperidium",\n \"popularity\": 139742\n },\n {\n \"tag\": "disedge",\n \"popularity\": 139019\n },\n {\n \"tag\": "hypochloruria",\n \"popularity\": 138302\n },\n {\n \"tag\": "prepupa",\n \"popularity\": 137590\n },\n {\n \"tag\": "assent",\n \"popularity\": 136884\n },\n {\n \"tag\": "hydrazobenzene",\n \"popularity\": 136184\n },\n {\n \"tag\": "emballonurid",\n \"popularity\": 135489\n },\n {\n \"tag\": "roselle",\n \"popularity\": 134800\n },\n {\n \"tag\": "unifiedly",\n \"popularity\": 134117\n },\n {\n \"tag\": "clang",\n \"popularity\": 133439\n },\n {\n \"tag\": "acetolytic",\n \"popularity\": 132766\n },\n {\n \"tag\": "cladodont",\n \"popularity\": 132098\n },\n {\n \"tag\": "recoast",\n \"popularity\": 131436\n },\n {\n \"tag\": "celebrated tydie Eocarboniferous",\n \"popularity\": 130779\n },\n {\n \"tag\": "superconsciousness",\n \"popularity\": 130127\n },\n {\n \"tag\": "soberness",\n \"popularity\": 129480\n },\n {\n \"tag\": "panoramist",\n \"popularity\": 128838\n },\n {\n \"tag\": "Orbitolina",\n \"popularity\": 128201\n },\n {\n \"tag\": "overlewd",\n \"popularity\": 127569\n },\n {\n \"tag\": "demiquaver",\n \"popularity\": 126942\n },\n {\n \"tag\": "kamelaukion",\n \"popularity\": 126319\n },\n {\n \"tag\": "flancard",\n \"popularity\": 125702\n },\n {\n \"tag\": "tricuspid",\n \"popularity\": 125089\n },\n {\n \"tag\": "bepelt",\n \"popularity\": 124480\n },\n {\n \"tag\": "decuplet",\n \"popularity\": 123877\n },\n {\n \"tag\": "Rockies",\n \"popularity\": 123278\n },\n {\n \"tag\": "unforgeability",\n \"popularity\": 122683\n },\n {\n \"tag\": "mocha",\n \"popularity\": 122093\n },\n {\n \"tag\": "scrunge",\n \"popularity\": 121507\n },\n {\n \"tag\": "delighter",\n \"popularity\": 120926\n },\n {\n \"tag\": "willey Microtinae",\n \"popularity\": 120349\n },\n {\n \"tag\": "unhuntable",\n \"popularity\": 119777\n },\n {\n \"tag\": "historically",\n \"popularity\": 119208\n },\n {\n \"tag\": "vicegerentship",\n \"popularity\": 118644\n },\n {\n \"tag\": "hemangiosarcoma",\n \"popularity\": 118084\n },\n {\n \"tag\": "harpago",\n \"popularity\": 117528\n },\n {\n \"tag\": "unionoid",\n \"popularity\": 116976\n },\n {\n \"tag\": "wiseman",\n \"popularity\": 116429\n },\n {\n \"tag\": "diclinism",\n \"popularity\": 115885\n },\n {\n \"tag\": "Maud",\n \"popularity\": 115345\n },\n {\n \"tag\": "scaphocephalism",\n \"popularity\": 114809\n },\n {\n \"tag\": "obtenebration",\n \"popularity\": 114277\n },\n {\n \"tag\": "cymar predreadnought",\n \"popularity\": 113749\n },\n {\n \"tag\": "discommend",\n \"popularity\": 113225\n },\n {\n \"tag\": "crude",\n \"popularity\": 112704\n },\n {\n \"tag\": "upflash",\n \"popularity\": 112187\n },\n {\n \"tag\": "saltimbank",\n \"popularity\": 111674\n },\n {\n \"tag\": "posthysterical",\n \"popularity\": 111165\n },\n {\n \"tag\": "trample",\n \"popularity\": 110659\n },\n {\n \"tag\": "ungirthed",\n \"popularity\": 110157\n },\n {\n \"tag\": "unshakable",\n \"popularity\": 109658\n },\n {\n \"tag\": "hepatocystic",\n \"popularity\": 109163\n },\n {\n \"tag\": "psammophyte",\n \"popularity\": 108671\n },\n {\n \"tag\": "millionfold",\n \"popularity\": 108183\n },\n {\n \"tag\": "outtaste",\n \"popularity\": 107698\n },\n {\n \"tag\": "poppycockish",\n \"popularity\": 107217\n },\n {\n \"tag\": "viduine",\n \"popularity\": 106739\n },\n {\n \"tag\": "pleasureman",\n \"popularity\": 106264\n },\n {\n \"tag\": "cholesterolemia",\n \"popularity\": 105792\n },\n {\n \"tag\": "hostlerwife",\n \"popularity\": 105324\n },\n {\n \"tag\": "figure undergrass",\n \"popularity\": 104859\n },\n {\n \"tag\": "bedrape",\n \"popularity\": 104398\n },\n {\n \"tag\": "nuttishness",\n \"popularity\": 103939\n },\n {\n \"tag\": "fow",\n \"popularity\": 103484\n },\n {\n \"tag\": "rachianesthesia",\n \"popularity\": 103031\n },\n {\n \"tag\": "recruitable",\n \"popularity\": 102582\n },\n {\n \"tag\": "semianatomical Oenotheraceae",\n \"popularity\": 102136\n },\n {\n \"tag\": "extracapsular",\n \"popularity\": 101693\n },\n {\n \"tag\": "unsigneted",\n \"popularity\": 101253\n },\n {\n \"tag\": "fissural",\n \"popularity\": 100816\n },\n {\n \"tag\": "ayous",\n \"popularity\": 100381\n },\n {\n \"tag\": "crestfallenness odontograph",\n \"popularity\": 99950\n },\n {\n \"tag\": "monopodium",\n \"popularity\": 99522\n },\n {\n \"tag\": "germfree",\n \"popularity\": 99096\n },\n {\n \"tag\": "dauphin",\n \"popularity\": 98673\n },\n {\n \"tag\": "nonagesimal",\n \"popularity\": 98254\n },\n {\n \"tag\": "waterchat",\n \"popularity\": 97836\n },\n {\n \"tag\": "Entelodon",\n \"popularity\": 97422\n },\n {\n \"tag\": "semischolastic",\n \"popularity\": 97010\n },\n {\n \"tag\": "somata",\n \"popularity\": 96602\n },\n {\n \"tag\": "expositorily",\n \"popularity\": 96195\n },\n {\n \"tag\": "bass",\n \"popularity\": 95792\n },\n {\n \"tag\": "calorimetry",\n \"popularity\": 95391\n },\n {\n \"tag\": "entireness",\n \"popularity\": 94993\n },\n {\n \"tag\": "ratline soppiness",\n \"popularity\": 94597\n },\n {\n \"tag\": "shor",\n \"popularity\": 94204\n },\n {\n \"tag\": "coprecipitation",\n \"popularity\": 93813\n },\n {\n \"tag\": "unblushingly",\n \"popularity\": 93425\n },\n {\n \"tag\": "macarize",\n \"popularity\": 93040\n },\n {\n \"tag\": "scruplesomeness",\n \"popularity\": 92657\n },\n {\n \"tag\": "offsaddle",\n \"popularity\": 92276\n },\n {\n \"tag\": "hypertragical",\n \"popularity\": 91898\n },\n {\n \"tag\": "uncassock loined",\n \"popularity\": 91522\n },\n {\n \"tag\": "interlobate",\n \"popularity\": 91149\n },\n {\n \"tag\": "releasor orrisroot stoloniferously",\n \"popularity\": 90778\n },\n {\n \"tag\": "elementoid",\n \"popularity\": 90410\n },\n {\n \"tag\": "Lentilla",\n \"popularity\": 90043\n },\n {\n \"tag\": "distressing",\n \"popularity\": 89679\n },\n {\n \"tag\": "hydrodrome",\n \"popularity\": 89318\n },\n {\n \"tag\": "Jeannette",\n \"popularity\": 88958\n },\n {\n \"tag\": "Kuli",\n \"popularity\": 88601\n },\n {\n \"tag\": "taxinomist",\n \"popularity\": 88246\n },\n {\n \"tag\": "southwestwardly",\n \"popularity\": 87894\n },\n {\n \"tag\": "polyparia",\n \"popularity\": 87543\n },\n {\n \"tag\": "exmeridian",\n \"popularity\": 87195\n },\n {\n \"tag\": "splenius regimentaled",\n \"popularity\": 86849\n },\n {\n \"tag\": "Sphaeropsidaceae",\n \"popularity\": 86505\n },\n {\n \"tag\": "unbegun",\n \"popularity\": 86163\n },\n {\n \"tag\": "something",\n \"popularity\": 85823\n },\n {\n \"tag\": "contaminable nonexpulsion",\n \"popularity\": 85486\n },\n {\n \"tag\": "douser",\n \"popularity\": 85150\n },\n {\n \"tag\": "prostrike",\n \"popularity\": 84817\n },\n {\n \"tag\": "worky",\n \"popularity\": 84485\n },\n {\n \"tag\": "folliful",\n \"popularity\": 84156\n },\n {\n \"tag\": "prioracy",\n \"popularity\": 83828\n },\n {\n \"tag\": "undermentioned",\n \"popularity\": 83503\n },\n {\n \"tag\": "Judaica",\n \"popularity\": 83179\n },\n {\n \"tag\": "multifarious",\n \"popularity\": 82858\n },\n {\n \"tag\": "poogye",\n \"popularity\": 82538\n },\n {\n \"tag\": "Sparganium",\n \"popularity\": 82221\n },\n {\n \"tag\": "thurrock",\n \"popularity\": 81905\n },\n {\n \"tag\": "outblush",\n \"popularity\": 81591\n },\n {\n \"tag\": "Strophanthus supraordination",\n \"popularity\": 81279\n },\n {\n \"tag\": "gingerroot",\n \"popularity\": 80969\n },\n {\n \"tag\": "unconscient",\n \"popularity\": 80661\n },\n {\n \"tag\": "unconstitutionally",\n \"popularity\": 80354\n },\n {\n \"tag\": "plaguily",\n \"popularity\": 80050\n },\n {\n \"tag\": "waterily equatorwards",\n \"popularity\": 79747\n },\n {\n \"tag\": "nondeposition",\n \"popularity\": 79446\n },\n {\n \"tag\": "dronishly",\n \"popularity\": 79147\n },\n {\n \"tag\": "gateado",\n \"popularity\": 78849\n },\n {\n \"tag\": "dislink",\n \"popularity\": 78553\n },\n {\n \"tag\": "Joceline",\n \"popularity\": 78259\n },\n {\n \"tag\": "amphiboliferous",\n \"popularity\": 77967\n },\n {\n \"tag\": "bushrope",\n \"popularity\": 77676\n },\n {\n \"tag\": "plumicorn sulphosalicylic",\n \"popularity\": 77387\n },\n {\n \"tag\": "nonefficiency",\n \"popularity\": 77100\n },\n {\n \"tag\": "hieroscopy",\n \"popularity\": 76815\n },\n {\n \"tag\": "causativeness",\n \"popularity\": 76531\n },\n {\n \"tag\": "swird paleoeremology",\n \"popularity\": 76249\n },\n {\n \"tag\": "camphoric",\n \"popularity\": 75968\n },\n {\n \"tag\": "retaining",\n \"popularity\": 75689\n },\n {\n \"tag\": "thyreoprotein",\n \"popularity\": 75411\n },\n {\n \"tag\": "carbona",\n \"popularity\": 75136\n },\n {\n \"tag\": "protectively",\n \"popularity\": 74861\n },\n {\n \"tag\": "mosasaur",\n \"popularity\": 74589\n },\n {\n \"tag\": "reciprocator",\n \"popularity\": 74317\n },\n {\n \"tag\": "detentive",\n \"popularity\": 74048\n },\n {\n \"tag\": "supravital",\n \"popularity\": 73780\n },\n {\n \"tag\": "Vespertilionidae",\n \"popularity\": 73513\n },\n {\n \"tag\": "parka",\n \"popularity\": 73248\n },\n {\n \"tag\": "pickaway",\n \"popularity\": 72984\n },\n {\n \"tag\": "oleaceous",\n \"popularity\": 72722\n },\n {\n \"tag\": "anticogitative",\n \"popularity\": 72462\n },\n {\n \"tag\": "woe",\n \"popularity\": 72203\n },\n {\n \"tag\": "skeuomorph",\n \"popularity\": 71945\n },\n {\n \"tag\": "helpmeet",\n \"popularity\": 71689\n },\n {\n \"tag\": "Hexactinellida brickmaking",\n \"popularity\": 71434\n },\n {\n \"tag\": "resink",\n \"popularity\": 71180\n },\n {\n \"tag\": "diluter",\n \"popularity\": 70928\n },\n {\n \"tag\": "micromicron",\n \"popularity\": 70677\n },\n {\n \"tag\": "parentage",\n \"popularity\": 70428\n },\n {\n \"tag\": "galactorrhoea",\n \"popularity\": 70180\n },\n {\n \"tag\": "gey",\n \"popularity\": 69934\n },\n {\n \"tag\": "gesticulatory",\n \"popularity\": 69689\n },\n {\n \"tag\": "wergil",\n \"popularity\": 69445\n },\n {\n \"tag\": "Lecanora",\n \"popularity\": 69202\n },\n {\n \"tag\": "malanders karst",\n \"popularity\": 68961\n },\n {\n \"tag\": "vibetoite",\n \"popularity\": 68721\n },\n {\n \"tag\": "unrequitedness",\n \"popularity\": 68483\n },\n {\n \"tag\": "outwash",\n \"popularity\": 68245\n },\n {\n \"tag\": "unsacred",\n \"popularity\": 68009\n },\n {\n \"tag\": "unabetted dividend",\n \"popularity\": 67775\n },\n {\n \"tag\": "untraveling",\n \"popularity\": 67541\n },\n {\n \"tag\": "thermobattery",\n \"popularity\": 67309\n },\n {\n \"tag\": "polypragmist",\n \"popularity\": 67078\n },\n {\n \"tag\": "irrefutableness",\n \"popularity\": 66848\n },\n {\n \"tag\": "remiges",\n \"popularity\": 66620\n },\n {\n \"tag\": "implode",\n \"popularity\": 66393\n },\n {\n \"tag\": "superfluousness",\n \"popularity\": 66166\n },\n {\n \"tag\": "croakily unalleviated",\n \"popularity\": 65942\n },\n {\n \"tag\": "edicule",\n \"popularity\": 65718\n },\n {\n \"tag\": "entophytous",\n \"popularity\": 65495\n },\n {\n \"tag\": "benefactorship Toryish",\n \"popularity\": 65274\n },\n {\n \"tag\": "pseudoamateurish",\n \"popularity\": 65054\n },\n {\n \"tag\": "flueless Iguanodontoidea snipnose",\n \"popularity\": 64835\n },\n {\n \"tag\": "zealotical Zamicrus interpole",\n \"popularity\": 64617\n },\n {\n \"tag\": "whereabout",\n \"popularity\": 64401\n },\n {\n \"tag\": "benzazide",\n \"popularity\": 64185\n },\n {\n \"tag\": "pokeweed",\n \"popularity\": 63971\n },\n {\n \"tag\": "calamitoid",\n \"popularity\": 63757\n },\n {\n \"tag\": "sporozoal",\n \"popularity\": 63545\n },\n {\n \"tag\": "physcioid Welshwoman",\n \"popularity\": 63334\n },\n {\n \"tag\": "wanting",\n \"popularity\": 63124\n },\n {\n \"tag\": "unencumbering",\n \"popularity\": 62915\n },\n {\n \"tag\": "Tupi",\n \"popularity\": 62707\n },\n {\n \"tag\": "potbank",\n \"popularity\": 62501\n },\n {\n \"tag\": "bulked",\n \"popularity\": 62295\n },\n {\n \"tag\": "uparise",\n \"popularity\": 62090\n },\n {\n \"tag\": "Sudra",\n \"popularity\": 61887\n },\n {\n \"tag\": "hyperscrupulosity",\n \"popularity\": 61684\n },\n {\n \"tag\": "subterraneously unmaid",\n \"popularity\": 61483\n },\n {\n \"tag\": "poisonousness",\n \"popularity\": 61282\n },\n {\n \"tag\": "phare",\n \"popularity\": 61083\n },\n {\n \"tag\": "dicynodont",\n \"popularity\": 60884\n },\n {\n \"tag\": "chewer",\n \"popularity\": 60687\n },\n {\n \"tag\": "uliginous",\n \"popularity\": 60490\n },\n {\n \"tag\": "tinman",\n \"popularity\": 60295\n },\n {\n \"tag\": "coconut",\n \"popularity\": 60100\n },\n {\n \"tag\": "phryganeoid",\n \"popularity\": 59907\n },\n {\n \"tag\": "bismillah",\n \"popularity\": 59714\n },\n {\n \"tag\": "tautomeric",\n \"popularity\": 59523\n },\n {\n \"tag\": "jerquer",\n \"popularity\": 59332\n },\n {\n \"tag\": "Dryopithecinae",\n \"popularity\": 59143\n },\n {\n \"tag\": "ghizite",\n \"popularity\": 58954\n },\n {\n \"tag\": "unliveable",\n \"popularity\": 58766\n },\n {\n \"tag\": "craftsmaster",\n \"popularity\": 58579\n },\n {\n \"tag\": "semiscenic",\n \"popularity\": 58394\n },\n {\n \"tag\": "danaid",\n \"popularity\": 58209\n },\n {\n \"tag\": "flawful",\n \"popularity\": 58025\n },\n {\n \"tag\": "risibleness",\n \"popularity\": 57841\n },\n {\n \"tag\": "Muscovite",\n \"popularity\": 57659\n },\n {\n \"tag\": "snaringly",\n \"popularity\": 57478\n },\n {\n \"tag\": "brilliantwise",\n \"popularity\": 57297\n },\n {\n \"tag\": "plebeity",\n \"popularity\": 57118\n },\n {\n \"tag\": "historicalness",\n \"popularity\": 56939\n },\n {\n \"tag\": "piecemeal",\n \"popularity\": 56761\n },\n {\n \"tag\": "maxillipedary",\n \"popularity\": 56584\n },\n {\n \"tag\": "Hypenantron",\n \"popularity\": 56408\n },\n {\n \"tag\": "quaintness avigate",\n \"popularity\": 56233\n },\n {\n \"tag\": "ave",\n \"popularity\": 56059\n },\n {\n \"tag\": "mediaevally",\n \"popularity\": 55885\n },\n {\n \"tag\": "brucite",\n \"popularity\": 55712\n },\n {\n \"tag\": "Schwendenerian",\n \"popularity\": 55541\n },\n {\n \"tag\": "julole",\n \"popularity\": 55370\n },\n {\n \"tag\": "palaeolith",\n \"popularity\": 55199\n },\n {\n \"tag\": "cotyledonary",\n \"popularity\": 55030\n },\n {\n \"tag\": "rond",\n \"popularity\": 54861\n },\n {\n \"tag\": "boomster tassoo",\n \"popularity\": 54694\n },\n {\n \"tag\": "cattishly",\n \"popularity\": 54527\n },\n {\n \"tag\": "tonguefence",\n \"popularity\": 54360\n },\n {\n \"tag\": "hexastylar triskele",\n \"popularity\": 54195\n },\n {\n \"tag\": "ariot",\n \"popularity\": 54030\n },\n {\n \"tag\": "intarsist",\n \"popularity\": 53867\n },\n {\n \"tag\": "Oscines",\n \"popularity\": 53704\n },\n {\n \"tag\": "Spaniolize",\n \"popularity\": 53541\n },\n {\n \"tag\": "smellfungus",\n \"popularity\": 53380\n },\n {\n \"tag\": "redisplay",\n \"popularity\": 53219\n },\n {\n \"tag\": "phosphene",\n \"popularity\": 53059\n },\n {\n \"tag\": "phycomycete",\n \"popularity\": 52900\n },\n {\n \"tag\": "prophetic",\n \"popularity\": 52741\n },\n {\n \"tag\": "overtrustful",\n \"popularity\": 52584\n },\n {\n \"tag\": "pinitol",\n \"popularity\": 52427\n },\n {\n \"tag\": "asthmatic",\n \"popularity\": 52270\n },\n {\n \"tag\": "convulsive",\n \"popularity\": 52115\n },\n {\n \"tag\": "draughtswoman",\n \"popularity\": 51960\n },\n {\n \"tag\": "unetymologizable",\n \"popularity\": 51806\n },\n {\n \"tag\": "centrarchoid",\n \"popularity\": 51652\n },\n {\n \"tag\": "mesioincisal",\n \"popularity\": 51500\n },\n {\n \"tag\": "transbaikal",\n \"popularity\": 51348\n },\n {\n \"tag\": "silveriness",\n \"popularity\": 51196\n },\n {\n \"tag\": "costotomy",\n \"popularity\": 51046\n },\n {\n \"tag\": "caracore",\n \"popularity\": 50896\n },\n {\n \"tag\": "depotentiation",\n \"popularity\": 50747\n },\n {\n \"tag\": "glossoepiglottidean",\n \"popularity\": 50598\n },\n {\n \"tag\": "upswell",\n \"popularity\": 50450\n },\n {\n \"tag\": "flecnodal",\n \"popularity\": 50303\n },\n {\n \"tag\": "coventrate",\n \"popularity\": 50157\n },\n {\n \"tag\": "duchesse",\n \"popularity\": 50011\n },\n {\n \"tag\": "excisemanship trophied",\n \"popularity\": 49866\n },\n {\n \"tag\": "cytinaceous",\n \"popularity\": 49721\n },\n {\n \"tag\": "assuringly",\n \"popularity\": 49577\n },\n {\n \"tag\": "unconducted upliftitis",\n \"popularity\": 49434\n },\n {\n \"tag\": "rachicentesis",\n \"popularity\": 49292\n },\n {\n \"tag\": "antiangular",\n \"popularity\": 49150\n },\n {\n \"tag\": "advisal",\n \"popularity\": 49008\n },\n {\n \"tag\": "birdcatcher",\n \"popularity\": 48868\n },\n {\n \"tag\": "secularistic",\n \"popularity\": 48728\n },\n {\n \"tag\": "grandeeism superinformal",\n \"popularity\": 48588\n },\n {\n \"tag\": "unapprehension",\n \"popularity\": 48449\n },\n {\n \"tag\": "excipulum",\n \"popularity\": 48311\n },\n {\n \"tag\": "decimole",\n \"popularity\": 48174\n },\n {\n \"tag\": "semidrachm",\n \"popularity\": 48037\n },\n {\n \"tag\": "uvulotome",\n \"popularity\": 47901\n },\n {\n \"tag\": "Lemaneaceae",\n \"popularity\": 47765\n },\n {\n \"tag\": "corrade",\n \"popularity\": 47630\n },\n {\n \"tag\": "Kuroshio",\n \"popularity\": 47495\n },\n {\n \"tag\": "Araliophyllum",\n \"popularity\": 47361\n },\n {\n \"tag\": "victoriousness cardiosphygmograph",\n \"popularity\": 47228\n },\n {\n \"tag\": "reinvent",\n \"popularity\": 47095\n },\n {\n \"tag\": "Macrotolagus",\n \"popularity\": 46963\n },\n {\n \"tag\": "strenuousness",\n \"popularity\": 46831\n },\n {\n \"tag\": "deviability",\n \"popularity\": 46700\n },\n {\n \"tag\": "phyllospondylous",\n \"popularity\": 46570\n },\n {\n \"tag\": "bisect rudderhole",\n \"popularity\": 46440\n },\n {\n \"tag\": "crownwork",\n \"popularity\": 46311\n },\n {\n \"tag\": "Ascalabota",\n \"popularity\": 46182\n },\n {\n \"tag\": "prostatomyomectomy",\n \"popularity\": 46054\n },\n {\n \"tag\": "neurosyphilis",\n \"popularity\": 45926\n },\n {\n \"tag\": "tabloid scraplet",\n \"popularity\": 45799\n },\n {\n \"tag\": "nonmedullated servility",\n \"popularity\": 45673\n },\n {\n \"tag\": "melopoeic practicalization",\n \"popularity\": 45547\n },\n {\n \"tag\": "nonrhythmic",\n \"popularity\": 45421\n },\n {\n \"tag\": "deplorer",\n \"popularity\": 45296\n },\n {\n \"tag\": "Ophion",\n \"popularity\": 45172\n },\n {\n \"tag\": "subprioress",\n \"popularity\": 45048\n },\n {\n \"tag\": "semiregular",\n \"popularity\": 44925\n },\n {\n \"tag\": "praelection",\n \"popularity\": 44802\n },\n {\n \"tag\": "discinct",\n \"popularity\": 44680\n },\n {\n \"tag\": "preplace",\n \"popularity\": 44558\n },\n {\n \"tag\": "paternoster",\n \"popularity\": 44437\n },\n {\n \"tag\": "suboccipital",\n \"popularity\": 44316\n },\n {\n \"tag\": "Teutophil",\n \"popularity\": 44196\n },\n {\n \"tag\": "tracheole",\n \"popularity\": 44076\n },\n {\n \"tag\": "subsmile",\n \"popularity\": 43957\n },\n {\n \"tag\": "nonapostatizing",\n \"popularity\": 43839\n },\n {\n \"tag\": "cleidotomy",\n \"popularity\": 43720\n },\n {\n \"tag\": "hingle",\n \"popularity\": 43603\n },\n {\n \"tag\": "jocoque",\n \"popularity\": 43486\n },\n {\n \"tag\": "trundler notidanian",\n \"popularity\": 43369\n },\n {\n \"tag\": "strangling misdaub",\n \"popularity\": 43253\n },\n {\n \"tag\": "noncancellable",\n \"popularity\": 43137\n },\n {\n \"tag\": "lavabo",\n \"popularity\": 43022\n },\n {\n \"tag\": "lanterloo",\n \"popularity\": 42907\n },\n {\n \"tag\": "uncitizenly",\n \"popularity\": 42793\n },\n {\n \"tag\": "autoturning",\n \"popularity\": 42679\n },\n {\n \"tag\": "Haganah",\n \"popularity\": 42566\n },\n {\n \"tag\": "Glecoma",\n \"popularity\": 42453\n },\n {\n \"tag\": "membered",\n \"popularity\": 42341\n },\n {\n \"tag\": "consuetudinal",\n \"popularity\": 42229\n },\n {\n \"tag\": "gatehouse",\n \"popularity\": 42117\n },\n {\n \"tag\": "tetherball",\n \"popularity\": 42006\n },\n {\n \"tag\": "counterrevolutionist numismatical",\n \"popularity\": 41896\n },\n {\n \"tag\": "pagehood plateiasmus",\n \"popularity\": 41786\n },\n {\n \"tag\": "pelterer",\n \"popularity\": 41676\n },\n {\n \"tag\": "splenemphraxis",\n \"popularity\": 41567\n },\n {\n \"tag\": "Crypturidae",\n \"popularity\": 41458\n },\n {\n \"tag\": "caboodle",\n \"popularity\": 41350\n },\n {\n \"tag\": "Filaria",\n \"popularity\": 41242\n },\n {\n \"tag\": "noninvincibility",\n \"popularity\": 41135\n },\n {\n \"tag\": "preadvertisement",\n \"popularity\": 41028\n },\n {\n \"tag\": "bathrobe",\n \"popularity\": 40921\n },\n {\n \"tag\": "nitrifier",\n \"popularity\": 40815\n },\n {\n \"tag\": "furthermore",\n \"popularity\": 40709\n },\n {\n \"tag\": "recrate",\n \"popularity\": 40604\n },\n {\n \"tag\": "inexist",\n \"popularity\": 40499\n },\n {\n \"tag\": "Mocoan",\n \"popularity\": 40395\n },\n {\n \"tag\": "forint",\n \"popularity\": 40291\n },\n {\n \"tag\": "cardiomyoliposis",\n \"popularity\": 40187\n },\n {\n \"tag\": "channeling",\n \"popularity\": 40084\n },\n {\n \"tag\": "quebrachine",\n \"popularity\": 39981\n },\n {\n \"tag\": "magistery",\n \"popularity\": 39879\n },\n {\n \"tag\": "koko",\n \"popularity\": 39777\n },\n {\n \"tag\": "nobilify",\n \"popularity\": 39676\n },\n {\n \"tag\": "articulate taprooted",\n \"popularity\": 39575\n },\n {\n \"tag\": "cardiotonic Nicaragua",\n \"popularity\": 39474\n },\n {\n \"tag\": "assertiveness",\n \"popularity\": 39374\n },\n {\n \"tag\": "springtail",\n \"popularity\": 39274\n },\n {\n \"tag\": "spontoon",\n \"popularity\": 39174\n },\n {\n \"tag\": "plesiobiosis",\n \"popularity\": 39075\n },\n {\n \"tag\": "rooinek",\n \"popularity\": 38976\n },\n {\n \"tag\": "hairif falsehood",\n \"popularity\": 38878\n },\n {\n \"tag\": "synodally",\n \"popularity\": 38780\n },\n {\n \"tag\": "biodynamics",\n \"popularity\": 38683\n },\n {\n \"tag\": "trickling",\n \"popularity\": 38585\n },\n {\n \"tag\": "oxfly daystar",\n \"popularity\": 38489\n },\n {\n \"tag\": "epicycloidal",\n \"popularity\": 38392\n },\n {\n \"tag\": "shorthand",\n \"popularity\": 38296\n },\n {\n \"tag\": "herpolhode",\n \"popularity\": 38201\n },\n {\n \"tag\": "polysynthesism",\n \"popularity\": 38105\n },\n {\n \"tag\": "cany",\n \"popularity\": 38010\n },\n {\n \"tag\": "sideage",\n \"popularity\": 37916\n },\n {\n \"tag\": "strainableness",\n \"popularity\": 37822\n },\n {\n \"tag\": "superformidable",\n \"popularity\": 37728\n },\n {\n \"tag\": "slendang",\n \"popularity\": 37634\n },\n {\n \"tag\": "impropriation",\n \"popularity\": 37541\n },\n {\n \"tag\": "ficklehearted",\n \"popularity\": 37449\n },\n {\n \"tag\": "wintrify",\n \"popularity\": 37356\n },\n {\n \"tag\": "geomorphogenist",\n \"popularity\": 37264\n },\n {\n \"tag\": "smuggleable",\n \"popularity\": 37173\n },\n {\n \"tag\": "delapsion",\n \"popularity\": 37081\n },\n {\n \"tag\": "projective",\n \"popularity\": 36990\n },\n {\n \"tag\": "unglue exfoliation",\n \"popularity\": 36900\n },\n {\n \"tag\": "Acerae",\n \"popularity\": 36810\n },\n {\n \"tag\": "unstaged",\n \"popularity\": 36720\n },\n {\n \"tag\": "ranal",\n \"popularity\": 36630\n },\n {\n \"tag\": "worrier",\n \"popularity\": 36541\n },\n {\n \"tag\": "unhid",\n \"popularity\": 36452\n },\n {\n \"tag\": "adequation",\n \"popularity\": 36363\n },\n {\n \"tag\": "strongylid Sokotri",\n \"popularity\": 36275\n },\n {\n \"tag\": "fumingly",\n \"popularity\": 36187\n },\n {\n \"tag\": "gynosporangium phaenogenetic",\n \"popularity\": 36100\n },\n {\n \"tag\": "uniunguiculate",\n \"popularity\": 36012\n },\n {\n \"tag\": "prudelike",\n \"popularity\": 35926\n },\n {\n \"tag\": "seminomata",\n \"popularity\": 35839\n },\n {\n \"tag\": "trinklet",\n \"popularity\": 35753\n },\n {\n \"tag\": "risorial",\n \"popularity\": 35667\n },\n {\n \"tag\": "pericardiocentesis",\n \"popularity\": 35581\n },\n {\n \"tag\": "filmist",\n \"popularity\": 35496\n },\n {\n \"tag\": "Nana",\n \"popularity\": 35411\n },\n {\n \"tag\": "cynipoid",\n \"popularity\": 35326\n },\n {\n \"tag\": "cteniform",\n \"popularity\": 35242\n },\n {\n \"tag\": "semiflex",\n \"popularity\": 35158\n },\n {\n \"tag\": "solstitially",\n \"popularity\": 35074\n },\n {\n \"tag\": "Algarsife",\n \"popularity\": 34991\n },\n {\n \"tag\": "noncriminal",\n \"popularity\": 34908\n },\n {\n \"tag\": "compassion",\n \"popularity\": 34825\n },\n {\n \"tag\": "Buddhic",\n \"popularity\": 34743\n },\n {\n \"tag\": "vellicative dactylically hotfoot",\n \"popularity\": 34661\n },\n {\n \"tag\": "chicory",\n \"popularity\": 34579\n },\n {\n \"tag\": "transperitoneally",\n \"popularity\": 34497\n },\n {\n \"tag\": "pennae",\n \"popularity\": 34416\n },\n {\n \"tag\": "Flamandize",\n \"popularity\": 34335\n },\n {\n \"tag\": "underviewer",\n \"popularity\": 34254\n },\n {\n \"tag\": "assoil",\n \"popularity\": 34174\n },\n {\n \"tag\": "saccharobacillus",\n \"popularity\": 34094\n },\n {\n \"tag\": "biacetylene",\n \"popularity\": 34014\n },\n {\n \"tag\": "mouchardism",\n \"popularity\": 33935\n },\n {\n \"tag\": "anisomeric",\n \"popularity\": 33856\n },\n {\n \"tag\": "digestive",\n \"popularity\": 33777\n },\n {\n \"tag\": "darlingly",\n \"popularity\": 33698\n },\n {\n \"tag\": "liman",\n \"popularity\": 33620\n },\n {\n \"tag\": "soldanrie",\n \"popularity\": 33542\n },\n {\n \"tag\": "sully",\n \"popularity\": 33464\n },\n {\n \"tag\": "brightsmith",\n \"popularity\": 33387\n },\n {\n \"tag\": "inwrap antiliturgist ureterocervical",\n \"popularity\": 33309\n },\n {\n \"tag\": "discommodity",\n \"popularity\": 33232\n },\n {\n \"tag\": "typical aggrandizer",\n \"popularity\": 33156\n },\n {\n \"tag\": "xenogeny",\n \"popularity\": 33079\n },\n {\n \"tag\": "uncountrified",\n \"popularity\": 33003\n },\n {\n \"tag\": "Podarge",\n \"popularity\": 32928\n },\n {\n \"tag\": "uninterviewed",\n \"popularity\": 32852\n },\n {\n \"tag\": "underprior",\n \"popularity\": 32777\n },\n {\n \"tag\": "leiomyomatous",\n \"popularity\": 32702\n },\n {\n \"tag\": "postdysenteric",\n \"popularity\": 32627\n },\n {\n \"tag\": "Fusicladium",\n \"popularity\": 32553\n },\n {\n \"tag\": "Dulcinea",\n \"popularity\": 32478\n },\n {\n \"tag\": "interspersion",\n \"popularity\": 32404\n },\n {\n \"tag\": "preobligate",\n \"popularity\": 32331\n },\n {\n \"tag\": "subaggregate",\n \"popularity\": 32257\n },\n {\n \"tag\": "grammarianism",\n \"popularity\": 32184\n },\n {\n \"tag\": "palikar",\n \"popularity\": 32111\n },\n {\n \"tag\": "facileness",\n \"popularity\": 32039\n },\n {\n \"tag\": "deuterofibrinose",\n \"popularity\": 31966\n },\n {\n \"tag\": "pseudesthesia",\n \"popularity\": 31894\n },\n {\n \"tag\": "sedimentary",\n \"popularity\": 31822\n },\n {\n \"tag\": "typewrite",\n \"popularity\": 31751\n },\n {\n \"tag\": "immemorable",\n \"popularity\": 31679\n },\n {\n \"tag\": "Myrtus",\n \"popularity\": 31608\n },\n {\n \"tag\": "hauchecornite",\n \"popularity\": 31537\n },\n {\n \"tag\": "galleylike",\n \"popularity\": 31467\n },\n {\n \"tag\": "thimber",\n \"popularity\": 31396\n },\n {\n \"tag\": "Hegelianism",\n \"popularity\": 31326\n },\n {\n \"tag\": "strig",\n \"popularity\": 31256\n },\n {\n \"tag\": "skyre",\n \"popularity\": 31187\n },\n {\n \"tag\": "eupepticism",\n \"popularity\": 31117\n },\n {\n \"tag\": "eponymism",\n \"popularity\": 31048\n },\n {\n \"tag\": "flunkeyhood",\n \"popularity\": 30979\n },\n {\n \"tag\": "Abama",\n \"popularity\": 30911\n },\n {\n \"tag\": "adiadochokinesis",\n \"popularity\": 30842\n },\n {\n \"tag\": "spendthrifty",\n \"popularity\": 30774\n },\n {\n \"tag\": "chalcedony",\n \"popularity\": 30706\n },\n {\n \"tag\": "authorism",\n \"popularity\": 30638\n },\n {\n \"tag\": "nasturtium",\n \"popularity\": 30571\n },\n {\n \"tag\": "Acanthocereus",\n \"popularity\": 30504\n },\n {\n \"tag\": "uncollapsible",\n \"popularity\": 30437\n },\n {\n \"tag\": "excursionist",\n \"popularity\": 30370\n },\n {\n \"tag\": "fogbow",\n \"popularity\": 30303\n },\n {\n \"tag\": "overlie",\n \"popularity\": 30237\n },\n {\n \"tag\": "velours",\n \"popularity\": 30171\n },\n {\n \"tag\": "zoodendria madrigal stagbush",\n \"popularity\": 30105\n },\n {\n \"tag\": "imi",\n \"popularity\": 30039\n },\n {\n \"tag\": "cojudge",\n \"popularity\": 29974\n },\n {\n \"tag\": "depurate argal",\n \"popularity\": 29909\n },\n {\n \"tag\": "unrecognition",\n \"popularity\": 29844\n },\n {\n \"tag\": "paunchful",\n \"popularity\": 29779\n },\n {\n \"tag\": "invalued",\n \"popularity\": 29714\n },\n {\n \"tag\": "probang",\n \"popularity\": 29650\n },\n {\n \"tag\": "chetvert",\n \"popularity\": 29586\n },\n {\n \"tag\": "enactable",\n \"popularity\": 29522\n },\n {\n \"tag\": "detoxicate adhibit",\n \"popularity\": 29458\n },\n {\n \"tag\": "kullaite",\n \"popularity\": 29395\n },\n {\n \"tag\": "undazzling",\n \"popularity\": 29332\n },\n {\n \"tag\": "excalation",\n \"popularity\": 29269\n },\n {\n \"tag\": "sievings",\n \"popularity\": 29206\n },\n {\n \"tag\": "disenthral",\n \"popularity\": 29143\n },\n {\n \"tag\": "disinterestedly",\n \"popularity\": 29081\n },\n {\n \"tag\": "stanner",\n \"popularity\": 29018\n },\n {\n \"tag\": "recapitulative",\n \"popularity\": 28956\n },\n {\n \"tag\": "objectivist",\n \"popularity\": 28895\n },\n {\n \"tag\": "hypermetropia",\n \"popularity\": 28833\n },\n {\n \"tag\": "incumbency",\n \"popularity\": 28772\n },\n {\n \"tag\": "protegee",\n \"popularity\": 28711\n },\n {\n \"tag\": "zealotic",\n \"popularity\": 28650\n },\n {\n \"tag\": "predebit",\n \"popularity\": 28589\n },\n {\n \"tag\": "cupolar",\n \"popularity\": 28528\n },\n {\n \"tag\": "unattributed",\n \"popularity\": 28468\n },\n {\n \"tag\": "louisine",\n \"popularity\": 28408\n },\n {\n \"tag\": "illustrate",\n \"popularity\": 28348\n },\n {\n \"tag\": "inofficiousness",\n \"popularity\": 28288\n },\n {\n \"tag\": "Americawards",\n \"popularity\": 28228\n },\n {\n \"tag\": "foreflap",\n \"popularity\": 28169\n },\n {\n \"tag\": "eruditeness",\n \"popularity\": 28110\n },\n {\n \"tag\": "copiopsia",\n \"popularity\": 28051\n },\n {\n \"tag\": "sporuliferous",\n \"popularity\": 27992\n },\n {\n \"tag\": "muttering",\n \"popularity\": 27934\n },\n {\n \"tag\": "prepsychology adrip",\n \"popularity\": 27875\n },\n {\n \"tag\": "unfriendly",\n \"popularity\": 27817\n },\n {\n \"tag\": "sulphanilic",\n \"popularity\": 27759\n },\n {\n \"tag\": "Coelococcus",\n \"popularity\": 27701\n },\n {\n \"tag\": "undoubtfulness",\n \"popularity\": 27643\n },\n {\n \"tag\": "flaringly",\n \"popularity\": 27586\n },\n {\n \"tag\": "unordain",\n \"popularity\": 27529\n },\n {\n \"tag\": "fratchety",\n \"popularity\": 27472\n },\n {\n \"tag\": "decadentism dolefully",\n \"popularity\": 27415\n },\n {\n \"tag\": "synthronus",\n \"popularity\": 27358\n },\n {\n \"tag\": "maiid",\n \"popularity\": 27301\n },\n {\n \"tag\": "rhinobyon",\n \"popularity\": 27245\n },\n {\n \"tag\": "Didynamia",\n \"popularity\": 27189\n },\n {\n \"tag\": "millionairedom",\n \"popularity\": 27133\n },\n {\n \"tag\": "mulierine",\n \"popularity\": 27077\n },\n {\n \"tag\": "Mayo",\n \"popularity\": 27021\n },\n {\n \"tag\": "perceivedness",\n \"popularity\": 26966\n },\n {\n \"tag\": "unadoration",\n \"popularity\": 26911\n },\n {\n \"tag\": "regraft",\n \"popularity\": 26856\n },\n {\n \"tag\": "witch",\n \"popularity\": 26801\n },\n {\n \"tag\": "ungrow",\n \"popularity\": 26746\n },\n {\n \"tag\": "glossopharyngeus",\n \"popularity\": 26691\n },\n {\n \"tag\": "unstirrable",\n \"popularity\": 26637\n },\n {\n \"tag\": "synodsman",\n \"popularity\": 26583\n },\n {\n \"tag\": "placentalian",\n \"popularity\": 26529\n },\n {\n \"tag\": "corpulently",\n \"popularity\": 26475\n },\n {\n \"tag\": "photochromoscope",\n \"popularity\": 26421\n },\n {\n \"tag\": "indusiate retinasphaltum chokestrap",\n \"popularity\": 26368\n },\n {\n \"tag\": "murdrum",\n \"popularity\": 26314\n },\n {\n \"tag\": "belatedness",\n \"popularity\": 26261\n },\n {\n \"tag\": "Cochin",\n \"popularity\": 26208\n },\n {\n \"tag\": "Leonist",\n \"popularity\": 26155\n },\n {\n \"tag\": "keeker confined",\n \"popularity\": 26102\n },\n {\n \"tag\": "unintellectual",\n \"popularity\": 26050\n },\n {\n \"tag\": "nymphaline bait",\n \"popularity\": 25997\n },\n {\n \"tag\": "sarcosporidiosis",\n \"popularity\": 25945\n },\n {\n \"tag\": "catawamptiously",\n \"popularity\": 25893\n },\n {\n \"tag\": "outshame",\n \"popularity\": 25841\n },\n {\n \"tag\": "animalism",\n \"popularity\": 25790\n },\n {\n \"tag\": "epithalamial",\n \"popularity\": 25738\n },\n {\n \"tag\": "ganner",\n \"popularity\": 25687\n },\n {\n \"tag\": "desilicify",\n \"popularity\": 25635\n },\n {\n \"tag\": "dandyism",\n \"popularity\": 25584\n },\n {\n \"tag\": "hyleg",\n \"popularity\": 25533\n },\n {\n \"tag\": "photophysical",\n \"popularity\": 25483\n },\n {\n \"tag\": "underload",\n \"popularity\": 25432\n },\n {\n \"tag\": "unintrusive",\n \"popularity\": 25382\n },\n {\n \"tag\": "succinamic",\n \"popularity\": 25331\n },\n {\n \"tag\": "matchy",\n \"popularity\": 25281\n },\n {\n \"tag\": "concordal",\n \"popularity\": 25231\n },\n {\n \"tag\": "exteriority",\n \"popularity\": 25181\n },\n {\n \"tag\": "sterculiad",\n \"popularity\": 25132\n },\n {\n \"tag\": "sulfoxylic",\n \"popularity\": 25082\n },\n {\n \"tag\": "oversubscription",\n \"popularity\": 25033\n },\n {\n \"tag\": "chiasmic",\n \"popularity\": 24984\n },\n {\n \"tag\": "pseudoparthenogenesis",\n \"popularity\": 24935\n },\n {\n \"tag\": "indorse",\n \"popularity\": 24886\n },\n {\n \"tag\": "Krishnaite",\n \"popularity\": 24837\n },\n {\n \"tag\": "calcinize",\n \"popularity\": 24788\n },\n {\n \"tag\": "rhodium",\n \"popularity\": 24740\n },\n {\n \"tag\": "tragopan",\n \"popularity\": 24692\n },\n {\n \"tag\": "overwhelmingly",\n \"popularity\": 24643\n },\n {\n \"tag\": "procidence accorporate",\n \"popularity\": 24595\n },\n {\n \"tag\": "polemize speelless",\n \"popularity\": 24548\n },\n {\n \"tag\": "radiocarpal goran",\n \"popularity\": 24500\n },\n {\n \"tag\": "counteroffer Pelodytes",\n \"popularity\": 24452\n },\n {\n \"tag\": "lionhearted",\n \"popularity\": 24405\n },\n {\n \"tag\": "paramastoid",\n \"popularity\": 24358\n },\n {\n \"tag\": "murine",\n \"popularity\": 24310\n },\n {\n \"tag\": "woodbined",\n \"popularity\": 24263\n },\n {\n \"tag\": "packthread",\n \"popularity\": 24217\n },\n {\n \"tag\": "citreous",\n \"popularity\": 24170\n },\n {\n \"tag\": "unfallaciously",\n \"popularity\": 24123\n },\n {\n \"tag\": "tentwork reincarnadine",\n \"popularity\": 24077\n },\n {\n \"tag\": "verminousness",\n \"popularity\": 24030\n },\n {\n \"tag\": "sillometer",\n \"popularity\": 23984\n },\n {\n \"tag\": "jointy",\n \"popularity\": 23938\n },\n {\n \"tag\": "streptolysin",\n \"popularity\": 23892\n },\n {\n \"tag\": "Florentinism",\n \"popularity\": 23847\n },\n {\n \"tag\": "monosomatous",\n \"popularity\": 23801\n },\n {\n \"tag\": "capsulociliary",\n \"popularity\": 23756\n },\n {\n \"tag\": "organum",\n \"popularity\": 23710\n },\n {\n \"tag\": "overtly",\n \"popularity\": 23665\n },\n {\n \"tag\": "ophthalmoscopical",\n \"popularity\": 23620\n },\n {\n \"tag\": "supposititiously",\n \"popularity\": 23575\n },\n {\n \"tag\": "radiochemistry",\n \"popularity\": 23530\n },\n {\n \"tag\": "flaxtail",\n \"popularity\": 23486\n },\n {\n \"tag\": "pretympanic",\n \"popularity\": 23441\n },\n {\n \"tag\": "auscultation",\n \"popularity\": 23397\n },\n {\n \"tag\": "hairdresser",\n \"popularity\": 23352\n },\n {\n \"tag\": "chaffless",\n \"popularity\": 23308\n },\n {\n \"tag\": "polioencephalitis",\n \"popularity\": 23264\n },\n {\n \"tag\": "axolotl",\n \"popularity\": 23220\n },\n {\n \"tag\": "smous",\n \"popularity\": 23177\n },\n {\n \"tag\": "morgen disenamour toothed",\n \"popularity\": 23133\n },\n {\n \"tag\": "chaiseless",\n \"popularity\": 23089\n },\n {\n \"tag\": "frugally",\n \"popularity\": 23046\n },\n {\n \"tag\": "combustive antievolutionist cinenegative",\n \"popularity\": 23003\n },\n {\n \"tag\": "malacolite",\n \"popularity\": 22960\n },\n {\n \"tag\": "borne",\n \"popularity\": 22917\n },\n {\n \"tag\": "mercaptole",\n \"popularity\": 22874\n },\n {\n \"tag\": "judicatory",\n \"popularity\": 22831\n },\n {\n \"tag\": "noctivagation",\n \"popularity\": 22789\n },\n {\n \"tag\": "synthete",\n \"popularity\": 22746\n },\n {\n \"tag\": "tomboyism",\n \"popularity\": 22704\n },\n {\n \"tag\": "serranoid",\n \"popularity\": 22661\n },\n {\n \"tag\": "impostorism",\n \"popularity\": 22619\n },\n {\n \"tag\": "flagellosis Talitha",\n \"popularity\": 22577\n },\n {\n \"tag\": "pseudoviscous",\n \"popularity\": 22535\n },\n {\n \"tag\": "Galleriidae",\n \"popularity\": 22494\n },\n {\n \"tag\": "undulation didelph Comintern",\n \"popularity\": 22452\n },\n {\n \"tag\": "triangulopyramidal",\n \"popularity\": 22411\n },\n {\n \"tag\": "middlings",\n \"popularity\": 22369\n },\n {\n \"tag\": "piperazin",\n \"popularity\": 22328\n },\n {\n \"tag\": "endostitis",\n \"popularity\": 22287\n },\n {\n \"tag\": "swordlike",\n \"popularity\": 22246\n },\n {\n \"tag\": "forthwith",\n \"popularity\": 22205\n },\n {\n \"tag\": "menaceful",\n \"popularity\": 22164\n },\n {\n \"tag\": "explantation defective",\n \"popularity\": 22123\n },\n {\n \"tag\": "arrear",\n \"popularity\": 22083\n },\n {\n \"tag\": "engraft",\n \"popularity\": 22042\n },\n {\n \"tag\": "revolunteer",\n \"popularity\": 22002\n },\n {\n \"tag\": "foliaceous",\n \"popularity\": 21962\n },\n {\n \"tag\": "pseudograph",\n \"popularity\": 21922\n },\n {\n \"tag\": "maenaite",\n \"popularity\": 21882\n },\n {\n \"tag\": "interfinger",\n \"popularity\": 21842\n },\n {\n \"tag\": "macroscopically",\n \"popularity\": 21802\n },\n {\n \"tag\": "bluewood",\n \"popularity\": 21762\n },\n {\n \"tag\": "chikara",\n \"popularity\": 21723\n },\n {\n \"tag\": "reprehension diazeuxis nickelous",\n \"popularity\": 21683\n },\n {\n \"tag\": "vacuation",\n \"popularity\": 21644\n },\n {\n \"tag\": "Sartish",\n \"popularity\": 21605\n },\n {\n \"tag\": "pseudogyny",\n \"popularity\": 21566\n },\n {\n \"tag\": "friedcake",\n \"popularity\": 21527\n },\n {\n \"tag\": "thraw",\n \"popularity\": 21488\n },\n {\n \"tag\": "bifid",\n \"popularity\": 21449\n },\n {\n \"tag\": "truthlessly",\n \"popularity\": 21411\n },\n {\n \"tag\": "lungy",\n \"popularity\": 21372\n },\n {\n \"tag\": "fluoborite",\n \"popularity\": 21334\n },\n {\n \"tag\": "anthropolithic",\n \"popularity\": 21295\n },\n {\n \"tag\": "coachee straw",\n \"popularity\": 21257\n },\n {\n \"tag\": "dehorner Grecize",\n \"popularity\": 21219\n },\n {\n \"tag\": "spondylopyosis",\n \"popularity\": 21181\n },\n {\n \"tag\": "institutionary",\n \"popularity\": 21143\n },\n {\n \"tag\": "agentry",\n \"popularity\": 21105\n },\n {\n \"tag\": "musing bietle",\n \"popularity\": 21068\n },\n {\n \"tag\": "cormophyte",\n \"popularity\": 21030\n },\n {\n \"tag\": "semielliptic",\n \"popularity\": 20993\n },\n {\n \"tag\": "ependytes",\n \"popularity\": 20955\n },\n {\n \"tag\": "coachmaster",\n \"popularity\": 20918\n },\n {\n \"tag\": "overexuberant",\n \"popularity\": 20881\n },\n {\n \"tag\": "selectable",\n \"popularity\": 20844\n },\n {\n \"tag\": "saclike",\n \"popularity\": 20807\n },\n {\n \"tag\": "mullion",\n \"popularity\": 20770\n },\n {\n \"tag\": "pantheonize prevalency",\n \"popularity\": 20733\n },\n {\n \"tag\": "trophosperm",\n \"popularity\": 20697\n },\n {\n \"tag\": "paraphrasist",\n \"popularity\": 20660\n },\n {\n \"tag\": "undercarry",\n \"popularity\": 20624\n },\n {\n \"tag\": "thallogenic",\n \"popularity\": 20587\n },\n {\n \"tag\": "bulgy forbid",\n \"popularity\": 20551\n },\n {\n \"tag\": "proliquor gratulatory",\n \"popularity\": 20515\n },\n {\n \"tag\": "booker",\n \"popularity\": 20479\n },\n {\n \"tag\": "wizen",\n \"popularity\": 20443\n },\n {\n \"tag\": "synchondrosially",\n \"popularity\": 20407\n },\n {\n \"tag\": "herbless",\n \"popularity\": 20371\n },\n {\n \"tag\": "arfvedsonite",\n \"popularity\": 20336\n },\n {\n \"tag\": "Neuroptera",\n \"popularity\": 20300\n },\n {\n \"tag\": "fingerstone",\n \"popularity\": 20265\n },\n {\n \"tag\": "Odontoglossae",\n \"popularity\": 20229\n },\n {\n \"tag\": "transmigrator",\n \"popularity\": 20194\n },\n {\n \"tag\": "Dehaites",\n \"popularity\": 20159\n },\n {\n \"tag\": "Molinist",\n \"popularity\": 20124\n },\n {\n \"tag\": "novelistic",\n \"popularity\": 20089\n },\n {\n \"tag\": "astelic",\n \"popularity\": 20054\n },\n {\n \"tag\": "pyelometry",\n \"popularity\": 20019\n },\n {\n \"tag\": "pigmentation",\n \"popularity\": 19984\n },\n {\n \"tag\": "epinaos",\n \"popularity\": 19950\n },\n {\n \"tag\": "outdare",\n \"popularity\": 19915\n },\n {\n \"tag\": "Funje philaristocracy",\n \"popularity\": 19881\n },\n {\n \"tag\": "keddah",\n \"popularity\": 19846\n },\n {\n \"tag\": "axoidean",\n \"popularity\": 19812\n },\n {\n \"tag\": "ovule",\n \"popularity\": 19778\n },\n {\n \"tag\": "solidify",\n \"popularity\": 19744\n },\n {\n \"tag\": "noncelestial",\n \"popularity\": 19710\n },\n {\n \"tag\": "overmultiplication",\n \"popularity\": 19676\n },\n {\n \"tag\": "hexatetrahedron",\n \"popularity\": 19642\n },\n {\n \"tag\": "pliciform",\n \"popularity\": 19609\n },\n {\n \"tag\": "zimbalon",\n \"popularity\": 19575\n },\n {\n \"tag\": "annexational",\n \"popularity\": 19542\n },\n {\n \"tag\": "eurhodol",\n \"popularity\": 19508\n },\n {\n \"tag\": "yark",\n \"popularity\": 19475\n },\n {\n \"tag\": "illegality nitroalizarin",\n \"popularity\": 19442\n },\n {\n \"tag\": "quadratum",\n \"popularity\": 19409\n },\n {\n \"tag\": "saccharine",\n \"popularity\": 19376\n },\n {\n \"tag\": "unemploy",\n \"popularity\": 19343\n },\n {\n \"tag\": "uniclinal unipotent",\n \"popularity\": 19310\n },\n {\n \"tag\": "turbo",\n \"popularity\": 19277\n },\n {\n \"tag\": "sybarism",\n \"popularity\": 19244\n },\n {\n \"tag\": "motacilline",\n \"popularity\": 19212\n },\n {\n \"tag\": "weaselly",\n \"popularity\": 19179\n },\n {\n \"tag\": "plastid",\n \"popularity\": 19147\n },\n {\n \"tag\": "wasting",\n \"popularity\": 19114\n },\n {\n \"tag\": "begrime fluting",\n \"popularity\": 19082\n },\n {\n \"tag\": "Nephilinae",\n \"popularity\": 19050\n },\n {\n \"tag\": "disregardance",\n \"popularity\": 19018\n },\n {\n \"tag\": "Shakerlike",\n \"popularity\": 18986\n },\n {\n \"tag\": "uniped",\n \"popularity\": 18954\n },\n {\n \"tag\": "knap",\n \"popularity\": 18922\n },\n {\n \"tag\": "electivism undergardener",\n \"popularity\": 18890\n },\n {\n \"tag\": "hulverheaded",\n \"popularity\": 18858\n },\n {\n \"tag\": "unruptured",\n \"popularity\": 18827\n },\n {\n \"tag\": "solemnize credently",\n \"popularity\": 18795\n },\n {\n \"tag\": "pentastomoid possessingly",\n \"popularity\": 18764\n },\n {\n \"tag\": "octose",\n \"popularity\": 18733\n },\n {\n \"tag\": "psithurism indefensibility",\n \"popularity\": 18701\n },\n {\n \"tag\": "torrentuous cyanometer subcrenate",\n \"popularity\": 18670\n },\n {\n \"tag\": "photoplaywright tapaculo",\n \"popularity\": 18639\n },\n {\n \"tag\": "univalence",\n \"popularity\": 18608\n },\n {\n \"tag\": "Porthetria",\n \"popularity\": 18577\n },\n {\n \"tag\": "funambulo",\n \"popularity\": 18546\n },\n {\n \"tag\": "pedion",\n \"popularity\": 18515\n },\n {\n \"tag\": "horticulturally",\n \"popularity\": 18485\n },\n {\n \"tag\": "marennin",\n \"popularity\": 18454\n },\n {\n \"tag\": "horselaugh",\n \"popularity\": 18423\n },\n {\n \"tag\": "semiexecutive",\n \"popularity\": 18393\n },\n {\n \"tag\": "Monopteridae",\n \"popularity\": 18363\n },\n {\n \"tag\": "commonable",\n \"popularity\": 18332\n },\n {\n \"tag\": "dreariment",\n \"popularity\": 18302\n },\n {\n \"tag\": "disbud",\n \"popularity\": 18272\n },\n {\n \"tag\": "monocled",\n \"popularity\": 18242\n },\n {\n \"tag\": "hurlbarrow",\n \"popularity\": 18212\n },\n {\n \"tag\": "opiateproof",\n \"popularity\": 18182\n },\n {\n \"tag\": "Fahrenheit",\n \"popularity\": 18152\n },\n {\n \"tag\": "writhed",\n \"popularity\": 18122\n },\n {\n \"tag\": "Volstead",\n \"popularity\": 18093\n },\n {\n \"tag\": "yesternight",\n \"popularity\": 18063\n },\n {\n \"tag\": "readmittance",\n \"popularity\": 18033\n },\n {\n \"tag\": "reiterable",\n \"popularity\": 18004\n },\n {\n \"tag\": "triquetral",\n \"popularity\": 17975\n },\n {\n \"tag\": "guillotinement",\n \"popularity\": 17945\n },\n {\n \"tag\": "repermission",\n \"popularity\": 17916\n },\n {\n \"tag\": "assishly",\n \"popularity\": 17887\n },\n {\n \"tag\": "daidle",\n \"popularity\": 17858\n },\n {\n \"tag\": "prismatoid",\n \"popularity\": 17829\n },\n {\n \"tag\": "irreptitious",\n \"popularity\": 17800\n },\n {\n \"tag\": "sourdeline",\n \"popularity\": 17771\n },\n {\n \"tag\": "Austrian",\n \"popularity\": 17742\n },\n {\n \"tag\": "psychorrhagic",\n \"popularity\": 17713\n },\n {\n \"tag\": "Monumbo",\n \"popularity\": 17685\n },\n {\n \"tag\": "cloiochoanitic",\n \"popularity\": 17656\n },\n {\n \"tag\": "hant",\n \"popularity\": 17628\n },\n {\n \"tag\": "roily pulldown",\n \"popularity\": 17599\n },\n {\n \"tag\": "recongratulation",\n \"popularity\": 17571\n },\n {\n \"tag\": "Peking",\n \"popularity\": 17543\n },\n {\n \"tag\": "erdvark",\n \"popularity\": 17514\n },\n {\n \"tag\": "antimnemonic",\n \"popularity\": 17486\n },\n {\n \"tag\": "noncapillarity",\n \"popularity\": 17458\n },\n {\n \"tag\": "irrepressive",\n \"popularity\": 17430\n },\n {\n \"tag\": "Petromyzontes",\n \"popularity\": 17402\n },\n {\n \"tag\": "piscatorially",\n \"popularity\": 17374\n },\n {\n \"tag\": "cholesterosis",\n \"popularity\": 17346\n },\n {\n \"tag\": "denunciate",\n \"popularity\": 17319\n },\n {\n \"tag\": "unmetalled",\n \"popularity\": 17291\n },\n {\n \"tag\": "Tigris enruin",\n \"popularity\": 17263\n },\n {\n \"tag\": "anaspalin",\n \"popularity\": 17236\n },\n {\n \"tag\": "monodromy",\n \"popularity\": 17208\n },\n {\n \"tag\": "Canichanan",\n \"popularity\": 17181\n },\n {\n \"tag\": "mesolabe",\n \"popularity\": 17154\n },\n {\n \"tag\": "trichothallic overcunningness",\n \"popularity\": 17127\n },\n {\n \"tag\": "spinsterishly",\n \"popularity\": 17099\n },\n {\n \"tag\": "sensilla",\n \"popularity\": 17072\n },\n {\n \"tag\": "wifelkin",\n \"popularity\": 17045\n },\n {\n \"tag\": "suppositionless",\n \"popularity\": 17018\n },\n {\n \"tag\": "irksomeness",\n \"popularity\": 16991\n },\n {\n \"tag\": "sanbenito",\n \"popularity\": 16964\n },\n {\n \"tag\": "nonstatement",\n \"popularity\": 16938\n },\n {\n \"tag\": "phenoloid",\n \"popularity\": 16911\n },\n {\n \"tag\": "Steinberger",\n \"popularity\": 16884\n },\n {\n \"tag\": "replicated boom",\n \"popularity\": 16858\n },\n {\n \"tag\": "sciomachiology",\n \"popularity\": 16831\n },\n {\n \"tag\": "starwise",\n \"popularity\": 16805\n },\n {\n \"tag\": "prerich",\n \"popularity\": 16778\n },\n {\n \"tag\": "unspawned",\n \"popularity\": 16752\n },\n {\n \"tag\": "unindentable",\n \"popularity\": 16726\n },\n {\n \"tag\": "stromatic",\n \"popularity\": 16700\n },\n {\n \"tag\": "fetishize",\n \"popularity\": 16673\n },\n {\n \"tag\": "dihydroxy",\n \"popularity\": 16647\n },\n {\n \"tag\": "precaudal",\n \"popularity\": 16621\n },\n {\n \"tag\": "Madagascar",\n \"popularity\": 16595\n },\n {\n \"tag\": "repinement",\n \"popularity\": 16570\n },\n {\n \"tag\": "noncathedral wenzel",\n \"popularity\": 16544\n },\n {\n \"tag\": "corollike",\n \"popularity\": 16518\n },\n {\n \"tag\": "pubes unamortization",\n \"popularity\": 16492\n },\n {\n \"tag\": "brickcroft",\n \"popularity\": 16467\n },\n {\n \"tag\": "intertrabecular",\n \"popularity\": 16441\n },\n {\n \"tag\": "formulaic",\n \"popularity\": 16416\n },\n {\n \"tag\": "arienzo",\n \"popularity\": 16390\n },\n {\n \"tag\": "Mazzinian",\n \"popularity\": 16365\n },\n {\n \"tag\": "wallowishly",\n \"popularity\": 16339\n },\n {\n \"tag\": "sysselman",\n \"popularity\": 16314\n },\n {\n \"tag\": "seligmannite",\n \"popularity\": 16289\n },\n {\n \"tag\": "harlequinery",\n \"popularity\": 16264\n },\n {\n \"tag\": "zucchetto",\n \"popularity\": 16239\n },\n {\n \"tag\": "malonyl",\n \"popularity\": 16214\n },\n {\n \"tag\": "patwari",\n \"popularity\": 16189\n },\n {\n \"tag\": "neoholmia venturesomeness",\n \"popularity\": 16164\n },\n {\n \"tag\": "Dehwar",\n \"popularity\": 16139\n },\n {\n \"tag\": "fetiferous",\n \"popularity\": 16114\n },\n {\n \"tag\": "chromatophore",\n \"popularity\": 16090\n },\n {\n \"tag\": "reregistration",\n \"popularity\": 16065\n },\n {\n \"tag\": "alienor",\n \"popularity\": 16040\n },\n {\n \"tag\": "Hexagynia",\n \"popularity\": 16016\n },\n {\n \"tag\": "cerebrotonia",\n \"popularity\": 15991\n },\n {\n \"tag\": "deedbox",\n \"popularity\": 15967\n },\n {\n \"tag\": "staab",\n \"popularity\": 15943\n },\n {\n \"tag\": "uratemia",\n \"popularity\": 15918\n },\n {\n \"tag\": "flaunt",\n \"popularity\": 15894\n },\n {\n \"tag\": "bogy",\n \"popularity\": 15870\n },\n {\n \"tag\": "subcartilaginous",\n \"popularity\": 15846\n },\n {\n \"tag\": "protonephridial",\n \"popularity\": 15822\n },\n {\n \"tag\": "Boswellia",\n \"popularity\": 15798\n },\n {\n \"tag\": "relaxant untiaraed protoepiphyte",\n \"popularity\": 15774\n },\n {\n \"tag\": "nesslerization",\n \"popularity\": 15750\n },\n {\n \"tag\": "precession",\n \"popularity\": 15726\n },\n {\n \"tag\": "peat",\n \"popularity\": 15702\n },\n {\n \"tag\": "unbit",\n \"popularity\": 15678\n },\n {\n \"tag\": "snailish",\n \"popularity\": 15655\n },\n {\n \"tag\": "porismatical",\n \"popularity\": 15631\n },\n {\n \"tag\": "hooflike",\n \"popularity\": 15608\n },\n {\n \"tag\": "resuppose phene cranic",\n \"popularity\": 15584\n },\n {\n \"tag\": "peptonization kipskin",\n \"popularity\": 15561\n },\n {\n \"tag\": "birdstone",\n \"popularity\": 15537\n },\n {\n \"tag\": "empty inferoanterior",\n \"popularity\": 15514\n },\n {\n \"tag\": "androtauric",\n \"popularity\": 15491\n },\n {\n \"tag\": "triamide",\n \"popularity\": 15467\n },\n {\n \"tag\": "showmanry",\n \"popularity\": 15444\n },\n {\n \"tag\": "doing",\n \"popularity\": 15421\n },\n {\n \"tag\": "bouchaleen",\n \"popularity\": 15398\n },\n {\n \"tag\": "precollude",\n \"popularity\": 15375\n },\n {\n \"tag\": "finger",\n \"popularity\": 15352\n },\n {\n \"tag\": "limnetic intermessenger",\n \"popularity\": 15329\n },\n {\n \"tag\": "uncharitable picrotoxic",\n \"popularity\": 15306\n },\n {\n \"tag\": "nationalizer Phasmidae",\n \"popularity\": 15283\n },\n {\n \"tag\": "laughingstock",\n \"popularity\": 15261\n },\n {\n \"tag\": "nondeferential",\n \"popularity\": 15238\n },\n {\n \"tag\": "uproariously",\n \"popularity\": 15215\n },\n {\n \"tag\": "manzanilla",\n \"popularity\": 15193\n },\n {\n \"tag\": "khahoon",\n \"popularity\": 15170\n },\n {\n \"tag\": "olericulturally longshanks",\n \"popularity\": 15148\n },\n {\n \"tag\": "enthusiastically methionic",\n \"popularity\": 15125\n },\n {\n \"tag\": "pobs",\n \"popularity\": 15103\n },\n {\n \"tag\": "tricarpellate",\n \"popularity\": 15081\n },\n {\n \"tag\": "souterrain",\n \"popularity\": 15058\n },\n {\n \"tag\": "tethelin",\n \"popularity\": 15036\n },\n {\n \"tag\": "tartle",\n \"popularity\": 15014\n },\n {\n \"tag\": "tidelike",\n \"popularity\": 14992\n },\n {\n \"tag\": "cosmoramic",\n \"popularity\": 14970\n },\n {\n \"tag\": "pretardiness",\n \"popularity\": 14948\n },\n {\n \"tag\": "insoul",\n \"popularity\": 14926\n },\n {\n \"tag\": "anthroxan",\n \"popularity\": 14904\n },\n {\n \"tag\": "jilter",\n \"popularity\": 14882\n },\n {\n \"tag\": "pectinibranchian trematode",\n \"popularity\": 14860\n },\n {\n \"tag\": "Renaissancist",\n \"popularity\": 14838\n },\n {\n \"tag\": "imaginant",\n \"popularity\": 14817\n },\n {\n \"tag\": "supercensure",\n \"popularity\": 14795\n },\n {\n \"tag\": "festilogy",\n \"popularity\": 14773\n },\n {\n \"tag\": "regression",\n \"popularity\": 14752\n },\n {\n \"tag\": "mesobregmate languorously",\n \"popularity\": 14730\n },\n {\n \"tag\": "unsupernaturalized",\n \"popularity\": 14709\n },\n {\n \"tag\": "boobyish",\n \"popularity\": 14687\n },\n {\n \"tag\": "scopolamine",\n \"popularity\": 14666\n },\n {\n \"tag\": "reamputation unchristianly",\n \"popularity\": 14645\n },\n {\n \"tag\": "cuneatic",\n \"popularity\": 14623\n },\n {\n \"tag\": "heathberry",\n \"popularity\": 14602\n },\n {\n \"tag\": "hate",\n \"popularity\": 14581\n },\n {\n \"tag\": "redeemableness",\n \"popularity\": 14560\n },\n {\n \"tag\": "damasse",\n \"popularity\": 14539\n },\n {\n \"tag\": "thrillsome",\n \"popularity\": 14518\n },\n {\n \"tag\": "disseverment",\n \"popularity\": 14497\n },\n {\n \"tag\": "underbishopric Ostyak",\n \"popularity\": 14476\n },\n {\n \"tag\": "Exoascales",\n \"popularity\": 14455\n },\n {\n \"tag\": "soiled",\n \"popularity\": 14434\n },\n {\n \"tag\": "Cain",\n \"popularity\": 14413\n },\n {\n \"tag\": "mismanageable arenae",\n \"popularity\": 14392\n },\n {\n \"tag\": "manducate unhinderably",\n \"popularity\": 14372\n },\n {\n \"tag\": "peregrin",\n \"popularity\": 14351\n },\n {\n \"tag\": "musicianly",\n \"popularity\": 14330\n },\n {\n \"tag\": "aln",\n \"popularity\": 14310\n },\n {\n \"tag\": "intercentrum",\n \"popularity\": 14289\n },\n {\n \"tag\": "roothold",\n \"popularity\": 14269\n },\n {\n \"tag\": "jane aneurism",\n \"popularity\": 14248\n },\n {\n \"tag\": "insinuatively forefeel phytolatrous",\n \"popularity\": 14228\n },\n {\n \"tag\": "kanchil",\n \"popularity\": 14208\n },\n {\n \"tag\": "Austrophile",\n \"popularity\": 14187\n },\n {\n \"tag\": "unterrorized",\n \"popularity\": 14167\n },\n {\n \"tag\": "admeasure",\n \"popularity\": 14147\n },\n {\n \"tag\": "electrodissolution",\n \"popularity\": 14127\n },\n {\n \"tag\": "unweddedly",\n \"popularity\": 14107\n },\n {\n \"tag\": "unannoying",\n \"popularity\": 14087\n },\n {\n \"tag\": "uningenuous",\n \"popularity\": 14067\n },\n {\n \"tag\": "omnibenevolent",\n \"popularity\": 14047\n },\n {\n \"tag\": "commissure",\n \"popularity\": 14027\n },\n {\n \"tag\": "tellureted",\n \"popularity\": 14007\n },\n {\n \"tag\": "suffragan",\n \"popularity\": 13987\n },\n {\n \"tag\": "sphaeriaceous",\n \"popularity\": 13967\n },\n {\n \"tag\": "unfearing",\n \"popularity\": 13947\n },\n {\n \"tag\": "stentoriousness precounsellor",\n \"popularity\": 13928\n },\n {\n \"tag\": "haemaspectroscope",\n \"popularity\": 13908\n },\n {\n \"tag\": "teras",\n \"popularity\": 13888\n },\n {\n \"tag\": "pulicine",\n \"popularity\": 13869\n },\n {\n \"tag\": "colicystopyelitis",\n \"popularity\": 13849\n },\n {\n \"tag\": "Physalia",\n \"popularity\": 13830\n },\n {\n \"tag\": "Saxicolidae",\n \"popularity\": 13810\n },\n {\n \"tag\": "peritonital",\n \"popularity\": 13791\n },\n {\n \"tag\": "dysphotic",\n \"popularity\": 13771\n },\n {\n \"tag\": "unabandoned",\n \"popularity\": 13752\n },\n {\n \"tag\": "rashful",\n \"popularity\": 13733\n },\n {\n \"tag\": "goodyness Manobo",\n \"popularity\": 13714\n },\n {\n \"tag\": "glaring",\n \"popularity\": 13694\n },\n {\n \"tag\": "horrorful",\n \"popularity\": 13675\n },\n {\n \"tag\": "intercepting",\n \"popularity\": 13656\n },\n {\n \"tag\": "semifine",\n \"popularity\": 13637\n },\n {\n \"tag\": "Gaypoo",\n \"popularity\": 13618\n },\n {\n \"tag\": "Metrosideros",\n \"popularity\": 13599\n },\n {\n \"tag\": "thoracicolumbar",\n \"popularity\": 13580\n },\n {\n \"tag\": "unserried",\n \"popularity\": 13561\n },\n {\n \"tag\": "keeperess cauterization",\n \"popularity\": 13542\n },\n {\n \"tag\": "administrant",\n \"popularity\": 13523\n },\n {\n \"tag\": "unpropitiatedness",\n \"popularity\": 13505\n },\n {\n \"tag\": "pensileness",\n \"popularity\": 13486\n },\n {\n \"tag\": "quinaldic unreceivable",\n \"popularity\": 13467\n },\n {\n \"tag\": "Carnaria",\n \"popularity\": 13448\n },\n {\n \"tag\": "azothionium wurrus",\n \"popularity\": 13430\n },\n {\n \"tag\": "mistresshood",\n \"popularity\": 13411\n },\n {\n \"tag\": "Savara",\n \"popularity\": 13393\n },\n {\n \"tag\": "dasyurine",\n \"popularity\": 13374\n },\n {\n \"tag\": "superideal",\n \"popularity\": 13356\n },\n {\n \"tag\": "Parisianize",\n \"popularity\": 13337\n },\n {\n \"tag\": "underearth",\n \"popularity\": 13319\n },\n {\n \"tag\": "athrogenic",\n \"popularity\": 13301\n },\n {\n \"tag\": "communicate",\n \"popularity\": 13282\n },\n {\n \"tag\": "denervation enworthed",\n \"popularity\": 13264\n },\n {\n \"tag\": "subbromide",\n \"popularity\": 13246\n },\n {\n \"tag\": "stenocoriasis",\n \"popularity\": 13228\n },\n {\n \"tag\": "facetiousness",\n \"popularity\": 13209\n },\n {\n \"tag\": "twaddling",\n \"popularity\": 13191\n },\n {\n \"tag\": "tetartoconid",\n \"popularity\": 13173\n },\n {\n \"tag\": "audiophile",\n \"popularity\": 13155\n },\n {\n \"tag\": "fustigate",\n \"popularity\": 13137\n },\n {\n \"tag\": "Sorbian cacophonia",\n \"popularity\": 13119\n },\n {\n \"tag\": "fondish",\n \"popularity\": 13101\n },\n {\n \"tag\": "endomastoiditis",\n \"popularity\": 13084\n },\n {\n \"tag\": "sniptious",\n \"popularity\": 13066\n },\n {\n \"tag\": "glochidiate",\n \"popularity\": 13048\n },\n {\n \"tag\": "polycarboxylic",\n \"popularity\": 13030\n },\n {\n \"tag\": "stamp",\n \"popularity\": 13012\n },\n {\n \"tag\": "tritonymph endotoxoid",\n \"popularity\": 12995\n },\n {\n \"tag\": "wolfskin",\n \"popularity\": 12977\n },\n {\n \"tag\": "oncosimeter",\n \"popularity\": 12959\n },\n {\n \"tag\": "outward",\n \"popularity\": 12942\n },\n {\n \"tag\": "circumscribed",\n \"popularity\": 12924\n },\n {\n \"tag\": "autohemolytic",\n \"popularity\": 12907\n },\n {\n \"tag\": "isorhamnose",\n \"popularity\": 12889\n },\n {\n \"tag\": "monarchomachic",\n \"popularity\": 12872\n },\n {\n \"tag\": "phaenomenon",\n \"popularity\": 12855\n },\n {\n \"tag\": "angiopressure",\n \"popularity\": 12837\n },\n {\n \"tag\": "similarize",\n \"popularity\": 12820\n },\n {\n \"tag\": "unseeable",\n \"popularity\": 12803\n },\n {\n \"tag\": "Toryize",\n \"popularity\": 12785\n },\n {\n \"tag\": "fruitling",\n \"popularity\": 12768\n },\n {\n \"tag\": "axle",\n \"popularity\": 12751\n },\n {\n \"tag\": "priestal cocked",\n \"popularity\": 12734\n },\n {\n \"tag\": "serotoxin",\n \"popularity\": 12717\n },\n {\n \"tag\": "unmovably",\n \"popularity\": 12700\n },\n {\n \"tag\": "darbha",\n \"popularity\": 12683\n },\n {\n \"tag\": "Mongolize",\n \"popularity\": 12666\n },\n {\n \"tag\": "clusteringly",\n \"popularity\": 12649\n },\n {\n \"tag\": "tendence",\n \"popularity\": 12632\n },\n {\n \"tag\": "foziness",\n \"popularity\": 12615\n },\n {\n \"tag\": "brickkiln lithify",\n \"popularity\": 12598\n },\n {\n \"tag\": "unpriest",\n \"popularity\": 12581\n },\n {\n \"tag\": "convincer",\n \"popularity\": 12564\n },\n {\n \"tag\": "mornlike",\n \"popularity\": 12548\n },\n {\n \"tag\": "overaddiction ostentatiousness",\n \"popularity\": 12531\n },\n {\n \"tag\": "diffusively moccasin pendom",\n \"popularity\": 12514\n },\n {\n \"tag\": "boose",\n \"popularity\": 12498\n },\n {\n \"tag\": "myonosus",\n \"popularity\": 12481\n },\n {\n \"tag\": "handsome",\n \"popularity\": 12464\n },\n {\n \"tag\": "paroxysmic",\n \"popularity\": 12448\n },\n {\n \"tag\": "Ulidian",\n \"popularity\": 12431\n },\n {\n \"tag\": "heartache",\n \"popularity\": 12415\n },\n {\n \"tag\": "torporize",\n \"popularity\": 12398\n },\n {\n \"tag\": "hippish",\n \"popularity\": 12382\n },\n {\n \"tag\": "stigmal militation",\n \"popularity\": 12366\n },\n {\n \"tag\": "matmaker",\n \"popularity\": 12349\n },\n {\n \"tag\": "marantaceous bivoluminous",\n \"popularity\": 12333\n },\n {\n \"tag\": "Uraniidae",\n \"popularity\": 12317\n },\n {\n \"tag\": "risper",\n \"popularity\": 12301\n },\n {\n \"tag\": "tintinnabulation",\n \"popularity\": 12284\n },\n {\n \"tag\": "tributorian",\n \"popularity\": 12268\n },\n {\n \"tag\": "ashamedly",\n \"popularity\": 12252\n },\n {\n \"tag\": "Macrourus",\n \"popularity\": 12236\n },\n {\n \"tag\": "Chora",\n \"popularity\": 12220\n },\n {\n \"tag\": "caul",\n \"popularity\": 12204\n },\n {\n \"tag\": "exsector",\n \"popularity\": 12188\n },\n {\n \"tag\": "acutish",\n \"popularity\": 12172\n },\n {\n \"tag\": "amphichrome",\n \"popularity\": 12156\n },\n {\n \"tag\": "guarder",\n \"popularity\": 12140\n },\n {\n \"tag\": "sculpturally",\n \"popularity\": 12124\n },\n {\n \"tag\": "benightmare",\n \"popularity\": 12108\n },\n {\n \"tag\": "chucky",\n \"popularity\": 12093\n },\n {\n \"tag\": "Venetian",\n \"popularity\": 12077\n },\n {\n \"tag\": "autotheater",\n \"popularity\": 12061\n },\n {\n \"tag\": "planarioid",\n \"popularity\": 12045\n },\n {\n \"tag\": "handkerchiefful",\n \"popularity\": 12030\n },\n {\n \"tag\": "fuliginousness potentize",\n \"popularity\": 12014\n },\n {\n \"tag\": "pantheum",\n \"popularity\": 11998\n },\n {\n \"tag\": "heavyweight",\n \"popularity\": 11983\n },\n {\n \"tag\": "unbrick",\n \"popularity\": 11967\n },\n {\n \"tag\": "duomachy",\n \"popularity\": 11952\n },\n {\n \"tag\": "polyphyodont",\n \"popularity\": 11936\n },\n {\n \"tag\": "hibernacle",\n \"popularity\": 11921\n },\n {\n \"tag\": "undistend",\n \"popularity\": 11905\n },\n {\n \"tag\": "hystericky",\n \"popularity\": 11890\n },\n {\n \"tag\": "paleolimnology",\n \"popularity\": 11875\n },\n {\n \"tag\": "cedarware",\n \"popularity\": 11859\n },\n {\n \"tag\": "overwrested",\n \"popularity\": 11844\n },\n {\n \"tag\": "Syriacism",\n \"popularity\": 11829\n },\n {\n \"tag\": "pretan",\n \"popularity\": 11813\n },\n {\n \"tag\": "formant",\n \"popularity\": 11798\n },\n {\n \"tag\": "pharmacopoeist Fedia",\n \"popularity\": 11783\n },\n {\n \"tag\": "exorcist eerisome",\n \"popularity\": 11768\n },\n {\n \"tag\": "separation",\n \"popularity\": 11753\n },\n {\n \"tag\": "infancy",\n \"popularity\": 11738\n },\n {\n \"tag\": "ecrasite",\n \"popularity\": 11723\n },\n {\n \"tag\": "propolize",\n \"popularity\": 11708\n },\n {\n \"tag\": "uncram phyllin",\n \"popularity\": 11693\n },\n {\n \"tag\": "thymopathy",\n \"popularity\": 11678\n },\n {\n \"tag\": "omniscient",\n \"popularity\": 11663\n },\n {\n \"tag\": "coussinet hazer",\n \"popularity\": 11648\n },\n {\n \"tag\": "contributiveness",\n \"popularity\": 11633\n },\n {\n \"tag\": "septifluous",\n \"popularity\": 11618\n },\n {\n \"tag\": "halfness",\n \"popularity\": 11603\n },\n {\n \"tag\": "tocher",\n \"popularity\": 11589\n },\n {\n \"tag\": "monotonist",\n \"popularity\": 11574\n },\n {\n \"tag\": "headchair",\n \"popularity\": 11559\n },\n {\n \"tag\": "everywhence",\n \"popularity\": 11544\n },\n {\n \"tag\": "gerate",\n \"popularity\": 11530\n },\n {\n \"tag\": "unrepellent",\n \"popularity\": 11515\n },\n {\n \"tag\": "inidoneous",\n \"popularity\": 11500\n },\n {\n \"tag\": "Rifi",\n \"popularity\": 11486\n },\n {\n \"tag\": "unstop",\n \"popularity\": 11471\n },\n {\n \"tag\": "conformer",\n \"popularity\": 11457\n },\n {\n \"tag\": "vivisectionally",\n \"popularity\": 11442\n },\n {\n \"tag\": "nonfinishing",\n \"popularity\": 11428\n },\n {\n \"tag\": "tyranness",\n \"popularity\": 11413\n },\n {\n \"tag\": "shepherdage havoc",\n \"popularity\": 11399\n },\n {\n \"tag\": "coronale",\n \"popularity\": 11385\n },\n {\n \"tag\": "airmarker",\n \"popularity\": 11370\n },\n {\n \"tag\": "subpanel",\n \"popularity\": 11356\n },\n {\n \"tag\": "conciliation",\n \"popularity\": 11342\n },\n {\n \"tag\": "supergun",\n \"popularity\": 11327\n },\n {\n \"tag\": "photoheliography",\n \"popularity\": 11313\n },\n {\n \"tag\": "cacosmia",\n \"popularity\": 11299\n },\n {\n \"tag\": "caressant",\n \"popularity\": 11285\n },\n {\n \"tag\": "swivet",\n \"popularity\": 11270\n },\n {\n \"tag\": "coddler",\n \"popularity\": 11256\n },\n {\n \"tag\": "rakehellish",\n \"popularity\": 11242\n },\n {\n \"tag\": "recohabitation",\n \"popularity\": 11228\n },\n {\n \"tag\": "postillator",\n \"popularity\": 11214\n },\n {\n \"tag\": "receipt",\n \"popularity\": 11200\n },\n {\n \"tag\": "nonconformistical",\n \"popularity\": 11186\n },\n {\n \"tag\": "unglorified",\n \"popularity\": 11172\n },\n {\n \"tag\": "unordinariness",\n \"popularity\": 11158\n },\n {\n \"tag\": "tetrahydroxy",\n \"popularity\": 11144\n },\n {\n \"tag\": "haploperistomic corporeity",\n \"popularity\": 11130\n },\n {\n \"tag\": "varical",\n \"popularity\": 11117\n },\n {\n \"tag\": "pilferment",\n \"popularity\": 11103\n },\n {\n \"tag\": "reverentially playcraft",\n \"popularity\": 11089\n },\n {\n \"tag\": "unretentive",\n \"popularity\": 11075\n },\n {\n \"tag\": "readiness",\n \"popularity\": 11061\n },\n {\n \"tag\": "thermomagnetism",\n \"popularity\": 11048\n },\n {\n \"tag\": "spotless",\n \"popularity\": 11034\n },\n {\n \"tag\": "semishrubby",\n \"popularity\": 11020\n },\n {\n \"tag\": "metrotomy",\n \"popularity\": 11007\n },\n {\n \"tag\": "hocker",\n \"popularity\": 10993\n },\n {\n \"tag\": "anecdotal",\n \"popularity\": 10979\n },\n {\n \"tag\": "tetrabelodont",\n \"popularity\": 10966\n },\n {\n \"tag\": "Ramillied",\n \"popularity\": 10952\n },\n {\n \"tag\": "sympatheticism",\n \"popularity\": 10939\n },\n {\n \"tag\": "kiskatom",\n \"popularity\": 10925\n },\n {\n \"tag\": "concyclically",\n \"popularity\": 10912\n },\n {\n \"tag\": "tunicless",\n \"popularity\": 10899\n },\n {\n \"tag\": "formalistic",\n \"popularity\": 10885\n },\n {\n \"tag\": "thermacogenesis",\n \"popularity\": 10872\n },\n {\n \"tag\": "multimotored",\n \"popularity\": 10858\n },\n {\n \"tag\": "inversive",\n \"popularity\": 10845\n },\n {\n \"tag\": "Jatki",\n \"popularity\": 10832\n },\n {\n \"tag\": "highest",\n \"popularity\": 10818\n },\n {\n \"tag\": "rubidic",\n \"popularity\": 10805\n },\n {\n \"tag\": "acranial",\n \"popularity\": 10792\n },\n {\n \"tag\": "pulvinulus",\n \"popularity\": 10779\n },\n {\n \"tag\": "nattiness",\n \"popularity\": 10766\n },\n {\n \"tag\": "antisimoniacal",\n \"popularity\": 10752\n },\n {\n \"tag\": "tetanize",\n \"popularity\": 10739\n },\n {\n \"tag\": "spectrophobia",\n \"popularity\": 10726\n },\n {\n \"tag\": "monopolitical",\n \"popularity\": 10713\n },\n {\n \"tag\": "teallite",\n \"popularity\": 10700\n },\n {\n \"tag\": "alicyclic interpellator",\n \"popularity\": 10687\n },\n {\n \"tag\": "nonsynthesized",\n \"popularity\": 10674\n },\n {\n \"tag\": "wheelwrighting",\n \"popularity\": 10661\n },\n {\n \"tag\": "pelliculate",\n \"popularity\": 10648\n },\n {\n \"tag\": "Euphyllopoda",\n \"popularity\": 10635\n },\n {\n \"tag\": "graver",\n \"popularity\": 10622\n },\n {\n \"tag\": "automorph",\n \"popularity\": 10609\n },\n {\n \"tag\": "underhanded",\n \"popularity\": 10597\n },\n {\n \"tag\": "causal",\n \"popularity\": 10584\n },\n {\n \"tag\": "odoom",\n \"popularity\": 10571\n },\n {\n \"tag\": "apodictical",\n \"popularity\": 10558\n },\n {\n \"tag\": "foundery",\n \"popularity\": 10545\n },\n {\n \"tag\": "unneighbored",\n \"popularity\": 10533\n },\n {\n \"tag\": "woolshearing",\n \"popularity\": 10520\n },\n {\n \"tag\": "boschveld",\n \"popularity\": 10507\n },\n {\n \"tag\": "unhardened lipopod",\n \"popularity\": 10495\n },\n {\n \"tag\": "unenriching",\n \"popularity\": 10482\n },\n {\n \"tag\": "spak",\n \"popularity\": 10469\n },\n {\n \"tag\": "yogasana",\n \"popularity\": 10457\n },\n {\n \"tag\": "depoetize",\n \"popularity\": 10444\n },\n {\n \"tag\": "parousiamania",\n \"popularity\": 10432\n },\n {\n \"tag\": "longlegs",\n \"popularity\": 10419\n },\n {\n \"tag\": "gelatinizability",\n \"popularity\": 10407\n },\n {\n \"tag\": "edeology",\n \"popularity\": 10394\n },\n {\n \"tag\": "sodwork",\n \"popularity\": 10382\n },\n {\n \"tag\": "somnambule",\n \"popularity\": 10369\n },\n {\n \"tag\": "antiquing",\n \"popularity\": 10357\n },\n {\n \"tag\": "intaker",\n \"popularity\": 10344\n },\n {\n \"tag\": "Gerberia",\n \"popularity\": 10332\n },\n {\n \"tag\": "preadmit",\n \"popularity\": 10320\n },\n {\n \"tag\": "bullhorn",\n \"popularity\": 10307\n },\n {\n \"tag\": "sororal",\n \"popularity\": 10295\n },\n {\n \"tag\": "phaeophyceous",\n \"popularity\": 10283\n },\n {\n \"tag\": "omphalopsychite",\n \"popularity\": 10271\n },\n {\n \"tag\": "substantious",\n \"popularity\": 10258\n },\n {\n \"tag\": "undemonstratively",\n \"popularity\": 10246\n },\n {\n \"tag\": "corallike blackit",\n \"popularity\": 10234\n },\n {\n \"tag\": "amoebous",\n \"popularity\": 10222\n },\n {\n \"tag\": "Polypodium",\n \"popularity\": 10210\n },\n {\n \"tag\": "blodite",\n \"popularity\": 10198\n },\n {\n \"tag\": "hordarian",\n \"popularity\": 10186\n },\n {\n \"tag\": "nonmoral",\n \"popularity\": 10174\n },\n {\n \"tag\": "dredgeful",\n \"popularity\": 10162\n },\n {\n \"tag\": "nourishingly",\n \"popularity\": 10150\n },\n {\n \"tag\": "seamy",\n \"popularity\": 10138\n },\n {\n \"tag\": "vara",\n \"popularity\": 10126\n },\n {\n \"tag\": "incorruptibleness",\n \"popularity\": 10114\n },\n {\n \"tag\": "manipulator",\n \"popularity\": 10102\n },\n {\n \"tag\": "chromodiascope uncountably",\n \"popularity\": 10090\n },\n {\n \"tag\": "typhemia",\n \"popularity\": 10078\n },\n {\n \"tag\": "Smalcaldic",\n \"popularity\": 10066\n },\n {\n \"tag\": "precontrive",\n \"popularity\": 10054\n },\n {\n \"tag\": "sowarry",\n \"popularity\": 10042\n },\n {\n \"tag\": "monopodic",\n \"popularity\": 10031\n },\n {\n \"tag\": "recodify",\n \"popularity\": 10019\n },\n {\n \"tag\": "phosphowolframic rimple",\n \"popularity\": 10007\n },\n {\n \"tag\": "triconch",\n \"popularity\": 9995\n },\n {\n \"tag\": "pycnodontoid",\n \"popularity\": 9984\n },\n {\n \"tag\": "bradyspermatism",\n \"popularity\": 9972\n },\n {\n \"tag\": "extensionist",\n \"popularity\": 9960\n },\n {\n \"tag\": "characterize",\n \"popularity\": 9949\n },\n {\n \"tag\": "anatreptic proteolytic",\n \"popularity\": 9937\n },\n {\n \"tag\": "waterboard",\n \"popularity\": 9925\n },\n {\n \"tag\": "allopathically",\n \"popularity\": 9914\n },\n {\n \"tag\": "arithmetician",\n \"popularity\": 9902\n },\n {\n \"tag\": "subsist",\n \"popularity\": 9891\n },\n {\n \"tag\": "Islamitish",\n \"popularity\": 9879\n },\n {\n \"tag\": "biddy",\n \"popularity\": 9868\n },\n {\n \"tag\": "reverberation",\n \"popularity\": 9856\n },\n {\n \"tag\": "Zaporogue",\n \"popularity\": 9845\n },\n {\n \"tag\": "soapberry",\n \"popularity\": 9833\n },\n {\n \"tag\": "physiognomics",\n \"popularity\": 9822\n },\n {\n \"tag\": "hospitalization",\n \"popularity\": 9810\n },\n {\n \"tag\": "dissembler",\n \"popularity\": 9799\n },\n {\n \"tag\": "festinate",\n \"popularity\": 9788\n },\n {\n \"tag\": "angiectopia",\n \"popularity\": 9776\n },\n {\n \"tag\": "Pulicidae",\n \"popularity\": 9765\n },\n {\n \"tag\": "beslimer",\n \"popularity\": 9754\n },\n {\n \"tag\": "nontreaty",\n \"popularity\": 9743\n },\n {\n \"tag\": "unhaggled",\n \"popularity\": 9731\n },\n {\n \"tag\": "catfall",\n \"popularity\": 9720\n },\n {\n \"tag\": "stola",\n \"popularity\": 9709\n },\n {\n \"tag\": "pataco",\n \"popularity\": 9698\n },\n {\n \"tag\": "ontologistic",\n \"popularity\": 9686\n },\n {\n \"tag\": "aerosphere",\n \"popularity\": 9675\n },\n {\n \"tag\": "deobstruent",\n \"popularity\": 9664\n },\n {\n \"tag\": "threepence",\n \"popularity\": 9653\n },\n {\n \"tag\": "cyprinoid",\n \"popularity\": 9642\n },\n {\n \"tag\": "overbank",\n \"popularity\": 9631\n },\n {\n \"tag\": "prostyle",\n \"popularity\": 9620\n },\n {\n \"tag\": "photoactivation",\n \"popularity\": 9609\n },\n {\n \"tag\": "homothetic",\n \"popularity\": 9598\n },\n {\n \"tag\": "roguedom",\n \"popularity\": 9587\n },\n {\n \"tag\": "underschool",\n \"popularity\": 9576\n },\n {\n \"tag\": "tractility",\n \"popularity\": 9565\n },\n {\n \"tag\": "gardenin",\n \"popularity\": 9554\n },\n {\n \"tag\": "Micromastictora",\n \"popularity\": 9543\n },\n {\n \"tag\": "gossypine",\n \"popularity\": 9532\n },\n {\n \"tag\": "amylodyspepsia",\n \"popularity\": 9521\n },\n {\n \"tag\": "Luciana",\n \"popularity\": 9510\n },\n {\n \"tag\": "meetly nonfisherman",\n \"popularity\": 9500\n },\n {\n \"tag\": "backhanded",\n \"popularity\": 9489\n },\n {\n \"tag\": "decrustation",\n \"popularity\": 9478\n },\n {\n \"tag\": "pinrail",\n \"popularity\": 9467\n },\n {\n \"tag\": "Mahori",\n \"popularity\": 9456\n },\n {\n \"tag\": "unsizable",\n \"popularity\": 9446\n },\n {\n \"tag\": "disawa",\n \"popularity\": 9435\n },\n {\n \"tag\": "launderability inconsidered",\n \"popularity\": 9424\n },\n {\n \"tag\": "unclassical",\n \"popularity\": 9414\n },\n {\n \"tag\": "inobtrusiveness",\n \"popularity\": 9403\n },\n {\n \"tag\": "sialogenous",\n \"popularity\": 9392\n },\n {\n \"tag\": "sulphonamide",\n \"popularity\": 9382\n },\n {\n \"tag\": "diluvion",\n \"popularity\": 9371\n },\n {\n \"tag\": "deuteranope",\n \"popularity\": 9361\n },\n {\n \"tag\": "addition",\n \"popularity\": 9350\n },\n {\n \"tag\": "bockeret",\n \"popularity\": 9339\n },\n {\n \"tag\": "unidentified",\n \"popularity\": 9329\n },\n {\n \"tag\": "caryatic",\n \"popularity\": 9318\n },\n {\n \"tag\": "misattribution",\n \"popularity\": 9308\n },\n {\n \"tag\": "outray",\n \"popularity\": 9297\n },\n {\n \"tag\": "areometrical",\n \"popularity\": 9287\n },\n {\n \"tag\": "antilogism",\n \"popularity\": 9277\n },\n {\n \"tag\": "inadjustable",\n \"popularity\": 9266\n },\n {\n \"tag\": "byssus",\n \"popularity\": 9256\n },\n {\n \"tag\": "trun",\n \"popularity\": 9245\n },\n {\n \"tag\": "thereology",\n \"popularity\": 9235\n },\n {\n \"tag\": "extort",\n \"popularity\": 9225\n },\n {\n \"tag\": "bumpkin",\n \"popularity\": 9214\n },\n {\n \"tag\": "sulphobenzide",\n \"popularity\": 9204\n },\n {\n \"tag\": "hydrogeology",\n \"popularity\": 9194\n },\n {\n \"tag\": "nidulariaceous",\n \"popularity\": 9183\n },\n {\n \"tag\": "propodiale",\n \"popularity\": 9173\n },\n {\n \"tag\": "fierily",\n \"popularity\": 9163\n },\n {\n \"tag\": "aerotonometry",\n \"popularity\": 9153\n },\n {\n \"tag\": "pelobatid oversuperstitious",\n \"popularity\": 9142\n },\n {\n \"tag\": "restringent",\n \"popularity\": 9132\n },\n {\n \"tag\": "tetrapodic",\n \"popularity\": 9122\n },\n {\n \"tag\": "heroicness Vendidad",\n \"popularity\": 9112\n },\n {\n \"tag\": "Sphingurus",\n \"popularity\": 9102\n },\n {\n \"tag\": "sclerote",\n \"popularity\": 9092\n },\n {\n \"tag\": "unkeyed",\n \"popularity\": 9082\n },\n {\n \"tag\": "superparliamentary",\n \"popularity\": 9072\n },\n {\n \"tag\": "hetericism",\n \"popularity\": 9061\n },\n {\n \"tag\": "hucklebone",\n \"popularity\": 9051\n },\n {\n \"tag\": "yojan",\n \"popularity\": 9041\n },\n {\n \"tag\": "bossed",\n \"popularity\": 9031\n },\n {\n \"tag\": "spiderwork",\n \"popularity\": 9021\n },\n {\n \"tag\": "millfeed dullery",\n \"popularity\": 9011\n },\n {\n \"tag\": "adnoun",\n \"popularity\": 9001\n },\n {\n \"tag\": "mesometric",\n \"popularity\": 8992\n },\n {\n \"tag\": "doublehandedness",\n \"popularity\": 8982\n },\n {\n \"tag\": "suppurant",\n \"popularity\": 8972\n },\n {\n \"tag\": "Berlinize",\n \"popularity\": 8962\n },\n {\n \"tag\": "sontag",\n \"popularity\": 8952\n },\n {\n \"tag\": "biplane",\n \"popularity\": 8942\n },\n {\n \"tag\": "insula",\n \"popularity\": 8932\n },\n {\n \"tag\": "unbrand",\n \"popularity\": 8922\n },\n {\n \"tag\": "Basilosaurus",\n \"popularity\": 8913\n },\n {\n \"tag\": "prenomination",\n \"popularity\": 8903\n },\n {\n \"tag\": "untextual",\n \"popularity\": 8893\n },\n {\n \"tag\": "coleslaw",\n \"popularity\": 8883\n },\n {\n \"tag\": "langsyne",\n \"popularity\": 8874\n },\n {\n \"tag\": "impede",\n \"popularity\": 8864\n },\n {\n \"tag\": "irrigator",\n \"popularity\": 8854\n },\n {\n \"tag\": "deflocculation",\n \"popularity\": 8844\n },\n {\n \"tag\": "narghile",\n \"popularity\": 8835\n },\n {\n \"tag\": "unguardedly ebenaceous",\n \"popularity\": 8825\n },\n {\n \"tag\": "conversantly subocular",\n \"popularity\": 8815\n },\n {\n \"tag\": "hydroponic",\n \"popularity\": 8806\n },\n {\n \"tag\": "anthropopsychism",\n \"popularity\": 8796\n },\n {\n \"tag\": "panoptic",\n \"popularity\": 8787\n },\n {\n \"tag\": "insufferable",\n \"popularity\": 8777\n },\n {\n \"tag\": "salema",\n \"popularity\": 8768\n },\n {\n \"tag\": "Myriapoda",\n \"popularity\": 8758\n },\n {\n \"tag\": "regarrison",\n \"popularity\": 8748\n },\n {\n \"tag\": "overlearned",\n \"popularity\": 8739\n },\n {\n \"tag\": "ultraroyalist conventical bureaucratical",\n \"popularity\": 8729\n },\n {\n \"tag\": "epicaridan",\n \"popularity\": 8720\n },\n {\n \"tag\": "poetastress",\n \"popularity\": 8711\n },\n {\n \"tag\": "monophthalmus",\n \"popularity\": 8701\n },\n {\n \"tag\": "simnel",\n \"popularity\": 8692\n },\n {\n \"tag\": "compotor",\n \"popularity\": 8682\n },\n {\n \"tag\": "hydrolase",\n \"popularity\": 8673\n },\n {\n \"tag\": "attemptless",\n \"popularity\": 8663\n },\n {\n \"tag\": "visceroptosis",\n \"popularity\": 8654\n },\n {\n \"tag\": "unpreparedly",\n \"popularity\": 8645\n },\n {\n \"tag\": "mastage",\n \"popularity\": 8635\n },\n {\n \"tag\": "preinfluence",\n \"popularity\": 8626\n },\n {\n \"tag\": "Siwan",\n \"popularity\": 8617\n },\n {\n \"tag\": "ceratotheca belvedere",\n \"popularity\": 8607\n },\n {\n \"tag\": "disenablement",\n \"popularity\": 8598\n },\n {\n \"tag\": "nine",\n \"popularity\": 8589\n },\n {\n \"tag\": "spellingdown abridgment",\n \"popularity\": 8580\n },\n {\n \"tag\": "twilightless",\n \"popularity\": 8571\n },\n {\n \"tag\": "overflow",\n \"popularity\": 8561\n },\n {\n \"tag\": "mismeasurement",\n \"popularity\": 8552\n },\n {\n \"tag\": "nawabship",\n \"popularity\": 8543\n },\n {\n \"tag\": "Phrynosoma",\n \"popularity\": 8534\n },\n {\n \"tag\": "unanticipatingly",\n \"popularity\": 8525\n },\n {\n \"tag\": "blankite",\n \"popularity\": 8516\n },\n {\n \"tag\": "role",\n \"popularity\": 8506\n },\n {\n \"tag\": "peperine edelweiss",\n \"popularity\": 8497\n },\n {\n \"tag\": "unhysterical",\n \"popularity\": 8488\n },\n {\n \"tag\": "attentiveness",\n \"popularity\": 8479\n },\n {\n \"tag\": "scintillant",\n \"popularity\": 8470\n },\n {\n \"tag\": "stenostomatous",\n \"popularity\": 8461\n },\n {\n \"tag\": "pectinite",\n \"popularity\": 8452\n },\n {\n \"tag\": "herring",\n \"popularity\": 8443\n },\n {\n \"tag\": "interroom",\n \"popularity\": 8434\n },\n {\n \"tag\": "laccol",\n \"popularity\": 8425\n },\n {\n \"tag\": "unpartably kylite",\n \"popularity\": 8416\n },\n {\n \"tag\": "spirivalve",\n \"popularity\": 8407\n },\n {\n \"tag\": "hoosegow",\n \"popularity\": 8398\n },\n {\n \"tag\": "doat",\n \"popularity\": 8389\n },\n {\n \"tag\": "amphibian",\n \"popularity\": 8380\n },\n {\n \"tag\": "exposit",\n \"popularity\": 8371\n },\n {\n \"tag\": "canopy",\n \"popularity\": 8363\n },\n {\n \"tag\": "houndlike",\n \"popularity\": 8354\n },\n {\n \"tag\": "spikebill",\n \"popularity\": 8345\n },\n {\n \"tag\": "wiseacre pyrotechnic",\n \"popularity\": 8336\n },\n {\n \"tag\": "confessingly woodman",\n \"popularity\": 8327\n },\n {\n \"tag\": "overside",\n \"popularity\": 8318\n },\n {\n \"tag\": "oftwhiles",\n \"popularity\": 8310\n },\n {\n \"tag\": "Musophagidae",\n \"popularity\": 8301\n },\n {\n \"tag\": "slumberer",\n \"popularity\": 8292\n },\n {\n \"tag\": "leiotrichy",\n \"popularity\": 8283\n },\n {\n \"tag\": "Mantispidae",\n \"popularity\": 8275\n },\n {\n \"tag\": "perceptually",\n \"popularity\": 8266\n },\n {\n \"tag\": "biller",\n \"popularity\": 8257\n },\n {\n \"tag\": "eudaemonical",\n \"popularity\": 8249\n },\n {\n \"tag\": "underfiend",\n \"popularity\": 8240\n },\n {\n \"tag\": "impartible",\n \"popularity\": 8231\n },\n {\n \"tag\": "saxicavous",\n \"popularity\": 8223\n },\n {\n \"tag\": "yapster",\n \"popularity\": 8214\n },\n {\n \"tag\": "aliseptal",\n \"popularity\": 8205\n },\n {\n \"tag\": "omniparient",\n \"popularity\": 8197\n },\n {\n \"tag\": "nishiki",\n \"popularity\": 8188\n },\n {\n \"tag\": "yuzluk",\n \"popularity\": 8180\n },\n {\n \"tag\": "solderer",\n \"popularity\": 8171\n },\n {\n \"tag\": "Pinna",\n \"popularity\": 8162\n },\n {\n \"tag\": "reinterfere",\n \"popularity\": 8154\n },\n {\n \"tag\": "superepic",\n \"popularity\": 8145\n },\n {\n \"tag\": "ronquil",\n \"popularity\": 8137\n },\n {\n \"tag\": "bratstvo",\n \"popularity\": 8128\n },\n {\n \"tag\": "Thea",\n \"popularity\": 8120\n },\n {\n \"tag\": "hermaphroditical",\n \"popularity\": 8111\n },\n {\n \"tag\": "enlief",\n \"popularity\": 8103\n },\n {\n \"tag\": "Jesuate",\n \"popularity\": 8095\n },\n {\n \"tag\": "gaysome",\n \"popularity\": 8086\n },\n {\n \"tag\": "iliohypogastric",\n \"popularity\": 8078\n },\n {\n \"tag\": "regardance",\n \"popularity\": 8069\n },\n {\n \"tag\": "cumulately",\n \"popularity\": 8061\n },\n {\n \"tag\": "haustorial nucleolocentrosome",\n \"popularity\": 8053\n },\n {\n \"tag\": "cosmocrat",\n \"popularity\": 8044\n },\n {\n \"tag\": "onyxitis",\n \"popularity\": 8036\n },\n {\n \"tag\": "Cabinda",\n \"popularity\": 8028\n },\n {\n \"tag\": "coresort",\n \"popularity\": 8019\n },\n {\n \"tag\": "drusy preformant",\n \"popularity\": 8011\n },\n {\n \"tag\": "piningly",\n \"popularity\": 8003\n },\n {\n \"tag\": "bootlessly",\n \"popularity\": 7994\n },\n {\n \"tag\": "talari",\n \"popularity\": 7986\n },\n {\n \"tag\": "amidoacetal",\n \"popularity\": 7978\n },\n {\n \"tag\": "pschent",\n \"popularity\": 7970\n },\n {\n \"tag\": "consumptional scarer titivate",\n \"popularity\": 7962\n },\n {\n \"tag\": "Anserinae",\n \"popularity\": 7953\n },\n {\n \"tag\": "flaunter",\n \"popularity\": 7945\n },\n {\n \"tag\": "reindeer",\n \"popularity\": 7937\n },\n {\n \"tag\": "disparage",\n \"popularity\": 7929\n },\n {\n \"tag\": "superheat",\n \"popularity\": 7921\n },\n {\n \"tag\": "Chromatium",\n \"popularity\": 7912\n },\n {\n \"tag\": "Tina",\n \"popularity\": 7904\n },\n {\n \"tag\": "rededicatory",\n \"popularity\": 7896\n },\n {\n \"tag\": "nontransient",\n \"popularity\": 7888\n },\n {\n \"tag\": "Phocaean brinkless",\n \"popularity\": 7880\n },\n {\n \"tag\": "ventriculose",\n \"popularity\": 7872\n },\n {\n \"tag\": "upplough",\n \"popularity\": 7864\n },\n {\n \"tag\": "succorless",\n \"popularity\": 7856\n },\n {\n \"tag\": "hayrake",\n \"popularity\": 7848\n },\n {\n \"tag\": "merriness amorphia",\n \"popularity\": 7840\n },\n {\n \"tag\": "merycism",\n \"popularity\": 7832\n },\n {\n \"tag\": "checkrow",\n \"popularity\": 7824\n },\n {\n \"tag\": "scry",\n \"popularity\": 7816\n },\n {\n \"tag\": "obvolve",\n \"popularity\": 7808\n },\n {\n \"tag\": "orchard",\n \"popularity\": 7800\n },\n {\n \"tag\": "isomerize",\n \"popularity\": 7792\n },\n {\n \"tag\": "competitrix",\n \"popularity\": 7784\n },\n {\n \"tag\": "unbannered",\n \"popularity\": 7776\n },\n {\n \"tag\": "undoctrined",\n \"popularity\": 7768\n },\n {\n \"tag\": "theologian",\n \"popularity\": 7760\n },\n {\n \"tag\": "nebby",\n \"popularity\": 7752\n },\n {\n \"tag\": "Cardiazol",\n \"popularity\": 7745\n },\n {\n \"tag\": "phagedenic",\n \"popularity\": 7737\n },\n {\n \"tag\": "nostalgic",\n \"popularity\": 7729\n },\n {\n \"tag\": "orthodoxy",\n \"popularity\": 7721\n },\n {\n \"tag\": "oversanguine",\n \"popularity\": 7713\n },\n {\n \"tag\": "lish",\n \"popularity\": 7705\n },\n {\n \"tag\": "ketogenic",\n \"popularity\": 7698\n },\n {\n \"tag\": "syndicalize",\n \"popularity\": 7690\n },\n {\n \"tag\": "leeftail",\n \"popularity\": 7682\n },\n {\n \"tag\": "bulbomedullary",\n \"popularity\": 7674\n },\n {\n \"tag\": "reletter",\n \"popularity\": 7667\n },\n {\n \"tag\": "bitterly",\n \"popularity\": 7659\n },\n {\n \"tag\": "participatory",\n \"popularity\": 7651\n },\n {\n \"tag\": "baldberry",\n \"popularity\": 7643\n },\n {\n \"tag\": "prowaterpower",\n \"popularity\": 7636\n },\n {\n \"tag\": "lexicographical",\n \"popularity\": 7628\n },\n {\n \"tag\": "Anisodactyli",\n \"popularity\": 7620\n },\n {\n \"tag\": "amphipodous",\n \"popularity\": 7613\n },\n {\n \"tag\": "triglandular",\n \"popularity\": 7605\n },\n {\n \"tag\": "xanthopsin",\n \"popularity\": 7597\n },\n {\n \"tag\": "indefinitude",\n \"popularity\": 7590\n },\n {\n \"tag\": "bookworm",\n \"popularity\": 7582\n },\n {\n \"tag\": "suffocative",\n \"popularity\": 7574\n },\n {\n \"tag\": "uncongested tyrant",\n \"popularity\": 7567\n },\n {\n \"tag\": "alow harmoniously Pamir",\n \"popularity\": 7559\n },\n {\n \"tag\": "monander",\n \"popularity\": 7552\n },\n {\n \"tag\": "bagatelle",\n \"popularity\": 7544\n },\n {\n \"tag\": "membranology",\n \"popularity\": 7537\n },\n {\n \"tag\": "parturifacient",\n \"popularity\": 7529\n },\n {\n \"tag\": "excitovascular",\n \"popularity\": 7522\n },\n {\n \"tag\": "homopolar",\n \"popularity\": 7514\n },\n {\n \"tag\": "phobiac",\n \"popularity\": 7507\n },\n {\n \"tag\": "clype",\n \"popularity\": 7499\n },\n {\n \"tag\": "unsubversive",\n \"popularity\": 7492\n },\n {\n \"tag\": "bostrychoidal scorpionwort",\n \"popularity\": 7484\n },\n {\n \"tag\": "biliteralism",\n \"popularity\": 7477\n },\n {\n \"tag\": "dentatocostate",\n \"popularity\": 7469\n },\n {\n \"tag\": "Pici",\n \"popularity\": 7462\n },\n {\n \"tag\": "sideritic",\n \"popularity\": 7454\n },\n {\n \"tag\": "syntaxis",\n \"popularity\": 7447\n },\n {\n \"tag\": "ingest",\n \"popularity\": 7440\n },\n {\n \"tag\": "rigmarolish",\n \"popularity\": 7432\n },\n {\n \"tag\": "ocreaceous",\n \"popularity\": 7425\n },\n {\n \"tag\": "hyperbrachyskelic",\n \"popularity\": 7418\n },\n {\n \"tag\": "basophobia",\n \"popularity\": 7410\n },\n {\n \"tag\": "substantialness",\n \"popularity\": 7403\n },\n {\n \"tag\": "agglutinoid",\n \"popularity\": 7396\n },\n {\n \"tag\": "longleaf",\n \"popularity\": 7388\n },\n {\n \"tag\": "electroengraving",\n \"popularity\": 7381\n },\n {\n \"tag\": "laparoenterotomy",\n \"popularity\": 7374\n },\n {\n \"tag\": "oxalylurea",\n \"popularity\": 7366\n },\n {\n \"tag\": "unattaintedly",\n \"popularity\": 7359\n },\n {\n \"tag\": "pennystone",\n \"popularity\": 7352\n },\n {\n \"tag\": "Plumbaginaceae",\n \"popularity\": 7345\n },\n {\n \"tag\": "horntip",\n \"popularity\": 7337\n },\n {\n \"tag\": "begrudge",\n \"popularity\": 7330\n },\n {\n \"tag\": "bechignoned",\n \"popularity\": 7323\n },\n {\n \"tag\": "hologonidium",\n \"popularity\": 7316\n },\n {\n \"tag\": "Pulian",\n \"popularity\": 7309\n },\n {\n \"tag\": "gratulation",\n \"popularity\": 7301\n },\n {\n \"tag\": "Sebright",\n \"popularity\": 7294\n },\n {\n \"tag\": "coinstantaneous emotionally",\n \"popularity\": 7287\n },\n {\n \"tag\": "thoracostracan",\n \"popularity\": 7280\n },\n {\n \"tag\": "saurodont",\n \"popularity\": 7273\n },\n {\n \"tag\": "coseat",\n \"popularity\": 7266\n },\n {\n \"tag\": "irascibility",\n \"popularity\": 7259\n },\n {\n \"tag\": "occlude",\n \"popularity\": 7251\n },\n {\n \"tag\": "metallurgist",\n \"popularity\": 7244\n },\n {\n \"tag\": "extraviolet",\n \"popularity\": 7237\n },\n {\n \"tag\": "clinic",\n \"popularity\": 7230\n },\n {\n \"tag\": "skater",\n \"popularity\": 7223\n },\n {\n \"tag\": "linguistic",\n \"popularity\": 7216\n },\n {\n \"tag\": "attacheship",\n \"popularity\": 7209\n },\n {\n \"tag\": "Rachianectes",\n \"popularity\": 7202\n },\n {\n \"tag\": "foliolose",\n \"popularity\": 7195\n },\n {\n \"tag\": "claudetite",\n \"popularity\": 7188\n },\n {\n \"tag\": "aphidian scratching",\n \"popularity\": 7181\n },\n {\n \"tag\": "Carida",\n \"popularity\": 7174\n },\n {\n \"tag\": "tiepin polymicroscope",\n \"popularity\": 7167\n },\n {\n \"tag\": "telpherage",\n \"popularity\": 7160\n },\n {\n \"tag\": "meek",\n \"popularity\": 7153\n },\n {\n \"tag\": "swiftness",\n \"popularity\": 7146\n },\n {\n \"tag\": "gentes",\n \"popularity\": 7139\n },\n {\n \"tag\": "uncommemorated",\n \"popularity\": 7132\n },\n {\n \"tag\": "Lazarus",\n \"popularity\": 7125\n },\n {\n \"tag\": "redivive",\n \"popularity\": 7119\n },\n {\n \"tag\": "nonfebrile",\n \"popularity\": 7112\n },\n {\n \"tag\": "nymphet",\n \"popularity\": 7105\n },\n {\n \"tag\": "areologically",\n \"popularity\": 7098\n },\n {\n \"tag\": "undonkey",\n \"popularity\": 7091\n },\n {\n \"tag\": "projecting",\n \"popularity\": 7084\n },\n {\n \"tag\": "pinnigrade",\n \"popularity\": 7077\n },\n {\n \"tag\": "butylation",\n \"popularity\": 7071\n },\n {\n \"tag\": "philologistic lenticle",\n \"popularity\": 7064\n },\n {\n \"tag\": "nooky",\n \"popularity\": 7057\n },\n {\n \"tag\": "incestuousness",\n \"popularity\": 7050\n },\n {\n \"tag\": "palingenetically",\n \"popularity\": 7043\n },\n {\n \"tag\": "mitochondria",\n \"popularity\": 7037\n },\n {\n \"tag\": "truthify",\n \"popularity\": 7030\n },\n {\n \"tag\": "titanyl",\n \"popularity\": 7023\n },\n {\n \"tag\": "bestride",\n \"popularity\": 7016\n },\n {\n \"tag\": "chende",\n \"popularity\": 7010\n },\n {\n \"tag\": "Chaucerian monophote",\n \"popularity\": 7003\n },\n {\n \"tag\": "cutback",\n \"popularity\": 6996\n },\n {\n \"tag\": "unpatiently",\n \"popularity\": 6989\n },\n {\n \"tag\": "subvitreous",\n \"popularity\": 6983\n },\n {\n \"tag\": "organizable",\n \"popularity\": 6976\n },\n {\n \"tag\": "anniverse uncomprehensible",\n \"popularity\": 6969\n },\n {\n \"tag\": "hyalescence",\n \"popularity\": 6963\n },\n {\n \"tag\": "amniochorial",\n \"popularity\": 6956\n },\n {\n \"tag\": "Corybantian",\n \"popularity\": 6949\n },\n {\n \"tag\": "genocide Scaphitidae",\n \"popularity\": 6943\n },\n {\n \"tag\": "accordionist",\n \"popularity\": 6936\n },\n {\n \"tag\": "becheck",\n \"popularity\": 6930\n },\n {\n \"tag\": "overproduce",\n \"popularity\": 6923\n },\n {\n \"tag\": "unmaniac frijolillo",\n \"popularity\": 6916\n },\n {\n \"tag\": "multisulcated",\n \"popularity\": 6910\n },\n {\n \"tag\": "wennebergite",\n \"popularity\": 6903\n },\n {\n \"tag\": "tautousious mowth",\n \"popularity\": 6897\n },\n {\n \"tag\": "marigold",\n \"popularity\": 6890\n },\n {\n \"tag\": "affray",\n \"popularity\": 6884\n },\n {\n \"tag\": "nonidolatrous",\n \"popularity\": 6877\n },\n {\n \"tag\": "aphrasia",\n \"popularity\": 6871\n },\n {\n \"tag\": "muddlingly",\n \"popularity\": 6864\n },\n {\n \"tag\": "clear",\n \"popularity\": 6858\n },\n {\n \"tag\": "Clitoria",\n \"popularity\": 6851\n },\n {\n \"tag\": "apportionment underwaist",\n \"popularity\": 6845\n },\n {\n \"tag\": "kodakist",\n \"popularity\": 6838\n },\n {\n \"tag\": "Momotidae",\n \"popularity\": 6832\n },\n {\n \"tag\": "cryptovalency",\n \"popularity\": 6825\n },\n {\n \"tag\": "floe",\n \"popularity\": 6819\n },\n {\n \"tag\": "aphagia",\n \"popularity\": 6812\n },\n {\n \"tag\": "brontograph",\n \"popularity\": 6806\n },\n {\n \"tag\": "tubulous",\n \"popularity\": 6799\n },\n {\n \"tag\": "unhorse",\n \"popularity\": 6793\n },\n {\n \"tag\": "chlordane",\n \"popularity\": 6787\n },\n {\n \"tag\": "colloquy brochan",\n \"popularity\": 6780\n },\n {\n \"tag\": "sloosh",\n \"popularity\": 6774\n },\n {\n \"tag\": "battered",\n \"popularity\": 6767\n },\n {\n \"tag\": "monocularity pluriguttulate",\n \"popularity\": 6761\n },\n {\n \"tag\": "chiastoneury",\n \"popularity\": 6755\n },\n {\n \"tag\": "Sanguinaria",\n \"popularity\": 6748\n },\n {\n \"tag\": "confessionary",\n \"popularity\": 6742\n },\n {\n \"tag\": "enzymic",\n \"popularity\": 6736\n },\n {\n \"tag\": "cord",\n \"popularity\": 6729\n },\n {\n \"tag\": "oviducal",\n \"popularity\": 6723\n },\n {\n \"tag\": "crozzle outsea",\n \"popularity\": 6717\n },\n {\n \"tag\": "balladical",\n \"popularity\": 6710\n },\n {\n \"tag\": "uncollectibleness",\n \"popularity\": 6704\n },\n {\n \"tag\": "predorsal",\n \"popularity\": 6698\n },\n {\n \"tag\": "reauthenticate",\n \"popularity\": 6692\n },\n {\n \"tag\": "ravissant",\n \"popularity\": 6685\n },\n {\n \"tag\": "advantageousness",\n \"popularity\": 6679\n },\n {\n \"tag\": "rung",\n \"popularity\": 6673\n },\n {\n \"tag\": "duncedom",\n \"popularity\": 6667\n },\n {\n \"tag\": "hematolite",\n \"popularity\": 6660\n },\n {\n \"tag\": "thisness",\n \"popularity\": 6654\n },\n {\n \"tag\": "mapau",\n \"popularity\": 6648\n },\n {\n \"tag\": "Hecatic",\n \"popularity\": 6642\n },\n {\n \"tag\": "meningoencephalocele",\n \"popularity\": 6636\n },\n {\n \"tag\": "confection sorra",\n \"popularity\": 6630\n },\n {\n \"tag\": "unsedate",\n \"popularity\": 6623\n },\n {\n \"tag\": "meningocerebritis",\n \"popularity\": 6617\n },\n {\n \"tag\": "biopsychological",\n \"popularity\": 6611\n },\n {\n \"tag\": "clavicithern",\n \"popularity\": 6605\n },\n {\n \"tag\": "resun",\n \"popularity\": 6599\n },\n {\n \"tag\": "bayamo",\n \"popularity\": 6593\n },\n {\n \"tag\": "seeableness",\n \"popularity\": 6587\n },\n {\n \"tag\": "hypsidolichocephalism",\n \"popularity\": 6581\n },\n {\n \"tag\": "salivous",\n \"popularity\": 6574\n },\n {\n \"tag\": "neumatize",\n \"popularity\": 6568\n },\n {\n \"tag\": "stree",\n \"popularity\": 6562\n },\n {\n \"tag\": "markshot",\n \"popularity\": 6556\n },\n {\n \"tag\": "phraseologically",\n \"popularity\": 6550\n },\n {\n \"tag\": "yealing",\n \"popularity\": 6544\n },\n {\n \"tag\": "puggy",\n \"popularity\": 6538\n },\n {\n \"tag\": "sexadecimal",\n \"popularity\": 6532\n },\n {\n \"tag\": "unofficerlike",\n \"popularity\": 6526\n },\n {\n \"tag\": "curiosa",\n \"popularity\": 6520\n },\n {\n \"tag\": "pedomotor",\n \"popularity\": 6514\n },\n {\n \"tag\": "astrally",\n \"popularity\": 6508\n },\n {\n \"tag\": "prosomatic",\n \"popularity\": 6502\n },\n {\n \"tag\": "bulletheaded",\n \"popularity\": 6496\n },\n {\n \"tag\": "fortuned",\n \"popularity\": 6490\n },\n {\n \"tag\": "pixy",\n \"popularity\": 6484\n },\n {\n \"tag\": "protectrix",\n \"popularity\": 6478\n },\n {\n \"tag\": "arthritical",\n \"popularity\": 6472\n },\n {\n \"tag\": "coction",\n \"popularity\": 6466\n },\n {\n \"tag\": "Anthropos",\n \"popularity\": 6460\n },\n {\n \"tag\": "runer",\n \"popularity\": 6454\n },\n {\n \"tag\": "prenotify",\n \"popularity\": 6449\n },\n {\n \"tag\": "microspheric gastroparalysis",\n \"popularity\": 6443\n },\n {\n \"tag\": "Jovicentrical",\n \"popularity\": 6437\n },\n {\n \"tag\": "ceratopsid",\n \"popularity\": 6431\n },\n {\n \"tag\": "Theodoric",\n \"popularity\": 6425\n },\n {\n \"tag\": "Pactolus",\n \"popularity\": 6419\n },\n {\n \"tag\": "spawning",\n \"popularity\": 6413\n },\n {\n \"tag\": "nonconfidential",\n \"popularity\": 6407\n },\n {\n \"tag\": "halotrichite infumate",\n \"popularity\": 6402\n },\n {\n \"tag\": "undiscriminatingly",\n \"popularity\": 6396\n },\n {\n \"tag\": "unexasperated",\n \"popularity\": 6390\n },\n {\n \"tag\": "isoeugenol",\n \"popularity\": 6384\n },\n {\n \"tag\": "pressboard",\n \"popularity\": 6378\n },\n {\n \"tag\": "unshrew",\n \"popularity\": 6372\n },\n {\n \"tag\": "huffingly",\n \"popularity\": 6367\n },\n {\n \"tag\": "wagaun",\n \"popularity\": 6361\n },\n {\n \"tag\": "squirt Philistine",\n \"popularity\": 6355\n },\n {\n \"tag\": "kryptic",\n \"popularity\": 6349\n },\n {\n \"tag\": "paraform",\n \"popularity\": 6344\n },\n {\n \"tag\": "preverify",\n \"popularity\": 6338\n },\n {\n \"tag\": "dalar",\n \"popularity\": 6332\n },\n {\n \"tag\": "interdictor appraisingly",\n \"popularity\": 6326\n },\n {\n \"tag\": "chipped",\n \"popularity\": 6321\n },\n {\n \"tag\": "Pteropoda",\n \"popularity\": 6315\n },\n {\n \"tag\": "Bohairic",\n \"popularity\": 6309\n },\n {\n \"tag\": "felting",\n \"popularity\": 6303\n },\n {\n \"tag\": "compurgatorial",\n \"popularity\": 6298\n },\n {\n \"tag\": "unclead",\n \"popularity\": 6292\n },\n {\n \"tag\": "stockish",\n \"popularity\": 6286\n },\n {\n \"tag\": "mulligatawny",\n \"popularity\": 6281\n },\n {\n \"tag\": "Monotheletism",\n \"popularity\": 6275\n },\n {\n \"tag\": "lutanist",\n \"popularity\": 6269\n },\n {\n \"tag\": "gluttonize",\n \"popularity\": 6264\n },\n {\n \"tag\": "hackneyed",\n \"popularity\": 6258\n },\n {\n \"tag\": "yield",\n \"popularity\": 6253\n },\n {\n \"tag\": "sulphonamido",\n \"popularity\": 6247\n },\n {\n \"tag\": "granulative",\n \"popularity\": 6241\n },\n {\n \"tag\": "swingy",\n \"popularity\": 6236\n },\n {\n \"tag\": "Desmidiales",\n \"popularity\": 6230\n },\n {\n \"tag\": "tootlish",\n \"popularity\": 6224\n },\n {\n \"tag\": "unsatisfiedly",\n \"popularity\": 6219\n },\n {\n \"tag\": "burucha",\n \"popularity\": 6213\n },\n {\n \"tag\": "premeditatingly",\n \"popularity\": 6208\n },\n {\n \"tag\": "cowrie",\n \"popularity\": 6202\n },\n {\n \"tag\": "pleurolysis",\n \"popularity\": 6197\n },\n {\n \"tag\": "nationalist",\n \"popularity\": 6191\n },\n {\n \"tag\": "Pholadacea",\n \"popularity\": 6186\n },\n {\n \"tag\": "anakrousis",\n \"popularity\": 6180\n },\n {\n \"tag\": "proctorial",\n \"popularity\": 6175\n },\n {\n \"tag\": "cavillation",\n \"popularity\": 6169\n },\n {\n \"tag\": "cervicobregmatic",\n \"popularity\": 6163\n },\n {\n \"tag\": "interspecific",\n \"popularity\": 6158\n },\n {\n \"tag\": "Teutonity",\n \"popularity\": 6152\n },\n {\n \"tag\": "snakeholing",\n \"popularity\": 6147\n },\n {\n \"tag\": "balcony",\n \"popularity\": 6142\n },\n {\n \"tag\": "latchless",\n \"popularity\": 6136\n },\n {\n \"tag\": "Mithraea",\n \"popularity\": 6131\n },\n {\n \"tag\": "pseudepigraph",\n \"popularity\": 6125\n },\n {\n \"tag\": "flosser",\n \"popularity\": 6120\n },\n {\n \"tag\": "kotyle",\n \"popularity\": 6114\n },\n {\n \"tag\": "outdo",\n \"popularity\": 6109\n },\n {\n \"tag\": "interclerical",\n \"popularity\": 6103\n },\n {\n \"tag\": "aurar",\n \"popularity\": 6098\n },\n {\n \"tag\": "apophyseal",\n \"popularity\": 6093\n },\n {\n \"tag\": "Miro",\n \"popularity\": 6087\n },\n {\n \"tag\": "Priscillian",\n \"popularity\": 6082\n },\n {\n \"tag\": "alluvia",\n \"popularity\": 6076\n },\n {\n \"tag\": "exordize",\n \"popularity\": 6071\n },\n {\n \"tag\": "breakage",\n \"popularity\": 6066\n },\n {\n \"tag\": "unclosable",\n \"popularity\": 6060\n },\n {\n \"tag\": "monocondylous",\n \"popularity\": 6055\n },\n {\n \"tag\": "dyarchy",\n \"popularity\": 6050\n },\n {\n \"tag\": "subchelate",\n \"popularity\": 6044\n },\n {\n \"tag\": "hearsay",\n \"popularity\": 6039\n },\n {\n \"tag\": "prestigiously",\n \"popularity\": 6034\n },\n {\n \"tag\": "unimuscular",\n \"popularity\": 6028\n },\n {\n \"tag\": "lingwort",\n \"popularity\": 6023\n },\n {\n \"tag\": "jealous",\n \"popularity\": 6018\n },\n {\n \"tag\": "artilleryman",\n \"popularity\": 6012\n },\n {\n \"tag\": "phantasmagorially",\n \"popularity\": 6007\n },\n {\n \"tag\": "stagnum",\n \"popularity\": 6002\n },\n {\n \"tag\": "organotropism shatteringly",\n \"popularity\": 5997\n },\n {\n \"tag\": "Mytilus Hebraist",\n \"popularity\": 5991\n },\n {\n \"tag\": "returf",\n \"popularity\": 5986\n },\n {\n \"tag\": "townfolk",\n \"popularity\": 5981\n },\n {\n \"tag\": "propitiative",\n \"popularity\": 5976\n },\n {\n \"tag\": "Anita unsullied",\n \"popularity\": 5970\n },\n {\n \"tag\": "bandoleered",\n \"popularity\": 5965\n },\n {\n \"tag\": "cubby",\n \"popularity\": 5960\n },\n {\n \"tag\": "Hexanchus",\n \"popularity\": 5955\n },\n {\n \"tag\": "circuminsular",\n \"popularity\": 5949\n },\n {\n \"tag\": "chamberletted eumycete",\n \"popularity\": 5944\n },\n {\n \"tag\": "secure",\n \"popularity\": 5939\n },\n {\n \"tag\": "Edwardean",\n \"popularity\": 5934\n },\n {\n \"tag\": "strenth",\n \"popularity\": 5929\n },\n {\n \"tag\": "exhaustless",\n \"popularity\": 5923\n },\n {\n \"tag\": "electioneerer",\n \"popularity\": 5918\n },\n {\n \"tag\": "estoile",\n \"popularity\": 5913\n },\n {\n \"tag\": "redden",\n \"popularity\": 5908\n },\n {\n \"tag\": "solicitee",\n \"popularity\": 5903\n },\n {\n \"tag\": "nonpatented",\n \"popularity\": 5898\n },\n {\n \"tag\": "lemming",\n \"popularity\": 5893\n },\n {\n \"tag\": "marled subalate",\n \"popularity\": 5887\n },\n {\n \"tag\": "premial horizonward",\n \"popularity\": 5882\n },\n {\n \"tag\": "nonrefueling",\n \"popularity\": 5877\n },\n {\n \"tag\": "rupturewort",\n \"popularity\": 5872\n },\n {\n \"tag\": "unfed",\n \"popularity\": 5867\n },\n {\n \"tag\": "empanelment",\n \"popularity\": 5862\n },\n {\n \"tag\": "isoosmosis",\n \"popularity\": 5857\n },\n {\n \"tag\": "jipijapa",\n \"popularity\": 5852\n },\n {\n \"tag\": "Fiji",\n \"popularity\": 5847\n },\n {\n \"tag\": "interferant",\n \"popularity\": 5842\n },\n {\n \"tag\": "reconstitution",\n \"popularity\": 5837\n },\n {\n \"tag\": "dockyardman",\n \"popularity\": 5832\n },\n {\n \"tag\": "dolichopodous",\n \"popularity\": 5826\n },\n {\n \"tag\": "whiteworm",\n \"popularity\": 5821\n },\n {\n \"tag\": "atheistically",\n \"popularity\": 5816\n },\n {\n \"tag\": "nonconcern",\n \"popularity\": 5811\n },\n {\n \"tag\": "scarabaeidoid",\n \"popularity\": 5806\n },\n {\n \"tag\": "triumviri",\n \"popularity\": 5801\n },\n {\n \"tag\": "rakit",\n \"popularity\": 5796\n },\n {\n \"tag\": "leecheater",\n \"popularity\": 5791\n },\n {\n \"tag\": "Arthrostraca",\n \"popularity\": 5786\n },\n {\n \"tag\": "upknit",\n \"popularity\": 5781\n },\n {\n \"tag\": "tymbalon",\n \"popularity\": 5776\n },\n {\n \"tag\": "inventurous",\n \"popularity\": 5771\n },\n {\n \"tag\": "perradiate",\n \"popularity\": 5766\n },\n {\n \"tag\": "seer",\n \"popularity\": 5762\n },\n {\n \"tag\": "Auricularia",\n \"popularity\": 5757\n },\n {\n \"tag\": "wettish exclusivity",\n \"popularity\": 5752\n },\n {\n \"tag\": "arteriosympathectomy",\n \"popularity\": 5747\n },\n {\n \"tag\": "tunlike",\n \"popularity\": 5742\n },\n {\n \"tag\": "cephalocercal",\n \"popularity\": 5737\n },\n {\n \"tag\": "meaninglessness",\n \"popularity\": 5732\n },\n {\n \"tag\": "fountful",\n \"popularity\": 5727\n },\n {\n \"tag\": "appraisement",\n \"popularity\": 5722\n },\n {\n \"tag\": "geniculated",\n \"popularity\": 5717\n },\n {\n \"tag\": "rotator",\n \"popularity\": 5712\n },\n {\n \"tag\": "foremarch biography",\n \"popularity\": 5707\n },\n {\n \"tag\": "arid",\n \"popularity\": 5703\n },\n {\n \"tag\": "inapprehensible",\n \"popularity\": 5698\n },\n {\n \"tag\": "chlorosulphonic",\n \"popularity\": 5693\n },\n {\n \"tag\": "braguette",\n \"popularity\": 5688\n },\n {\n \"tag\": "panophthalmitis",\n \"popularity\": 5683\n },\n {\n \"tag\": "pro objurgatorily",\n \"popularity\": 5678\n },\n {\n \"tag\": "zooplasty",\n \"popularity\": 5673\n },\n {\n \"tag\": "Terebratulidae",\n \"popularity\": 5669\n },\n {\n \"tag\": "Mahran",\n \"popularity\": 5664\n },\n {\n \"tag\": "anthologize merocele",\n \"popularity\": 5659\n },\n {\n \"tag\": "firecracker chiropractic",\n \"popularity\": 5654\n },\n {\n \"tag\": "tenorist",\n \"popularity\": 5649\n },\n {\n \"tag\": "amphitene",\n \"popularity\": 5645\n },\n {\n \"tag\": "silverbush toadstone",\n \"popularity\": 5640\n },\n {\n \"tag\": "entozoological",\n \"popularity\": 5635\n },\n {\n \"tag\": "trustlessness",\n \"popularity\": 5630\n },\n {\n \"tag\": "reassay",\n \"popularity\": 5625\n },\n {\n \"tag\": "chrysalides",\n \"popularity\": 5621\n },\n {\n \"tag\": "truncation",\n \"popularity\": 5616\n },\n {\n \"tag\": "unwavered mausoleal",\n \"popularity\": 5611\n },\n {\n \"tag\": "unserrated",\n \"popularity\": 5606\n },\n {\n \"tag\": "frampler",\n \"popularity\": 5602\n },\n {\n \"tag\": "celestial",\n \"popularity\": 5597\n },\n {\n \"tag\": "depreter",\n \"popularity\": 5592\n },\n {\n \"tag\": "retaliate",\n \"popularity\": 5588\n },\n {\n \"tag\": "decempunctate",\n \"popularity\": 5583\n },\n {\n \"tag\": "submitter",\n \"popularity\": 5578\n },\n {\n \"tag\": "phenothiazine",\n \"popularity\": 5573\n },\n {\n \"tag\": "hobbledehoyish",\n \"popularity\": 5569\n },\n {\n \"tag\": "erraticness",\n \"popularity\": 5564\n },\n {\n \"tag\": "ovariodysneuria",\n \"popularity\": 5559\n },\n {\n \"tag\": "puja",\n \"popularity\": 5555\n },\n {\n \"tag\": "cesspool",\n \"popularity\": 5550\n },\n {\n \"tag\": "sonation",\n \"popularity\": 5545\n },\n {\n \"tag\": "moggan",\n \"popularity\": 5541\n },\n {\n \"tag\": "overjutting",\n \"popularity\": 5536\n },\n {\n \"tag\": "cohobate",\n \"popularity\": 5531\n },\n {\n \"tag\": "Distoma",\n \"popularity\": 5527\n },\n {\n \"tag\": "Plectognathi",\n \"popularity\": 5522\n },\n {\n \"tag\": "dumple caliphate",\n \"popularity\": 5517\n },\n {\n \"tag\": "shiko",\n \"popularity\": 5513\n },\n {\n \"tag\": "downness",\n \"popularity\": 5508\n },\n {\n \"tag\": "whippletree",\n \"popularity\": 5504\n },\n {\n \"tag\": "nymphaeum",\n \"popularity\": 5499\n },\n {\n \"tag\": "there trest",\n \"popularity\": 5494\n },\n {\n \"tag\": "psychrometer",\n \"popularity\": 5490\n },\n {\n \"tag\": "pyelograph",\n \"popularity\": 5485\n },\n {\n \"tag\": "unsalvable",\n \"popularity\": 5481\n },\n {\n \"tag\": "bescreen",\n \"popularity\": 5476\n },\n {\n \"tag\": "cushy",\n \"popularity\": 5471\n },\n {\n \"tag\": "plicatolobate",\n \"popularity\": 5467\n },\n {\n \"tag\": "lakie",\n \"popularity\": 5462\n },\n {\n \"tag\": "anthropodeoxycholic",\n \"popularity\": 5458\n },\n {\n \"tag\": "resatisfaction",\n \"popularity\": 5453\n },\n {\n \"tag\": "unravelment unaccidental",\n \"popularity\": 5449\n },\n {\n \"tag\": "telewriter monogeneous",\n \"popularity\": 5444\n },\n {\n \"tag\": "unsabred",\n \"popularity\": 5440\n },\n {\n \"tag\": "startlingly",\n \"popularity\": 5435\n },\n {\n \"tag\": "Aralia",\n \"popularity\": 5431\n },\n {\n \"tag\": "alamonti",\n \"popularity\": 5426\n },\n {\n \"tag\": "Franklinization",\n \"popularity\": 5422\n },\n {\n \"tag\": "parliament",\n \"popularity\": 5417\n },\n {\n \"tag\": "schoolkeeper",\n \"popularity\": 5413\n },\n {\n \"tag\": "nonsociety",\n \"popularity\": 5408\n },\n {\n \"tag\": "parenthetic",\n \"popularity\": 5404\n },\n {\n \"tag\": "stog",\n \"popularity\": 5399\n },\n {\n \"tag\": "Pristipomidae",\n \"popularity\": 5395\n },\n {\n \"tag\": "exocarp",\n \"popularity\": 5390\n },\n {\n \"tag\": "monaxonial",\n \"popularity\": 5386\n },\n {\n \"tag\": "tramroad",\n \"popularity\": 5381\n },\n {\n \"tag\": "hookah",\n \"popularity\": 5377\n },\n {\n \"tag\": "saccharonic",\n \"popularity\": 5372\n },\n {\n \"tag\": "perimetrium",\n \"popularity\": 5368\n },\n {\n \"tag\": "libelluloid",\n \"popularity\": 5364\n },\n {\n \"tag\": "overrunningly",\n \"popularity\": 5359\n },\n {\n \"tag\": "untwister",\n \"popularity\": 5355\n },\n {\n \"tag\": "ninnyhammer",\n \"popularity\": 5350\n },\n {\n \"tag\": "metranate",\n \"popularity\": 5346\n },\n {\n \"tag\": "sarcoblast",\n \"popularity\": 5341\n },\n {\n \"tag\": "porkish",\n \"popularity\": 5337\n },\n {\n \"tag\": "chauvinistic",\n \"popularity\": 5333\n },\n {\n \"tag\": "sexagesimal",\n \"popularity\": 5328\n },\n {\n \"tag\": "hematogenic",\n \"popularity\": 5324\n },\n {\n \"tag\": "selfpreservatory",\n \"popularity\": 5320\n },\n {\n \"tag\": "myelauxe",\n \"popularity\": 5315\n },\n {\n \"tag\": "triply",\n \"popularity\": 5311\n },\n {\n \"tag\": "metaphysicous",\n \"popularity\": 5306\n },\n {\n \"tag\": "vitrinoid",\n \"popularity\": 5302\n },\n {\n \"tag\": "glabellae",\n \"popularity\": 5298\n },\n {\n \"tag\": "moonlighter",\n \"popularity\": 5293\n },\n {\n \"tag\": "monotheistically epexegetical",\n \"popularity\": 5289\n },\n {\n \"tag\": "pseudolateral",\n \"popularity\": 5285\n },\n {\n \"tag\": "heptamethylene",\n \"popularity\": 5280\n },\n {\n \"tag\": "salvadora",\n \"popularity\": 5276\n },\n {\n \"tag\": "unjovial diphenylthiourea",\n \"popularity\": 5272\n },\n {\n \"tag\": "thievishness",\n \"popularity\": 5268\n },\n {\n \"tag\": "unridable",\n \"popularity\": 5263\n },\n {\n \"tag\": "underhandedly",\n \"popularity\": 5259\n },\n {\n \"tag\": "fungiform",\n \"popularity\": 5255\n },\n {\n \"tag\": "scruffle",\n \"popularity\": 5250\n },\n {\n \"tag\": "preindisposition",\n \"popularity\": 5246\n },\n {\n \"tag\": "Amadis",\n \"popularity\": 5242\n },\n {\n \"tag\": "Culex",\n \"popularity\": 5238\n },\n {\n \"tag\": "churning",\n \"popularity\": 5233\n },\n {\n \"tag\": "imperite",\n \"popularity\": 5229\n },\n {\n \"tag\": "levorotation",\n \"popularity\": 5225\n },\n {\n \"tag\": "barbate",\n \"popularity\": 5221\n },\n {\n \"tag\": "knotwort",\n \"popularity\": 5216\n },\n {\n \"tag\": "gypsiferous",\n \"popularity\": 5212\n },\n {\n \"tag\": "tourmalinic",\n \"popularity\": 5208\n },\n {\n \"tag\": "helleboric",\n \"popularity\": 5204\n },\n {\n \"tag\": "pneumograph",\n \"popularity\": 5199\n },\n {\n \"tag\": "Peltigeraceae",\n \"popularity\": 5195\n },\n {\n \"tag\": "busine",\n \"popularity\": 5191\n },\n {\n \"tag\": "Ailuridae",\n \"popularity\": 5187\n },\n {\n \"tag\": "azotate",\n \"popularity\": 5183\n },\n {\n \"tag\": "unlikable",\n \"popularity\": 5178\n },\n {\n \"tag\": "sloyd",\n \"popularity\": 5174\n },\n {\n \"tag\": "biblioclasm",\n \"popularity\": 5170\n },\n {\n \"tag\": "Seres",\n \"popularity\": 5166\n },\n {\n \"tag\": "unaccurateness",\n \"popularity\": 5162\n },\n {\n \"tag\": "scrollwise",\n \"popularity\": 5157\n },\n {\n \"tag\": "flandowser",\n \"popularity\": 5153\n },\n {\n \"tag\": "unblackened",\n \"popularity\": 5149\n },\n {\n \"tag\": "schistosternia",\n \"popularity\": 5145\n },\n {\n \"tag\": "fuse",\n \"popularity\": 5141\n },\n {\n \"tag\": "narthecal",\n \"popularity\": 5137\n },\n {\n \"tag\": "Cueva",\n \"popularity\": 5133\n },\n {\n \"tag\": "appositeness",\n \"popularity\": 5128\n },\n {\n \"tag\": "proindustrial",\n \"popularity\": 5124\n },\n {\n \"tag\": "dermatorrhoea",\n \"popularity\": 5120\n },\n {\n \"tag\": "oxyurous tendential",\n \"popularity\": 5116\n },\n {\n \"tag\": "isopurpurin",\n \"popularity\": 5112\n },\n {\n \"tag\": "impose",\n \"popularity\": 5108\n },\n {\n \"tag\": "wordsmanship",\n \"popularity\": 5104\n },\n {\n \"tag\": "saturator",\n \"popularity\": 5100\n },\n {\n \"tag\": "Nordicity",\n \"popularity\": 5096\n },\n {\n \"tag\": "interaccuse",\n \"popularity\": 5092\n },\n {\n \"tag\": "acridinic",\n \"popularity\": 5087\n },\n {\n \"tag\": "scholion",\n \"popularity\": 5083\n },\n {\n \"tag\": "pseudoaconitine",\n \"popularity\": 5079\n },\n {\n \"tag\": "doctorial",\n \"popularity\": 5075\n },\n {\n \"tag\": "Etchimin",\n \"popularity\": 5071\n },\n {\n \"tag\": "oliviform",\n \"popularity\": 5067\n },\n {\n \"tag\": "Pele",\n \"popularity\": 5063\n },\n {\n \"tag\": "Chiromantis Progymnasium",\n \"popularity\": 5059\n },\n {\n \"tag\": "toxosis",\n \"popularity\": 5055\n },\n {\n \"tag\": "spadilla",\n \"popularity\": 5051\n },\n {\n \"tag\": "Actinopterygii",\n \"popularity\": 5047\n },\n {\n \"tag\": "untiring",\n \"popularity\": 5043\n },\n {\n \"tag\": "butyral",\n \"popularity\": 5039\n },\n {\n \"tag\": "Gymnoderinae",\n \"popularity\": 5035\n },\n {\n \"tag\": "testudo",\n \"popularity\": 5031\n },\n {\n \"tag\": "frigorify",\n \"popularity\": 5027\n },\n {\n \"tag\": "aliency",\n \"popularity\": 5023\n },\n {\n \"tag\": "jargon",\n \"popularity\": 5019\n },\n {\n \"tag\": "counterservice",\n \"popularity\": 5015\n },\n {\n \"tag\": "isostrychnine",\n \"popularity\": 5011\n },\n {\n \"tag\": "tellership",\n \"popularity\": 5007\n },\n {\n \"tag\": "miscegenetic",\n \"popularity\": 5003\n },\n {\n \"tag\": "sorcer",\n \"popularity\": 4999\n },\n {\n \"tag\": "tilewright",\n \"popularity\": 4995\n },\n {\n \"tag\": "cyanoplastid",\n \"popularity\": 4991\n },\n {\n \"tag\": "fluxionally",\n \"popularity\": 4987\n },\n {\n \"tag\": "proudhearted",\n \"popularity\": 4983\n },\n {\n \"tag\": "blithely",\n \"popularity\": 4979\n },\n {\n \"tag\": "jestproof",\n \"popularity\": 4975\n },\n {\n \"tag\": "jestwise",\n \"popularity\": 4971\n },\n {\n \"tag\": "nonassimilable",\n \"popularity\": 4967\n },\n {\n \"tag\": "compurgation",\n \"popularity\": 4964\n },\n {\n \"tag\": "unhate",\n \"popularity\": 4960\n },\n {\n \"tag\": "haplodonty",\n \"popularity\": 4956\n },\n {\n \"tag\": "cardholder",\n \"popularity\": 4952\n },\n {\n \"tag\": "rainlight megohmmeter overstout",\n \"popularity\": 4948\n },\n {\n \"tag\": "itchless",\n \"popularity\": 4944\n },\n {\n \"tag\": "begiggle",\n \"popularity\": 4940\n },\n {\n \"tag\": "chromatosphere",\n \"popularity\": 4936\n },\n {\n \"tag\": "typicality",\n \"popularity\": 4932\n },\n {\n \"tag\": "overgrown",\n \"popularity\": 4928\n },\n {\n \"tag\": "envolume",\n \"popularity\": 4925\n },\n {\n \"tag\": "pachycholia",\n \"popularity\": 4921\n },\n {\n \"tag\": "passageable",\n \"popularity\": 4917\n },\n {\n \"tag\": "pathopoiesis",\n \"popularity\": 4913\n },\n {\n \"tag\": "overbreak",\n \"popularity\": 4909\n },\n {\n \"tag\": "satyric",\n \"popularity\": 4905\n },\n {\n \"tag\": "unaudited",\n \"popularity\": 4901\n },\n {\n \"tag\": "whimble",\n \"popularity\": 4898\n },\n {\n \"tag\": "pressureless",\n \"popularity\": 4894\n },\n {\n \"tag\": "Selene",\n \"popularity\": 4890\n },\n {\n \"tag\": "slithery",\n \"popularity\": 4886\n },\n {\n \"tag\": "nondisfigurement",\n \"popularity\": 4882\n },\n {\n \"tag\": "overdelicious",\n \"popularity\": 4878\n },\n {\n \"tag\": "Perca",\n \"popularity\": 4875\n },\n {\n \"tag\": "Palladium",\n \"popularity\": 4871\n },\n {\n \"tag\": "insagacity",\n \"popularity\": 4867\n },\n {\n \"tag\": "peristoma",\n \"popularity\": 4863\n },\n {\n \"tag\": "uncreativeness",\n \"popularity\": 4859\n },\n {\n \"tag\": "incomparability surfboarding",\n \"popularity\": 4856\n },\n {\n \"tag\": "bacillar",\n \"popularity\": 4852\n },\n {\n \"tag\": "ulcerative",\n \"popularity\": 4848\n },\n {\n \"tag\": "stychomythia",\n \"popularity\": 4844\n },\n {\n \"tag\": "sesma somatics nonentry",\n \"popularity\": 4840\n },\n {\n \"tag\": "unsepulchred",\n \"popularity\": 4837\n },\n {\n \"tag\": "cephalanthium",\n \"popularity\": 4833\n },\n {\n \"tag\": "Asiaticization",\n \"popularity\": 4829\n },\n {\n \"tag\": "killeen",\n \"popularity\": 4825\n },\n {\n \"tag\": "Pseudococcus",\n \"popularity\": 4822\n },\n {\n \"tag\": "untractable",\n \"popularity\": 4818\n },\n {\n \"tag\": "apolegamic",\n \"popularity\": 4814\n },\n {\n \"tag\": "hyperpnea",\n \"popularity\": 4810\n },\n {\n \"tag\": "martyrolatry",\n \"popularity\": 4807\n },\n {\n \"tag\": "Sarmatic",\n \"popularity\": 4803\n },\n {\n \"tag\": "nonsurface",\n \"popularity\": 4799\n },\n {\n \"tag\": "adjoined",\n \"popularity\": 4796\n },\n {\n \"tag\": "vasiform",\n \"popularity\": 4792\n },\n {\n \"tag\": "tastelessness",\n \"popularity\": 4788\n },\n {\n \"tag\": "rumbo",\n \"popularity\": 4784\n },\n {\n \"tag\": "subdititious",\n \"popularity\": 4781\n },\n {\n \"tag\": "reparticipation",\n \"popularity\": 4777\n },\n {\n \"tag\": "Yorkshireism",\n \"popularity\": 4773\n },\n {\n \"tag\": "outcrow",\n \"popularity\": 4770\n },\n {\n \"tag\": "casserole",\n \"popularity\": 4766\n },\n {\n \"tag\": "semideltaic",\n \"popularity\": 4762\n },\n {\n \"tag\": "freemason",\n \"popularity\": 4759\n },\n {\n \"tag\": "catkin",\n \"popularity\": 4755\n },\n {\n \"tag\": "conscient",\n \"popularity\": 4751\n },\n {\n \"tag\": "reliably",\n \"popularity\": 4748\n },\n {\n \"tag\": "Telembi",\n \"popularity\": 4744\n },\n {\n \"tag\": "hide",\n \"popularity\": 4740\n },\n {\n \"tag\": "social",\n \"popularity\": 4737\n },\n {\n \"tag\": "ichneutic",\n \"popularity\": 4733\n },\n {\n \"tag\": "polypotome blouse pentagrammatic",\n \"popularity\": 4729\n },\n {\n \"tag\": "airdrome pesthole",\n \"popularity\": 4726\n },\n {\n \"tag\": "unportended",\n \"popularity\": 4722\n },\n {\n \"tag\": "sheerly",\n \"popularity\": 4719\n },\n {\n \"tag\": "acardiac",\n \"popularity\": 4715\n },\n {\n \"tag\": "fetor",\n \"popularity\": 4711\n },\n {\n \"tag\": "storax",\n \"popularity\": 4708\n },\n {\n \"tag\": "syndactylic",\n \"popularity\": 4704\n },\n {\n \"tag\": "otiatrics",\n \"popularity\": 4700\n },\n {\n \"tag\": "range",\n \"popularity\": 4697\n },\n {\n \"tag\": "branchway",\n \"popularity\": 4693\n },\n {\n \"tag\": "beatific",\n \"popularity\": 4690\n },\n {\n \"tag\": "Rugosa",\n \"popularity\": 4686\n },\n {\n \"tag\": "rafty",\n \"popularity\": 4682\n },\n {\n \"tag\": "gapy",\n \"popularity\": 4679\n },\n {\n \"tag\": "heterocercal",\n \"popularity\": 4675\n },\n {\n \"tag\": "actinopterygious",\n \"popularity\": 4672\n },\n {\n \"tag\": "glauconite",\n \"popularity\": 4668\n },\n {\n \"tag\": "limbless priest",\n \"popularity\": 4665\n },\n {\n \"tag\": "chrysene",\n \"popularity\": 4661\n },\n {\n \"tag\": "isentropic",\n \"popularity\": 4658\n },\n {\n \"tag\": "lairdess",\n \"popularity\": 4654\n },\n {\n \"tag\": "butterhead choliambic",\n \"popularity\": 4650\n },\n {\n \"tag\": "hexaseme",\n \"popularity\": 4647\n },\n {\n \"tag\": "treeify",\n \"popularity\": 4643\n },\n {\n \"tag\": "coronetted fructify",\n \"popularity\": 4640\n },\n {\n \"tag\": "admiralty",\n \"popularity\": 4636\n },\n {\n \"tag\": "Flosculariidae",\n \"popularity\": 4633\n },\n {\n \"tag\": "limaceous",\n \"popularity\": 4629\n },\n {\n \"tag\": "subterconscious",\n \"popularity\": 4626\n },\n {\n \"tag\": "stayless",\n \"popularity\": 4622\n },\n {\n \"tag\": "psha",\n \"popularity\": 4619\n },\n {\n \"tag\": "Mediterraneanize",\n \"popularity\": 4615\n },\n {\n \"tag\": "impenetrably",\n \"popularity\": 4612\n },\n {\n \"tag\": "Myrmeleonidae",\n \"popularity\": 4608\n },\n {\n \"tag\": "germander",\n \"popularity\": 4605\n },\n {\n \"tag\": "Buri",\n \"popularity\": 4601\n },\n {\n \"tag\": "papyrotamia",\n \"popularity\": 4598\n },\n {\n \"tag\": "Toxylon",\n \"popularity\": 4594\n },\n {\n \"tag\": "batatilla",\n \"popularity\": 4591\n },\n {\n \"tag\": "fabella assumer",\n \"popularity\": 4587\n },\n {\n \"tag\": "macromethod",\n \"popularity\": 4584\n },\n {\n \"tag\": "Blechnum",\n \"popularity\": 4580\n },\n {\n \"tag\": "pantography",\n \"popularity\": 4577\n },\n {\n \"tag\": "seminovel",\n \"popularity\": 4574\n },\n {\n \"tag\": "disembarrassment",\n \"popularity\": 4570\n },\n {\n \"tag\": "bushmaking",\n \"popularity\": 4567\n },\n {\n \"tag\": "neurosis",\n \"popularity\": 4563\n },\n {\n \"tag\": "Animalia",\n \"popularity\": 4560\n },\n {\n \"tag\": "Bernice",\n \"popularity\": 4556\n },\n {\n \"tag\": "wisen",\n \"popularity\": 4553\n },\n {\n \"tag\": "subhymenium",\n \"popularity\": 4549\n },\n {\n \"tag\": "esophagomycosis",\n \"popularity\": 4546\n },\n {\n \"tag\": "wireworks",\n \"popularity\": 4543\n },\n {\n \"tag\": "Sabellidae",\n \"popularity\": 4539\n },\n {\n \"tag\": "fustianish",\n \"popularity\": 4536\n },\n {\n \"tag\": "professively",\n \"popularity\": 4532\n },\n {\n \"tag\": "overcorruptly",\n \"popularity\": 4529\n },\n {\n \"tag\": "overcreep",\n \"popularity\": 4526\n },\n {\n \"tag\": "Castilloa",\n \"popularity\": 4522\n },\n {\n \"tag\": "forelady Georgie",\n \"popularity\": 4519\n },\n {\n \"tag\": "outsider",\n \"popularity\": 4515\n },\n {\n \"tag\": "Enukki",\n \"popularity\": 4512\n },\n {\n \"tag\": "gypsy",\n \"popularity\": 4509\n },\n {\n \"tag\": "Passamaquoddy",\n \"popularity\": 4505\n },\n {\n \"tag\": "reposit",\n \"popularity\": 4502\n },\n {\n \"tag\": "overtenderness",\n \"popularity\": 4499\n },\n {\n \"tag\": "keratome",\n \"popularity\": 4495\n },\n {\n \"tag\": "interclavicular hypermonosyllable Susanna",\n \"popularity\": 4492\n },\n {\n \"tag\": "mispropose",\n \"popularity\": 4489\n },\n {\n \"tag\": "Membranipora",\n \"popularity\": 4485\n },\n {\n \"tag\": "lampad",\n \"popularity\": 4482\n },\n {\n \"tag\": "header",\n \"popularity\": 4479\n },\n {\n \"tag\": "triseriate",\n \"popularity\": 4475\n },\n {\n \"tag\": "distrainment",\n \"popularity\": 4472\n },\n {\n \"tag\": "staphyloplastic",\n \"popularity\": 4469\n },\n {\n \"tag\": "outscour",\n \"popularity\": 4465\n },\n {\n \"tag\": "tallowmaking",\n \"popularity\": 4462\n },\n {\n \"tag\": "plugger",\n \"popularity\": 4459\n },\n {\n \"tag\": "fashionize",\n \"popularity\": 4455\n },\n {\n \"tag\": "puzzle",\n \"popularity\": 4452\n },\n {\n \"tag\": "imbrue",\n \"popularity\": 4449\n },\n {\n \"tag\": "osteoblast",\n \"popularity\": 4445\n },\n {\n \"tag\": "Hydrocores",\n \"popularity\": 4442\n },\n {\n \"tag\": "Lutra",\n \"popularity\": 4439\n },\n {\n \"tag\": "upridge scarfy",\n \"popularity\": 4435\n },\n {\n \"tag\": "ancon taffle",\n \"popularity\": 4432\n },\n {\n \"tag\": "impest",\n \"popularity\": 4429\n },\n {\n \"tag\": "uncollatedness",\n \"popularity\": 4426\n },\n {\n \"tag\": "hypersensitize",\n \"popularity\": 4422\n },\n {\n \"tag\": "autographically",\n \"popularity\": 4419\n },\n {\n \"tag\": "louther",\n \"popularity\": 4416\n },\n {\n \"tag\": "Ollie",\n \"popularity\": 4413\n },\n {\n \"tag\": "recompensate",\n \"popularity\": 4409\n },\n {\n \"tag\": "Shan",\n \"popularity\": 4406\n },\n {\n \"tag\": "brachycnemic",\n \"popularity\": 4403\n },\n {\n \"tag\": "Carinatae",\n \"popularity\": 4399\n },\n {\n \"tag\": "geotherm",\n \"popularity\": 4396\n },\n {\n \"tag\": "sawback",\n \"popularity\": 4393\n },\n {\n \"tag\": "Novatianist",\n \"popularity\": 4390\n },\n {\n \"tag\": "reapproach",\n \"popularity\": 4387\n },\n {\n \"tag\": "myelopoietic",\n \"popularity\": 4383\n },\n {\n \"tag\": "cyanin",\n \"popularity\": 4380\n },\n {\n \"tag\": "unsmutted",\n \"popularity\": 4377\n },\n {\n \"tag\": "nonpapist",\n \"popularity\": 4374\n },\n {\n \"tag\": "transbaikalian",\n \"popularity\": 4370\n },\n {\n \"tag\": "connately",\n \"popularity\": 4367\n },\n {\n \"tag\": "tenderize iterance",\n \"popularity\": 4364\n },\n {\n \"tag\": "hydrostatical",\n \"popularity\": 4361\n },\n {\n \"tag\": "unflag",\n \"popularity\": 4358\n },\n {\n \"tag\": "translate",\n \"popularity\": 4354\n },\n {\n \"tag\": "Scorzonera",\n \"popularity\": 4351\n },\n {\n \"tag\": "uncomforted",\n \"popularity\": 4348\n },\n {\n \"tag\": "risser varied",\n \"popularity\": 4345\n },\n {\n \"tag\": "plumbate",\n \"popularity\": 4342\n },\n {\n \"tag\": "Usneaceae",\n \"popularity\": 4338\n },\n {\n \"tag\": "fohat",\n \"popularity\": 4335\n },\n {\n \"tag\": "slagging",\n \"popularity\": 4332\n },\n {\n \"tag\": "superserious",\n \"popularity\": 4329\n },\n {\n \"tag\": "theocracy",\n \"popularity\": 4326\n },\n {\n \"tag\": "valonia",\n \"popularity\": 4323\n },\n {\n \"tag\": "Sapindales",\n \"popularity\": 4319\n },\n {\n \"tag\": "palaeozoologist",\n \"popularity\": 4316\n },\n {\n \"tag\": "yalb",\n \"popularity\": 4313\n },\n {\n \"tag\": "unviewed",\n \"popularity\": 4310\n },\n {\n \"tag\": "polyarteritis",\n \"popularity\": 4307\n },\n {\n \"tag\": "vectorial",\n \"popularity\": 4304\n },\n {\n \"tag\": "skimpingly",\n \"popularity\": 4301\n },\n {\n \"tag\": "athort",\n \"popularity\": 4297\n },\n {\n \"tag\": "tribofluorescence",\n \"popularity\": 4294\n },\n {\n \"tag\": "benzonitrol",\n \"popularity\": 4291\n },\n {\n \"tag\": "swiller subobtuse subjacency",\n \"popularity\": 4288\n },\n {\n \"tag\": "uncompassed",\n \"popularity\": 4285\n },\n {\n \"tag\": "cacochymia",\n \"popularity\": 4282\n },\n {\n \"tag\": "commensalist butadiene",\n \"popularity\": 4279\n },\n {\n \"tag\": "culpable",\n \"popularity\": 4276\n },\n {\n \"tag\": "contributive",\n \"popularity\": 4273\n },\n {\n \"tag\": "attemperately",\n \"popularity\": 4269\n },\n {\n \"tag\": "spelt",\n \"popularity\": 4266\n },\n {\n \"tag\": "exoneration",\n \"popularity\": 4263\n },\n {\n \"tag\": "antivivisectionist",\n \"popularity\": 4260\n },\n {\n \"tag\": "granitification",\n \"popularity\": 4257\n },\n {\n \"tag\": "palladize",\n \"popularity\": 4254\n },\n {\n \"tag\": "marksmanship",\n \"popularity\": 4251\n },\n {\n \"tag\": "bullydom",\n \"popularity\": 4248\n },\n {\n \"tag\": "spirality",\n \"popularity\": 4245\n },\n {\n \"tag\": "caliginous",\n \"popularity\": 4242\n },\n {\n \"tag\": "reportedly",\n \"popularity\": 4239\n },\n {\n \"tag\": "polyad",\n \"popularity\": 4236\n },\n {\n \"tag\": "arthroempyesis",\n \"popularity\": 4233\n },\n {\n \"tag\": "semibay facultatively",\n \"popularity\": 4229\n },\n {\n \"tag\": "metastatically",\n \"popularity\": 4226\n },\n {\n \"tag\": "prophetically",\n \"popularity\": 4223\n },\n {\n \"tag\": "Linguatula elapid",\n \"popularity\": 4220\n },\n {\n \"tag\": "pyknatom",\n \"popularity\": 4217\n },\n {\n \"tag\": "centimeter",\n \"popularity\": 4214\n },\n {\n \"tag\": "mensurate",\n \"popularity\": 4211\n },\n {\n \"tag\": "migraine",\n \"popularity\": 4208\n },\n {\n \"tag\": "pentagamist",\n \"popularity\": 4205\n },\n {\n \"tag\": "querken",\n \"popularity\": 4202\n },\n {\n \"tag\": "ambulance",\n \"popularity\": 4199\n },\n {\n \"tag\": "Stokavian",\n \"popularity\": 4196\n },\n {\n \"tag\": "malvasian",\n \"popularity\": 4193\n },\n {\n \"tag\": "uncouthsome",\n \"popularity\": 4190\n },\n {\n \"tag\": "readable",\n \"popularity\": 4187\n },\n {\n \"tag\": "enlodge",\n \"popularity\": 4184\n },\n {\n \"tag\": "plasterwise Appendiculariidae perspectograph",\n \"popularity\": 4181\n },\n {\n \"tag\": "inkweed",\n \"popularity\": 4178\n },\n {\n \"tag\": "streep",\n \"popularity\": 4175\n },\n {\n \"tag\": "diadelphian cultured",\n \"popularity\": 4172\n },\n {\n \"tag\": "hymenopterous",\n \"popularity\": 4169\n },\n {\n \"tag\": "unexorableness",\n \"popularity\": 4166\n },\n {\n \"tag\": "cascaron",\n \"popularity\": 4163\n },\n {\n \"tag\": "undaintiness",\n \"popularity\": 4160\n },\n {\n \"tag\": "Curtana",\n \"popularity\": 4157\n },\n {\n \"tag\": "scurvied",\n \"popularity\": 4154\n },\n {\n \"tag\": "molluscoidal",\n \"popularity\": 4151\n },\n {\n \"tag\": "yurt",\n \"popularity\": 4148\n },\n {\n \"tag\": "deciduitis",\n \"popularity\": 4145\n },\n {\n \"tag\": "creephole",\n \"popularity\": 4142\n },\n {\n \"tag\": "quatrefeuille",\n \"popularity\": 4139\n },\n {\n \"tag\": "bicapitate adenomatome",\n \"popularity\": 4136\n },\n {\n \"tag\": "damassin",\n \"popularity\": 4134\n },\n {\n \"tag\": "planching",\n \"popularity\": 4131\n },\n {\n \"tag\": "dashedly inferential",\n \"popularity\": 4128\n },\n {\n \"tag\": "lobe",\n \"popularity\": 4125\n },\n {\n \"tag\": "Hyrachyus",\n \"popularity\": 4122\n },\n {\n \"tag\": "knab",\n \"popularity\": 4119\n },\n {\n \"tag\": "discohexaster",\n \"popularity\": 4116\n },\n {\n \"tag\": "malign",\n \"popularity\": 4113\n },\n {\n \"tag\": "pedagoguism",\n \"popularity\": 4110\n },\n {\n \"tag\": "shrubbery",\n \"popularity\": 4107\n },\n {\n \"tag\": "undershrub",\n \"popularity\": 4104\n },\n {\n \"tag\": "bureaucrat",\n \"popularity\": 4101\n },\n {\n \"tag\": "pantaleon",\n \"popularity\": 4098\n },\n {\n \"tag\": "mesoventral",\n \"popularity\": 4096\n }]'; >+ >+var log2 = Math.log(2); >+var tagInfo = tagInfoJSON.parseJSON(function(a, b) { if (a == "popularity") { return Math.log(b) / log2; } else {return b; } }); >+ >+function makeTagCloud(tagInfo) >+{ >+ var output = '<div class="tagCloud" style="width: 100%">'; >+ >+ tagInfo.sort(function(a, b) { if (a.tag < b.tag) { return -1; } else if (a.tag == b.tag) { return 0; } else return 1; }); >+ >+ for (var i = 0; i < tagInfo.length; i++) { >+ var tag = tagInfo[i].tag; >+ >+ var validates = true; >+ for (var j = 0; j < tag.length; j++) { >+ var ch = tag.charCodeAt(j); >+ if (ch < 0x20 || ch >= 0x7f) { >+ validates = false; >+ break; >+ } >+ } >+ >+ if (!validates) >+ continue; >+ >+ var url = "http://example.com/tag/" + tag.replace(" ", "").toLowerCase(); >+ var popularity = tagInfo[i].popularity; >+ var color = 'rgb(' + Math.floor(255 * (popularity - 12) / 20) + ', 0, 255)'; >+ output += ' <a href="' + url + '" style="font-size: ' + popularity + 'px; color: ' + color + '">' + tag + '</a> \n'; >+ } >+ >+ output += '</div>'; >+ output.replace(" ", " "); >+ >+ return output; >+} >+ >+var tagcloud = makeTagCloud(tagInfo); >+ >+var expectedMinLength = 315000; >+ >+if (tagcloud.length < expectedMinLength) >+ throw "ERROR: bad result: expected length at least " + expectedMinLength + " but got " + tagcloud.length; >+ >+tagInfo = null; >Index: Source/JavaScriptCore/ChangeLog >=================================================================== >--- Source/JavaScriptCore/ChangeLog (revision 232148) >+++ Source/JavaScriptCore/ChangeLog (working copy) >@@ -1,3 +1,25 @@ >+2018-05-24 Saam Barati <sbarati@apple.com> >+ >+ Have a memory test where we can validate JSCs mini memory mode >+ https://bugs.webkit.org/show_bug.cgi?id=185932 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This patch adds the testmem CLI. It takes as input a file to run >+ and the number of iterations to run it (by default it runs it >+ 20 times). Each iteration runs in a new JSContext. Each JSContext >+ belongs to a VM that is created once. When finished, the CLI dumps >+ out the peak memory usage of the process, the memory usage at the end >+ of running all the iterations of the process, and the total time it >+ took to run all the iterations. >+ >+ * JavaScriptCore.xcodeproj/project.pbxproj: >+ * testmem: Added. >+ * testmem/testmem.mm: Added. >+ (description): >+ (Footprint::now): >+ (main): >+ > 2018-05-23 Keith Miller <keith_miller@apple.com> > > Expose $vm if window.internals is exposed >Index: Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj >=================================================================== >--- Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (revision 232148) >+++ Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (working copy) >@@ -36,6 +36,7 @@ > buildPhases = ( > ); > dependencies = ( >+ 7954BE0D20B63348009BC83A /* PBXTargetDependency */, > FE533CAF1F217EC60016A1FE /* PBXTargetDependency */, > 0F6183471C45F67A0072450B /* PBXTargetDependency */, > 0F93275D1C20BF3A00CF6564 /* PBXTargetDependency */, >@@ -1104,7 +1105,10 @@ > 79160DBE1C8E3EC8008C085A /* ProxyRevoke.h in Headers */ = {isa = PBXBuildFile; fileRef = 79160DBC1C8E3EC8008C085A /* ProxyRevoke.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 7919B7801E03559C005BEED8 /* B3Compile.h in Headers */ = {isa = PBXBuildFile; fileRef = 7919B77F1E03559C005BEED8 /* B3Compile.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 79233C2B1D34715700C5A834 /* JITMathIC.h in Headers */ = {isa = PBXBuildFile; fileRef = 79233C291D34715700C5A834 /* JITMathIC.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ 79281BD120B62B3E002E2A60 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51F0EB6105C86C6B00E6DF1B /* Foundation.framework */; }; >+ 79281BD220B62B3E002E2A60 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 932F5BD90822A1C700736975 /* JavaScriptCore.framework */; }; > 792CB34A1C4EED5C00D13AF3 /* PCToCodeOriginMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 792CB3481C4EED5C00D13AF3 /* PCToCodeOriginMap.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ 7954BE0B20B62D64009BC83A /* testmem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7954BE0A20B62D63009BC83A /* testmem.mm */; }; > 795AC61820A2355E0052C76C /* JSVirtualMachinePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 795AC61720A2354B0052C76C /* JSVirtualMachinePrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 7964656A1B952FF0003059EE /* GetPutInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 796465681B952FF0003059EE /* GetPutInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 7965C2171E5D799600B7591D /* AirAllocateRegistersByGraphColoring.h in Headers */ = {isa = PBXBuildFile; fileRef = 7965C2151E5D799600B7591D /* AirAllocateRegistersByGraphColoring.h */; settings = {ATTRIBUTES = (Private, ); }; }; >@@ -1910,6 +1914,13 @@ > remoteGlobalIDString = 65FB3F6609D11E9100F49DEB; > remoteInfo = "Generate Derived Sources"; > }; >+ 7954BE0C20B63348009BC83A /* PBXContainerItemProxy */ = { >+ isa = PBXContainerItemProxy; >+ containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; >+ proxyType = 1; >+ remoteGlobalIDString = 79281BBD20B62B3E002E2A60; >+ remoteInfo = testmem; >+ }; > 932F5BE60822A1C700736975 /* PBXContainerItemProxy */ = { > isa = PBXContainerItemProxy; > containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; >@@ -3625,8 +3636,10 @@ > 79160DBC1C8E3EC8008C085A /* ProxyRevoke.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProxyRevoke.h; sourceTree = "<group>"; }; > 7919B77F1E03559C005BEED8 /* B3Compile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = B3Compile.h; path = b3/B3Compile.h; sourceTree = "<group>"; }; > 79233C291D34715700C5A834 /* JITMathIC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITMathIC.h; sourceTree = "<group>"; }; >+ 79281BDC20B62B3E002E2A60 /* testmem */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testmem; sourceTree = BUILT_PRODUCTS_DIR; }; > 792CB3471C4EED5C00D13AF3 /* PCToCodeOriginMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PCToCodeOriginMap.cpp; sourceTree = "<group>"; }; > 792CB3481C4EED5C00D13AF3 /* PCToCodeOriginMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PCToCodeOriginMap.h; sourceTree = "<group>"; }; >+ 7954BE0A20B62D63009BC83A /* testmem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = testmem.mm; path = testmem/testmem.mm; sourceTree = "<group>"; }; > 795AC61720A2354B0052C76C /* JSVirtualMachinePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSVirtualMachinePrivate.h; sourceTree = "<group>"; }; > 795F099C1E03600500BBE37F /* B3Compile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = B3Compile.cpp; path = b3/B3Compile.cpp; sourceTree = "<group>"; }; > 796465681B952FF0003059EE /* GetPutInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetPutInfo.h; sourceTree = "<group>"; }; >@@ -3650,6 +3663,8 @@ > 79A899FE1D38612E00D18C73 /* JITMathICForwards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITMathICForwards.h; sourceTree = "<group>"; }; > 79ABB17B1E5CCB570045B9A6 /* AirDisassembler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AirDisassembler.cpp; path = b3/air/AirDisassembler.cpp; sourceTree = "<group>"; }; > 79ABB17C1E5CCB570045B9A6 /* AirDisassembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AirDisassembler.h; path = b3/air/AirDisassembler.h; sourceTree = "<group>"; }; >+ 79ABCC5620B7812600323D5F /* testmem2.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = testmem2.m; sourceTree = "<group>"; }; >+ 79ABCC5820B7812600323D5F /* testmem2.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = testmem2.1; sourceTree = "<group>"; }; > 79AC30FE1F99536300484FD7 /* ObjectAllocationProfileInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectAllocationProfileInlines.h; sourceTree = "<group>"; }; > 79AF0BE31D3EFD4C00E95FA5 /* JITMathICInlineResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITMathICInlineResult.h; sourceTree = "<group>"; }; > 79B00CB81C6AB07E0088C65D /* ProxyConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProxyConstructor.cpp; sourceTree = "<group>"; }; >@@ -4842,6 +4857,15 @@ > ); > runOnlyForDeploymentPostprocessing = 0; > }; >+ 79281BD020B62B3E002E2A60 /* Frameworks */ = { >+ isa = PBXFrameworksBuildPhase; >+ buildActionMask = 2147483647; >+ files = ( >+ 79281BD120B62B3E002E2A60 /* Foundation.framework in Frameworks */, >+ 79281BD220B62B3E002E2A60 /* JavaScriptCore.framework in Frameworks */, >+ ); >+ runOnlyForDeploymentPostprocessing = 0; >+ }; > 932F5BD20822A1C700736975 /* Frameworks */ = { > isa = PBXFrameworksBuildPhase; > buildActionMask = 2147483647; >@@ -4890,6 +4914,7 @@ > FE533CAC1F217DB40016A1FE /* testmasm */, > 6511230514046A4C002B101D /* testRegExp */, > 932F5BD90822A1C700736975 /* JavaScriptCore.framework */, >+ 79281BDC20B62B3E002E2A60 /* testmem */, > ); > name = Products; > sourceTree = "<group>"; >@@ -4923,6 +4948,7 @@ > 86EC9DB31328DF44002B2AD7 /* dfg */, > 0FF4272E158EBCCE004CB9FF /* disassembler */, > E3FF752D1D9CE9EA00C7E16D /* domjit */, >+ 79ABCC5520B7812600323D5F /* testmem2 */, > 0867D69AFE84028FC02AAC07 /* Frameworks */, > 0FEA09FC1705137F00BB722C /* ftl */, > 142E312A134FF0A600AFADB5 /* heap */, >@@ -4936,6 +4962,7 @@ > 95AB831A0DA42C6900BC83F3 /* profiler */, > 932FC3C20824BB70005B3C75 /* Resources */, > 7EF6E0BB0EB7A1EC0079AFAF /* runtime */, >+ 79281C0020B62BBD002E2A60 /* testmem */, > 9959E9251BD17F1E001AA413 /* Scripts */, > 141211000A48772600480255 /* tests */, > 8603CEF014C753EF00AE59E3 /* tools */, >@@ -6248,6 +6275,23 @@ > name = ARM64; > sourceTree = "<group>"; > }; >+ 79281C0020B62BBD002E2A60 /* testmem */ = { >+ isa = PBXGroup; >+ children = ( >+ 7954BE0A20B62D63009BC83A /* testmem.mm */, >+ ); >+ name = testmem; >+ sourceTree = "<group>"; >+ }; >+ 79ABCC5520B7812600323D5F /* testmem2 */ = { >+ isa = PBXGroup; >+ children = ( >+ 79ABCC5620B7812600323D5F /* testmem2.m */, >+ 79ABCC5820B7812600323D5F /* testmem2.1 */, >+ ); >+ path = testmem2; >+ sourceTree = "<group>"; >+ }; > 7ACDDECF1E252ACA0097AFEB /* cocoa */ = { > isa = PBXGroup; > children = ( >@@ -9750,6 +9794,22 @@ > productReference = 6511230514046A4C002B101D /* testRegExp */; > productType = "com.apple.product-type.tool"; > }; >+ 79281BBD20B62B3E002E2A60 /* testmem */ = { >+ isa = PBXNativeTarget; >+ buildConfigurationList = 79281BD720B62B3E002E2A60 /* Build configuration list for PBXNativeTarget "testmem" */; >+ buildPhases = ( >+ 79281BBE20B62B3E002E2A60 /* Sources */, >+ 79281BD020B62B3E002E2A60 /* Frameworks */, >+ ); >+ buildRules = ( >+ ); >+ dependencies = ( >+ ); >+ name = testmem; >+ productName = testapi; >+ productReference = 79281BDC20B62B3E002E2A60 /* testmem */; >+ productType = "com.apple.product-type.tool"; >+ }; > 932F5B3E0822A1C700736975 /* JavaScriptCore */ = { > isa = PBXNativeTarget; > buildConfigurationList = 149C275D08902AFE008A9EFC /* Build configuration list for PBXNativeTarget "JavaScriptCore" */; >@@ -9853,6 +9913,7 @@ > 0F93274E1C20BCBA00CF6564 /* dynbench */, > 0F6183381C45F62A0072450B /* testair */, > FE533CA11F217DB30016A1FE /* testmasm */, >+ 79281BBD20B62B3E002E2A60 /* testmem */, > ); > }; > /* End PBXProject section */ >@@ -9895,7 +9956,7 @@ > ); > runOnlyForDeploymentPostprocessing = 1; > shellPath = /bin/sh; >- shellScript = "if [[ ${PLATFORM_NAME} != \"iphoneos\" ]]; then\n exit 0\nfi\n\nif [[ ! -d \"${INSTALL_ROOT}/${SYSTEM_LIBRARY_DIR}/PrivateFrameworks\" ]]; then\n mkdir -p \"${INSTALL_ROOT}/${SYSTEM_LIBRARY_DIR}/PrivateFrameworks\"\nfi\n\nln -s -h -f ../Frameworks/JavaScriptCore.framework \"${INSTALL_ROOT}/${SYSTEM_LIBRARY_DIR}/PrivateFrameworks/JavaScriptCore.framework\""; >+ shellScript = "if [[ ${PLATFORM_NAME} != \"iphoneos\" ]]; then\n exit 0\nfi\n\nif [[ ! -d \"${INSTALL_ROOT}/${SYSTEM_LIBRARY_DIR}/PrivateFrameworks\" ]]; then\n mkdir -p \"${INSTALL_ROOT}/${SYSTEM_LIBRARY_DIR}/PrivateFrameworks\"\nfi\n\nln -s -h -f ../Frameworks/JavaScriptCore.framework \"${INSTALL_ROOT}/${SYSTEM_LIBRARY_DIR}/PrivateFrameworks/JavaScriptCore.framework\"\n"; > }; > 3713F014142905240036387F /* Check For Inappropriate Objective-C Class Names */ = { > isa = PBXShellScriptBuildPhase; >@@ -9910,7 +9971,7 @@ > ); > runOnlyForDeploymentPostprocessing = 0; > shellPath = /bin/sh; >- shellScript = "set -e\n\nif [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-inappropriate-objc-class-names ]; then\n ../../Tools/Scripts/check-for-inappropriate-objc-class-names JS WTF\nfi"; >+ shellScript = "set -e\n\nif [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-inappropriate-objc-class-names ]; then\n ../../Tools/Scripts/check-for-inappropriate-objc-class-names JS WTF\nfi\n"; > }; > 3732811A17FCD235004AD519 /* Postprocess Headers */ = { > isa = PBXShellScriptBuildPhase; >@@ -9973,7 +10034,7 @@ > ); > runOnlyForDeploymentPostprocessing = 0; > shellPath = /bin/sh; >- shellScript = "set -e\n\nif [ -f ../../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../../Tools/Scripts/check-for-weak-vtables-and-externals\nfi"; >+ shellScript = "set -e\n\nif [ -f ../../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../../Tools/Scripts/check-for-weak-vtables-and-externals\nfi\n"; > }; > 5D2F7CF90C6875BB00B5B72B /* Update Info.plist with version information */ = { > isa = PBXShellScriptBuildPhase; >@@ -10080,7 +10141,7 @@ > ); > runOnlyForDeploymentPostprocessing = 0; > shellPath = /bin/sh; >- shellScript = "set -e\n\nif [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-inappropriate-macros-in-external-headers ]; then\n ../../Tools/Scripts/check-for-inappropriate-macros-in-external-headers Headers PrivateHeaders/JSBasePrivate.h\nfi"; >+ shellScript = "set -e\n\nif [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-inappropriate-macros-in-external-headers ]; then\n ../../Tools/Scripts/check-for-inappropriate-macros-in-external-headers Headers PrivateHeaders/JSBasePrivate.h\nfi\n"; > }; > /* End PBXShellScriptBuildPhase section */ > >@@ -10161,6 +10222,14 @@ > ); > runOnlyForDeploymentPostprocessing = 0; > }; >+ 79281BBE20B62B3E002E2A60 /* Sources */ = { >+ isa = PBXSourcesBuildPhase; >+ buildActionMask = 2147483647; >+ files = ( >+ 7954BE0B20B62D64009BC83A /* testmem.mm in Sources */, >+ ); >+ runOnlyForDeploymentPostprocessing = 0; >+ }; > 932F5B910822A1C700736975 /* Sources */ = { > isa = PBXSourcesBuildPhase; > buildActionMask = 2147483647; >@@ -10425,6 +10494,11 @@ > target = 65FB3F6609D11E9100F49DEB /* Derived Sources */; > targetProxy = 65FB3F7D09D11EF300F49DEB /* PBXContainerItemProxy */; > }; >+ 7954BE0D20B63348009BC83A /* PBXTargetDependency */ = { >+ isa = PBXTargetDependency; >+ target = 79281BBD20B62B3E002E2A60 /* testmem */; >+ targetProxy = 7954BE0C20B63348009BC83A /* PBXContainerItemProxy */; >+ }; > 932F5BE70822A1C700736975 /* PBXTargetDependency */ = { > isa = PBXTargetDependency; > target = 932F5B3E0822A1C700736975 /* JavaScriptCore */; >@@ -10874,6 +10948,38 @@ > }; > name = Production; > }; >+ 79281BD820B62B3E002E2A60 /* Debug */ = { >+ isa = XCBuildConfiguration; >+ baseConfigurationReference = BC021BF2136900C300FC5467 /* ToolExecutable.xcconfig */; >+ buildSettings = { >+ PRODUCT_NAME = "$(TARGET_NAME)"; >+ }; >+ name = Debug; >+ }; >+ 79281BD920B62B3E002E2A60 /* Release */ = { >+ isa = XCBuildConfiguration; >+ baseConfigurationReference = BC021BF2136900C300FC5467 /* ToolExecutable.xcconfig */; >+ buildSettings = { >+ PRODUCT_NAME = "$(TARGET_NAME)"; >+ }; >+ name = Release; >+ }; >+ 79281BDA20B62B3E002E2A60 /* Profiling */ = { >+ isa = XCBuildConfiguration; >+ baseConfigurationReference = BC021BF2136900C300FC5467 /* ToolExecutable.xcconfig */; >+ buildSettings = { >+ PRODUCT_NAME = "$(TARGET_NAME)"; >+ }; >+ name = Profiling; >+ }; >+ 79281BDB20B62B3E002E2A60 /* Production */ = { >+ isa = XCBuildConfiguration; >+ baseConfigurationReference = BC021BF2136900C300FC5467 /* ToolExecutable.xcconfig */; >+ buildSettings = { >+ PRODUCT_NAME = "$(TARGET_NAME)"; >+ }; >+ name = Production; >+ }; > A761483D0E6402F700E357FA /* Profiling */ = { > isa = XCBuildConfiguration; > baseConfigurationReference = 1C9051440BA9E8A70081E9D0 /* DebugRelease.xcconfig */; >@@ -11136,6 +11242,17 @@ > defaultConfigurationIsVisible = 0; > defaultConfigurationName = Production; > }; >+ 79281BD720B62B3E002E2A60 /* Build configuration list for PBXNativeTarget "testmem" */ = { >+ isa = XCConfigurationList; >+ buildConfigurations = ( >+ 79281BD820B62B3E002E2A60 /* Debug */, >+ 79281BD920B62B3E002E2A60 /* Release */, >+ 79281BDA20B62B3E002E2A60 /* Profiling */, >+ 79281BDB20B62B3E002E2A60 /* Production */, >+ ); >+ defaultConfigurationIsVisible = 0; >+ defaultConfigurationName = Production; >+ }; > FE533CA71F217DB30016A1FE /* Build configuration list for PBXNativeTarget "testmasm" */ = { > isa = XCConfigurationList; > buildConfigurations = ( >Index: Source/JavaScriptCore/testmem/testmem.mm >=================================================================== >--- Source/JavaScriptCore/testmem/testmem.mm (nonexistent) >+++ Source/JavaScriptCore/testmem/testmem.mm (working copy) >@@ -0,0 +1,141 @@ >+/* >+ * Copyright (C) 2018 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR >+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, >+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, >+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#import <JavaScriptCore/JavaScriptCore.h> >+#import <stdio.h> >+ >+#if __has_include(<libproc.h>) >+#import <libproc.h> >+#else >+typedef void* rusage_info_t; >+struct rusage_info_v4 { >+ uint8_t ri_uuid[16]; >+ uint64_t ri_user_time; >+ uint64_t ri_system_time; >+ uint64_t ri_pkg_idle_wkups; >+ uint64_t ri_interrupt_wkups; >+ uint64_t ri_pageins; >+ uint64_t ri_wired_size; >+ uint64_t ri_resident_size; >+ uint64_t ri_phys_footprint; >+ uint64_t ri_proc_start_abstime; >+ uint64_t ri_proc_exit_abstime; >+ uint64_t ri_child_user_time; >+ uint64_t ri_child_system_time; >+ uint64_t ri_child_pkg_idle_wkups; >+ uint64_t ri_child_interrupt_wkups; >+ uint64_t ri_child_pageins; >+ uint64_t ri_child_elapsed_abstime; >+ uint64_t ri_diskio_bytesread; >+ uint64_t ri_diskio_byteswritten; >+ uint64_t ri_cpu_time_qos_default; >+ uint64_t ri_cpu_time_qos_maintenance; >+ uint64_t ri_cpu_time_qos_background; >+ uint64_t ri_cpu_time_qos_utility; >+ uint64_t ri_cpu_time_qos_legacy; >+ uint64_t ri_cpu_time_qos_user_initiated; >+ uint64_t ri_cpu_time_qos_user_interactive; >+ uint64_t ri_billed_system_time; >+ uint64_t ri_serviced_system_time; >+ uint64_t ri_logical_writes; >+ uint64_t ri_lifetime_max_phys_footprint; >+ uint64_t ri_instructions; >+ uint64_t ri_cycles; >+ uint64_t ri_billed_energy; >+ uint64_t ri_serviced_energy; >+ uint64_t ri_interval_max_phys_footprint; >+ uint64_t ri_unused[1]; >+}; >+#define RUSAGE_INFO_V4 4 >+#endif // __has_include(<libproc.h>) >+ >+int proc_pid_rusage(int pid, int flavor, rusage_info_t *buffer); >+ >+static void description() >+{ >+ printf("usage \n testmem <path-to-file-to-run> [iterations]\n"); >+} >+ >+struct Footprint { >+ size_t current; >+ size_t peak; >+ >+ static Footprint now() >+ { >+ rusage_info_v4 rusage; >+ if (proc_pid_rusage(getpid(), RUSAGE_INFO_V4, (rusage_info_t *)&rusage)) { >+ printf("Failure when calling rusage\n"); >+ exit(1); >+ } >+ >+ return { rusage.ri_phys_footprint, rusage.ri_lifetime_max_phys_footprint }; >+ } >+}; >+ >+int main(int argc, char* argv[]) >+{ >+ if (argc < 2) { >+ description(); >+ exit(1); >+ } >+ >+ size_t iterations = 20; >+ if (argc >= 3) { >+ int iters = atoi(argv[2]); >+ if (iters < 0) { >+ printf("Iterations argument must be >= 0"); >+ exit(1); >+ } >+ iterations = iters; >+ } >+ >+ NSString *path = [NSString stringWithUTF8String:argv[1]]; >+ NSString *script = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; >+ if (!script) { >+ printf("Can't open file: %s\n", argv[1]); >+ exit(1); >+ } >+ >+ auto startTime = CFAbsoluteTimeGetCurrent(); >+ JSVirtualMachine* vm = [[JSVirtualMachine alloc] init]; >+ for (size_t i = 0; i < iterations; ++i) { >+ @autoreleasepool { >+ JSContext *context = [[JSContext alloc] initWithVirtualMachine:vm]; >+ context.exceptionHandler = ^(JSContext*, JSValue*) { >+ printf("Unexpected exception thrown\n"); >+ exit(1); >+ }; >+ [context evaluateScript:script]; >+ } >+ } >+ auto time = CFAbsoluteTimeGetCurrent() - startTime; >+ auto footprint = Footprint::now(); >+ >+ printf("time: %lf\n", time); // Seconds >+ printf("peak footprint: %zu\n", footprint.peak); // Bytes >+ printf("footprint at end: %zu\n", footprint.current); // Bytes >+ >+ return 0; >+} >Index: Tools/ChangeLog >=================================================================== >--- Tools/ChangeLog (revision 232166) >+++ Tools/ChangeLog (working copy) >@@ -1,3 +1,34 @@ >+2018-05-24 Saam Barati <sbarati@apple.com> >+ >+ Have a memory test where we can validate JSCs mini memory mode >+ https://bugs.webkit.org/show_bug.cgi?id=185932 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This patch adds the run-testmem script. This runs the new testmem >+ CLI against the contents in the testmem benchmark. The contents of testmem >+ contain tests from ARES-6, Sunspider, Octane, and JetStream. >+ >+ One iteration of the benchmark comprises of running each testmem test for >+ a certain number of iterations. We collect the peak memory usage, the memory >+ usage after running all the iterations, and the time it takes to run all the >+ iterations. We then run the entire benchmark 3 times over. For each test, we >+ compute the arithmetic mean over each iteration for time, peak memory, and >+ end memory. The benchmark then computes a time score and memory score. >+ >+ peak memory score = geomean({peak memory of each individual test}) >+ end memory score = geomean({end memory of each individual test}) >+ memory score = geomean({peak memory score, end memory score}) >+ time score = geomean({time score of each individual test}) >+ >+ We want the memory score to weigh improvements to peak memory usage and >+ memory usage at the end equally. >+ >+ We plan to tune this benchmark in JSC's mini mode by improving the memory >+ score while ensuring the time score is not more than 10-15% regressed. >+ >+ * Scripts/run-testmem: Added. >+ > 2018-05-24 Carlos Garcia Campos <cgarcia@igalia.com> > > WebDriver: implement maximize, minimize and fullscreen window commands >Index: Tools/Scripts/run-testmem >=================================================================== >--- Tools/Scripts/run-testmem (nonexistent) >+++ Tools/Scripts/run-testmem (working copy) >@@ -0,0 +1,214 @@ >+#!/usr/bin/env ruby >+ >+# Copyright (C) 2018 Apple Inc. All rights reserved. >+# >+# Redistribution and use in source and binary forms, with or without >+# modification, are permitted provided that the following conditions >+# are met: >+# 1. Redistributions of source code must retain the above copyright >+# notice, this list of conditions and the following disclaimer. >+# 2. Redistributions in binary form must reproduce the above copyright >+# notice, this list of conditions and the following disclaimer in the >+# documentation and/or other materials provided with the distribution. >+# >+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+# THE POSSIBILITY OF SUCH DAMAGE. >+ >+require 'fileutils' >+require 'pathname' >+require 'open3' >+require "JSON" >+require 'getoptlong' >+ >+def usage >+ puts "run-testmem [options]" >+ puts "--build-dir (-b) pass in a path to your build directory, e.g, WebKitBuild/Release" >+ puts "--verbose (-v) print more information as the benchmark runs" >+ puts "--count (-c) number of outer iterations to run the benchmark for" >+ puts "--help (-h) print this message" >+end >+ >+THIS_SCRIPT_PATH = Pathname.new(__FILE__).realpath >+SCRIPTS_PATH = THIS_SCRIPT_PATH.dirname >+ >+$buildDir = nil >+$verbose = false >+$outerIterations = 3 >+ >+GetoptLong.new(["--build-dir", "-b", GetoptLong::REQUIRED_ARGUMENT], >+ ["--verbose", "-v", GetoptLong::NO_ARGUMENT], >+ ["--count", "-c", GetoptLong::REQUIRED_ARGUMENT], >+ ["--help", "-h", GetoptLong::NO_ARGUMENT], >+ ).each { >+ | opt, arg | >+ case opt >+ when "--build-dir" >+ $buildDir = arg >+ when "--verbose" >+ $verbose = true >+ when "--count" >+ $outerIterations = arg.to_i >+ if $outerIterations < 1 >+ print "--count must be > 0\n" >+ exit 1 >+ end >+ when "--help" >+ usage >+ exit 1 >+ end >+} >+ >+def getBuildDirectory >+ if $buildDir != nil >+ return $buildDir >+ end >+ >+ command = SCRIPTS_PATH.join("webkit-build-directory").to_s >+ command += " --release" >+ command += " --executablePath" >+ >+ output = `#{command}`.split("\n") >+ if !output.length >+ puts "Error: could not find release WebKitBuild" >+ exit 1 >+ end >+ output = output[0] >+ >+ $buildDir = Pathname.new(output).to_s >+ $buildDir >+end >+ >+def getTestmemPath >+ path = Pathname.new(getBuildDirectory).join("testmem").to_s >+ if !File.exists?(path) >+ $stderr.puts "Error: No testmem binary found in <build>/Release" >+ exit 1 >+ end >+ path >+end >+ >+def iterationCount(path) >+ iterationMap = { >+ "air" => 4, >+ "basic" => 5, >+ "splay" => 10, >+ "hash-map" => 5, >+ "box2d" => 3, >+ } >+ name = File.basename(path, ".js") >+ iterationMap[name] || 20 >+end >+ >+def getTests >+ dirPath = Pathname.new(SCRIPTS_PATH).join("../../PerformanceTests/testmem") >+ files = [] >+ Dir.foreach(dirPath) { >+ | filename | >+ next unless filename =~ /\.js$/ >+ filePath = dirPath.join(filename).to_s >+ files.push([filePath, iterationCount(filePath)]) >+ } >+ >+ files.sort_by { | (path) | File.basename(path) } >+end >+ >+def geomean(x) >+ score = x.inject(1.0, :*) >+ score ** (1.0 / x.length) >+end >+ >+def mean(x) >+ sum = x.inject(0.0, :+) >+ sum / x.length >+end >+ >+def runTest(path, iters) >+ command = "#{getTestmemPath} #{path} #{iters}" >+ stdout, stderr, exitCode = Open3.capture3({"DYLD_FRAMEWORK_PATH" => getBuildDirectory}, command) >+ >+ if $verbose >+ puts stdout >+ puts stderr >+ end >+ >+ if exitCode != 0 >+ puts "testmem failed to run" >+ puts stdout >+ puts stderr >+ exit 1 >+ end >+ >+ time, peakFootprint, footprintAtEnd = stdout.split("\n") >+ raise unless time.slice!("time:") >+ raise unless peakFootprint.slice!("peak footprint:") >+ raise unless footprintAtEnd.slice!("footprint at end:") >+ time = time.to_f >+ peakFootprint = peakFootprint.to_f >+ footprintAtEnd = footprintAtEnd.to_f >+ >+ if $verbose >+ puts path >+ puts "time: #{time}" >+ puts "peak footprint: #{peakFootprint/1024/1024} MB" >+ puts "end footprint: #{footprintAtEnd/1024/1024} MB\n" >+ end >+ >+ {"time"=>time, "peak"=>peakFootprint, "end"=>footprintAtEnd} >+end >+ >+def run >+ tests = getTests >+ scores = {} >+ tests.each { | (path) | scores[path] = [] } >+ count = $outerIterations >+ (0..(count-1)).each { | currentIter | >+ tests.each { | (path, iters) | >+ statusToPrint = "iteration #{currentIter + 1}: #{File.basename(path, ".js")}" >+ print "#{statusToPrint}\r" >+ scores[path].push(runTest(path, iters)) >+ print "#{" ".rjust(statusToPrint.length)}\r" >+ >+ } >+ } >+ >+ peakScore = [] >+ endScore = [] >+ timeScore = [] >+ scores.each { | key, value | >+ endAvg = mean(value.map { | element | element["end"] }) >+ peakAvg = mean(value.map { | element | element["peak"] }) >+ timeAvg = mean(value.map { | element | element["time"] }) >+ >+ peakScore.push(peakAvg) >+ endScore.push(endAvg) >+ timeScore.push(timeAvg) >+ >+ puts File.basename(key, ".js") >+ puts " end: #{endAvg/1024/1024} MB" >+ puts " peak: #{peakAvg/1024/1024} MB" >+ puts " time: #{timeAvg*1000} ms\n" >+ } >+ >+ endScore = geomean(endScore) >+ peakScore = geomean(peakScore) >+ timeScore = geomean(timeScore) >+ >+ puts >+ puts "end score: #{(endScore/1024/1024).round(4)} MB" >+ puts "peak score: #{(peakScore/1024/1024).round(4)} MB\n" >+ puts "total memory score: #{(geomean([endScore, peakScore])/1024/1024).round(4)} MB" >+ puts "time score: #{(timeScore*1000).round(2)} ms\n\n" >+ >+ puts JSON.pretty_generate(scores) if $verbose >+end >+ >+run
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185932
:
341161
|
341236
|
341241
|
341242
|
341245
|
341246
|
341247
|
341248
|
341249
|
341297
|
341299
|
341300