diff --git a/crates/test_fixtures/abis/RaindexV6SubParser.json b/crates/test_fixtures/abis/RaindexV6SubParser.json index 7136cdcff6..c076fc55ef 100644 --- a/crates/test_fixtures/abis/RaindexV6SubParser.json +++ b/crates/test_fixtures/abis/RaindexV6SubParser.json @@ -242,7 +242,7 @@ } ], "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5061279a8061001c5f395ff3fe608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636f5aa28d116100585780636f5aa28d146100dd578063c6c0cbb61461010b578063ccf4477514610135578063d6d8c9a814610148575f80fd5b806301ffc9a71461007e578063336284d4146100a6578063570c7a63146100bb575b5f80fd5b61009161008c36600461244d565b610150565b60405190151581526020015b60405180910390f35b6100ae6101d7565b60405161009d91906124a9565b6100ce6100c93660046124cf565b610c0b565b60405161009d93929190612579565b6040517f8336a7fad53960ed41ca79692ce772de758261a38ddecfa23983c3b89d00aaba815260200161009d565b61011e6101193660046124cf565b610d4f565b60408051921515835260208301919091520161009d565b60408051602081019091525f81526100ae565b6100ae610d87565b5f6001600160e01b031982166391ccb1d560e01b148061018057506001600160e01b03198216636f5aa28d60e01b145b8061019b57506001600160e01b03198216631a2c8edd60e01b145b806101b657506001600160e01b03198216630cd8a13560e21b145b806101d157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f6101e6600660016125ea565b6101f19060016125ea565b6101fc9060016125ea565b6001600160401b03811115610213576102136124bb565b60405190808252806020026020018201604052801561024657816020015b60608152602001906001900390816102315790505b50604080516002808252606082019092529192505f9190816020015b61244381526020019060019003908161026257905050905061175a815f8151811061028f5761028f6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611777816001815181106102c5576102c56125fd565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b6124438152602001906001900390816102f5579050509050611786815f81518110610322576103226125fd565b60200260200101906001600160401b031690816001600160401b03168152505061179581600181518110610358576103586125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117a48160028151811061038e5761038e6125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117b4816003815181106103c4576103c46125fd565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b6124438152602001906001900390816103f45790505090506117c4815f81518110610421576104216125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117d381600181518110610457576104576125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124438152602001906001900390816104875790505090506117e3815f815181106104b4576104b46125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117f2816001815181106104ea576104ea6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061180281600281518110610520576105206125fd565b60200260200101906001600160401b031690816001600160401b03168152505061181281600381518110610556576105566125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118218160048151811061058c5761058c6125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124438152602001906001900390816105bc579050509050611831815f815181106105e9576105e96125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118408160018151811061061f5761061f6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061185081600281518110610655576106556125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118608160038151811061068b5761068b6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611870816004815181106106c1576106c16125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816106f057905050905061187f815f8151811061071d5761071d6125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b61244381526020019060019003908161074c579050509050611898815f81518110610779576107796125fd565b60200260200101906001600160401b031690816001600160401b03168152505086885f815181106107ac576107ac6125fd565b602002602001018190525085886001815181106107cb576107cb6125fd565b602002602001018190525084886002815181106107ea576107ea6125fd565b60200260200101819052508388600381518110610809576108096125fd565b60200260200101819052508288600481518110610828576108286125fd565b60209081029190910101528188610841600660016125ea565b81518110610851576108516125fd565b6020908102919091010152808861086a600660016125ea565b6108759060016125ea565b81518110610885576108856125fd565b602090810291909101015260408051600680825260e082019092525f91816020015b6124438152602001906001900390816108a75790505090506118e4815f815181106108d4576108d46125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118f38160018151811061090a5761090a6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061190281600281518110610940576109406125fd565b60200260200101906001600160401b031690816001600160401b03168152505061191281600381518110610976576109766125fd565b60200260200101906001600160401b031690816001600160401b031681525050611922816004815181106109ac576109ac6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611932816005815181106109e2576109e26125fd565b60200260200101906001600160401b031690816001600160401b0316815250508089600581518110610a1657610a166125fd565b602090810291909101015260408051600780825261010082019092525f91816020015b612443815260200190600190039081610a39579050509050611942815f81518110610a6657610a666125fd565b60200260200101906001600160401b031690816001600160401b03168152505061195181600181518110610a9c57610a9c6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061196081600281518110610ad257610ad26125fd565b60200260200101906001600160401b031690816001600160401b03168152505061197081600381518110610b0857610b086125fd565b60200260200101906001600160401b031690816001600160401b03168152505061198081600481518110610b3e57610b3e6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061199081600581518110610b7457610b746125fd565b60200260200101906001600160401b031690816001600160401b0316815250506119a081600681518110610baa57610baa6125fd565b60200260200101906001600160401b031690816001600160401b031681525050808a600681518110610bde57610bde6125fd565b602090810291909101015289610bfb610bf6826119b0565b6119c5565b9b50505050505050505050505090565b5f6060805f805f610c2b87610c1e611a54565b610c26611a74565b611a94565b9250925092505f610c4182610220015160200190565b90505f8261022001515182610c5691906125ea565b90505f610c7483836f07fffffe0000000003ff200000000000611b85565b80925081945050505f80610c8d86610240015184611c21565b915091508115610d22575f610ca28783611cf8565b90506124435f610cb0611d27565b90505f60028251610cc19190612625565b9050808510610cf2576040516303bdd1b160e51b815260048101869052602481018290526044015b60405180910390fd5b6001850160020282015161ffff169250610d0b8c8c8686565b9e509e509e50505050505050505050505050610d48565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b5f805f805f610d77866002810151815160228084019461ffff93909316840101920160200190565b505f988998509650505050505050565b60605f610d96600660016125ea565b610da19060016125ea565b610dac9060016125ea565b6001600160401b03811115610dc357610dc36124bb565b604051908082528060200260200182016040528015610df657816020015b6060815260200190600190039081610de15790505b50604080516002808252606082019092529192505f9190816020015b612443815260200190600190039081610e12579050509050611d47815f81518110610e3f57610e3f6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110610e7557610e756125fd565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b612443815260200190600190039081610ea5579050509050611d47815f81518110610ed257610ed26125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110610f0857610f086125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110610f3e57610f3e6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110610f7457610f746125fd565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b612443815260200190600190039081610fa4579050509050611d47815f81518110610fd157610fd16125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110611007576110076125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b612443815260200190600190039081611037579050509050611d47815f81518110611064576110646125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160018151811061109a5761109a6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816002815181106110d0576110d06125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110611106576111066125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160048151811061113c5761113c6125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b61244381526020019060019003908161116c579050509050611d47815f81518110611199576111996125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816001815181106111cf576111cf6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110611205576112056125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160038151811061123b5761123b6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600481518110611271576112716125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816112a0579050509050611d70815f815181106112cd576112cd6125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816112fc579050509050611e0c815f81518110611329576113296125fd565b60200260200101906001600160401b031690816001600160401b03168152505086885f8151811061135c5761135c6125fd565b6020026020010181905250858860018151811061137b5761137b6125fd565b6020026020010181905250848860028151811061139a5761139a6125fd565b602002602001018190525083886003815181106113b9576113b96125fd565b602002602001018190525082886004815181106113d8576113d86125fd565b602090810291909101015281886113f1600660016125ea565b81518110611401576114016125fd565b6020908102919091010152808861141a600660016125ea565b6114259060016125ea565b81518110611435576114356125fd565b602090810291909101015260408051600680825260e082019092525f91816020015b612443815260200190600190039081611457579050509050611d47815f81518110611484576114846125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816001815181106114ba576114ba6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816002815181106114f0576114f06125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110611526576115266125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160048151811061155c5761155c6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600581518110611592576115926125fd565b60200260200101906001600160401b031690816001600160401b03168152505080896005815181106115c6576115c66125fd565b602090810291909101015260408051600780825261010082019092525f91816020015b6124438152602001906001900390816115e9579050509050611d47815f81518110611616576116166125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160018151811061164c5761164c6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110611682576116826125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816003815181106116b8576116b86125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816004815181106116ee576116ee6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600581518110611724576117246125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600681518110610baa57610baa6125fd565b5f6060806117685f80611ec4565b92509250925093509350939050565b5f6060806117685f6001611ec4565b5f60608061176860015f611ec4565b5f606080611768600180611ec4565b5f60608061176860016002611ec4565b5f60608061176860016003611ec4565b5f60608061176860025f611ec4565b5f60608061176860026001611ec4565b5f60608061176860035f611ec4565b5f60608061176860036001611ec4565b5f60608061176860036002611ec4565b5f606080611768600380611ec4565b5f60608061176860036004611ec4565b5f60608061176860045f611ec4565b5f60608061176860046001611ec4565b5f60608061176860046002611ec4565b5f60608061176860046003611ec4565b5f606080611768600480611ec4565b5f606080611768611892600660016125ea565b85611ec4565b5f60608060ff80851690600886901c166118d3826118b8600660016125ea565b6118c39060016125ea565b6118cd91906125ea565b82611ec4565b945094509450505093509350939050565b5f606080611768600580611ec4565b5f60608061176860055f611ec4565b5f60608061176860056001611ec4565b5f60608061176860056002611ec4565b5f60608061176860056003611ec4565b5f60608061176860056004611ec4565b5f606080611768600680611ec4565b5f60608061176860065f611ec4565b5f60608061176860066001611ec4565b5f60608061176860066002611ec4565b5f60608061176860066003611ec4565b5f60608061176860066004611ec4565b5f60608061176860066005611ec4565b6060815f6119bd82611f46565b949350505050565b60605f82516002026001600160401b038111156119e4576119e46124bb565b6040519080825280601f01601f191660200182016040528015611a0e576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a4857805183518616908516178152602090920191600201611a26565b50939695505050505050565b60606040518060e0016040528060a681526020016126b260a69139905090565b606060405180608001604052806042815260200161275860429139905090565b5f80611b236040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050611b6f87878760405180602001604052805f815250611fb4565b915080826101e001819052505093509350939050565b5f808060018187870360208111611b9c5780611b9f565b60205b915050875192505b8519600184841a1b16158183101615611bc557600182019150611ba7565b9681019660208290036008810293841c90931b92611c105760408051602081018590520160408051601f198184030181529082905263e47fe8b760e01b8252610ce9916004016124a9565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015611ce65760018301516021909301805190935f90819060ff168180611c6b838e612165565b915091508186165f03611c8d575f809b509b5050505050505050505050611cf1565b5f87611c9d600185038916612190565b016004028b015195505062ffffff9081169350841683039150611cd19050575060019750601c1a9550611cf1945050505050565b611cda83612190565b84019350505050611c42565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190611d1e9083565b95945050505050565b606060405180608001604052806042815260200161267060429139905090565b5f81515f14611d69576040516304f8b58160e51b815260040160405180910390fd5b505f919050565b5f8151600103611dcd575060208101516001600160e01b038116601b0b60e082901d5f611d9e838383612249565b905061ffff811115611dc357604051631e4e01d760e21b815260040160405180910390fd5b9250611e07915050565b81515f03611dee57604051630f16066b60e41b815260040160405180910390fd5b604051630358cd2160e31b815260040160405180910390fd5b919050565b5f8151600203611ea157602082015160408301516001600160e01b038216601b0b60e083901d5f611e3e838383612249565b6001600160e01b038516601b0b935060e085901d925090505f611e62848483612249565b905060ff821180611e73575060ff81115b15611e9157604051631e4e01d760e21b815260040160405180910390fd5b60081b179450611e079350505050565b600282511015611dee57604051630f16066b60e41b815260040160405180910390fd5b5f60608060ff851180611ed7575060ff84115b15611eff57604051639b0f326160e01b81526004810186905260248101859052604401610ce9565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b60605f611f528361228b565b90505f611f60826020612644565b9050606060405190508160200181016040528281526020850160208651028101602083015b81831015611fa857602083515102806020855101835e6020939093019201611f85565b50919695505050505050565b6120416040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b815260200184815260200185815260200160046001600160401b038111156120c6576120c66124bb565b6040519080825280602002602001820160405280156120ef578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f01601f19168281528083018252835161ffff191681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050611d1e565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611cf1575060019250929050565b5f5f1982036121a25750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f6122578686866122d4565b91509150806122825760405162bc8ecf60e31b81526004810187905260248101869052604401610ce9565b50949350505050565b5f60208201602083510281015b808210156122cd5781515192830192808410156122c157634e487b715f5260116020526024601cfd5b50602082019150612298565b5050919050565b5f805f85121561230157604051634a7d166b60e01b81526004810186905260248101859052604401610ce9565b845f0361231357505f90506001611c19565b8460ff841685018581121561234e5760405163c849483b60e01b8152600481018890526024810187905260ff86166044820152606401610ce9565b5f805f83121561239a57604c19831215612371575f809550955050505050611c19565b825f03600a0a915081848161238857612388612611565b0495505084029091149150611c199050565b5f83131561243357604d8313156123d75760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b82600a0a9150815f19816123ed576123ed612611565b048411156124215760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b5091909102925060019150611c199050565b8360019550955050505050611c19565b61244b61265b565b565b5f6020828403121561245d575f80fd5b81356001600160e01b031981168114612474575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612474602083018461247b565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156124df575f80fd5b81356001600160401b03808211156124f5575f80fd5b818401915084601f830112612508575f80fd5b81358181111561251a5761251a6124bb565b604051601f8201601f19908116603f01168101908382118183101715612542576125426124bb565b8160405282815287602084870101111561255a575f80fd5b826020860160208301375f928101602001929092525095945050505050565b83151581525f602060606020840152612595606084018661247b565b8381036040850152845180825260208087019201905f5b818110156125c8578351835292840192918401916001016125ac565b509098975050505050505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156101d1576101d16125d6565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261263f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176101d1576101d16125d6565b634e487b7160e01b5f52605160045260245ffdfe175a17771786179517a417b417c417d317e317f21802181218211831184018501860187018e418f3190219121922193219421951196019701980199019a0187f18980101180010a00082000100010480300038412a001810000010020004200004002038038ff54905cc66c61ef3dcab071659220a895f0b15fec9301a02e0920d5bfe561c21609201e959460c19742710844db209bcd3bf1d9893761f1049db12b93430190ae9a00bf82a7806c138f40e28083f0842ef2104d561fd1315a13316716a6118d260cc117b9bfc0fec7ade14cba28900a422961b6b14a520792bdb02e0f147175655891d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d701e0c", + "object": "0x6080604052348015600e575f80fd5b506127978061001c5f395ff3fe608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636f5aa28d116100585780636f5aa28d146100dd578063c6c0cbb61461010b578063ccf4477514610135578063d6d8c9a814610148575f80fd5b806301ffc9a71461007e578063336284d4146100a6578063570c7a63146100bb575b5f80fd5b61009161008c36600461244a565b610150565b60405190151581526020015b60405180910390f35b6100ae6101d7565b60405161009d91906124a6565b6100ce6100c93660046124cc565b610c0b565b60405161009d93929190612576565b6040517f8336a7fad53960ed41ca79692ce772de758261a38ddecfa23983c3b89d00aaba815260200161009d565b61011e6101193660046124cc565b610d4f565b60408051921515835260208301919091520161009d565b60408051602081019091525f81526100ae565b6100ae610d87565b5f6001600160e01b031982166391ccb1d560e01b148061018057506001600160e01b03198216636f5aa28d60e01b145b8061019b57506001600160e01b03198216631a2c8edd60e01b145b806101b657506001600160e01b03198216630cd8a13560e21b145b806101d157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f6101e6600660016125e7565b6101f19060016125e7565b6101fc9060016125e7565b6001600160401b03811115610213576102136124b8565b60405190808252806020026020018201604052801561024657816020015b60608152602001906001900390816102315790505b50604080516002808252606082019092529192505f9190816020015b61244081526020019060019003908161026257905050905061175a815f8151811061028f5761028f6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611777816001815181106102c5576102c56125fa565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b6124408152602001906001900390816102f5579050509050611786815f81518110610322576103226125fa565b60200260200101906001600160401b031690816001600160401b03168152505061179581600181518110610358576103586125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117a48160028151811061038e5761038e6125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117b4816003815181106103c4576103c46125fa565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b6124408152602001906001900390816103f45790505090506117c4815f81518110610421576104216125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117d381600181518110610457576104576125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124408152602001906001900390816104875790505090506117e3815f815181106104b4576104b46125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117f2816001815181106104ea576104ea6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061180281600281518110610520576105206125fa565b60200260200101906001600160401b031690816001600160401b03168152505061181281600381518110610556576105566125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118218160048151811061058c5761058c6125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124408152602001906001900390816105bc579050509050611831815f815181106105e9576105e96125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118408160018151811061061f5761061f6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061185081600281518110610655576106556125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118608160038151811061068b5761068b6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611870816004815181106106c1576106c16125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816106f057905050905061187f815f8151811061071d5761071d6125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b61244081526020019060019003908161074c579050509050611898815f81518110610779576107796125fa565b60200260200101906001600160401b031690816001600160401b03168152505086885f815181106107ac576107ac6125fa565b602002602001018190525085886001815181106107cb576107cb6125fa565b602002602001018190525084886002815181106107ea576107ea6125fa565b60200260200101819052508388600381518110610809576108096125fa565b60200260200101819052508288600481518110610828576108286125fa565b60209081029190910101528188610841600660016125e7565b81518110610851576108516125fa565b6020908102919091010152808861086a600660016125e7565b6108759060016125e7565b81518110610885576108856125fa565b602090810291909101015260408051600680825260e082019092525f91816020015b6124408152602001906001900390816108a75790505090506118e1815f815181106108d4576108d46125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118f08160018151811061090a5761090a6125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118ff81600281518110610940576109406125fa565b60200260200101906001600160401b031690816001600160401b03168152505061190f81600381518110610976576109766125fa565b60200260200101906001600160401b031690816001600160401b03168152505061191f816004815181106109ac576109ac6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061192f816005815181106109e2576109e26125fa565b60200260200101906001600160401b031690816001600160401b0316815250508089600581518110610a1657610a166125fa565b602090810291909101015260408051600780825261010082019092525f91816020015b612440815260200190600190039081610a3957905050905061193f815f81518110610a6657610a666125fa565b60200260200101906001600160401b031690816001600160401b03168152505061194e81600181518110610a9c57610a9c6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061195d81600281518110610ad257610ad26125fa565b60200260200101906001600160401b031690816001600160401b03168152505061196d81600381518110610b0857610b086125fa565b60200260200101906001600160401b031690816001600160401b03168152505061197d81600481518110610b3e57610b3e6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061198d81600581518110610b7457610b746125fa565b60200260200101906001600160401b031690816001600160401b03168152505061199d81600681518110610baa57610baa6125fa565b60200260200101906001600160401b031690816001600160401b031681525050808a600681518110610bde57610bde6125fa565b602090810291909101015289610bfb610bf6826119ad565b6119c2565b9b50505050505050505050505090565b5f6060805f805f610c2b87610c1e611a51565b610c26611a71565b611a91565b9250925092505f610c4182610220015160200190565b90505f8261022001515182610c5691906125e7565b90505f610c7483836f07fffffe0000000003ff200000000000611b82565b80925081945050505f80610c8d86610240015184611c1e565b915091508115610d22575f610ca28783611cf5565b90506124405f610cb0611d24565b90505f60028251610cc19190612622565b9050808510610cf2576040516303bdd1b160e51b815260048101869052602481018290526044015b60405180910390fd5b6001850160020282015161ffff169250610d0b8c8c8686565b9e509e509e50505050505050505050505050610d48565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b5f805f805f610d77866002810151815160228084019461ffff93909316840101920160200190565b505f988998509650505050505050565b60605f610d96600660016125e7565b610da19060016125e7565b610dac9060016125e7565b6001600160401b03811115610dc357610dc36124b8565b604051908082528060200260200182016040528015610df657816020015b6060815260200190600190039081610de15790505b50604080516002808252606082019092529192505f9190816020015b612440815260200190600190039081610e12579050509050611d44815f81518110610e3f57610e3f6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110610e7557610e756125fa565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b612440815260200190600190039081610ea5579050509050611d44815f81518110610ed257610ed26125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110610f0857610f086125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110610f3e57610f3e6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110610f7457610f746125fa565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b612440815260200190600190039081610fa4579050509050611d44815f81518110610fd157610fd16125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110611007576110076125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b612440815260200190600190039081611037579050509050611d44815f81518110611064576110646125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160018151811061109a5761109a6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816002815181106110d0576110d06125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110611106576111066125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160048151811061113c5761113c6125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b61244081526020019060019003908161116c579050509050611d44815f81518110611199576111996125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816001815181106111cf576111cf6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110611205576112056125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160038151811061123b5761123b6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600481518110611271576112716125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816112a0579050509050611d6d815f815181106112cd576112cd6125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816112fc579050509050611e09815f81518110611329576113296125fa565b60200260200101906001600160401b031690816001600160401b03168152505086885f8151811061135c5761135c6125fa565b6020026020010181905250858860018151811061137b5761137b6125fa565b6020026020010181905250848860028151811061139a5761139a6125fa565b602002602001018190525083886003815181106113b9576113b96125fa565b602002602001018190525082886004815181106113d8576113d86125fa565b602090810291909101015281886113f1600660016125e7565b81518110611401576114016125fa565b6020908102919091010152808861141a600660016125e7565b6114259060016125e7565b81518110611435576114356125fa565b602090810291909101015260408051600680825260e082019092525f91816020015b612440815260200190600190039081611457579050509050611d44815f81518110611484576114846125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816001815181106114ba576114ba6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816002815181106114f0576114f06125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110611526576115266125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160048151811061155c5761155c6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600581518110611592576115926125fa565b60200260200101906001600160401b031690816001600160401b03168152505080896005815181106115c6576115c66125fa565b602090810291909101015260408051600780825261010082019092525f91816020015b6124408152602001906001900390816115e9579050509050611d44815f81518110611616576116166125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160018151811061164c5761164c6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110611682576116826125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816003815181106116b8576116b86125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816004815181106116ee576116ee6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600581518110611724576117246125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600681518110610baa57610baa6125fa565b5f6060806117685f80611ec1565b92509250925093509350939050565b5f6060806117685f6001611ec1565b5f60608061176860015f611ec1565b5f606080611768600180611ec1565b5f60608061176860016002611ec1565b5f60608061176860016003611ec1565b5f60608061176860025f611ec1565b5f60608061176860026001611ec1565b5f60608061176860035f611ec1565b5f60608061176860036001611ec1565b5f60608061176860036002611ec1565b5f606080611768600380611ec1565b5f60608061176860036004611ec1565b5f60608061176860045f611ec1565b5f60608061176860046001611ec1565b5f60608061176860046002611ec1565b5f60608061176860046003611ec1565b5f606080611768600480611ec1565b5f606080611768611892600660016125e7565b85611ec1565b5f60608060ff8416600885901c6118d0826118b5600660016125e7565b6118c09060016125e7565b6118ca91906125e7565b82611ec1565b945094509450505093509350939050565b5f606080611768600580611ec1565b5f60608061176860055f611ec1565b5f60608061176860056001611ec1565b5f60608061176860056002611ec1565b5f60608061176860056003611ec1565b5f60608061176860056004611ec1565b5f606080611768600680611ec1565b5f60608061176860065f611ec1565b5f60608061176860066001611ec1565b5f60608061176860066002611ec1565b5f60608061176860066003611ec1565b5f60608061176860066004611ec1565b5f60608061176860066005611ec1565b6060815f6119ba82611f43565b949350505050565b60605f82516002026001600160401b038111156119e1576119e16124b8565b6040519080825280601f01601f191660200182016040528015611a0b576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a4557805183518616908516178152602090920191600201611a23565b50939695505050505050565b60606040518060e0016040528060a6815260200161266d60a69139905090565b606060405180608001604052806042815260200161271360429139905090565b5f80611b206040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050611b6c87878760405180602001604052805f815250611fb1565b915080826101e001819052505093509350939050565b5f808060018187870360208111611b995780611b9c565b60205b915050875192505b8519600184841a1b16158183101615611bc257600182019150611ba4565b9681019660208290036008810293841c90931b92611c0d5760408051602081018590520160408051601f198184030181529082905263e47fe8b760e01b8252610ce9916004016124a6565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015611ce35760018301516021909301805190935f90819060ff168180611c68838e612162565b915091508186165f03611c8a575f809b509b5050505050505050505050611cee565b5f87611c9a60018503891661218d565b016004028b015195505062ffffff9081169350841683039150611cce9050575060019750601c1a9550611cee945050505050565b611cd78361218d565b84019350505050611c3f565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190611d1b9083565b95945050505050565b606060405180608001604052806042815260200161275560429139905090565b5f81515f14611d66576040516304f8b58160e51b815260040160405180910390fd5b505f919050565b5f8151600103611dca575060208101516001600160e01b038116601b0b60e082901d5f611d9b838383612246565b905061ffff811115611dc057604051631e4e01d760e21b815260040160405180910390fd5b9250611e04915050565b81515f03611deb57604051630f16066b60e41b815260040160405180910390fd5b604051630358cd2160e31b815260040160405180910390fd5b919050565b5f8151600203611e9e57602082015160408301516001600160e01b038216601b0b60e083901d5f611e3b838383612246565b6001600160e01b038516601b0b935060e085901d925090505f611e5f848483612246565b905060ff821180611e70575060ff81115b15611e8e57604051631e4e01d760e21b815260040160405180910390fd5b60081b179450611e049350505050565b600282511015611deb57604051630f16066b60e41b815260040160405180910390fd5b5f60608060ff851180611ed4575060ff84115b15611efc57604051639b0f326160e01b81526004810186905260248101859052604401610ce9565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b60605f611f4f83612288565b90505f611f5d826020612641565b9050606060405190508160200181016040528281526020850160208651028101602083015b81831015611fa557602083515102806020855101835e6020939093019201611f82565b50919695505050505050565b61203e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b815260200184815260200185815260200160046001600160401b038111156120c3576120c36124b8565b6040519080825280602002602001820160405280156120ec578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f01601f19168281528083018252835161ffff191681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050611d1b565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611cee575060019250929050565b5f5f19820361219f5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f6122548686866122d1565b915091508061227f5760405162bc8ecf60e31b81526004810187905260248101869052604401610ce9565b50949350505050565b5f60208201602083510281015b808210156122ca5781515192830192808410156122be57634e487b715f5260116020526024601cfd5b50602082019150612295565b5050919050565b5f805f8512156122fe57604051634a7d166b60e01b81526004810186905260248101859052604401610ce9565b845f0361231057505f90506001611c16565b8460ff841685018581121561234b5760405163c849483b60e01b8152600481018890526024810187905260ff86166044820152606401610ce9565b5f805f83121561239757604c1983121561236e575f809550955050505050611c16565b825f03600a0a91508184816123855761238561260e565b0495505084029091149150611c169050565b5f83131561243057604d8313156123d45760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b82600a0a9150815f19816123ea576123ea61260e565b0484111561241e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b5091909102925060019150611c169050565b8360019550955050505050611c16565b612448612658565b565b5f6020828403121561245a575f80fd5b81356001600160e01b031981168114612471575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124716020830184612478565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156124dc575f80fd5b81356001600160401b03808211156124f2575f80fd5b818401915084601f830112612505575f80fd5b813581811115612517576125176124b8565b604051601f8201601f19908116603f0116810190838211818310171561253f5761253f6124b8565b81604052828152876020848701011115612557575f80fd5b826020860160208301375f928101602001929092525095945050505050565b83151581525f6020606060208401526125926060840186612478565b8381036040850152845180825260208087019201905f5b818110156125c5578351835292840192918401916001016125a9565b509098975050505050505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156101d1576101d16125d3565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261263c57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176101d1576101d16125d3565b634e487b7160e01b5f52605160045260245ffdfe0101180010a00082000100010480300038412a001810000010020004200004002038038ff54905cc66c61ef3dcab071659220a895f0b15fec9301a02e0920d5bfe561c21609201e959460c19742710844db209bcd3bf1d9893761f1049db12b93430190ae9a00bf82a7806c138f40e28083f0842ef2104d561fd1315a13316716a6118d260cc117b9bfc0fec7ade14cba28900a422961b6b14a520792bdb02e0f147175655891d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d6d1e09175a17771786179517a417b417c417d317e317f21802181218211831184018501860187018e118f018ff190f191f192f193f194e195d196d197d198d199d187f1898", "linkReferences": {} } } diff --git a/src/generated/RaindexV6SubParserPointers.sol b/src/generated/RaindexV6SubParserPointers.sol index 4bf5a855d5..4e45b66f54 100644 --- a/src/generated/RaindexV6SubParserPointers.sol +++ b/src/generated/RaindexV6SubParserPointers.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.25; // THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xbb26d1e20a8360e1508cbc0938a2ed1ad7af70827261928c041de84987ca731e); +bytes32 constant BYTECODE_HASH = bytes32(0x6250f10f963da9e6d6220eb1a3a656e610ae2dc27a7a41f79265932479288c6b); /// @dev The hash of the meta that describes the contract. bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x8336a7fad53960ed41ca79692ce772de758261a38ddecfa23983c3b89d00aaba); @@ -39,13 +39,13 @@ uint8 constant PARSE_META_BUILD_DEPTH = 1; /// to things that happen entirely on the interpreter such as well known /// constants and references to the context grid. bytes constant SUB_PARSER_WORD_PARSERS = - hex"175a17771786179517a417b417c417d317e317f21802181218211831184018501860187018e418f3190219121922193219421951196019701980199019a0187f1898"; + hex"175a17771786179517a417b417c417d317e317f21802181218211831184018501860187018e118f018ff190f191f192f193f194e195d196d197d198d199d187f1898"; /// @dev Every two bytes is a function pointer for an operand handler. /// These positional indexes all map to the same indexes looked up in the parse /// meta. bytes constant OPERAND_HANDLER_FUNCTION_POINTERS = - hex"1d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d701e0c"; + hex"1d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d6d1e09"; /// @dev Every two bytes is a function pointer for a literal parser. /// Literal dispatches are determined by the first byte(s) of the literal diff --git a/src/generated/candidate/RaindexV6SubParser.sol b/src/generated/candidate/RaindexV6SubParser.sol index de28113c1f..2a3d4b069f 100644 --- a/src/generated/candidate/RaindexV6SubParser.sol +++ b/src/generated/candidate/RaindexV6SubParser.sol @@ -5,19 +5,19 @@ pragma solidity ^0.8.25; // THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xbb26d1e20a8360e1508cbc0938a2ed1ad7af70827261928c041de84987ca731e); +bytes32 constant BYTECODE_HASH = bytes32(0x6250f10f963da9e6d6220eb1a3a656e610ae2dc27a7a41f79265932479288c6b); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x828539a2C3790E7602786168D0741D3c67B413E1); +address constant DEPLOYED_ADDRESS = address(0x5Bcf8AD0c0560903CF113Fc86D74bc6aedEfd1a2); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5061279a8061001c5f395ff3fe608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636f5aa28d116100585780636f5aa28d146100dd578063c6c0cbb61461010b578063ccf4477514610135578063d6d8c9a814610148575f80fd5b806301ffc9a71461007e578063336284d4146100a6578063570c7a63146100bb575b5f80fd5b61009161008c36600461244d565b610150565b60405190151581526020015b60405180910390f35b6100ae6101d7565b60405161009d91906124a9565b6100ce6100c93660046124cf565b610c0b565b60405161009d93929190612579565b6040517f8336a7fad53960ed41ca79692ce772de758261a38ddecfa23983c3b89d00aaba815260200161009d565b61011e6101193660046124cf565b610d4f565b60408051921515835260208301919091520161009d565b60408051602081019091525f81526100ae565b6100ae610d87565b5f6001600160e01b031982166391ccb1d560e01b148061018057506001600160e01b03198216636f5aa28d60e01b145b8061019b57506001600160e01b03198216631a2c8edd60e01b145b806101b657506001600160e01b03198216630cd8a13560e21b145b806101d157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f6101e6600660016125ea565b6101f19060016125ea565b6101fc9060016125ea565b6001600160401b03811115610213576102136124bb565b60405190808252806020026020018201604052801561024657816020015b60608152602001906001900390816102315790505b50604080516002808252606082019092529192505f9190816020015b61244381526020019060019003908161026257905050905061175a815f8151811061028f5761028f6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611777816001815181106102c5576102c56125fd565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b6124438152602001906001900390816102f5579050509050611786815f81518110610322576103226125fd565b60200260200101906001600160401b031690816001600160401b03168152505061179581600181518110610358576103586125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117a48160028151811061038e5761038e6125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117b4816003815181106103c4576103c46125fd565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b6124438152602001906001900390816103f45790505090506117c4815f81518110610421576104216125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117d381600181518110610457576104576125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124438152602001906001900390816104875790505090506117e3815f815181106104b4576104b46125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117f2816001815181106104ea576104ea6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061180281600281518110610520576105206125fd565b60200260200101906001600160401b031690816001600160401b03168152505061181281600381518110610556576105566125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118218160048151811061058c5761058c6125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124438152602001906001900390816105bc579050509050611831815f815181106105e9576105e96125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118408160018151811061061f5761061f6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061185081600281518110610655576106556125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118608160038151811061068b5761068b6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611870816004815181106106c1576106c16125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816106f057905050905061187f815f8151811061071d5761071d6125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b61244381526020019060019003908161074c579050509050611898815f81518110610779576107796125fd565b60200260200101906001600160401b031690816001600160401b03168152505086885f815181106107ac576107ac6125fd565b602002602001018190525085886001815181106107cb576107cb6125fd565b602002602001018190525084886002815181106107ea576107ea6125fd565b60200260200101819052508388600381518110610809576108096125fd565b60200260200101819052508288600481518110610828576108286125fd565b60209081029190910101528188610841600660016125ea565b81518110610851576108516125fd565b6020908102919091010152808861086a600660016125ea565b6108759060016125ea565b81518110610885576108856125fd565b602090810291909101015260408051600680825260e082019092525f91816020015b6124438152602001906001900390816108a75790505090506118e4815f815181106108d4576108d46125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118f38160018151811061090a5761090a6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061190281600281518110610940576109406125fd565b60200260200101906001600160401b031690816001600160401b03168152505061191281600381518110610976576109766125fd565b60200260200101906001600160401b031690816001600160401b031681525050611922816004815181106109ac576109ac6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611932816005815181106109e2576109e26125fd565b60200260200101906001600160401b031690816001600160401b0316815250508089600581518110610a1657610a166125fd565b602090810291909101015260408051600780825261010082019092525f91816020015b612443815260200190600190039081610a39579050509050611942815f81518110610a6657610a666125fd565b60200260200101906001600160401b031690816001600160401b03168152505061195181600181518110610a9c57610a9c6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061196081600281518110610ad257610ad26125fd565b60200260200101906001600160401b031690816001600160401b03168152505061197081600381518110610b0857610b086125fd565b60200260200101906001600160401b031690816001600160401b03168152505061198081600481518110610b3e57610b3e6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061199081600581518110610b7457610b746125fd565b60200260200101906001600160401b031690816001600160401b0316815250506119a081600681518110610baa57610baa6125fd565b60200260200101906001600160401b031690816001600160401b031681525050808a600681518110610bde57610bde6125fd565b602090810291909101015289610bfb610bf6826119b0565b6119c5565b9b50505050505050505050505090565b5f6060805f805f610c2b87610c1e611a54565b610c26611a74565b611a94565b9250925092505f610c4182610220015160200190565b90505f8261022001515182610c5691906125ea565b90505f610c7483836f07fffffe0000000003ff200000000000611b85565b80925081945050505f80610c8d86610240015184611c21565b915091508115610d22575f610ca28783611cf8565b90506124435f610cb0611d27565b90505f60028251610cc19190612625565b9050808510610cf2576040516303bdd1b160e51b815260048101869052602481018290526044015b60405180910390fd5b6001850160020282015161ffff169250610d0b8c8c8686565b9e509e509e50505050505050505050505050610d48565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b5f805f805f610d77866002810151815160228084019461ffff93909316840101920160200190565b505f988998509650505050505050565b60605f610d96600660016125ea565b610da19060016125ea565b610dac9060016125ea565b6001600160401b03811115610dc357610dc36124bb565b604051908082528060200260200182016040528015610df657816020015b6060815260200190600190039081610de15790505b50604080516002808252606082019092529192505f9190816020015b612443815260200190600190039081610e12579050509050611d47815f81518110610e3f57610e3f6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110610e7557610e756125fd565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b612443815260200190600190039081610ea5579050509050611d47815f81518110610ed257610ed26125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110610f0857610f086125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110610f3e57610f3e6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110610f7457610f746125fd565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b612443815260200190600190039081610fa4579050509050611d47815f81518110610fd157610fd16125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110611007576110076125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b612443815260200190600190039081611037579050509050611d47815f81518110611064576110646125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160018151811061109a5761109a6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816002815181106110d0576110d06125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110611106576111066125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160048151811061113c5761113c6125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b61244381526020019060019003908161116c579050509050611d47815f81518110611199576111996125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816001815181106111cf576111cf6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110611205576112056125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160038151811061123b5761123b6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600481518110611271576112716125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816112a0579050509050611d70815f815181106112cd576112cd6125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816112fc579050509050611e0c815f81518110611329576113296125fd565b60200260200101906001600160401b031690816001600160401b03168152505086885f8151811061135c5761135c6125fd565b6020026020010181905250858860018151811061137b5761137b6125fd565b6020026020010181905250848860028151811061139a5761139a6125fd565b602002602001018190525083886003815181106113b9576113b96125fd565b602002602001018190525082886004815181106113d8576113d86125fd565b602090810291909101015281886113f1600660016125ea565b81518110611401576114016125fd565b6020908102919091010152808861141a600660016125ea565b6114259060016125ea565b81518110611435576114356125fd565b602090810291909101015260408051600680825260e082019092525f91816020015b612443815260200190600190039081611457579050509050611d47815f81518110611484576114846125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816001815181106114ba576114ba6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816002815181106114f0576114f06125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110611526576115266125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160048151811061155c5761155c6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600581518110611592576115926125fd565b60200260200101906001600160401b031690816001600160401b03168152505080896005815181106115c6576115c66125fd565b602090810291909101015260408051600780825261010082019092525f91816020015b6124438152602001906001900390816115e9579050509050611d47815f81518110611616576116166125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160018151811061164c5761164c6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110611682576116826125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816003815181106116b8576116b86125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816004815181106116ee576116ee6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600581518110611724576117246125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600681518110610baa57610baa6125fd565b5f6060806117685f80611ec4565b92509250925093509350939050565b5f6060806117685f6001611ec4565b5f60608061176860015f611ec4565b5f606080611768600180611ec4565b5f60608061176860016002611ec4565b5f60608061176860016003611ec4565b5f60608061176860025f611ec4565b5f60608061176860026001611ec4565b5f60608061176860035f611ec4565b5f60608061176860036001611ec4565b5f60608061176860036002611ec4565b5f606080611768600380611ec4565b5f60608061176860036004611ec4565b5f60608061176860045f611ec4565b5f60608061176860046001611ec4565b5f60608061176860046002611ec4565b5f60608061176860046003611ec4565b5f606080611768600480611ec4565b5f606080611768611892600660016125ea565b85611ec4565b5f60608060ff80851690600886901c166118d3826118b8600660016125ea565b6118c39060016125ea565b6118cd91906125ea565b82611ec4565b945094509450505093509350939050565b5f606080611768600580611ec4565b5f60608061176860055f611ec4565b5f60608061176860056001611ec4565b5f60608061176860056002611ec4565b5f60608061176860056003611ec4565b5f60608061176860056004611ec4565b5f606080611768600680611ec4565b5f60608061176860065f611ec4565b5f60608061176860066001611ec4565b5f60608061176860066002611ec4565b5f60608061176860066003611ec4565b5f60608061176860066004611ec4565b5f60608061176860066005611ec4565b6060815f6119bd82611f46565b949350505050565b60605f82516002026001600160401b038111156119e4576119e46124bb565b6040519080825280601f01601f191660200182016040528015611a0e576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a4857805183518616908516178152602090920191600201611a26565b50939695505050505050565b60606040518060e0016040528060a681526020016126b260a69139905090565b606060405180608001604052806042815260200161275860429139905090565b5f80611b236040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050611b6f87878760405180602001604052805f815250611fb4565b915080826101e001819052505093509350939050565b5f808060018187870360208111611b9c5780611b9f565b60205b915050875192505b8519600184841a1b16158183101615611bc557600182019150611ba7565b9681019660208290036008810293841c90931b92611c105760408051602081018590520160408051601f198184030181529082905263e47fe8b760e01b8252610ce9916004016124a9565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015611ce65760018301516021909301805190935f90819060ff168180611c6b838e612165565b915091508186165f03611c8d575f809b509b5050505050505050505050611cf1565b5f87611c9d600185038916612190565b016004028b015195505062ffffff9081169350841683039150611cd19050575060019750601c1a9550611cf1945050505050565b611cda83612190565b84019350505050611c42565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190611d1e9083565b95945050505050565b606060405180608001604052806042815260200161267060429139905090565b5f81515f14611d69576040516304f8b58160e51b815260040160405180910390fd5b505f919050565b5f8151600103611dcd575060208101516001600160e01b038116601b0b60e082901d5f611d9e838383612249565b905061ffff811115611dc357604051631e4e01d760e21b815260040160405180910390fd5b9250611e07915050565b81515f03611dee57604051630f16066b60e41b815260040160405180910390fd5b604051630358cd2160e31b815260040160405180910390fd5b919050565b5f8151600203611ea157602082015160408301516001600160e01b038216601b0b60e083901d5f611e3e838383612249565b6001600160e01b038516601b0b935060e085901d925090505f611e62848483612249565b905060ff821180611e73575060ff81115b15611e9157604051631e4e01d760e21b815260040160405180910390fd5b60081b179450611e079350505050565b600282511015611dee57604051630f16066b60e41b815260040160405180910390fd5b5f60608060ff851180611ed7575060ff84115b15611eff57604051639b0f326160e01b81526004810186905260248101859052604401610ce9565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b60605f611f528361228b565b90505f611f60826020612644565b9050606060405190508160200181016040528281526020850160208651028101602083015b81831015611fa857602083515102806020855101835e6020939093019201611f85565b50919695505050505050565b6120416040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b815260200184815260200185815260200160046001600160401b038111156120c6576120c66124bb565b6040519080825280602002602001820160405280156120ef578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f01601f19168281528083018252835161ffff191681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050611d1e565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611cf1575060019250929050565b5f5f1982036121a25750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f6122578686866122d4565b91509150806122825760405162bc8ecf60e31b81526004810187905260248101869052604401610ce9565b50949350505050565b5f60208201602083510281015b808210156122cd5781515192830192808410156122c157634e487b715f5260116020526024601cfd5b50602082019150612298565b5050919050565b5f805f85121561230157604051634a7d166b60e01b81526004810186905260248101859052604401610ce9565b845f0361231357505f90506001611c19565b8460ff841685018581121561234e5760405163c849483b60e01b8152600481018890526024810187905260ff86166044820152606401610ce9565b5f805f83121561239a57604c19831215612371575f809550955050505050611c19565b825f03600a0a915081848161238857612388612611565b0495505084029091149150611c199050565b5f83131561243357604d8313156123d75760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b82600a0a9150815f19816123ed576123ed612611565b048411156124215760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b5091909102925060019150611c199050565b8360019550955050505050611c19565b61244b61265b565b565b5f6020828403121561245d575f80fd5b81356001600160e01b031981168114612474575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612474602083018461247b565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156124df575f80fd5b81356001600160401b03808211156124f5575f80fd5b818401915084601f830112612508575f80fd5b81358181111561251a5761251a6124bb565b604051601f8201601f19908116603f01168101908382118183101715612542576125426124bb565b8160405282815287602084870101111561255a575f80fd5b826020860160208301375f928101602001929092525095945050505050565b83151581525f602060606020840152612595606084018661247b565b8381036040850152845180825260208087019201905f5b818110156125c8578351835292840192918401916001016125ac565b509098975050505050505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156101d1576101d16125d6565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261263f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176101d1576101d16125d6565b634e487b7160e01b5f52605160045260245ffdfe175a17771786179517a417b417c417d317e317f21802181218211831184018501860187018e418f3190219121922193219421951196019701980199019a0187f18980101180010a00082000100010480300038412a001810000010020004200004002038038ff54905cc66c61ef3dcab071659220a895f0b15fec9301a02e0920d5bfe561c21609201e959460c19742710844db209bcd3bf1d9893761f1049db12b93430190ae9a00bf82a7806c138f40e28083f0842ef2104d561fd1315a13316716a6118d260cc117b9bfc0fec7ade14cba28900a422961b6b14a520792bdb02e0f147175655891d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d701e0c"; + hex"6080604052348015600e575f80fd5b506127978061001c5f395ff3fe608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636f5aa28d116100585780636f5aa28d146100dd578063c6c0cbb61461010b578063ccf4477514610135578063d6d8c9a814610148575f80fd5b806301ffc9a71461007e578063336284d4146100a6578063570c7a63146100bb575b5f80fd5b61009161008c36600461244a565b610150565b60405190151581526020015b60405180910390f35b6100ae6101d7565b60405161009d91906124a6565b6100ce6100c93660046124cc565b610c0b565b60405161009d93929190612576565b6040517f8336a7fad53960ed41ca79692ce772de758261a38ddecfa23983c3b89d00aaba815260200161009d565b61011e6101193660046124cc565b610d4f565b60408051921515835260208301919091520161009d565b60408051602081019091525f81526100ae565b6100ae610d87565b5f6001600160e01b031982166391ccb1d560e01b148061018057506001600160e01b03198216636f5aa28d60e01b145b8061019b57506001600160e01b03198216631a2c8edd60e01b145b806101b657506001600160e01b03198216630cd8a13560e21b145b806101d157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f6101e6600660016125e7565b6101f19060016125e7565b6101fc9060016125e7565b6001600160401b03811115610213576102136124b8565b60405190808252806020026020018201604052801561024657816020015b60608152602001906001900390816102315790505b50604080516002808252606082019092529192505f9190816020015b61244081526020019060019003908161026257905050905061175a815f8151811061028f5761028f6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611777816001815181106102c5576102c56125fa565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b6124408152602001906001900390816102f5579050509050611786815f81518110610322576103226125fa565b60200260200101906001600160401b031690816001600160401b03168152505061179581600181518110610358576103586125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117a48160028151811061038e5761038e6125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117b4816003815181106103c4576103c46125fa565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b6124408152602001906001900390816103f45790505090506117c4815f81518110610421576104216125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117d381600181518110610457576104576125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124408152602001906001900390816104875790505090506117e3815f815181106104b4576104b46125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117f2816001815181106104ea576104ea6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061180281600281518110610520576105206125fa565b60200260200101906001600160401b031690816001600160401b03168152505061181281600381518110610556576105566125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118218160048151811061058c5761058c6125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124408152602001906001900390816105bc579050509050611831815f815181106105e9576105e96125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118408160018151811061061f5761061f6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061185081600281518110610655576106556125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118608160038151811061068b5761068b6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611870816004815181106106c1576106c16125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816106f057905050905061187f815f8151811061071d5761071d6125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b61244081526020019060019003908161074c579050509050611898815f81518110610779576107796125fa565b60200260200101906001600160401b031690816001600160401b03168152505086885f815181106107ac576107ac6125fa565b602002602001018190525085886001815181106107cb576107cb6125fa565b602002602001018190525084886002815181106107ea576107ea6125fa565b60200260200101819052508388600381518110610809576108096125fa565b60200260200101819052508288600481518110610828576108286125fa565b60209081029190910101528188610841600660016125e7565b81518110610851576108516125fa565b6020908102919091010152808861086a600660016125e7565b6108759060016125e7565b81518110610885576108856125fa565b602090810291909101015260408051600680825260e082019092525f91816020015b6124408152602001906001900390816108a75790505090506118e1815f815181106108d4576108d46125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118f08160018151811061090a5761090a6125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118ff81600281518110610940576109406125fa565b60200260200101906001600160401b031690816001600160401b03168152505061190f81600381518110610976576109766125fa565b60200260200101906001600160401b031690816001600160401b03168152505061191f816004815181106109ac576109ac6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061192f816005815181106109e2576109e26125fa565b60200260200101906001600160401b031690816001600160401b0316815250508089600581518110610a1657610a166125fa565b602090810291909101015260408051600780825261010082019092525f91816020015b612440815260200190600190039081610a3957905050905061193f815f81518110610a6657610a666125fa565b60200260200101906001600160401b031690816001600160401b03168152505061194e81600181518110610a9c57610a9c6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061195d81600281518110610ad257610ad26125fa565b60200260200101906001600160401b031690816001600160401b03168152505061196d81600381518110610b0857610b086125fa565b60200260200101906001600160401b031690816001600160401b03168152505061197d81600481518110610b3e57610b3e6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061198d81600581518110610b7457610b746125fa565b60200260200101906001600160401b031690816001600160401b03168152505061199d81600681518110610baa57610baa6125fa565b60200260200101906001600160401b031690816001600160401b031681525050808a600681518110610bde57610bde6125fa565b602090810291909101015289610bfb610bf6826119ad565b6119c2565b9b50505050505050505050505090565b5f6060805f805f610c2b87610c1e611a51565b610c26611a71565b611a91565b9250925092505f610c4182610220015160200190565b90505f8261022001515182610c5691906125e7565b90505f610c7483836f07fffffe0000000003ff200000000000611b82565b80925081945050505f80610c8d86610240015184611c1e565b915091508115610d22575f610ca28783611cf5565b90506124405f610cb0611d24565b90505f60028251610cc19190612622565b9050808510610cf2576040516303bdd1b160e51b815260048101869052602481018290526044015b60405180910390fd5b6001850160020282015161ffff169250610d0b8c8c8686565b9e509e509e50505050505050505050505050610d48565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b5f805f805f610d77866002810151815160228084019461ffff93909316840101920160200190565b505f988998509650505050505050565b60605f610d96600660016125e7565b610da19060016125e7565b610dac9060016125e7565b6001600160401b03811115610dc357610dc36124b8565b604051908082528060200260200182016040528015610df657816020015b6060815260200190600190039081610de15790505b50604080516002808252606082019092529192505f9190816020015b612440815260200190600190039081610e12579050509050611d44815f81518110610e3f57610e3f6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110610e7557610e756125fa565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b612440815260200190600190039081610ea5579050509050611d44815f81518110610ed257610ed26125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110610f0857610f086125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110610f3e57610f3e6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110610f7457610f746125fa565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b612440815260200190600190039081610fa4579050509050611d44815f81518110610fd157610fd16125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110611007576110076125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b612440815260200190600190039081611037579050509050611d44815f81518110611064576110646125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160018151811061109a5761109a6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816002815181106110d0576110d06125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110611106576111066125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160048151811061113c5761113c6125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b61244081526020019060019003908161116c579050509050611d44815f81518110611199576111996125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816001815181106111cf576111cf6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110611205576112056125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160038151811061123b5761123b6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600481518110611271576112716125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816112a0579050509050611d6d815f815181106112cd576112cd6125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816112fc579050509050611e09815f81518110611329576113296125fa565b60200260200101906001600160401b031690816001600160401b03168152505086885f8151811061135c5761135c6125fa565b6020026020010181905250858860018151811061137b5761137b6125fa565b6020026020010181905250848860028151811061139a5761139a6125fa565b602002602001018190525083886003815181106113b9576113b96125fa565b602002602001018190525082886004815181106113d8576113d86125fa565b602090810291909101015281886113f1600660016125e7565b81518110611401576114016125fa565b6020908102919091010152808861141a600660016125e7565b6114259060016125e7565b81518110611435576114356125fa565b602090810291909101015260408051600680825260e082019092525f91816020015b612440815260200190600190039081611457579050509050611d44815f81518110611484576114846125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816001815181106114ba576114ba6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816002815181106114f0576114f06125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110611526576115266125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160048151811061155c5761155c6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600581518110611592576115926125fa565b60200260200101906001600160401b031690816001600160401b03168152505080896005815181106115c6576115c66125fa565b602090810291909101015260408051600780825261010082019092525f91816020015b6124408152602001906001900390816115e9579050509050611d44815f81518110611616576116166125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160018151811061164c5761164c6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110611682576116826125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816003815181106116b8576116b86125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816004815181106116ee576116ee6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600581518110611724576117246125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600681518110610baa57610baa6125fa565b5f6060806117685f80611ec1565b92509250925093509350939050565b5f6060806117685f6001611ec1565b5f60608061176860015f611ec1565b5f606080611768600180611ec1565b5f60608061176860016002611ec1565b5f60608061176860016003611ec1565b5f60608061176860025f611ec1565b5f60608061176860026001611ec1565b5f60608061176860035f611ec1565b5f60608061176860036001611ec1565b5f60608061176860036002611ec1565b5f606080611768600380611ec1565b5f60608061176860036004611ec1565b5f60608061176860045f611ec1565b5f60608061176860046001611ec1565b5f60608061176860046002611ec1565b5f60608061176860046003611ec1565b5f606080611768600480611ec1565b5f606080611768611892600660016125e7565b85611ec1565b5f60608060ff8416600885901c6118d0826118b5600660016125e7565b6118c09060016125e7565b6118ca91906125e7565b82611ec1565b945094509450505093509350939050565b5f606080611768600580611ec1565b5f60608061176860055f611ec1565b5f60608061176860056001611ec1565b5f60608061176860056002611ec1565b5f60608061176860056003611ec1565b5f60608061176860056004611ec1565b5f606080611768600680611ec1565b5f60608061176860065f611ec1565b5f60608061176860066001611ec1565b5f60608061176860066002611ec1565b5f60608061176860066003611ec1565b5f60608061176860066004611ec1565b5f60608061176860066005611ec1565b6060815f6119ba82611f43565b949350505050565b60605f82516002026001600160401b038111156119e1576119e16124b8565b6040519080825280601f01601f191660200182016040528015611a0b576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a4557805183518616908516178152602090920191600201611a23565b50939695505050505050565b60606040518060e0016040528060a6815260200161266d60a69139905090565b606060405180608001604052806042815260200161271360429139905090565b5f80611b206040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050611b6c87878760405180602001604052805f815250611fb1565b915080826101e001819052505093509350939050565b5f808060018187870360208111611b995780611b9c565b60205b915050875192505b8519600184841a1b16158183101615611bc257600182019150611ba4565b9681019660208290036008810293841c90931b92611c0d5760408051602081018590520160408051601f198184030181529082905263e47fe8b760e01b8252610ce9916004016124a6565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015611ce35760018301516021909301805190935f90819060ff168180611c68838e612162565b915091508186165f03611c8a575f809b509b5050505050505050505050611cee565b5f87611c9a60018503891661218d565b016004028b015195505062ffffff9081169350841683039150611cce9050575060019750601c1a9550611cee945050505050565b611cd78361218d565b84019350505050611c3f565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190611d1b9083565b95945050505050565b606060405180608001604052806042815260200161275560429139905090565b5f81515f14611d66576040516304f8b58160e51b815260040160405180910390fd5b505f919050565b5f8151600103611dca575060208101516001600160e01b038116601b0b60e082901d5f611d9b838383612246565b905061ffff811115611dc057604051631e4e01d760e21b815260040160405180910390fd5b9250611e04915050565b81515f03611deb57604051630f16066b60e41b815260040160405180910390fd5b604051630358cd2160e31b815260040160405180910390fd5b919050565b5f8151600203611e9e57602082015160408301516001600160e01b038216601b0b60e083901d5f611e3b838383612246565b6001600160e01b038516601b0b935060e085901d925090505f611e5f848483612246565b905060ff821180611e70575060ff81115b15611e8e57604051631e4e01d760e21b815260040160405180910390fd5b60081b179450611e049350505050565b600282511015611deb57604051630f16066b60e41b815260040160405180910390fd5b5f60608060ff851180611ed4575060ff84115b15611efc57604051639b0f326160e01b81526004810186905260248101859052604401610ce9565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b60605f611f4f83612288565b90505f611f5d826020612641565b9050606060405190508160200181016040528281526020850160208651028101602083015b81831015611fa557602083515102806020855101835e6020939093019201611f82565b50919695505050505050565b61203e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b815260200184815260200185815260200160046001600160401b038111156120c3576120c36124b8565b6040519080825280602002602001820160405280156120ec578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f01601f19168281528083018252835161ffff191681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050611d1b565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611cee575060019250929050565b5f5f19820361219f5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f6122548686866122d1565b915091508061227f5760405162bc8ecf60e31b81526004810187905260248101869052604401610ce9565b50949350505050565b5f60208201602083510281015b808210156122ca5781515192830192808410156122be57634e487b715f5260116020526024601cfd5b50602082019150612295565b5050919050565b5f805f8512156122fe57604051634a7d166b60e01b81526004810186905260248101859052604401610ce9565b845f0361231057505f90506001611c16565b8460ff841685018581121561234b5760405163c849483b60e01b8152600481018890526024810187905260ff86166044820152606401610ce9565b5f805f83121561239757604c1983121561236e575f809550955050505050611c16565b825f03600a0a91508184816123855761238561260e565b0495505084029091149150611c169050565b5f83131561243057604d8313156123d45760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b82600a0a9150815f19816123ea576123ea61260e565b0484111561241e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b5091909102925060019150611c169050565b8360019550955050505050611c16565b612448612658565b565b5f6020828403121561245a575f80fd5b81356001600160e01b031981168114612471575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124716020830184612478565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156124dc575f80fd5b81356001600160401b03808211156124f2575f80fd5b818401915084601f830112612505575f80fd5b813581811115612517576125176124b8565b604051601f8201601f19908116603f0116810190838211818310171561253f5761253f6124b8565b81604052828152876020848701011115612557575f80fd5b826020860160208301375f928101602001929092525095945050505050565b83151581525f6020606060208401526125926060840186612478565b8381036040850152845180825260208087019201905f5b818110156125c5578351835292840192918401916001016125a9565b509098975050505050505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156101d1576101d16125d3565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261263c57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176101d1576101d16125d3565b634e487b7160e01b5f52605160045260245ffdfe0101180010a00082000100010480300038412a001810000010020004200004002038038ff54905cc66c61ef3dcab071659220a895f0b15fec9301a02e0920d5bfe561c21609201e959460c19742710844db209bcd3bf1d9893761f1049db12b93430190ae9a00bf82a7806c138f40e28083f0842ef2104d561fd1315a13316716a6118d260cc117b9bfc0fec7ade14cba28900a422961b6b14a520792bdb02e0f147175655891d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d6d1e09175a17771786179517a417b417c417d317e317f21802181218211831184018501860187018e118f018ff190f191f192f193f194e195d196d197d198d199d187f1898"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636f5aa28d116100585780636f5aa28d146100dd578063c6c0cbb61461010b578063ccf4477514610135578063d6d8c9a814610148575f80fd5b806301ffc9a71461007e578063336284d4146100a6578063570c7a63146100bb575b5f80fd5b61009161008c36600461244d565b610150565b60405190151581526020015b60405180910390f35b6100ae6101d7565b60405161009d91906124a9565b6100ce6100c93660046124cf565b610c0b565b60405161009d93929190612579565b6040517f8336a7fad53960ed41ca79692ce772de758261a38ddecfa23983c3b89d00aaba815260200161009d565b61011e6101193660046124cf565b610d4f565b60408051921515835260208301919091520161009d565b60408051602081019091525f81526100ae565b6100ae610d87565b5f6001600160e01b031982166391ccb1d560e01b148061018057506001600160e01b03198216636f5aa28d60e01b145b8061019b57506001600160e01b03198216631a2c8edd60e01b145b806101b657506001600160e01b03198216630cd8a13560e21b145b806101d157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f6101e6600660016125ea565b6101f19060016125ea565b6101fc9060016125ea565b6001600160401b03811115610213576102136124bb565b60405190808252806020026020018201604052801561024657816020015b60608152602001906001900390816102315790505b50604080516002808252606082019092529192505f9190816020015b61244381526020019060019003908161026257905050905061175a815f8151811061028f5761028f6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611777816001815181106102c5576102c56125fd565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b6124438152602001906001900390816102f5579050509050611786815f81518110610322576103226125fd565b60200260200101906001600160401b031690816001600160401b03168152505061179581600181518110610358576103586125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117a48160028151811061038e5761038e6125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117b4816003815181106103c4576103c46125fd565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b6124438152602001906001900390816103f45790505090506117c4815f81518110610421576104216125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117d381600181518110610457576104576125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124438152602001906001900390816104875790505090506117e3815f815181106104b4576104b46125fd565b60200260200101906001600160401b031690816001600160401b0316815250506117f2816001815181106104ea576104ea6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061180281600281518110610520576105206125fd565b60200260200101906001600160401b031690816001600160401b03168152505061181281600381518110610556576105566125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118218160048151811061058c5761058c6125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124438152602001906001900390816105bc579050509050611831815f815181106105e9576105e96125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118408160018151811061061f5761061f6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061185081600281518110610655576106556125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118608160038151811061068b5761068b6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611870816004815181106106c1576106c16125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816106f057905050905061187f815f8151811061071d5761071d6125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b61244381526020019060019003908161074c579050509050611898815f81518110610779576107796125fd565b60200260200101906001600160401b031690816001600160401b03168152505086885f815181106107ac576107ac6125fd565b602002602001018190525085886001815181106107cb576107cb6125fd565b602002602001018190525084886002815181106107ea576107ea6125fd565b60200260200101819052508388600381518110610809576108096125fd565b60200260200101819052508288600481518110610828576108286125fd565b60209081029190910101528188610841600660016125ea565b81518110610851576108516125fd565b6020908102919091010152808861086a600660016125ea565b6108759060016125ea565b81518110610885576108856125fd565b602090810291909101015260408051600680825260e082019092525f91816020015b6124438152602001906001900390816108a75790505090506118e4815f815181106108d4576108d46125fd565b60200260200101906001600160401b031690816001600160401b0316815250506118f38160018151811061090a5761090a6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061190281600281518110610940576109406125fd565b60200260200101906001600160401b031690816001600160401b03168152505061191281600381518110610976576109766125fd565b60200260200101906001600160401b031690816001600160401b031681525050611922816004815181106109ac576109ac6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611932816005815181106109e2576109e26125fd565b60200260200101906001600160401b031690816001600160401b0316815250508089600581518110610a1657610a166125fd565b602090810291909101015260408051600780825261010082019092525f91816020015b612443815260200190600190039081610a39579050509050611942815f81518110610a6657610a666125fd565b60200260200101906001600160401b031690816001600160401b03168152505061195181600181518110610a9c57610a9c6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061196081600281518110610ad257610ad26125fd565b60200260200101906001600160401b031690816001600160401b03168152505061197081600381518110610b0857610b086125fd565b60200260200101906001600160401b031690816001600160401b03168152505061198081600481518110610b3e57610b3e6125fd565b60200260200101906001600160401b031690816001600160401b03168152505061199081600581518110610b7457610b746125fd565b60200260200101906001600160401b031690816001600160401b0316815250506119a081600681518110610baa57610baa6125fd565b60200260200101906001600160401b031690816001600160401b031681525050808a600681518110610bde57610bde6125fd565b602090810291909101015289610bfb610bf6826119b0565b6119c5565b9b50505050505050505050505090565b5f6060805f805f610c2b87610c1e611a54565b610c26611a74565b611a94565b9250925092505f610c4182610220015160200190565b90505f8261022001515182610c5691906125ea565b90505f610c7483836f07fffffe0000000003ff200000000000611b85565b80925081945050505f80610c8d86610240015184611c21565b915091508115610d22575f610ca28783611cf8565b90506124435f610cb0611d27565b90505f60028251610cc19190612625565b9050808510610cf2576040516303bdd1b160e51b815260048101869052602481018290526044015b60405180910390fd5b6001850160020282015161ffff169250610d0b8c8c8686565b9e509e509e50505050505050505050505050610d48565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b5f805f805f610d77866002810151815160228084019461ffff93909316840101920160200190565b505f988998509650505050505050565b60605f610d96600660016125ea565b610da19060016125ea565b610dac9060016125ea565b6001600160401b03811115610dc357610dc36124bb565b604051908082528060200260200182016040528015610df657816020015b6060815260200190600190039081610de15790505b50604080516002808252606082019092529192505f9190816020015b612443815260200190600190039081610e12579050509050611d47815f81518110610e3f57610e3f6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110610e7557610e756125fd565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b612443815260200190600190039081610ea5579050509050611d47815f81518110610ed257610ed26125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110610f0857610f086125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110610f3e57610f3e6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110610f7457610f746125fd565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b612443815260200190600190039081610fa4579050509050611d47815f81518110610fd157610fd16125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600181518110611007576110076125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b612443815260200190600190039081611037579050509050611d47815f81518110611064576110646125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160018151811061109a5761109a6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816002815181106110d0576110d06125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110611106576111066125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160048151811061113c5761113c6125fd565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b61244381526020019060019003908161116c579050509050611d47815f81518110611199576111996125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816001815181106111cf576111cf6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110611205576112056125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160038151811061123b5761123b6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600481518110611271576112716125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816112a0579050509050611d70815f815181106112cd576112cd6125fd565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124438152602001906001900390816112fc579050509050611e0c815f81518110611329576113296125fd565b60200260200101906001600160401b031690816001600160401b03168152505086885f8151811061135c5761135c6125fd565b6020026020010181905250858860018151811061137b5761137b6125fd565b6020026020010181905250848860028151811061139a5761139a6125fd565b602002602001018190525083886003815181106113b9576113b96125fd565b602002602001018190525082886004815181106113d8576113d86125fd565b602090810291909101015281886113f1600660016125ea565b81518110611401576114016125fd565b6020908102919091010152808861141a600660016125ea565b6114259060016125ea565b81518110611435576114356125fd565b602090810291909101015260408051600680825260e082019092525f91816020015b612443815260200190600190039081611457579050509050611d47815f81518110611484576114846125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816001815181106114ba576114ba6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816002815181106114f0576114f06125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600381518110611526576115266125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160048151811061155c5761155c6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600581518110611592576115926125fd565b60200260200101906001600160401b031690816001600160401b03168152505080896005815181106115c6576115c66125fd565b602090810291909101015260408051600780825261010082019092525f91816020015b6124438152602001906001900390816115e9579050509050611d47815f81518110611616576116166125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d478160018151811061164c5761164c6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600281518110611682576116826125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816003815181106116b8576116b86125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d47816004815181106116ee576116ee6125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600581518110611724576117246125fd565b60200260200101906001600160401b031690816001600160401b031681525050611d4781600681518110610baa57610baa6125fd565b5f6060806117685f80611ec4565b92509250925093509350939050565b5f6060806117685f6001611ec4565b5f60608061176860015f611ec4565b5f606080611768600180611ec4565b5f60608061176860016002611ec4565b5f60608061176860016003611ec4565b5f60608061176860025f611ec4565b5f60608061176860026001611ec4565b5f60608061176860035f611ec4565b5f60608061176860036001611ec4565b5f60608061176860036002611ec4565b5f606080611768600380611ec4565b5f60608061176860036004611ec4565b5f60608061176860045f611ec4565b5f60608061176860046001611ec4565b5f60608061176860046002611ec4565b5f60608061176860046003611ec4565b5f606080611768600480611ec4565b5f606080611768611892600660016125ea565b85611ec4565b5f60608060ff80851690600886901c166118d3826118b8600660016125ea565b6118c39060016125ea565b6118cd91906125ea565b82611ec4565b945094509450505093509350939050565b5f606080611768600580611ec4565b5f60608061176860055f611ec4565b5f60608061176860056001611ec4565b5f60608061176860056002611ec4565b5f60608061176860056003611ec4565b5f60608061176860056004611ec4565b5f606080611768600680611ec4565b5f60608061176860065f611ec4565b5f60608061176860066001611ec4565b5f60608061176860066002611ec4565b5f60608061176860066003611ec4565b5f60608061176860066004611ec4565b5f60608061176860066005611ec4565b6060815f6119bd82611f46565b949350505050565b60605f82516002026001600160401b038111156119e4576119e46124bb565b6040519080825280601f01601f191660200182016040528015611a0e576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a4857805183518616908516178152602090920191600201611a26565b50939695505050505050565b60606040518060e0016040528060a681526020016126b260a69139905090565b606060405180608001604052806042815260200161275860429139905090565b5f80611b236040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050611b6f87878760405180602001604052805f815250611fb4565b915080826101e001819052505093509350939050565b5f808060018187870360208111611b9c5780611b9f565b60205b915050875192505b8519600184841a1b16158183101615611bc557600182019150611ba7565b9681019660208290036008810293841c90931b92611c105760408051602081018590520160408051601f198184030181529082905263e47fe8b760e01b8252610ce9916004016124a9565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015611ce65760018301516021909301805190935f90819060ff168180611c6b838e612165565b915091508186165f03611c8d575f809b509b5050505050505050505050611cf1565b5f87611c9d600185038916612190565b016004028b015195505062ffffff9081169350841683039150611cd19050575060019750601c1a9550611cf1945050505050565b611cda83612190565b84019350505050611c42565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190611d1e9083565b95945050505050565b606060405180608001604052806042815260200161267060429139905090565b5f81515f14611d69576040516304f8b58160e51b815260040160405180910390fd5b505f919050565b5f8151600103611dcd575060208101516001600160e01b038116601b0b60e082901d5f611d9e838383612249565b905061ffff811115611dc357604051631e4e01d760e21b815260040160405180910390fd5b9250611e07915050565b81515f03611dee57604051630f16066b60e41b815260040160405180910390fd5b604051630358cd2160e31b815260040160405180910390fd5b919050565b5f8151600203611ea157602082015160408301516001600160e01b038216601b0b60e083901d5f611e3e838383612249565b6001600160e01b038516601b0b935060e085901d925090505f611e62848483612249565b905060ff821180611e73575060ff81115b15611e9157604051631e4e01d760e21b815260040160405180910390fd5b60081b179450611e079350505050565b600282511015611dee57604051630f16066b60e41b815260040160405180910390fd5b5f60608060ff851180611ed7575060ff84115b15611eff57604051639b0f326160e01b81526004810186905260248101859052604401610ce9565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b60605f611f528361228b565b90505f611f60826020612644565b9050606060405190508160200181016040528281526020850160208651028101602083015b81831015611fa857602083515102806020855101835e6020939093019201611f85565b50919695505050505050565b6120416040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b815260200184815260200185815260200160046001600160401b038111156120c6576120c66124bb565b6040519080825280602002602001820160405280156120ef578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f01601f19168281528083018252835161ffff191681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050611d1e565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611cf1575060019250929050565b5f5f1982036121a25750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f6122578686866122d4565b91509150806122825760405162bc8ecf60e31b81526004810187905260248101869052604401610ce9565b50949350505050565b5f60208201602083510281015b808210156122cd5781515192830192808410156122c157634e487b715f5260116020526024601cfd5b50602082019150612298565b5050919050565b5f805f85121561230157604051634a7d166b60e01b81526004810186905260248101859052604401610ce9565b845f0361231357505f90506001611c19565b8460ff841685018581121561234e5760405163c849483b60e01b8152600481018890526024810187905260ff86166044820152606401610ce9565b5f805f83121561239a57604c19831215612371575f809550955050505050611c19565b825f03600a0a915081848161238857612388612611565b0495505084029091149150611c199050565b5f83131561243357604d8313156123d75760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b82600a0a9150815f19816123ed576123ed612611565b048411156124215760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b5091909102925060019150611c199050565b8360019550955050505050611c19565b61244b61265b565b565b5f6020828403121561245d575f80fd5b81356001600160e01b031981168114612474575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612474602083018461247b565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156124df575f80fd5b81356001600160401b03808211156124f5575f80fd5b818401915084601f830112612508575f80fd5b81358181111561251a5761251a6124bb565b604051601f8201601f19908116603f01168101908382118183101715612542576125426124bb565b8160405282815287602084870101111561255a575f80fd5b826020860160208301375f928101602001929092525095945050505050565b83151581525f602060606020840152612595606084018661247b565b8381036040850152845180825260208087019201905f5b818110156125c8578351835292840192918401916001016125ac565b509098975050505050505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156101d1576101d16125d6565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261263f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176101d1576101d16125d6565b634e487b7160e01b5f52605160045260245ffdfe175a17771786179517a417b417c417d317e317f21802181218211831184018501860187018e418f3190219121922193219421951196019701980199019a0187f18980101180010a00082000100010480300038412a001810000010020004200004002038038ff54905cc66c61ef3dcab071659220a895f0b15fec9301a02e0920d5bfe561c21609201e959460c19742710844db209bcd3bf1d9893761f1049db12b93430190ae9a00bf82a7806c138f40e28083f0842ef2104d561fd1315a13316716a6118d260cc117b9bfc0fec7ade14cba28900a422961b6b14a520792bdb02e0f147175655891d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d471d701e0c"; + hex"608060405234801561000f575f80fd5b506004361061007a575f3560e01c80636f5aa28d116100585780636f5aa28d146100dd578063c6c0cbb61461010b578063ccf4477514610135578063d6d8c9a814610148575f80fd5b806301ffc9a71461007e578063336284d4146100a6578063570c7a63146100bb575b5f80fd5b61009161008c36600461244a565b610150565b60405190151581526020015b60405180910390f35b6100ae6101d7565b60405161009d91906124a6565b6100ce6100c93660046124cc565b610c0b565b60405161009d93929190612576565b6040517f8336a7fad53960ed41ca79692ce772de758261a38ddecfa23983c3b89d00aaba815260200161009d565b61011e6101193660046124cc565b610d4f565b60408051921515835260208301919091520161009d565b60408051602081019091525f81526100ae565b6100ae610d87565b5f6001600160e01b031982166391ccb1d560e01b148061018057506001600160e01b03198216636f5aa28d60e01b145b8061019b57506001600160e01b03198216631a2c8edd60e01b145b806101b657506001600160e01b03198216630cd8a13560e21b145b806101d157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f6101e6600660016125e7565b6101f19060016125e7565b6101fc9060016125e7565b6001600160401b03811115610213576102136124b8565b60405190808252806020026020018201604052801561024657816020015b60608152602001906001900390816102315790505b50604080516002808252606082019092529192505f9190816020015b61244081526020019060019003908161026257905050905061175a815f8151811061028f5761028f6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611777816001815181106102c5576102c56125fa565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b6124408152602001906001900390816102f5579050509050611786815f81518110610322576103226125fa565b60200260200101906001600160401b031690816001600160401b03168152505061179581600181518110610358576103586125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117a48160028151811061038e5761038e6125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117b4816003815181106103c4576103c46125fa565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b6124408152602001906001900390816103f45790505090506117c4815f81518110610421576104216125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117d381600181518110610457576104576125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124408152602001906001900390816104875790505090506117e3815f815181106104b4576104b46125fa565b60200260200101906001600160401b031690816001600160401b0316815250506117f2816001815181106104ea576104ea6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061180281600281518110610520576105206125fa565b60200260200101906001600160401b031690816001600160401b03168152505061181281600381518110610556576105566125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118218160048151811061058c5761058c6125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b6124408152602001906001900390816105bc579050509050611831815f815181106105e9576105e96125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118408160018151811061061f5761061f6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061185081600281518110610655576106556125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118608160038151811061068b5761068b6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611870816004815181106106c1576106c16125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816106f057905050905061187f815f8151811061071d5761071d6125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b61244081526020019060019003908161074c579050509050611898815f81518110610779576107796125fa565b60200260200101906001600160401b031690816001600160401b03168152505086885f815181106107ac576107ac6125fa565b602002602001018190525085886001815181106107cb576107cb6125fa565b602002602001018190525084886002815181106107ea576107ea6125fa565b60200260200101819052508388600381518110610809576108096125fa565b60200260200101819052508288600481518110610828576108286125fa565b60209081029190910101528188610841600660016125e7565b81518110610851576108516125fa565b6020908102919091010152808861086a600660016125e7565b6108759060016125e7565b81518110610885576108856125fa565b602090810291909101015260408051600680825260e082019092525f91816020015b6124408152602001906001900390816108a75790505090506118e1815f815181106108d4576108d46125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118f08160018151811061090a5761090a6125fa565b60200260200101906001600160401b031690816001600160401b0316815250506118ff81600281518110610940576109406125fa565b60200260200101906001600160401b031690816001600160401b03168152505061190f81600381518110610976576109766125fa565b60200260200101906001600160401b031690816001600160401b03168152505061191f816004815181106109ac576109ac6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061192f816005815181106109e2576109e26125fa565b60200260200101906001600160401b031690816001600160401b0316815250508089600581518110610a1657610a166125fa565b602090810291909101015260408051600780825261010082019092525f91816020015b612440815260200190600190039081610a3957905050905061193f815f81518110610a6657610a666125fa565b60200260200101906001600160401b031690816001600160401b03168152505061194e81600181518110610a9c57610a9c6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061195d81600281518110610ad257610ad26125fa565b60200260200101906001600160401b031690816001600160401b03168152505061196d81600381518110610b0857610b086125fa565b60200260200101906001600160401b031690816001600160401b03168152505061197d81600481518110610b3e57610b3e6125fa565b60200260200101906001600160401b031690816001600160401b03168152505061198d81600581518110610b7457610b746125fa565b60200260200101906001600160401b031690816001600160401b03168152505061199d81600681518110610baa57610baa6125fa565b60200260200101906001600160401b031690816001600160401b031681525050808a600681518110610bde57610bde6125fa565b602090810291909101015289610bfb610bf6826119ad565b6119c2565b9b50505050505050505050505090565b5f6060805f805f610c2b87610c1e611a51565b610c26611a71565b611a91565b9250925092505f610c4182610220015160200190565b90505f8261022001515182610c5691906125e7565b90505f610c7483836f07fffffe0000000003ff200000000000611b82565b80925081945050505f80610c8d86610240015184611c1e565b915091508115610d22575f610ca28783611cf5565b90506124405f610cb0611d24565b90505f60028251610cc19190612622565b9050808510610cf2576040516303bdd1b160e51b815260048101869052602481018290526044015b60405180910390fd5b6001850160020282015161ffff169250610d0b8c8c8686565b9e509e509e50505050505050505050505050610d48565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b5f805f805f610d77866002810151815160228084019461ffff93909316840101920160200190565b505f988998509650505050505050565b60605f610d96600660016125e7565b610da19060016125e7565b610dac9060016125e7565b6001600160401b03811115610dc357610dc36124b8565b604051908082528060200260200182016040528015610df657816020015b6060815260200190600190039081610de15790505b50604080516002808252606082019092529192505f9190816020015b612440815260200190600190039081610e12579050509050611d44815f81518110610e3f57610e3f6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110610e7557610e756125fa565b6001600160401b03929092166020928302919091019091015260408051600480825260a082019092525f91816020015b612440815260200190600190039081610ea5579050509050611d44815f81518110610ed257610ed26125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110610f0857610f086125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110610f3e57610f3e6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110610f7457610f746125fa565b6001600160401b039290921660209283029190910190910152604080516002808252606082019092525f91816020015b612440815260200190600190039081610fa4579050509050611d44815f81518110610fd157610fd16125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600181518110611007576110076125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b612440815260200190600190039081611037579050509050611d44815f81518110611064576110646125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160018151811061109a5761109a6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816002815181106110d0576110d06125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110611106576111066125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160048151811061113c5761113c6125fa565b6001600160401b03929092166020928302919091019091015260408051600580825260c082019092525f91816020015b61244081526020019060019003908161116c579050509050611d44815f81518110611199576111996125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816001815181106111cf576111cf6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110611205576112056125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160038151811061123b5761123b6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600481518110611271576112716125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816112a0579050509050611d6d815f815181106112cd576112cd6125fa565b6001600160401b0392909216602092830291909101909101526040805160018082528183019092525f91816020015b6124408152602001906001900390816112fc579050509050611e09815f81518110611329576113296125fa565b60200260200101906001600160401b031690816001600160401b03168152505086885f8151811061135c5761135c6125fa565b6020026020010181905250858860018151811061137b5761137b6125fa565b6020026020010181905250848860028151811061139a5761139a6125fa565b602002602001018190525083886003815181106113b9576113b96125fa565b602002602001018190525082886004815181106113d8576113d86125fa565b602090810291909101015281886113f1600660016125e7565b81518110611401576114016125fa565b6020908102919091010152808861141a600660016125e7565b6114259060016125e7565b81518110611435576114356125fa565b602090810291909101015260408051600680825260e082019092525f91816020015b612440815260200190600190039081611457579050509050611d44815f81518110611484576114846125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816001815181106114ba576114ba6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816002815181106114f0576114f06125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600381518110611526576115266125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160048151811061155c5761155c6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600581518110611592576115926125fa565b60200260200101906001600160401b031690816001600160401b03168152505080896005815181106115c6576115c66125fa565b602090810291909101015260408051600780825261010082019092525f91816020015b6124408152602001906001900390816115e9579050509050611d44815f81518110611616576116166125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d448160018151811061164c5761164c6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600281518110611682576116826125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816003815181106116b8576116b86125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d44816004815181106116ee576116ee6125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600581518110611724576117246125fa565b60200260200101906001600160401b031690816001600160401b031681525050611d4481600681518110610baa57610baa6125fa565b5f6060806117685f80611ec1565b92509250925093509350939050565b5f6060806117685f6001611ec1565b5f60608061176860015f611ec1565b5f606080611768600180611ec1565b5f60608061176860016002611ec1565b5f60608061176860016003611ec1565b5f60608061176860025f611ec1565b5f60608061176860026001611ec1565b5f60608061176860035f611ec1565b5f60608061176860036001611ec1565b5f60608061176860036002611ec1565b5f606080611768600380611ec1565b5f60608061176860036004611ec1565b5f60608061176860045f611ec1565b5f60608061176860046001611ec1565b5f60608061176860046002611ec1565b5f60608061176860046003611ec1565b5f606080611768600480611ec1565b5f606080611768611892600660016125e7565b85611ec1565b5f60608060ff8416600885901c6118d0826118b5600660016125e7565b6118c09060016125e7565b6118ca91906125e7565b82611ec1565b945094509450505093509350939050565b5f606080611768600580611ec1565b5f60608061176860055f611ec1565b5f60608061176860056001611ec1565b5f60608061176860056002611ec1565b5f60608061176860056003611ec1565b5f60608061176860056004611ec1565b5f606080611768600680611ec1565b5f60608061176860065f611ec1565b5f60608061176860066001611ec1565b5f60608061176860066002611ec1565b5f60608061176860066003611ec1565b5f60608061176860066004611ec1565b5f60608061176860066005611ec1565b6060815f6119ba82611f43565b949350505050565b60605f82516002026001600160401b038111156119e1576119e16124b8565b6040519080825280601f01601f191660200182016040528015611a0b576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a4557805183518616908516178152602090920191600201611a23565b50939695505050505050565b60606040518060e0016040528060a6815260200161266d60a69139905090565b606060405180608001604052806042815260200161271360429139905090565b5f80611b206040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050611b6c87878760405180602001604052805f815250611fb1565b915080826101e001819052505093509350939050565b5f808060018187870360208111611b995780611b9c565b60205b915050875192505b8519600184841a1b16158183101615611bc257600182019150611ba4565b9681019660208290036008810293841c90931b92611c0d5760408051602081018590520160408051601f198184030181529082905263e47fe8b760e01b8252610ce9916004016124a6565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015611ce35760018301516021909301805190935f90819060ff168180611c68838e612162565b915091508186165f03611c8a575f809b509b5050505050505050505050611cee565b5f87611c9a60018503891661218d565b016004028b015195505062ffffff9081169350841683039150611cce9050575060019750601c1a9550611cee945050505050565b611cd78361218d565b84019350505050611c3f565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190611d1b9083565b95945050505050565b606060405180608001604052806042815260200161275560429139905090565b5f81515f14611d66576040516304f8b58160e51b815260040160405180910390fd5b505f919050565b5f8151600103611dca575060208101516001600160e01b038116601b0b60e082901d5f611d9b838383612246565b905061ffff811115611dc057604051631e4e01d760e21b815260040160405180910390fd5b9250611e04915050565b81515f03611deb57604051630f16066b60e41b815260040160405180910390fd5b604051630358cd2160e31b815260040160405180910390fd5b919050565b5f8151600203611e9e57602082015160408301516001600160e01b038216601b0b60e083901d5f611e3b838383612246565b6001600160e01b038516601b0b935060e085901d925090505f611e5f848483612246565b905060ff821180611e70575060ff81115b15611e8e57604051631e4e01d760e21b815260040160405180910390fd5b60081b179450611e049350505050565b600282511015611deb57604051630f16066b60e41b815260040160405180910390fd5b5f60608060ff851180611ed4575060ff84115b15611efc57604051639b0f326160e01b81526004810186905260248101859052604401610ce9565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b60605f611f4f83612288565b90505f611f5d826020612641565b9050606060405190508160200181016040528281526020850160208651028101602083015b81831015611fa557602083515102806020855101835e6020939093019201611f82565b50919695505050505050565b61203e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b815260200184815260200185815260200160046001600160401b038111156120c3576120c36124b8565b6040519080825280602002602001820160405280156120ec578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f01601f19168281528083018252835161ffff191681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050611d1b565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611cee575060019250929050565b5f5f19820361219f5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f6122548686866122d1565b915091508061227f5760405162bc8ecf60e31b81526004810187905260248101869052604401610ce9565b50949350505050565b5f60208201602083510281015b808210156122ca5781515192830192808410156122be57634e487b715f5260116020526024601cfd5b50602082019150612295565b5050919050565b5f805f8512156122fe57604051634a7d166b60e01b81526004810186905260248101859052604401610ce9565b845f0361231057505f90506001611c16565b8460ff841685018581121561234b5760405163c849483b60e01b8152600481018890526024810187905260ff86166044820152606401610ce9565b5f805f83121561239757604c1983121561236e575f809550955050505050611c16565b825f03600a0a91508184816123855761238561260e565b0495505084029091149150611c169050565b5f83131561243057604d8313156123d45760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b82600a0a9150815f19816123ea576123ea61260e565b0484111561241e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610ce9565b5091909102925060019150611c169050565b8360019550955050505050611c16565b612448612658565b565b5f6020828403121561245a575f80fd5b81356001600160e01b031981168114612471575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124716020830184612478565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156124dc575f80fd5b81356001600160401b03808211156124f2575f80fd5b818401915084601f830112612505575f80fd5b813581811115612517576125176124b8565b604051601f8201601f19908116603f0116810190838211818310171561253f5761253f6124b8565b81604052828152876020848701011115612557575f80fd5b826020860160208301375f928101602001929092525095945050505050565b83151581525f6020606060208401526125926060840186612478565b8381036040850152845180825260208087019201905f5b818110156125c5578351835292840192918401916001016125a9565b509098975050505050505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156101d1576101d16125d3565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261263c57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176101d1576101d16125d3565b634e487b7160e01b5f52605160045260245ffdfe0101180010a00082000100010480300038412a001810000010020004200004002038038ff54905cc66c61ef3dcab071659220a895f0b15fec9301a02e0920d5bfe561c21609201e959460c19742710844db209bcd3bf1d9893761f1049db12b93430190ae9a00bf82a7806c138f40e28083f0842ef2104d561fd1315a13316716a6118d260cc117b9bfc0fec7ade14cba28900a422961b6b14a520792bdb02e0f147175655891d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d441d6d1e09175a17771786179517a417b417c417d317e317f21802181218211831184018501860187018e118f018ff190f191f192f193f194e195d196d197d198d199d187f1898"; /// @dev What MUST already be on a network before this release can be /// broadcast there: an address, and the runtime code that belongs at it. diff --git a/src/lib/LibRaindexSubParser.sol b/src/lib/LibRaindexSubParser.sol index 3e86d0e4ed..99c59a71be 100644 --- a/src/lib/LibRaindexSubParser.sol +++ b/src/lib/LibRaindexSubParser.sol @@ -441,7 +441,7 @@ library LibRaindexSubParser { returns (bool, bytes memory, bytes32[] memory) { uint256 column = uint256(OperandV2.unwrap(operand)) & 0xFF; - uint256 row = (uint256(OperandV2.unwrap(operand)) >> 8) & 0xFF; + uint256 row = uint256(OperandV2.unwrap(operand)) >> 8; //slither-disable-next-line unused-return return LibSubParse.subParserContext(CONTEXT_SIGNED_CONTEXT_START_COLUMN + column, row); } diff --git a/test/concrete/parser/RaindexV6SubParser.routingTokenDecimalsAndMasks.t.sol b/test/concrete/parser/RaindexV6SubParser.routingTokenDecimalsAndMasks.t.sol index 02bff5b6f9..e720f24268 100644 --- a/test/concrete/parser/RaindexV6SubParser.routingTokenDecimalsAndMasks.t.sol +++ b/test/concrete/parser/RaindexV6SubParser.routingTokenDecimalsAndMasks.t.sol @@ -6,26 +6,13 @@ import {Test} from "forge-std-1.17.0/src/Test.sol"; import {OperandV2} from "rainlang-interface-0.2.13/src/interface/ISubParserV4.sol"; import {OPCODE_CONTEXT} from "rainlang-interface-0.2.13/src/interface/IInterpreterV4.sol"; import {ContextGridOverflow} from "rainlang-0.2.26/src/error/ErrSubParse.sol"; -import {LibSubParse} from "rainlang-0.2.26/src/lib/parse/LibSubParse.sol"; import {LibRaindexSubParser} from "../../../src/lib/LibRaindexSubParser.sol"; +import {CONTEXT_SIGNED_CONTEXT_START_COLUMN} from "../../../src/lib/LibRaindex.sol"; /// @title RaindexV6SubParserRoutingTokenDecimalsAndMasksTest -/// @notice Pins routing that the main `RaindexV6SubParser.routing.t.sol` suite -/// leaves underconstrained, all against FRESH-compiled source (the -/// `LibRaindexSubParser.subParser*` functions are called directly, so no etched -/// pointers / regen are involved and any source-constant change is observed): -/// -/// 1. The absolute (column, row) of `subParserWithdrawTokenDecimals` and -/// `subParserDepositTokenDecimals`. The word-parser-wiring suite only pins -/// their slots RELATIVELY (pointer inequalities), so an absolute -/// (column, row) shift that lands on a still-distinct pointer survives there. -/// -/// 2. The `& 0xFF` ROW mask in `subParserSignedContext`. The operand row is -/// `(operand >> 8) & 0xFF`. Because `LibSubParse.subParserContext` REVERTS -/// `ContextGridOverflow` when row > 255, dropping the mask turns a wide -/// operand from a successful in-range row into a revert. A wide operand whose -/// masked row is a small in-range value discriminates the masked code -/// (returns 4-byte context bytecode) from the unmasked code (reverts). +/// @notice Pins the absolute (column, row) of the deposit and withdraw token +/// decimals words, and that a signed-context row operand wider than a byte +/// reverts instead of wrapping. contract RaindexV6SubParserRoutingTokenDecimalsAndMasksTest is Test { /// @dev Decode the 4-byte context bytecode blob returned by a parser: /// byte 0 = opcode index, byte 1 = io byte, byte 2 = row, byte 3 = column. @@ -51,6 +38,8 @@ contract RaindexV6SubParserRoutingTokenDecimalsAndMasksTest is Test { } /// deposit-token-decimals routes to the deposit column (5), row 4. + /// The wiring suite pins this via pointer equality to withdraw-target-amount; + /// this is the direct (column, row) assertion as a self-contained anchor. function testRouteDepositTokenDecimalsAbsolute() external pure { (bool success, bytes memory bytecode,) = LibRaindexSubParser.subParserDepositTokenDecimals(0, 0, OperandV2.wrap(0)); @@ -60,37 +49,15 @@ contract RaindexV6SubParserRoutingTokenDecimalsAndMasksTest is Test { assertEq(row, 4, "deposit-token-decimals row is 4"); } - /// The signed-context ROW is `(operand >> 8) & 0xFF`. An operand of - /// `0x010000` has low byte 0 (column offset 0 -> column 8) and `>> 8` = - /// `0x0100` = 256. WITH the mask the row is `0x0100 & 0xFF` = 0, so the - /// parser succeeds and returns (column 8, row 0). WITHOUT the mask the row is - /// 256, which exceeds uint8 and reverts `ContextGridOverflow(8, 256)`. This - /// asserts the masked, non-reverting outcome, so dropping the row mask flips - /// success into a revert and fails the test. - function testSignedContextRowMaskKeepsRowInRange() external pure { - (bool success, bytes memory bytecode,) = - LibRaindexSubParser.subParserSignedContext(0, 0, OperandV2.wrap(bytes32(uint256(0x010000)))); - assertTrue(success, "parser must succeed (row mask keeps row in range)"); - (uint8 row, uint8 column) = decode(bytecode); - assertEq(column, 8, "column is signed-context start (8) + low byte 0"); - assertEq(row, 0, "row is (0x010000 >> 8) & 0xFF = 0"); - } - - /// Confirms the discriminator above is genuine: the SAME wide operand, with - /// the row mask DROPPED (`>> 8` without `& 0xFF`), drives the row to 256 and - /// `LibSubParse.subParserContext` reverts `ContextGridOverflow(8, 256)`. This - /// documents the exact revert the production mask prevents, so the pairing of - /// these two tests pins the mask: removing it makes the happy test above - /// revert with this very selector/args. - function testSignedContextUnmaskedRowWouldOverflow() external { - uint256 column = uint256(0x010000) & 0xFF; // low byte 0 - uint256 unmaskedRow = uint256(0x010000) >> 8; // 256 - vm.expectRevert(abi.encodeWithSelector(ContextGridOverflow.selector, column + 8, unmaskedRow)); - this.callContext(column + 8, unmaskedRow); + /// A signed-context row wider than a byte reverts rather than wrapping onto + /// another row. + function testSignedContextWideRowReverts() external { + vm.expectRevert(abi.encodeWithSelector(ContextGridOverflow.selector, CONTEXT_SIGNED_CONTEXT_START_COLUMN, 256)); + this.callSignedContext(OperandV2.wrap(bytes32(uint256(0x010000)))); } /// @dev External wrapper so `vm.expectRevert` can catch the library revert. - function callContext(uint256 column, uint256 row) external pure returns (bool, bytes memory, bytes32[] memory) { - return LibSubParse.subParserContext(column, row); + function callSignedContext(OperandV2 operand) external pure returns (bool, bytes memory, bytes32[] memory) { + return LibRaindexSubParser.subParserSignedContext(0, 0, operand); } } diff --git a/test/concrete/parser/RaindexV6SubParser.signers.t.sol b/test/concrete/parser/RaindexV6SubParser.signers.t.sol index eac5ffeddd..0170ab809f 100644 --- a/test/concrete/parser/RaindexV6SubParser.signers.t.sol +++ b/test/concrete/parser/RaindexV6SubParser.signers.t.sol @@ -4,10 +4,12 @@ pragma solidity =0.8.25; import {StackAllocationMismatch} from "rainlang-0.2.26/src/error/ErrIntegrity.sol"; import {ExpectedOperand, UnexpectedOperandValue} from "rainlang-0.2.26/src/error/ErrParse.sol"; +import {ContextGridOverflow} from "rainlang-0.2.26/src/error/ErrSubParse.sol"; import {OpTest, StackItem} from "rainlang-0.2.26/src/../test/abstract/OpTest.sol"; import {Strings} from "@openzeppelin-contracts-5.7.0/utils/Strings.sol"; import {LibRaindexSubParserContextFixture} from "test/util/fixture/LibRaindexSubParserContextFixture.sol"; import {LibRaindexDeploy} from "../../../src/lib/deploy/LibRaindexDeploy.sol"; +import {CONTEXT_SIGNED_CONTEXT_SIGNERS_COLUMN} from "../../../src/lib/LibRaindex.sol"; import {LibEtchRaindex} from "test/util/lib/LibEtchRaindex.sol"; contract RaindexV6SubParserSignersTest is OpTest { @@ -72,4 +74,17 @@ contract RaindexV6SubParserSignersTest is OpTest { checkUnhappyParse2(rainlang, abi.encodeWithSelector(StackAllocationMismatch.selector, 2, 1)); } + + /// A signer index past the last context row reverts rather than wrapping + /// onto another signer. + function testSubParserContextSignerUnhappyIndexOverflow() external { + address subParserAddress = LibRaindexDeploy.SUB_PARSER_DEPLOYED_ADDRESS; + + bytes memory rainlang = + bytes(string.concat("using-words-from ", subParserAddress.toHexString(), " _: signer<256>();")); + + checkUnhappyParse( + rainlang, abi.encodeWithSelector(ContextGridOverflow.selector, CONTEXT_SIGNED_CONTEXT_SIGNERS_COLUMN, 256) + ); + } }