From c9c149c9ed95c99b336b825989727225fd1a7768 Mon Sep 17 00:00:00 2001 From: David Meister Date: Sat, 13 Jun 2026 12:21:05 +0000 Subject: [PATCH 1/4] clear3: run NegativeBounty guard before any vault settlement (#2671) In clear3 the NegativeBounty guard ran after vault settlement (recordVaultOutput / recordVaultInput / pushVaultZeroInput). A spread with a vault-0 input against an orderbook with zero ambient balance reverts ERC20InsufficientBalance from the vault-0 push before the explicit guard, so the opaque ERC20 error pre-empts NegativeBounty(). Move the guard to immediately after calculateClearStateChange, before any settlement, so a negative bounty always reverts with the explicit NegativeBounty() error. Behaviour is otherwise unchanged: the same spread that reverted before still reverts, just with the typed error. Item 2 of #2671; split out of the bundled #2692 for independent review and re-implemented on current main (post-#2701). Adds testClearNegativeBountyVaultZeroRevertsNegativeBounty to RaindexV6.takeOrder.vaultZeroInput.t.sol: both orders take and give via vault 0 against a zero-ambient-balance orderbook and cross into a -0.5 bounty; the guard must revert NegativeBounty() ahead of the vault-0 push. Regenerated RaindexV6 pointers + dependent arb/flash-borrower pointers + test_fixtures ABI for the new bytecode. Co-Authored-By: Claude Opus 4.8 --- crates/test_fixtures/abis/RaindexV6.json | 2 +- src/concrete/raindex/RaindexV6.sol | 18 +++++---- ...ricPoolRaindexV6ArbOrderTaker.pointers.sol | 6 +-- ...ricPoolRaindexV6FlashBorrower.pointers.sol | 6 +-- src/generated/RaindexV6.pointers.sol | 8 ++-- ...ocessorRaindexV6ArbOrderTaker.pointers.sol | 6 +-- .../RaindexV6.takeOrder.vaultZeroInput.t.sol | 40 +++++++++++++++++++ 7 files changed, 65 insertions(+), 21 deletions(-) diff --git a/crates/test_fixtures/abis/RaindexV6.json b/crates/test_fixtures/abis/RaindexV6.json index 54621ad6fe..2ca2adc365 100644 --- a/crates/test_fixtures/abis/RaindexV6.json +++ b/crates/test_fixtures/abis/RaindexV6.json @@ -2352,7 +2352,7 @@ } ], "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615eed806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b6101076101023660046148e8565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614950565b6102ba565b61010761013d3660046149bb565b5f9081526020819052604090205460011490565b61016461015f3660046149f1565b6103c2565b005b610179610174366004614a56565b610521565b604051908152602001610113565b610107610195366004614a94565b610535565b6101646101a83660046149f1565b610635565b6101796101bb366004614b2b565b6107c8565b6101d36101ce366004614b5c565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614b8e565b610fc9565b61020e610209366004614bd8565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c0f565b6113ce565b6040516101139190614c7c565b610164610259366004614c0f565b6114b4565b61017961026c366004614cde565b61150e565b61016461027f366004615150565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9a565b6102d06020850185614b2b565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b2b565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661520a565b611ab5565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615360565b60405180910390a16103a4818585611ae4565b506103bb60015f80516020615ecd83398151915255565b9392505050565b6103ca611a9a565b3385856103d8838383611b1b565b6103e2865f611b4c565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b86565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c06565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615424565b611cf6565b5050505050505061051a60015f80516020615ecd83398151915255565b5050505050565b5f61052d848484611ec4565b949350505050565b5f61054a6001600160a01b038616878661204e565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b906004016154e4565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615528565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615553565b6001600160a01b038a16929190612083565b5060019695505050505050565b61063d611a9a565b33858561064b838383611b1b565b5f8080806106598a82611b4c565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec4565b90506106a58b826120bf565b94506106b3338e8e886120db565b90935091505f6106c4338f88612152565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615424565b50505050505050505061051a60015f80516020615ecd83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615528565b5f8061083a611a9a565b6108476080840184615566565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614810565b61087861483c565b5f60405180606001604052808780608001906108949190615566565b5f8181106108a4576108a46155ac565b90506020028101906108b691906155c0565b6108c090806155de565b6108ce9060408101906155f2565b6108db60808b018b615566565b5f8181106108eb576108eb6155ac565b90506020028101906108fd91906155c0565b60200135818110610910576109106155ac565b6109269260206040909202019081019150614b2b565b6001600160a01b031681526020016109416080890189615566565b5f818110610951576109516155ac565b905060200281019061096391906155c0565b61096d90806155de565b61097b9060608101906155f2565b61098860808b018b615566565b5f818110610998576109986155ac565b90506020028101906109aa91906155c0565b604001358181106109bd576109bd6155ac565b6109d39260206040909202019081019150614b2b565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615566565b604080516001909201602002820181528501519093505f9250610a1d915082611b4c565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615566565b905081108015610a6357506040840151610a63905f611b4c565b15610e7157610a7560808a018a615566565b82818110610a8557610a856155ac565b9050602002810190610a9791906155c0565b610aa090615638565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ac565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ac565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121bb565b5f610b6586611ab5565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d08565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061222d565b90505f610c458c604001358360600151611b4c90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b4c565b1580610cc257506060820151610cc0905f611b4c565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156ce565b15610d6e576040808a015190850151610d40916120bf565b6060850151909250610d5290836126f2565b60408a0151909150610d64908361273f565b60408a0152610dd5565b5f610d8a856040015186606001516126f290919063ffffffff16565b9050610da38a60400151826120bf90919063ffffffff16565b9150610dbc85606001518361276f90919063ffffffff16565b60408b0151909350610dce908361273f565b60408b0152505b610ddf8c8261279f565b9b50610deb8d8361279f565b9c50610df782856127cf565b610e018185612890565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e3694939291906157f6565b60405180910390a187516001018089526020028801849052610e5784612a3c565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156ce565b610e8d5786610e8f565b875b9050610e9c818a35612c7f565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612152565b505f9050610ee560a08a018a6158e0565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f6158e0565b6040518763ffffffff1660e01b8152600401610f35969594939291906154e4565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611b86565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ac565b6020026020010151612cb9565b600101610f75565b505050505050610fc460015f80516020615ecd83398151915255565b915091565b5f610fd2611a9a565b5f61102f61102a610fe38780615923565b610ff19060408101906158e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612dc392505050565b612e34565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f60208601866155f2565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad60408601866155f2565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615923565b6110f590615937565b815260200187806020019061110a91906155f2565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615942565b81526020019060010190611129565b505050918352505060200161116d60408901896155f2565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615942565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ab5565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061595c565b60405180910390a15f61124a60a08a018a6158e0565b905011156112e65761129b61126260a08a018a6158e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e4e92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c6158e0565b6040516112dd9493929190615983565b60405180910390a15b6112f1828888611ae4565b93505050506103bb60015f80516020615ecd83398151915255565b5f80808061132661131d86806155de565b61032c9061520a565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a86806155de565b6113639061520a565b866020013587604001356121bb565b5f6113b061138087806155de565b6113899061520a565b60208801356040890135336113a160608c018c615566565b6113aa916159b5565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d08565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ac565b905060200281019061146091906158e0565b85604051602001611473939291906159d4565b604051602081830303815290604052612e79565b838281518110611499576114996155ac565b6020908102919091010152600101611430565b505092915050565b6114bc611a9a565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615424565b61150a60015f80516020615ecd83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115769190615528565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611a9a565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ac565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ac565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ac565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ac565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ac565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ac565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ab5565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a84565b5f6117b186611ab5565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a84565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d94939291906159f7565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d08565b90505f6118ad8383612f19565b90506118bc815f0151846127cf565b6118ca8160200151836127cf565b6118d8816040015184612890565b6118e6816060015183612890565b6118ef83612cb9565b6118f882612cb9565b606081015181515f9161190b919061273f565b90505f6119298360400151846020015161273f90919063ffffffff16565b9050611935825f612c7f565b806119455750611945815f612c7f565b1561196357604051630d86822160e01b815260040160405180910390fd5b611997338b606001518a6020013581518110611981576119816155ac565b60200260200101515f01518a6080013585611c06565b50506119cd338a606001518a60600135815181106119b7576119b76155ac565b60200260200101515f01518a60a0013584611c06565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3683612a3c565b611a3f82612a3c565b80516001600160e01b0316158015611a62575060208101516001600160e01b0316155b15611a80576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615ecd83398151915255565b611aa2612f67565b60025f80516020615ecd83398151915255565b5f81604051602001611ac79190615a73565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1690611b0c906104d6565b6104f88385615424565b505050565b80611b16576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7a84848484612f98565b12979650505050505050565b5f805f611b928561306c565b9050611b9e845f612c7f565b15611bbc57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc886846130d2565b9150915080611bdd57611bda82615a85565b91505b8115611bf857611bf86001600160a01b038816893085612083565b50925090505b935093915050565b5f80611c128382612c7f565b15611c335760405163793a8f5560e01b815260048101849052602401610316565b83611c5157611c43868685612152565b505f9250829150611ced9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8b828661279f565b9050611c97815f612c7f565b15611cb85760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eba57868181518110611d5d57611d5d6155ac565b602002602001015193505f845f015160400151511115611eb2575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd58d8a602001516130ff565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e009190615af5565b5f60405180830381865afa158015611e1a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e419190810190615bed565b9150505f81511115611eb05784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e82908a908590600401615ca3565b5f604051808303815f87803b158015611e99575f80fd5b505af1158015611eab573d5f803e3d5ffd5b505050505b505b600101611d42565b5050505050505050565b5f8115611efe57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f08846133e1565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8091908716906370a0823190602401602060405180830381865afa158015611f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7a9190615528565b836133ed565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611fff919088169063dd62ed3e90604401602060405180830381865afa158015611fd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff99190615528565b846133ed565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120449061203e84846120bf565b9061279f565b93505050506103bb565b61205b838383600161342d565b611b1657604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b61209184848484600161348f565b6120b957604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ca8383612c7f565b6120d457816103bb565b5090919050565b5f806120e78382612c7f565b156121085760405163793a8f5560e01b815260048101849052602401610316565b8361211857611c43868685611b86565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8b828661273f565b5f805f61215e8561306c565b905061216a845f612c7f565b1561218857604051632d1671a360e11b815260040160405180910390fd5b5f61219385836130d2565b50905080156121b0576121b06001600160a01b038716888361204e565b969095509350505050565b826060015181815181106121d1576121d16155ac565b60200260200101515f01516001600160a01b0316836040015183815181106121fb576121fb6155ac565b60200260200101515f01516001600160a01b031603611b1657604051631cd2f1c760e21b815260040160405180910390fd5b6122356148a3565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122505790505090506122a56122738a611ab5565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122ba576122ba6155ac565b60200260200101819052505f6122ef8a604001518a815181106122df576122df6155ac565b60200260200101515f01516133e1565b90505f6123418b5f01518c604001518c8151811061230f5761230f6155ac565b60200260200101515f01518d604001518d81518110612330576123306155ac565b602002602001015160200151611ec4565b90506123d08b604001518b8151811061235c5761235c6155ac565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d8151811061238e5761238e6155ac565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b836001600303815181106123e6576123e66155ac565b602002602001018190525050505f61240d8a6060015189815181106122df576122df6155ac565b90505f61244e8b5f01518c606001518b8151811061242d5761242d6155ac565b60200260200101515f01518d606001518c81518110612330576123306155ac565b905061249b8b606001518a81518110612469576124696155ac565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c8151811061238e5761238e6155ac565b836001600403815181106124b1576124b16155ac565b602002602001018190525050506124c881866130ff565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161252887305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561256057612560614d08565b604051908082528060200260200182016040528015612589578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125af9190615af5565b5f60405180830381865afa1580156125c9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125f09190810190615bed565b9150915060028251101561261c578151604051630fbb8e5560e21b815260040161031691815260200190565b602082015160408301518551612670908790600490811061263f5761263f6155ac565b6020026020010151600381518110612659576126596155ac565b6020026020010151826120bf90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126a2576126a26155ac565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612722868686866134fc565b915091505f612731838361361b565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613668565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613692565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613bcf565b8181608001516004815181106127e7576127e76155ac565b6020026020010151600481518110612801576128016155ac565b6020026020010181815250506120b9815f01515f0151826080015160048151811061282e5761282e6155ac565b60200260200101515f81518110612847576128476155ac565b60200260200101515f1c8360800151600481518110612868576128686155ac565b6020026020010151600281518110612882576128826155ac565b6020026020010151856120db565b8181608001516003815181106128a8576128a86155ac565b60200260200101516004815181106128c2576128c26155ac565b6020908102919091010152805151608082015180515f919060039081106128eb576128eb6155ac565b60200260200101515f81518110612904576129046155ac565b60200260200101515f1c90505f8360800151600381518110612928576129286155ac565b6020026020010151600281518110612942576129426155ac565b602002602001015190505f801b81036129e95761295f855f612c7f565b156129805760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129b7908661279f565b6001600160a01b038085165f9081526001602090815260408083209387168352928152828220858352905220556129f8565b6129f583838388611c06565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a2d929190615cbb565b60405180910390a15050505050565b60c08101515115612ab6578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612a88929091600401615ca3565b5f604051808303815f87803b158015612a9f575f80fd5b505af1158015612ab1573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b0c8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b4c57612b4c614d08565b604051908082528060200260200182016040528015612b75578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612ba5578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612bc59190615af5565b5f60405180830381865afa158015612bdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c069190810190615bed565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c4e918590600401615ca3565b5f604051808303815f87803b158015612c65575f80fd5b505af1158015612c77573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cad84848484612f98565b13979650505050505050565b5f8160800151600381518110612cd157612cd16155ac565b6020026020010151600281518110612ceb57612ceb6155ac565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d1c57612d1c6155ac565b60200260200101515f81518110612d3557612d356155ac565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dba838383612152565b50505050505050565b6060604082511015612de257505060408051602081019091525f815290565b5f60208301519050602060408451612dfa91906159c1565b612e049190615cf0565b811115612e2057505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e4457505f919050565b50602001515f1a90565b612e5781613ccd565b612e765780604051630c89984b60e31b81526004016103169190615d0f565b50565b60605f612e868484613cfb565b9050808015612ea757505f3d1180612ea757505f846001600160a01b03163b115b15612ebc57612eb4613d0e565b9150506102b4565b8015612ee657604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612ef957612ef4613d27565b612f12565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f468383613d32565b82526040820152612f578284613d32565b6020830152606082015292915050565b5f80516020615ecd83398151915254600203612f9657604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fbd5786859250925050611ced565b505f85841315612fd1575092949193919260015b8386035f8112604c8213178015613004578215612ff6575f8994509450505050611ced565b885f94509450505050611ced565b600a82900a8981028a82828161301c5761301c615cdc565b0514613048578415613038575f8b965096505050505050611ced565b8a5f965096505050505050611ced565b841561305d578896509450611ced9350505050565b9550879450611ced9350505050565b5f805f61307884613d9b565b9092509050600182600381111561309157613091615d21565b141580156130b057505f8260038111156130ad576130ad615d21565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d35565b5f806001600160e01b038416601b0b60e085901d6130f1828287613e28565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561311c5761311c614d08565b604051908082528060200260200182016040528015613145578160200160208202803683370190505b5090505f80845111613157575f61315d565b83516001015b85516001010190505f8167ffffffffffffffff81111561317f5761317f614d08565b6040519080825280602002602001820160405280156131b257816020015b606081526020019060019003908161319d5790505b5090505f6131d6604080516002815233602082015230818301526060810190915290565b8282815181106131e8576131e86155ac565b60200260200101819052505f5b8751811015613245578180600101925050878181518110613218576132186155ac565b6020026020010151838381518110613232576132326155ac565b60209081029190910101526001016131f5565b508551156133d757808060010191505083828281518110613268576132686155ac565b60200260200101819052505f5b86518110156133d557613324878281518110613293576132936155ac565b60200260200101515f01516133016132cf8a85815181106132b6576132b66155ac565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613313576133136155ac565b602002602001015160400151613f8e565b61334457604051630a57f30960e31b815260048101829052602401610316565b868181518110613356576133566155ac565b60200260200101515f01516001600160a01b03165f1b85828151811061337e5761337e6155ac565b60200260200101818152505081806001019250508681815181106133a4576133a46155ac565b6020026020010151602001518383815181106133c2576133c26155ac565b6020908102919091010152600101613275565b505b5095945050505050565b5f805f61307884613ffe565b5f805f805f6133fc878761405d565b9250925092505f8061340e85856140a0565b915091508183801561341d5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316613483578383151615613477573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166134eb5783831516156134df573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613514575f92505f9150613611565b61351e8487615d6e565b91505f61352a88614178565b90505f61353687614178565b90505f61354383836141a6565b5090505f6f0785ee10d5da46d900f436a000000000821115613578576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561359957670de0b6b3a7640000820491506012015b633b9aca008211156135b257633b9aca00820491506009015b6127108211156135c757612710820491506004015b81156135db57600a820491506001016135c7565b6135e58187615d6e565b95506136078b8a61360187876135fc87600a615e6d565b6141c2565b8961428e565b9097509550505050505b5094509492505050565b5f805f61362885856140a0565b9150915080158015613638575081155b1561366057604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f80613674848461432e565b909450925061368586868686613bcf565b9150915094509492505050565b5f80835f036136be57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136cf57505f905080611ced565b5f805f806136dd8a8a614383565b919b50995091506136ee8888614383565b919950975090505f6136ff8b614178565b90505f61370b8a614178565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613ad057841561376257507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aa8565b6f4b3b4ca85a86c47a098a22400000000083101561388e57678ac7230489e800008310156137f2576402540be4008310156137c057620186a08310156137b05750620186a090506005613a69565b506402540be4009050600a613a69565b655af3107a40008310156137df5750655af3107a40009050600e613a69565b50678ac7230489e8000090506013613a69565b6b204fce5e3e250261100000008310156138445769152d02c7e14af680000083101561382d575069152d02c7e14af680000090506017613a69565b506b204fce5e3e250261100000009050601c613a69565b6d314dc6448d9338c15b0a0000000083101561387357506d314dc6448d9338c15b0a0000000090506021613a69565b506f4b3b4ca85a86c47a098a22400000000090506026613a69565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139865773af298d050e4395d69670b12b7f41000000000000831015613921577172cb5bd86321e38cb6ce6682e8000000000083101561390257507172cb5bd86321e38cb6ce6682e800000000009050602b613a69565b5073af298d050e4395d69670b12b7f4100000000000090506030613a69565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613962575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a69565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a69565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a1c577a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000008310156139f457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a69565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a69565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a6957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613a7e57600a820491505f1901613a69565b815f03613aa8576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613ad0576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613ae757808d039c50613b25565b600160ff1b9c90038c015f811315613b2557806001600160ff1b03038b13613b1257998a0199613b25565b5f80995099505050505050505050611ced565b5f808e128015613b3457505f8c135b15613b5557600160ff1b8e01808d13613b4d575f613b51565b808d035b9150505b8b818f01039750613b728f8e613b6c8887896141c2565b8b61428e565b90995097505f811315613bbc57604c811315613b9c575f809a509a50505050505050505050611ced565b80600a0a8981613bae57613bae615cdc565b059850885f03613bbc575f97505b50969850949650611ced95505050505050565b5f8085158415178015613bfb57865f03613bef5784849250925050611ced565b86869250925050611ced565b613c0587876145dd565b9097509550613c1485856145dd565b909550935085841315613c28579395929492935b838603604c811115613c41578787935093505050611ced565b80600a0a8681613c5357613c53615cdc565b0595505086850180881860ff90811c151589881890911c15168015613cbc57876001600160ff1b0303613ca35760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cc0565b8198505b5096979596505050505050565b5f600882511015613cdf57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d4f846060015185604001516126f290919063ffffffff16565b915083604001519050613d6f836040015183611b4c90919063ffffffff16565b156130f85782604001519150613d9284606001518361276f90919063ffffffff16565b90509250929050565b5f80613da5614626565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613dfb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e1f9190615e78565b91509150915091565b5f805f851215613e5557604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e6757505f90506001611bfe565b8460ff8416850185811215613e995760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613ee557604c19831215613ebc575f809550955050505050611bfe565b825f03600a0a9150818481613ed357613ed3615cdc565b0495505084029091149150611bfe9050565b5f831315613f7e57604d831315613f225760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f3857613f38615cdc565b04841115613f6c5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfe9050565b8360019550955050505050611bfe565b5f836001600160a01b03163b5f03613fec575f80613fac85856146b1565b5090925090505f816003811115613fc557613fc5615d21565b148015613fe35750856001600160a01b0316826001600160a01b0316145b925050506103bb565b613ff78484846146f7565b90506103bb565b5f80614008614626565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613dfb573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b0386111561408f57600a860460018201600a88065f1493509350935050614099565b8593509150600190505b9250925092565b5f601b83900b8314838382614104577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156140e457620186a0860595506005850194505b8586601b0b146140ff57600a860595508460010194506140e4565b61411a565b855f0361411a57505f9250600191506130f89050565b848560030b1461415d575f85121561413a57505f92508291506130f89050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561419d57600160ff1b82036141975750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141cf86866141a6565b91509150815f036141f3578381816141e9576141e9615cdc565b04925050506103bb565b8382106142245760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561430a576001600160ff1b038411156142f7576142bb6001600160ff1b036001615553565b84036142cf5750600160ff1b905081611ced565b6142da600a85615cf0565b6142e390615eb8565b6142ee846001615d6e565b91509150611ced565b61430084615eb8565b8391509150611ced565b6001600160ff1b03841115614324576142e3600a85615cf0565b5082905081611ced565b5f80600160ff1b8403614379576001600160ff1b03830361436c5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361439b57505f91508190506001614099565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f03614588576f4b3b4ca85a86c47a098a22400000000085051580156143fd57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561441e576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561446657507f80000000000000000000000000000000000000000000000000000000000000138412155b1561447f57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144cb57507f800000000000000000000000000000000000000000000000000000000000000a8412155b156144e1576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561453057507f80000000000000000000000000000000000000000000000000000000000000028412155b15614546576064850294506002840393506144e1565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561457657506001600160ff1b018412155b1561458857600a850294506001840393505b600a808602908105861480156145a557506001600160ff1b018512155b156145b4578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6145ec8787614383565b9250925092508061461a576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061467d575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612f96576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f83516041036146e8576020840151604085015160608601515f1a6146da88828585614748565b955095509550505050614099565b505081515f9150600290614099565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561478157505f91506003905082614806565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147d2573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166147fd57505f925060019150829050614806565b92505f91508190505b9450945094915050565b604051806080016040528061482361483c565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b0316815260200161488a60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148b661483c565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f602082840312156148f8575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261491f575f80fd5b50813567ffffffffffffffff811115614936575f80fd5b6020830191508360208260051b85010111156130f8575f80fd5b5f805f60408486031215614962575f80fd5b833567ffffffffffffffff80821115614979575f80fd5b9085019060a0828803121561498c575f80fd5b909350602085013590808211156149a1575f80fd5b506149ae8682870161490f565b9497909650939450505050565b5f602082840312156149cb575f80fd5b5035919050565b6001600160a01b0381168114612e76575f80fd5b80356141a1816149d2565b5f805f805f60808688031215614a05575f80fd5b8535614a10816149d2565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a39575f80fd5b614a458882890161490f565b969995985093965092949392505050565b5f805f60608486031215614a68575f80fd5b8335614a73816149d2565b92506020840135614a83816149d2565b929592945050506040919091013590565b5f805f805f60808688031215614aa8575f80fd5b8535614ab3816149d2565b94506020860135614ac3816149d2565b935060408601359250606086013567ffffffffffffffff80821115614ae6575f80fd5b818801915088601f830112614af9575f80fd5b813581811115614b07575f80fd5b896020828501011115614b18575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b3b575f80fd5b81356103bb816149d2565b5f60c08284031215614b56575f80fd5b50919050565b5f60208284031215614b6c575f80fd5b813567ffffffffffffffff811115614b82575f80fd5b61052d84828501614b46565b5f805f60408486031215614ba0575f80fd5b833567ffffffffffffffff80821115614bb7575f80fd5b614bc387838801614b46565b945060208601359150808211156149a1575f80fd5b5f60208284031215614be8575f80fd5b813567ffffffffffffffff811115614bfe575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c20575f80fd5b823567ffffffffffffffff811115614c36575f80fd5b614c428582860161490f565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cd157603f19888603018452614cbf858351614c4e565b94509285019290850190600101614ca3565b5092979650505050505050565b5f8060408385031215614cef575f80fd5b8235614cfa816149d2565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b60405290565b6040805190810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b60405160a0810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b604051601f8201601f1916810167ffffffffffffffff81118282101715614db457614db4614d08565b604052919050565b5f82601f830112614dcb575f80fd5b813567ffffffffffffffff811115614de557614de5614d08565b614df8601f8201601f1916602001614d8b565b818152846020838601011115614e0c575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e38575f80fd5b614e40614d1c565b90508135614e4d816149d2565b81526020820135614e5d816149d2565b6020820152604082013567ffffffffffffffff811115614e7b575f80fd5b614e8784828501614dbc565b60408301525092915050565b5f67ffffffffffffffff821115614eac57614eac614d08565b5060051b60200190565b5f60408284031215614ec6575f80fd5b614ece614d45565b90508135614edb816149d2565b808252506020820135602082015292915050565b5f82601f830112614efe575f80fd5b81356020614f13614f0e83614e93565b614d8b565b8083825260208201915060208460061b870101935086841115614f34575f80fd5b602086015b84811015614f5957614f4b8882614eb6565b835291830191604001614f39565b509695505050505050565b5f60a08284031215614f74575f80fd5b614f7c614d68565b9050614f87826149e6565b8152602082013567ffffffffffffffff80821115614fa3575f80fd5b614faf85838601614e28565b60208401526040840135915080821115614fc7575f80fd5b614fd385838601614eef565b60408401526060840135915080821115614feb575f80fd5b50614ff884828501614eef565b6060830152506080820135608082015292915050565b5f61501b614f0e84614e93565b8381529050602080820190600585811b850187811115615039575f80fd5b855b8181101561512657803567ffffffffffffffff8082111561505a575f80fd5b908801906060828c03121561506d575f80fd5b615075614d1c565b8235615080816149d2565b81528287013582811115615092575f80fd5b8301601f81018d136150a2575f80fd5b80356150b0614f0e82614e93565b81815290881b8201890190898101908f8311156150cb575f80fd5b928a01925b828410156150e95783358252928a0192908a01906150d0565b848b01525060409150508381013583811115615103575f80fd5b61510f8e828701614dbc565b91830191909152508752505093830193830161503b565b50505050509392505050565b5f82601f830112615141575f80fd5b6103bb8383356020850161500e565b5f805f805f6101408688031215615165575f80fd5b853567ffffffffffffffff8082111561517c575f80fd5b61518889838a01614f64565b9650602088013591508082111561519d575f80fd5b6151a989838a01614f64565b95506151b88960408a01614b46565b94506101008801359150808211156151ce575f80fd5b6151da89838a01615132565b93506101208801359150808211156151f0575f80fd5b506151fd88828901615132565b9150509295509295909350565b5f6102b43683614f64565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8135615249816149d2565b6001600160a01b039081168452602083013590615265826149d2565b166020840152604082013536839003601e19018112615282575f80fd5b820160208101903567ffffffffffffffff81111561529e575f80fd5b8036038213156152ac575f80fd5b606060408601526152c1606086018284615215565b95945050505050565b5f808335601e198436030181126152df575f80fd5b830160208101925035905067ffffffffffffffff8111156152fe575f80fd5b8060061b36038213156130f8575f80fd5b8183525f60208085019450825f5b85811015615355578135615330816149d2565b6001600160a01b0316875281830135838801526040968701969091019060010161531d565b509495945050505050565b5f6001600160a01b038086168352846020840152606060408401528335615386816149d2565b166060830152602083013536849003605e190181126153a3575f80fd5b60a060808401526153ba610100840185830161523d565b90506153c960408501856152ca565b605f19808685030160a08701526153e184838561530f565b93506153f060608801886152ca565b93509150808685030160c08701525061540a83838361530f565b92505050608084013560e084015280915050949350505050565b5f615431614f0e84614e93565b80848252602080830192508560051b85013681111561544e575f80fd5b855b818110156154d857803567ffffffffffffffff8082111561546f575f80fd5b818901915060408236031215615483575f80fd5b61548b614d45565b823582811115615499575f80fd5b6154a536828601614e28565b82525085830135828111156154b8575f80fd5b6154c436828601615132565b828801525087525050938201938201615450565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261551c60a083018486615215565b98975050505050505050565b5f60208284031215615538575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461553f565b5f808335601e1984360301811261557b575f80fd5b83018035915067ffffffffffffffff821115615595575f80fd5b6020019150600581901b36038213156130f8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155d4575f80fd5b9190910192915050565b5f8235609e198336030181126155d4575f80fd5b5f808335601e19843603018112615607575f80fd5b83018035915067ffffffffffffffff821115615621575f80fd5b6020019150600681901b36038213156130f8575f80fd5b5f60808236031215615648575f80fd5b6040516080810167ffffffffffffffff828210818311171561566c5761566c614d08565b816040528435915080821115615680575f80fd5b61568c36838701614f64565b8352602085013560208401526040850135604084015260608501359150808211156156b5575f80fd5b506156c236828601615132565b60608301525092915050565b5f602082840312156156de575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561535557815180516001600160a01b031688528301518388015260409096019590820190600101615700565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261577d610100850182614c4e565b90506040830151848203604086015261579682826156ed565b915050606083015184820360608601526157b082826156ed565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615355578151875295820195908201906001016157da565b5f6001600160a01b03808716835260206080818501528651608080860152615822610100860182615730565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158be57601f1988830301845284518a815116835289810151878b850152615892888501826157c7565b91890151848303858b01529190506158aa8183614c4e565b968b0196958b019593505050600101615864565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e198436030181126158f5575f80fd5b83018035915067ffffffffffffffff82111561590f575f80fd5b6020019150368190038213156130f8575f80fd5b5f8235605e198336030181126155d4575f80fd5b5f6102b43683614e28565b5f60408284031215615952575f80fd5b6103bb8383614eb6565b6001600160a01b0384168152826020820152606060408201525f6152c16060830184615730565b6001600160a01b0385168152836020820152606060408201525f6159ab606083018486615215565b9695505050505050565b5f6103bb36848461500e565b818103818111156102b4576102b461553f565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a1981840187615730565b90508281036040840152615a2d8186615730565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615730565b5f60018201615a9657615a9661553f565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615ae857601f19868403018952615ad68383516157c7565b98840198925090830190600101615aba565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b2e610100840182614c4e565b9050606084015160808401526080840151601f19808584030160a0860152615b568383615a9d565b925060a08601519150808584030160c0860152615b7383836157c7565b925060c08601519150808584030160e0860152506152c182826157c7565b5f82601f830112615ba0575f80fd5b81516020615bb0614f0e83614e93565b8083825260208201915060208460051b870101935086841115615bd1575f80fd5b602086015b84811015614f595780518352918301918301615bd6565b5f8060408385031215615bfe575f80fd5b825167ffffffffffffffff80821115615c15575f80fd5b818501915085601f830112615c28575f80fd5b81516020615c38614f0e83614e93565b82815260059290921b84018101918181019089841115615c56575f80fd5b948201945b83861015615c7457855182529482019490820190615c5b565b91880151919650909350505080821115615c8c575f80fd5b50615c9985828601615b91565b9150509250929050565b828152604060208201525f61052d60408301846157c7565b6001600160a01b0383168152604060208201525f61052d6040830184615a9d565b634e487b7160e01b5f52601260045260245ffd5b5f82615d0a57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c4e565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d6157634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac61553f565b600181815b80851115615dc757815f1904821115615dad57615dad61553f565b80851615615dba57918102915b93841c9390800290615d92565b509250929050565b5f82615ddd575060016102b4565b81615de957505f6102b4565b8160018114615dff5760028114615e0957615e25565b60019150506102b4565b60ff841115615e1a57615e1a61553f565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e48575081810a6102b4565b615e528383615d8d565b805f1904821115615e6557615e6561553f565b029392505050565b5f6103bb8383615dcf565b5f8060408385031215615e89575f80fd5b825160048110615e97575f80fd5b602084015190925060ff81168114615ead575f80fd5b809150509250929050565b5f600160ff1b82016141975761419761553f56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", + "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f0f806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b61010761010236600461490a565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614972565b6102ba565b61010761013d3660046149dd565b5f9081526020819052604090205460011490565b61016461015f366004614a13565b6103c2565b005b610179610174366004614a78565b610521565b604051908152602001610113565b610107610195366004614ab6565b610535565b6101646101a8366004614a13565b610635565b6101796101bb366004614b4d565b6107c8565b6101d36101ce366004614b7e565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bb0565b610fc9565b61020e610209366004614bfa565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c31565b6113ce565b6040516101139190614c9e565b610164610259366004614c31565b6114b4565b61017961026c366004614d00565b61150e565b61016461027f366004615172565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611abc565b6102d06020850185614b4d565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b4d565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661522c565b611ad7565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615382565b60405180910390a16103a4818585611b06565b506103bb60015f80516020615eef83398151915255565b9392505050565b6103ca611abc565b3385856103d8838383611b3d565b6103e2865f611b6e565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611ba8565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c28565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615446565b611d18565b5050505050505061051a60015f80516020615eef83398151915255565b5050505050565b5f61052d848484611ee6565b949350505050565b5f61054a6001600160a01b0386168786612070565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615506565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c2919061554a565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615575565b6001600160a01b038a169291906120a5565b5060019695505050505050565b61063d611abc565b33858561064b838383611b3d565b5f8080806106598a82611b6e565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ee6565b90506106a58b826120e1565b94506106b3338e8e886120fd565b90935091505f6106c4338f88612174565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615446565b50505050505050505061051a60015f80516020615eef83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b4919061554a565b5f8061083a611abc565b6108476080840184615588565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614832565b61087861485e565b5f60405180606001604052808780608001906108949190615588565b5f8181106108a4576108a46155ce565b90506020028101906108b691906155e2565b6108c09080615600565b6108ce906040810190615614565b6108db60808b018b615588565b5f8181106108eb576108eb6155ce565b90506020028101906108fd91906155e2565b60200135818110610910576109106155ce565b6109269260206040909202019081019150614b4d565b6001600160a01b031681526020016109416080890189615588565b5f818110610951576109516155ce565b905060200281019061096391906155e2565b61096d9080615600565b61097b906060810190615614565b61098860808b018b615588565b5f818110610998576109986155ce565b90506020028101906109aa91906155e2565b604001358181106109bd576109bd6155ce565b6109d39260206040909202019081019150614b4d565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615588565b604080516001909201602002820181528501519093505f9250610a1d915082611b6e565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615588565b905081108015610a6357506040840151610a63905f611b6e565b15610e7157610a7560808a018a615588565b82818110610a8557610a856155ce565b9050602002810190610a9791906155e2565b610aa09061565a565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ce565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ce565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121dd565b5f610b6586611ad7565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d2a565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061224f565b90505f610c458c604001358360600151611b6e90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b6e565b1580610cc257506060820151610cc0905f611b6e565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156f0565b15610d6e576040808a015190850151610d40916120e1565b6060850151909250610d529083612714565b60408a0151909150610d649083612761565b60408a0152610dd5565b5f610d8a8560400151866060015161271490919063ffffffff16565b9050610da38a60400151826120e190919063ffffffff16565b9150610dbc85606001518361279190919063ffffffff16565b60408b0151909350610dce9083612761565b60408b0152505b610ddf8c826127c1565b9b50610deb8d836127c1565b9c50610df782856127f1565b610e0181856128b2565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e369493929190615818565b60405180910390a187516001018089526020028801849052610e5784612a5e565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156f0565b610e8d5786610e8f565b875b9050610e9c818a35612ca1565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612174565b505f9050610ee560a08a018a615902565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f615902565b6040518763ffffffff1660e01b8152600401610f3596959493929190615506565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611ba8565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ce565b6020026020010151612cdb565b600101610f75565b505050505050610fc460015f80516020615eef83398151915255565b915091565b5f610fd2611abc565b5f61102f61102a610fe38780615945565b610ff1906040810190615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612de592505050565b612e56565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f6020860186615614565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad6040860186615614565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615945565b6110f590615959565b815260200187806020019061110a9190615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615964565b81526020019060010190611129565b505050918352505060200161116d6040890189615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615964565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ad7565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061597e565b60405180910390a15f61124a60a08a018a615902565b905011156112e65761129b61126260a08a018a615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e7092505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c615902565b6040516112dd94939291906159a5565b60405180910390a15b6112f1828888611b06565b93505050506103bb60015f80516020615eef83398151915255565b5f80808061132661131d8680615600565b61032c9061522c565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a8680615600565b6113639061522c565b866020013587604001356121dd565b5f6113b06113808780615600565b6113899061522c565b60208801356040890135336113a160608c018c615588565b6113aa916159d7565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d2a565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ce565b90506020028101906114609190615902565b85604051602001611473939291906159f6565b604051602081830303815290604052612e9b565b838281518110611499576114996155ce565b6020908102919091010152600101611430565b505092915050565b6114bc611abc565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615446565b61150a60015f80516020615eef83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611576919061554a565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611abc565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ce565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ce565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ce565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ce565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ce565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ce565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ad7565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611aa6565b5f6117b186611ad7565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611aa6565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d9493929190615a19565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d2a565b90505f6118ad8383612f3b565b606081015181519192506118cd915f916118c79190612761565b90612ca1565b806118ec5750604081015160208201516118ec915f916118c791612761565b1561190a57604051630d86822160e01b815260040160405180910390fd5b805161191690846127f1565b6119248160200151836127f1565b6119328160400151846128b2565b6119408160600151836128b2565b61194983612cdb565b61195282612cdb565b606081015181515f916119659190612761565b90505f6119838360400151846020015161276190919063ffffffff16565b90506119b9338b606001518a60200135815181106119a3576119a36155ce565b60200260200101515f01518a6080013585611c28565b50506119ef338a606001518a60600135815181106119d9576119d96155ce565b60200260200101515f01518a60a0013584611c28565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a5883612a5e565b611a6182612a5e565b80516001600160e01b0316158015611a84575060208101516001600160e01b0316155b15611aa2576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615eef83398151915255565b611ac4612f89565b60025f80516020615eef83398151915255565b5f81604051602001611ae99190615a95565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b3890611b2e906104d6565b6104f88385615446565b505050565b80611b38576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b9c84848484612fba565b12979650505050505050565b5f805f611bb48561308e565b9050611bc0845f612ca1565b15611bde57604051632eaefac360e21b815260040160405180910390fd5b5f80611bea86846130f4565b9150915080611bff57611bfc82615aa7565b91505b8115611c1a57611c1a6001600160a01b0388168930856120a5565b50925090505b935093915050565b5f80611c348382612ca1565b15611c555760405163793a8f5560e01b815260048101849052602401610316565b83611c7357611c65868685612174565b505f9250829150611d0f9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad82866127c1565b9050611cb9815f612ca1565b15611cda5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611edc57868181518110611d7f57611d7f6155ce565b602002602001015193505f845f015160400151511115611ed4575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611df78d8a60200151613121565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e229190615b17565b5f60405180830381865afa158015611e3c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e639190810190615c0f565b9150505f81511115611ed25784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611ea4908a908590600401615cc5565b5f604051808303815f87803b158015611ebb575f80fd5b505af1158015611ecd573d5f803e3d5ffd5b505050505b505b600101611d64565b5050505050505050565b5f8115611f2057506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f2a84613403565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611fa291908716906370a0823190602401602060405180830381865afa158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c919061554a565b8361340f565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612021919088169063dd62ed3e90604401602060405180830381865afa158015611ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201b919061554a565b8461340f565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120669061206084846120e1565b906127c1565b93505050506103bb565b61207d838383600161344f565b611b3857604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b38484848460016134b1565b6120db57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ec8383612ca1565b6120f657816103bb565b5090919050565b5f806121098382612ca1565b1561212a5760405163793a8f5560e01b815260048101849052602401610316565b8361213a57611c65868685611ba8565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad8286612761565b5f805f6121808561308e565b905061218c845f612ca1565b156121aa57604051632d1671a360e11b815260040160405180910390fd5b5f6121b585836130f4565b50905080156121d2576121d26001600160a01b0387168883612070565b969095509350505050565b826060015181815181106121f3576121f36155ce565b60200260200101515f01516001600160a01b03168360400151838151811061221d5761221d6155ce565b60200260200101515f01516001600160a01b031603611b3857604051631cd2f1c760e21b815260040160405180910390fd5b6122576148c5565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122725790505090506122c76122958a611ad7565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122dc576122dc6155ce565b60200260200101819052505f6123118a604001518a81518110612301576123016155ce565b60200260200101515f0151613403565b90505f6123638b5f01518c604001518c81518110612331576123316155ce565b60200260200101515f01518d604001518d81518110612352576123526155ce565b602002602001015160200151611ee6565b90506123f28b604001518b8151811061237e5761237e6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123b0576123b06155ce565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612408576124086155ce565b602002602001018190525050505f61242f8a606001518981518110612301576123016155ce565b90505f6124708b5f01518c606001518b8151811061244f5761244f6155ce565b60200260200101515f01518d606001518c81518110612352576123526155ce565b90506124bd8b606001518a8151811061248b5761248b6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123b0576123b06155ce565b836001600403815181106124d3576124d36155ce565b602002602001018190525050506124ea8186613121565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161254a87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561258257612582614d2a565b6040519080825280602002602001820160405280156125ab578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125d19190615b17565b5f60405180830381865afa1580156125eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126129190810190615c0f565b9150915060028251101561263e578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126929087906004908110612661576126616155ce565b602002602001015160038151811061267b5761267b6155ce565b6020026020010151826120e190919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126c4576126c46155ce565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661351e565b915091505f612753838361363d565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661368a565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612744868686866136b4565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061274486868686613bf1565b818160800151600481518110612809576128096155ce565b6020026020010151600481518110612823576128236155ce565b6020026020010181815250506120db815f01515f01518260800151600481518110612850576128506155ce565b60200260200101515f81518110612869576128696155ce565b60200260200101515f1c836080015160048151811061288a5761288a6155ce565b60200260200101516002815181106128a4576128a46155ce565b6020026020010151856120fd565b8181608001516003815181106128ca576128ca6155ce565b60200260200101516004815181106128e4576128e46155ce565b6020908102919091010152805151608082015180515f9190600390811061290d5761290d6155ce565b60200260200101515f81518110612926576129266155ce565b60200260200101515f1c90505f836080015160038151811061294a5761294a6155ce565b6020026020010151600281518110612964576129646155ce565b602002602001015190505f801b8103612a0b57612981855f612ca1565b156129a25760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129d990866127c1565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a1a565b612a1783838388611c28565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a4f929190615cdd565b60405180910390a15050505050565b60c08101515115612ad8578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612aaa929091600401615cc5565b5f604051808303815f87803b158015612ac1575f80fd5b505af1158015612ad3573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b2e8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b6e57612b6e614d2a565b604051908082528060200260200182016040528015612b97578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612bc7578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612be79190615b17565b5f60405180830381865afa158015612c01573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c289190810190615c0f565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c70918590600401615cc5565b5f604051808303815f87803b158015612c87575f80fd5b505af1158015612c99573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612ccf84848484612fba565b13979650505050505050565b5f8160800151600381518110612cf357612cf36155ce565b6020026020010151600281518110612d0d57612d0d6155ce565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d3e57612d3e6155ce565b60200260200101515f81518110612d5757612d576155ce565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612ddc838383612174565b50505050505050565b6060604082511015612e0457505060408051602081019091525f815290565b5f60208301519050602060408451612e1c91906159e3565b612e269190615d12565b811115612e4257505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e6657505f919050565b50602001515f1a90565b612e7981613cef565b612e985780604051630c89984b60e31b81526004016103169190615d31565b50565b60605f612ea88484613d1d565b9050808015612ec957505f3d1180612ec957505f846001600160a01b03163b115b15612ede57612ed6613d30565b9150506102b4565b8015612f0857604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f1b57612f16613d49565b612f34565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f688383613d54565b82526040820152612f798284613d54565b6020830152606082015292915050565b5f80516020615eef83398151915254600203612fb857604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fdf5786859250925050611d0f565b505f85841315612ff3575092949193919260015b8386035f8112604c8213178015613026578215613018575f8994509450505050611d0f565b885f94509450505050611d0f565b600a82900a8981028a82828161303e5761303e615cfe565b051461306a57841561305a575f8b965096505050505050611d0f565b8a5f965096505050505050611d0f565b841561307f578896509450611d0f9350505050565b9550879450611d0f9350505050565b5f805f61309a84613dbd565b909250905060018260038111156130b3576130b3615d43565b141580156130d257505f8260038111156130cf576130cf615d43565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d57565b5f806001600160e01b038416601b0b60e085901d613113828287613e4a565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561313e5761313e614d2a565b604051908082528060200260200182016040528015613167578160200160208202803683370190505b5090505f80845111613179575f61317f565b83516001015b85516001010190505f8167ffffffffffffffff8111156131a1576131a1614d2a565b6040519080825280602002602001820160405280156131d457816020015b60608152602001906001900390816131bf5790505b5090505f6131f8604080516002815233602082015230818301526060810190915290565b82828151811061320a5761320a6155ce565b60200260200101819052505f5b875181101561326757818060010192505087818151811061323a5761323a6155ce565b6020026020010151838381518110613254576132546155ce565b6020908102919091010152600101613217565b508551156133f95780806001019150508382828151811061328a5761328a6155ce565b60200260200101819052505f5b86518110156133f7576133468782815181106132b5576132b56155ce565b60200260200101515f01516133236132f18a85815181106132d8576132d86155ce565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613335576133356155ce565b602002602001015160400151613fb0565b61336657604051630a57f30960e31b815260048101829052602401610316565b868181518110613378576133786155ce565b60200260200101515f01516001600160a01b03165f1b8582815181106133a0576133a06155ce565b60200260200101818152505081806001019250508681815181106133c6576133c66155ce565b6020026020010151602001518383815181106133e4576133e46155ce565b6020908102919091010152600101613297565b505b5095945050505050565b5f805f61309a84614020565b5f805f805f61341e878761407f565b9250925092505f8061343085856140c2565b915091508183801561343f5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134a5578383151615613499573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661350d578383151615613501573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613536575f92505f9150613633565b6135408487615d90565b91505f61354c8861419a565b90505f6135588761419a565b90505f61356583836141c8565b5090505f6f0785ee10d5da46d900f436a00000000082111561359a576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135bb57670de0b6b3a7640000820491506012015b633b9aca008211156135d457633b9aca00820491506009015b6127108211156135e957612710820491506004015b81156135fd57600a820491506001016135e9565b6136078187615d90565b95506136298b8a613623878761361e87600a615e8f565b6141e4565b896142b0565b9097509550505050505b5094509492505050565b5f805f61364a85856140c2565b915091508015801561365a575081155b1561368257604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136968484614350565b90945092506136a786868686613bf1565b9150915094509492505050565b5f80835f036136e057604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136f157505f905080611d0f565b5f805f806136ff8a8a6143a5565b919b509950915061371088886143a5565b919950975090505f6137218b61419a565b90505f61372d8a61419a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613af257841561378457507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aca565b6f4b3b4ca85a86c47a098a2240000000008310156138b057678ac7230489e80000831015613814576402540be4008310156137e257620186a08310156137d25750620186a090506005613a8b565b506402540be4009050600a613a8b565b655af3107a40008310156138015750655af3107a40009050600e613a8b565b50678ac7230489e8000090506013613a8b565b6b204fce5e3e250261100000008310156138665769152d02c7e14af680000083101561384f575069152d02c7e14af680000090506017613a8b565b506b204fce5e3e250261100000009050601c613a8b565b6d314dc6448d9338c15b0a0000000083101561389557506d314dc6448d9338c15b0a0000000090506021613a8b565b506f4b3b4ca85a86c47a098a22400000000090506026613a8b565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139a85773af298d050e4395d69670b12b7f41000000000000831015613943577172cb5bd86321e38cb6ce6682e8000000000083101561392457507172cb5bd86321e38cb6ce6682e800000000009050602b613a8b565b5073af298d050e4395d69670b12b7f4100000000000090506030613a8b565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613984575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a8b565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a8b565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a3e577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a1657507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a8b565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a8b565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a8b57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613aa057600a820491505f1901613a8b565b815f03613aca576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613af2576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b0957808d039c50613b47565b600160ff1b9c90038c015f811315613b4757806001600160ff1b03038b13613b3457998a0199613b47565b5f80995099505050505050505050611d0f565b5f808e128015613b5657505f8c135b15613b7757600160ff1b8e01808d13613b6f575f613b73565b808d035b9150505b8b818f01039750613b948f8e613b8e8887896141e4565b8b6142b0565b90995097505f811315613bde57604c811315613bbe575f809a509a50505050505050505050611d0f565b80600a0a8981613bd057613bd0615cfe565b059850885f03613bde575f97505b50969850949650611d0f95505050505050565b5f8085158415178015613c1d57865f03613c115784849250925050611d0f565b86869250925050611d0f565b613c2787876145ff565b9097509550613c3685856145ff565b909550935085841315613c4a579395929492935b838603604c811115613c63578787935093505050611d0f565b80600a0a8681613c7557613c75615cfe565b0595505086850180881860ff90811c151589881890911c15168015613cde57876001600160ff1b0303613cc55760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613ce2565b8198505b5096979596505050505050565b5f600882511015613d0157505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d718460600151856040015161271490919063ffffffff16565b915083604001519050613d91836040015183611b6e90919063ffffffff16565b1561311a5782604001519150613db484606001518361279190919063ffffffff16565b90509250929050565b5f80613dc7614648565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e419190615e9a565b91509150915091565b5f805f851215613e7757604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e8957505f90506001611c20565b8460ff8416850185811215613ebb5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f0757604c19831215613ede575f809550955050505050611c20565b825f03600a0a9150818481613ef557613ef5615cfe565b0495505084029091149150611c209050565b5f831315613fa057604d831315613f445760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f5a57613f5a615cfe565b04841115613f8e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611c209050565b8360019550955050505050611c20565b5f836001600160a01b03163b5f0361400e575f80613fce85856146d3565b5090925090505f816003811115613fe757613fe7615d43565b1480156140055750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614019848484614719565b90506103bb565b5f8061402a614648565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e1d573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140b157600a860460018201600a88065f14935093509350506140bb565b8593509150600190505b9250925092565b5f601b83900b8314838382614126577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561410657620186a0860595506005850194505b8586601b0b1461412157600a86059550846001019450614106565b61413c565b855f0361413c57505f92506001915061311a9050565b848560030b1461417f575f85121561415c57505f925082915061311a9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141bf57600160ff1b82036141b95750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141f186866141c8565b91509150815f036142155783818161420b5761420b615cfe565b04925050506103bb565b8382106142465760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561432c576001600160ff1b03841115614319576142dd6001600160ff1b036001615575565b84036142f15750600160ff1b905081611d0f565b6142fc600a85615d12565b61430590615eda565b614310846001615d90565b91509150611d0f565b61432284615eda565b8391509150611d0f565b6001600160ff1b0384111561434657614305600a85615d12565b5082905081611d0f565b5f80600160ff1b840361439b576001600160ff1b03830361438e5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143bd57505f915081905060016140bb565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145aa576f4b3b4ca85a86c47a098a224000000000850515801561441f57507f80000000000000000000000000000000000000000000000000000000000000268412155b15614440576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561448857507f80000000000000000000000000000000000000000000000000000000000000138412155b156144a157678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144ed57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614503576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561455257507f80000000000000000000000000000000000000000000000000000000000000028412155b1561456857606485029450600284039350614503565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561459857506001600160ff1b018412155b156145aa57600a850294506001840393505b600a808602908105861480156145c757506001600160ff1b018512155b156145d6578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61460e87876143a5565b9250925092508061463c576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061469f575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fb8576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f835160410361470a576020840151604085015160608601515f1a6146fc8882858561476a565b9550955095505050506140bb565b505081515f91506002906140bb565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147a357505f91506003905082614828565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147f4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661481f57505f925060019150829050614828565b92505f91508190505b9450945094915050565b604051806080016040528061484561485e565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148ac60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148d861485e565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f6020828403121561491a575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614941575f80fd5b50813567ffffffffffffffff811115614958575f80fd5b6020830191508360208260051b850101111561311a575f80fd5b5f805f60408486031215614984575f80fd5b833567ffffffffffffffff8082111561499b575f80fd5b9085019060a082880312156149ae575f80fd5b909350602085013590808211156149c3575f80fd5b506149d086828701614931565b9497909650939450505050565b5f602082840312156149ed575f80fd5b5035919050565b6001600160a01b0381168114612e98575f80fd5b80356141c3816149f4565b5f805f805f60808688031215614a27575f80fd5b8535614a32816149f4565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a5b575f80fd5b614a6788828901614931565b969995985093965092949392505050565b5f805f60608486031215614a8a575f80fd5b8335614a95816149f4565b92506020840135614aa5816149f4565b929592945050506040919091013590565b5f805f805f60808688031215614aca575f80fd5b8535614ad5816149f4565b94506020860135614ae5816149f4565b935060408601359250606086013567ffffffffffffffff80821115614b08575f80fd5b818801915088601f830112614b1b575f80fd5b813581811115614b29575f80fd5b896020828501011115614b3a575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b5d575f80fd5b81356103bb816149f4565b5f60c08284031215614b78575f80fd5b50919050565b5f60208284031215614b8e575f80fd5b813567ffffffffffffffff811115614ba4575f80fd5b61052d84828501614b68565b5f805f60408486031215614bc2575f80fd5b833567ffffffffffffffff80821115614bd9575f80fd5b614be587838801614b68565b945060208601359150808211156149c3575f80fd5b5f60208284031215614c0a575f80fd5b813567ffffffffffffffff811115614c20575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c42575f80fd5b823567ffffffffffffffff811115614c58575f80fd5b614c6485828601614931565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cf357603f19888603018452614ce1858351614c70565b94509285019290850190600101614cc5565b5092979650505050505050565b5f8060408385031215614d11575f80fd5b8235614d1c816149f4565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405290565b6040805190810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405160a0810167ffffffffffffffff81118282101715614d6157614d61614d2a565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dd657614dd6614d2a565b604052919050565b5f82601f830112614ded575f80fd5b813567ffffffffffffffff811115614e0757614e07614d2a565b614e1a601f8201601f1916602001614dad565b818152846020838601011115614e2e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e5a575f80fd5b614e62614d3e565b90508135614e6f816149f4565b81526020820135614e7f816149f4565b6020820152604082013567ffffffffffffffff811115614e9d575f80fd5b614ea984828501614dde565b60408301525092915050565b5f67ffffffffffffffff821115614ece57614ece614d2a565b5060051b60200190565b5f60408284031215614ee8575f80fd5b614ef0614d67565b90508135614efd816149f4565b808252506020820135602082015292915050565b5f82601f830112614f20575f80fd5b81356020614f35614f3083614eb5565b614dad565b8083825260208201915060208460061b870101935086841115614f56575f80fd5b602086015b84811015614f7b57614f6d8882614ed8565b835291830191604001614f5b565b509695505050505050565b5f60a08284031215614f96575f80fd5b614f9e614d8a565b9050614fa982614a08565b8152602082013567ffffffffffffffff80821115614fc5575f80fd5b614fd185838601614e4a565b60208401526040840135915080821115614fe9575f80fd5b614ff585838601614f11565b6040840152606084013591508082111561500d575f80fd5b5061501a84828501614f11565b6060830152506080820135608082015292915050565b5f61503d614f3084614eb5565b8381529050602080820190600585811b85018781111561505b575f80fd5b855b8181101561514857803567ffffffffffffffff8082111561507c575f80fd5b908801906060828c03121561508f575f80fd5b615097614d3e565b82356150a2816149f4565b815282870135828111156150b4575f80fd5b8301601f81018d136150c4575f80fd5b80356150d2614f3082614eb5565b81815290881b8201890190898101908f8311156150ed575f80fd5b928a01925b8284101561510b5783358252928a0192908a01906150f2565b848b01525060409150508381013583811115615125575f80fd5b6151318e828701614dde565b91830191909152508752505093830193830161505d565b50505050509392505050565b5f82601f830112615163575f80fd5b6103bb83833560208501615030565b5f805f805f6101408688031215615187575f80fd5b853567ffffffffffffffff8082111561519e575f80fd5b6151aa89838a01614f86565b965060208801359150808211156151bf575f80fd5b6151cb89838a01614f86565b95506151da8960408a01614b68565b94506101008801359150808211156151f0575f80fd5b6151fc89838a01615154565b9350610120880135915080821115615212575f80fd5b5061521f88828901615154565b9150509295509295909350565b5f6102b43683614f86565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561526b816149f4565b6001600160a01b039081168452602083013590615287826149f4565b166020840152604082013536839003601e190181126152a4575f80fd5b820160208101903567ffffffffffffffff8111156152c0575f80fd5b8036038213156152ce575f80fd5b606060408601526152e3606086018284615237565b95945050505050565b5f808335601e19843603018112615301575f80fd5b830160208101925035905067ffffffffffffffff811115615320575f80fd5b8060061b360382131561311a575f80fd5b8183525f60208085019450825f5b85811015615377578135615352816149f4565b6001600160a01b0316875281830135838801526040968701969091019060010161533f565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153a8816149f4565b166060830152602083013536849003605e190181126153c5575f80fd5b60a060808401526153dc610100840185830161525f565b90506153eb60408501856152ec565b605f19808685030160a0870152615403848385615331565b935061541260608801886152ec565b93509150808685030160c08701525061542c838383615331565b92505050608084013560e084015280915050949350505050565b5f615453614f3084614eb5565b80848252602080830192508560051b850136811115615470575f80fd5b855b818110156154fa57803567ffffffffffffffff80821115615491575f80fd5b8189019150604082360312156154a5575f80fd5b6154ad614d67565b8235828111156154bb575f80fd5b6154c736828601614e4a565b82525085830135828111156154da575f80fd5b6154e636828601615154565b828801525087525050938201938201615472565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261553e60a083018486615237565b98975050505050505050565b5f6020828403121561555a575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615561565b5f808335601e1984360301811261559d575f80fd5b83018035915067ffffffffffffffff8211156155b7575f80fd5b6020019150600581901b360382131561311a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155f6575f80fd5b9190910192915050565b5f8235609e198336030181126155f6575f80fd5b5f808335601e19843603018112615629575f80fd5b83018035915067ffffffffffffffff821115615643575f80fd5b6020019150600681901b360382131561311a575f80fd5b5f6080823603121561566a575f80fd5b6040516080810167ffffffffffffffff828210818311171561568e5761568e614d2a565b8160405284359150808211156156a2575f80fd5b6156ae36838701614f86565b8352602085013560208401526040850135604084015260608501359150808211156156d7575f80fd5b506156e436828601615154565b60608301525092915050565b5f60208284031215615700575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561537757815180516001600160a01b031688528301518388015260409096019590820190600101615722565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261579f610100850182614c70565b9050604083015184820360408601526157b8828261570f565b915050606083015184820360608601526157d2828261570f565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615377578151875295820195908201906001016157fc565b5f6001600160a01b03808716835260206080818501528651608080860152615844610100860182615752565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158e057601f1988830301845284518a815116835289810151878b8501526158b4888501826157e9565b91890151848303858b01529190506158cc8183614c70565b968b0196958b019593505050600101615886565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615917575f80fd5b83018035915067ffffffffffffffff821115615931575f80fd5b60200191503681900382131561311a575f80fd5b5f8235605e198336030181126155f6575f80fd5b5f6102b43683614e4a565b5f60408284031215615974575f80fd5b6103bb8383614ed8565b6001600160a01b0384168152826020820152606060408201525f6152e36060830184615752565b6001600160a01b0385168152836020820152606060408201525f6159cd606083018486615237565b9695505050505050565b5f6103bb368484615030565b818103818111156102b4576102b4615561565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a3b81840187615752565b90508281036040840152615a4f8186615752565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615752565b5f60018201615ab857615ab8615561565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0a57601f19868403018952615af88383516157e9565b98840198925090830190600101615adc565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b50610100840182614c70565b9050606084015160808401526080840151601f19808584030160a0860152615b788383615abf565b925060a08601519150808584030160c0860152615b9583836157e9565b925060c08601519150808584030160e0860152506152e382826157e9565b5f82601f830112615bc2575f80fd5b81516020615bd2614f3083614eb5565b8083825260208201915060208460051b870101935086841115615bf3575f80fd5b602086015b84811015614f7b5780518352918301918301615bf8565b5f8060408385031215615c20575f80fd5b825167ffffffffffffffff80821115615c37575f80fd5b818501915085601f830112615c4a575f80fd5b81516020615c5a614f3083614eb5565b82815260059290921b84018101918181019089841115615c78575f80fd5b948201945b83861015615c9657855182529482019490820190615c7d565b91880151919650909350505080821115615cae575f80fd5b50615cbb85828601615bb3565b9150509250929050565b828152604060208201525f61052d60408301846157e9565b6001600160a01b0383168152604060208201525f61052d6040830184615abf565b634e487b7160e01b5f52601260045260245ffd5b5f82615d2c57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c70565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d8357634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac615561565b600181815b80851115615de957815f1904821115615dcf57615dcf615561565b80851615615ddc57918102915b93841c9390800290615db4565b509250929050565b5f82615dff575060016102b4565b81615e0b57505f6102b4565b8160018114615e215760028114615e2b57615e47565b60019150506102b4565b60ff841115615e3c57615e3c615561565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e6a575081810a6102b4565b615e748383615daf565b805f1904821115615e8757615e87615561565b029392505050565b5f6103bb8383615df1565b5f8060408385031215615eab575f80fd5b825160048110615eb9575f80fd5b602084015190925060ff81168114615ecf575f80fd5b809150509250929050565b5f600160ff1b82016141b9576141b961556156fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", "linkReferences": {} } } diff --git a/src/concrete/raindex/RaindexV6.sol b/src/concrete/raindex/RaindexV6.sol index e2af849d7a..c0003738e1 100644 --- a/src/concrete/raindex/RaindexV6.sol +++ b/src/concrete/raindex/RaindexV6.sol @@ -721,6 +721,17 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex ClearStateChangeV2 memory clearStateChange = calculateClearStateChange(aliceOrderIOCalculation, bobOrderIOCalculation); + // A negative bounty means there is a spread between the orders. This is a + // critical error because it means the DEX could be exploited if allowed. + // Checked before any vault settlement so a spread always reverts with this + // explicit error. + if ( + clearStateChange.aliceOutput.sub(clearStateChange.bobInput).lt(LibDecimalFloat.FLOAT_ZERO) + || clearStateChange.bobOutput.sub(clearStateChange.aliceInput).lt(LibDecimalFloat.FLOAT_ZERO) + ) { + revert NegativeBounty(); + } + // Pull both orders' outputs into the orderbook before pushing either // order's input out. Alice's input token is Bob's output token and vice // versa, so both pulls must precede both pushes for the orderbook to hold @@ -736,13 +747,6 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex Float aliceBounty = clearStateChange.aliceOutput.sub(clearStateChange.bobInput); Float bobBounty = clearStateChange.bobOutput.sub(clearStateChange.aliceInput); - // A negative bounty means there is a spread between the orders. - // This is a critical error because it means the DEX could be - // exploited if allowed. - if (aliceBounty.lt(LibDecimalFloat.FLOAT_ZERO) || bobBounty.lt(LibDecimalFloat.FLOAT_ZERO)) { - revert NegativeBounty(); - } - increaseVaultBalance( msg.sender, aliceOrder.validOutputs[clearConfig.aliceOutputIOIndex].token, diff --git a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol index 2fee2ffc2d..9c4c237bfb 100644 --- a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xc4492cb22d918a3f0d41f13e533744ef03a2e7f744ec0a43b79d97a04c537544); +bytes32 constant BYTECODE_HASH = bytes32(0x28928b4a6ff0a93af7b1c79eddc0712a1fb86962871a491c7174ae0a5a83dcd1); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xc0c17e58018C80A5420dF7756acd2B2dcf37e380); +address constant DEPLOYED_ADDRESS = address(0x8d6911fe853d3aB7ec64f6662a76F8fB64560811); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b0383167386594ac4319230870c6e587f4aca48fab575619e146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b038316739da435ffe32f40cc112d4d25601d0d7592cdded9146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol index 8932d45c12..553a59bc4b 100644 --- a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol +++ b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xed618063fd6ffc7558e4588ea6357356e781d660fa22caa292a2f9aeaa21996f); +bytes32 constant BYTECODE_HASH = bytes32(0xf665ce7b386a4d6a6de9dfd6d0cd25f2b5beab334396a8c1c3db84e8a031af71); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xAd8af7f90a06659E9bBFD457c6C642fB60B1F46b); +address constant DEPLOYED_ADDRESS = address(0x9731091Df79c7E8d2744ed1a4cef8Ee9d19E6E9c); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f337386594ac4319230870c6e587f4aca48fab575619e1461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f33739da435ffe32f40cc112d4d25601d0d7592cdded91461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/RaindexV6.pointers.sol b/src/generated/RaindexV6.pointers.sol index 27e8991640..44179f6da4 100644 --- a/src/generated/RaindexV6.pointers.sol +++ b/src/generated/RaindexV6.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x774ca4c194abf0720bca6c033580762029a80291feefd0a4b7855b16bcbbf7a9); +bytes32 constant BYTECODE_HASH = bytes32(0xd0d544f211a3fea2cd1a6287d752c9b137a830aab27dfb1401c8c18b53f18a09); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x86594ac4319230870C6E587f4ACa48FAb575619e); +address constant DEPLOYED_ADDRESS = address(0x9Da435ffE32F40cC112d4D25601d0D7592cDDEd9); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615eed806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b6101076101023660046148e8565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614950565b6102ba565b61010761013d3660046149bb565b5f9081526020819052604090205460011490565b61016461015f3660046149f1565b6103c2565b005b610179610174366004614a56565b610521565b604051908152602001610113565b610107610195366004614a94565b610535565b6101646101a83660046149f1565b610635565b6101796101bb366004614b2b565b6107c8565b6101d36101ce366004614b5c565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614b8e565b610fc9565b61020e610209366004614bd8565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c0f565b6113ce565b6040516101139190614c7c565b610164610259366004614c0f565b6114b4565b61017961026c366004614cde565b61150e565b61016461027f366004615150565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9a565b6102d06020850185614b2b565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b2b565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661520a565b611ab5565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615360565b60405180910390a16103a4818585611ae4565b506103bb60015f80516020615ecd83398151915255565b9392505050565b6103ca611a9a565b3385856103d8838383611b1b565b6103e2865f611b4c565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b86565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c06565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615424565b611cf6565b5050505050505061051a60015f80516020615ecd83398151915255565b5050505050565b5f61052d848484611ec4565b949350505050565b5f61054a6001600160a01b038616878661204e565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b906004016154e4565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615528565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615553565b6001600160a01b038a16929190612083565b5060019695505050505050565b61063d611a9a565b33858561064b838383611b1b565b5f8080806106598a82611b4c565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec4565b90506106a58b826120bf565b94506106b3338e8e886120db565b90935091505f6106c4338f88612152565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615424565b50505050505050505061051a60015f80516020615ecd83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615528565b5f8061083a611a9a565b6108476080840184615566565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614810565b61087861483c565b5f60405180606001604052808780608001906108949190615566565b5f8181106108a4576108a46155ac565b90506020028101906108b691906155c0565b6108c090806155de565b6108ce9060408101906155f2565b6108db60808b018b615566565b5f8181106108eb576108eb6155ac565b90506020028101906108fd91906155c0565b60200135818110610910576109106155ac565b6109269260206040909202019081019150614b2b565b6001600160a01b031681526020016109416080890189615566565b5f818110610951576109516155ac565b905060200281019061096391906155c0565b61096d90806155de565b61097b9060608101906155f2565b61098860808b018b615566565b5f818110610998576109986155ac565b90506020028101906109aa91906155c0565b604001358181106109bd576109bd6155ac565b6109d39260206040909202019081019150614b2b565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615566565b604080516001909201602002820181528501519093505f9250610a1d915082611b4c565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615566565b905081108015610a6357506040840151610a63905f611b4c565b15610e7157610a7560808a018a615566565b82818110610a8557610a856155ac565b9050602002810190610a9791906155c0565b610aa090615638565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ac565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ac565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121bb565b5f610b6586611ab5565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d08565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061222d565b90505f610c458c604001358360600151611b4c90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b4c565b1580610cc257506060820151610cc0905f611b4c565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156ce565b15610d6e576040808a015190850151610d40916120bf565b6060850151909250610d5290836126f2565b60408a0151909150610d64908361273f565b60408a0152610dd5565b5f610d8a856040015186606001516126f290919063ffffffff16565b9050610da38a60400151826120bf90919063ffffffff16565b9150610dbc85606001518361276f90919063ffffffff16565b60408b0151909350610dce908361273f565b60408b0152505b610ddf8c8261279f565b9b50610deb8d8361279f565b9c50610df782856127cf565b610e018185612890565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e3694939291906157f6565b60405180910390a187516001018089526020028801849052610e5784612a3c565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156ce565b610e8d5786610e8f565b875b9050610e9c818a35612c7f565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612152565b505f9050610ee560a08a018a6158e0565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f6158e0565b6040518763ffffffff1660e01b8152600401610f35969594939291906154e4565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611b86565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ac565b6020026020010151612cb9565b600101610f75565b505050505050610fc460015f80516020615ecd83398151915255565b915091565b5f610fd2611a9a565b5f61102f61102a610fe38780615923565b610ff19060408101906158e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612dc392505050565b612e34565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f60208601866155f2565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad60408601866155f2565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615923565b6110f590615937565b815260200187806020019061110a91906155f2565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615942565b81526020019060010190611129565b505050918352505060200161116d60408901896155f2565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615942565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ab5565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061595c565b60405180910390a15f61124a60a08a018a6158e0565b905011156112e65761129b61126260a08a018a6158e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e4e92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c6158e0565b6040516112dd9493929190615983565b60405180910390a15b6112f1828888611ae4565b93505050506103bb60015f80516020615ecd83398151915255565b5f80808061132661131d86806155de565b61032c9061520a565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a86806155de565b6113639061520a565b866020013587604001356121bb565b5f6113b061138087806155de565b6113899061520a565b60208801356040890135336113a160608c018c615566565b6113aa916159b5565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d08565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ac565b905060200281019061146091906158e0565b85604051602001611473939291906159d4565b604051602081830303815290604052612e79565b838281518110611499576114996155ac565b6020908102919091010152600101611430565b505092915050565b6114bc611a9a565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615424565b61150a60015f80516020615ecd83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115769190615528565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611a9a565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ac565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ac565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ac565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ac565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ac565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ac565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ab5565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a84565b5f6117b186611ab5565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a84565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d94939291906159f7565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d08565b90505f6118ad8383612f19565b90506118bc815f0151846127cf565b6118ca8160200151836127cf565b6118d8816040015184612890565b6118e6816060015183612890565b6118ef83612cb9565b6118f882612cb9565b606081015181515f9161190b919061273f565b90505f6119298360400151846020015161273f90919063ffffffff16565b9050611935825f612c7f565b806119455750611945815f612c7f565b1561196357604051630d86822160e01b815260040160405180910390fd5b611997338b606001518a6020013581518110611981576119816155ac565b60200260200101515f01518a6080013585611c06565b50506119cd338a606001518a60600135815181106119b7576119b76155ac565b60200260200101515f01518a60a0013584611c06565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3683612a3c565b611a3f82612a3c565b80516001600160e01b0316158015611a62575060208101516001600160e01b0316155b15611a80576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615ecd83398151915255565b611aa2612f67565b60025f80516020615ecd83398151915255565b5f81604051602001611ac79190615a73565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1690611b0c906104d6565b6104f88385615424565b505050565b80611b16576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7a84848484612f98565b12979650505050505050565b5f805f611b928561306c565b9050611b9e845f612c7f565b15611bbc57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc886846130d2565b9150915080611bdd57611bda82615a85565b91505b8115611bf857611bf86001600160a01b038816893085612083565b50925090505b935093915050565b5f80611c128382612c7f565b15611c335760405163793a8f5560e01b815260048101849052602401610316565b83611c5157611c43868685612152565b505f9250829150611ced9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8b828661279f565b9050611c97815f612c7f565b15611cb85760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eba57868181518110611d5d57611d5d6155ac565b602002602001015193505f845f015160400151511115611eb2575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd58d8a602001516130ff565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e009190615af5565b5f60405180830381865afa158015611e1a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e419190810190615bed565b9150505f81511115611eb05784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e82908a908590600401615ca3565b5f604051808303815f87803b158015611e99575f80fd5b505af1158015611eab573d5f803e3d5ffd5b505050505b505b600101611d42565b5050505050505050565b5f8115611efe57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f08846133e1565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8091908716906370a0823190602401602060405180830381865afa158015611f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7a9190615528565b836133ed565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611fff919088169063dd62ed3e90604401602060405180830381865afa158015611fd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff99190615528565b846133ed565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120449061203e84846120bf565b9061279f565b93505050506103bb565b61205b838383600161342d565b611b1657604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b61209184848484600161348f565b6120b957604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ca8383612c7f565b6120d457816103bb565b5090919050565b5f806120e78382612c7f565b156121085760405163793a8f5560e01b815260048101849052602401610316565b8361211857611c43868685611b86565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8b828661273f565b5f805f61215e8561306c565b905061216a845f612c7f565b1561218857604051632d1671a360e11b815260040160405180910390fd5b5f61219385836130d2565b50905080156121b0576121b06001600160a01b038716888361204e565b969095509350505050565b826060015181815181106121d1576121d16155ac565b60200260200101515f01516001600160a01b0316836040015183815181106121fb576121fb6155ac565b60200260200101515f01516001600160a01b031603611b1657604051631cd2f1c760e21b815260040160405180910390fd5b6122356148a3565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122505790505090506122a56122738a611ab5565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122ba576122ba6155ac565b60200260200101819052505f6122ef8a604001518a815181106122df576122df6155ac565b60200260200101515f01516133e1565b90505f6123418b5f01518c604001518c8151811061230f5761230f6155ac565b60200260200101515f01518d604001518d81518110612330576123306155ac565b602002602001015160200151611ec4565b90506123d08b604001518b8151811061235c5761235c6155ac565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d8151811061238e5761238e6155ac565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b836001600303815181106123e6576123e66155ac565b602002602001018190525050505f61240d8a6060015189815181106122df576122df6155ac565b90505f61244e8b5f01518c606001518b8151811061242d5761242d6155ac565b60200260200101515f01518d606001518c81518110612330576123306155ac565b905061249b8b606001518a81518110612469576124696155ac565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c8151811061238e5761238e6155ac565b836001600403815181106124b1576124b16155ac565b602002602001018190525050506124c881866130ff565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161252887305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561256057612560614d08565b604051908082528060200260200182016040528015612589578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125af9190615af5565b5f60405180830381865afa1580156125c9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125f09190810190615bed565b9150915060028251101561261c578151604051630fbb8e5560e21b815260040161031691815260200190565b602082015160408301518551612670908790600490811061263f5761263f6155ac565b6020026020010151600381518110612659576126596155ac565b6020026020010151826120bf90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126a2576126a26155ac565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612722868686866134fc565b915091505f612731838361361b565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613668565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613692565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613bcf565b8181608001516004815181106127e7576127e76155ac565b6020026020010151600481518110612801576128016155ac565b6020026020010181815250506120b9815f01515f0151826080015160048151811061282e5761282e6155ac565b60200260200101515f81518110612847576128476155ac565b60200260200101515f1c8360800151600481518110612868576128686155ac565b6020026020010151600281518110612882576128826155ac565b6020026020010151856120db565b8181608001516003815181106128a8576128a86155ac565b60200260200101516004815181106128c2576128c26155ac565b6020908102919091010152805151608082015180515f919060039081106128eb576128eb6155ac565b60200260200101515f81518110612904576129046155ac565b60200260200101515f1c90505f8360800151600381518110612928576129286155ac565b6020026020010151600281518110612942576129426155ac565b602002602001015190505f801b81036129e95761295f855f612c7f565b156129805760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129b7908661279f565b6001600160a01b038085165f9081526001602090815260408083209387168352928152828220858352905220556129f8565b6129f583838388611c06565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a2d929190615cbb565b60405180910390a15050505050565b60c08101515115612ab6578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612a88929091600401615ca3565b5f604051808303815f87803b158015612a9f575f80fd5b505af1158015612ab1573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b0c8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b4c57612b4c614d08565b604051908082528060200260200182016040528015612b75578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612ba5578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612bc59190615af5565b5f60405180830381865afa158015612bdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c069190810190615bed565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c4e918590600401615ca3565b5f604051808303815f87803b158015612c65575f80fd5b505af1158015612c77573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cad84848484612f98565b13979650505050505050565b5f8160800151600381518110612cd157612cd16155ac565b6020026020010151600281518110612ceb57612ceb6155ac565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d1c57612d1c6155ac565b60200260200101515f81518110612d3557612d356155ac565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dba838383612152565b50505050505050565b6060604082511015612de257505060408051602081019091525f815290565b5f60208301519050602060408451612dfa91906159c1565b612e049190615cf0565b811115612e2057505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e4457505f919050565b50602001515f1a90565b612e5781613ccd565b612e765780604051630c89984b60e31b81526004016103169190615d0f565b50565b60605f612e868484613cfb565b9050808015612ea757505f3d1180612ea757505f846001600160a01b03163b115b15612ebc57612eb4613d0e565b9150506102b4565b8015612ee657604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612ef957612ef4613d27565b612f12565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f468383613d32565b82526040820152612f578284613d32565b6020830152606082015292915050565b5f80516020615ecd83398151915254600203612f9657604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fbd5786859250925050611ced565b505f85841315612fd1575092949193919260015b8386035f8112604c8213178015613004578215612ff6575f8994509450505050611ced565b885f94509450505050611ced565b600a82900a8981028a82828161301c5761301c615cdc565b0514613048578415613038575f8b965096505050505050611ced565b8a5f965096505050505050611ced565b841561305d578896509450611ced9350505050565b9550879450611ced9350505050565b5f805f61307884613d9b565b9092509050600182600381111561309157613091615d21565b141580156130b057505f8260038111156130ad576130ad615d21565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d35565b5f806001600160e01b038416601b0b60e085901d6130f1828287613e28565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561311c5761311c614d08565b604051908082528060200260200182016040528015613145578160200160208202803683370190505b5090505f80845111613157575f61315d565b83516001015b85516001010190505f8167ffffffffffffffff81111561317f5761317f614d08565b6040519080825280602002602001820160405280156131b257816020015b606081526020019060019003908161319d5790505b5090505f6131d6604080516002815233602082015230818301526060810190915290565b8282815181106131e8576131e86155ac565b60200260200101819052505f5b8751811015613245578180600101925050878181518110613218576132186155ac565b6020026020010151838381518110613232576132326155ac565b60209081029190910101526001016131f5565b508551156133d757808060010191505083828281518110613268576132686155ac565b60200260200101819052505f5b86518110156133d557613324878281518110613293576132936155ac565b60200260200101515f01516133016132cf8a85815181106132b6576132b66155ac565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613313576133136155ac565b602002602001015160400151613f8e565b61334457604051630a57f30960e31b815260048101829052602401610316565b868181518110613356576133566155ac565b60200260200101515f01516001600160a01b03165f1b85828151811061337e5761337e6155ac565b60200260200101818152505081806001019250508681815181106133a4576133a46155ac565b6020026020010151602001518383815181106133c2576133c26155ac565b6020908102919091010152600101613275565b505b5095945050505050565b5f805f61307884613ffe565b5f805f805f6133fc878761405d565b9250925092505f8061340e85856140a0565b915091508183801561341d5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316613483578383151615613477573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166134eb5783831516156134df573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613514575f92505f9150613611565b61351e8487615d6e565b91505f61352a88614178565b90505f61353687614178565b90505f61354383836141a6565b5090505f6f0785ee10d5da46d900f436a000000000821115613578576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561359957670de0b6b3a7640000820491506012015b633b9aca008211156135b257633b9aca00820491506009015b6127108211156135c757612710820491506004015b81156135db57600a820491506001016135c7565b6135e58187615d6e565b95506136078b8a61360187876135fc87600a615e6d565b6141c2565b8961428e565b9097509550505050505b5094509492505050565b5f805f61362885856140a0565b9150915080158015613638575081155b1561366057604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f80613674848461432e565b909450925061368586868686613bcf565b9150915094509492505050565b5f80835f036136be57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136cf57505f905080611ced565b5f805f806136dd8a8a614383565b919b50995091506136ee8888614383565b919950975090505f6136ff8b614178565b90505f61370b8a614178565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613ad057841561376257507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aa8565b6f4b3b4ca85a86c47a098a22400000000083101561388e57678ac7230489e800008310156137f2576402540be4008310156137c057620186a08310156137b05750620186a090506005613a69565b506402540be4009050600a613a69565b655af3107a40008310156137df5750655af3107a40009050600e613a69565b50678ac7230489e8000090506013613a69565b6b204fce5e3e250261100000008310156138445769152d02c7e14af680000083101561382d575069152d02c7e14af680000090506017613a69565b506b204fce5e3e250261100000009050601c613a69565b6d314dc6448d9338c15b0a0000000083101561387357506d314dc6448d9338c15b0a0000000090506021613a69565b506f4b3b4ca85a86c47a098a22400000000090506026613a69565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139865773af298d050e4395d69670b12b7f41000000000000831015613921577172cb5bd86321e38cb6ce6682e8000000000083101561390257507172cb5bd86321e38cb6ce6682e800000000009050602b613a69565b5073af298d050e4395d69670b12b7f4100000000000090506030613a69565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613962575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a69565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a69565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a1c577a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000008310156139f457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a69565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a69565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a6957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613a7e57600a820491505f1901613a69565b815f03613aa8576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613ad0576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613ae757808d039c50613b25565b600160ff1b9c90038c015f811315613b2557806001600160ff1b03038b13613b1257998a0199613b25565b5f80995099505050505050505050611ced565b5f808e128015613b3457505f8c135b15613b5557600160ff1b8e01808d13613b4d575f613b51565b808d035b9150505b8b818f01039750613b728f8e613b6c8887896141c2565b8b61428e565b90995097505f811315613bbc57604c811315613b9c575f809a509a50505050505050505050611ced565b80600a0a8981613bae57613bae615cdc565b059850885f03613bbc575f97505b50969850949650611ced95505050505050565b5f8085158415178015613bfb57865f03613bef5784849250925050611ced565b86869250925050611ced565b613c0587876145dd565b9097509550613c1485856145dd565b909550935085841315613c28579395929492935b838603604c811115613c41578787935093505050611ced565b80600a0a8681613c5357613c53615cdc565b0595505086850180881860ff90811c151589881890911c15168015613cbc57876001600160ff1b0303613ca35760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cc0565b8198505b5096979596505050505050565b5f600882511015613cdf57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d4f846060015185604001516126f290919063ffffffff16565b915083604001519050613d6f836040015183611b4c90919063ffffffff16565b156130f85782604001519150613d9284606001518361276f90919063ffffffff16565b90509250929050565b5f80613da5614626565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613dfb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e1f9190615e78565b91509150915091565b5f805f851215613e5557604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e6757505f90506001611bfe565b8460ff8416850185811215613e995760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613ee557604c19831215613ebc575f809550955050505050611bfe565b825f03600a0a9150818481613ed357613ed3615cdc565b0495505084029091149150611bfe9050565b5f831315613f7e57604d831315613f225760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f3857613f38615cdc565b04841115613f6c5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfe9050565b8360019550955050505050611bfe565b5f836001600160a01b03163b5f03613fec575f80613fac85856146b1565b5090925090505f816003811115613fc557613fc5615d21565b148015613fe35750856001600160a01b0316826001600160a01b0316145b925050506103bb565b613ff78484846146f7565b90506103bb565b5f80614008614626565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613dfb573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b0386111561408f57600a860460018201600a88065f1493509350935050614099565b8593509150600190505b9250925092565b5f601b83900b8314838382614104577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156140e457620186a0860595506005850194505b8586601b0b146140ff57600a860595508460010194506140e4565b61411a565b855f0361411a57505f9250600191506130f89050565b848560030b1461415d575f85121561413a57505f92508291506130f89050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561419d57600160ff1b82036141975750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141cf86866141a6565b91509150815f036141f3578381816141e9576141e9615cdc565b04925050506103bb565b8382106142245760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561430a576001600160ff1b038411156142f7576142bb6001600160ff1b036001615553565b84036142cf5750600160ff1b905081611ced565b6142da600a85615cf0565b6142e390615eb8565b6142ee846001615d6e565b91509150611ced565b61430084615eb8565b8391509150611ced565b6001600160ff1b03841115614324576142e3600a85615cf0565b5082905081611ced565b5f80600160ff1b8403614379576001600160ff1b03830361436c5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361439b57505f91508190506001614099565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f03614588576f4b3b4ca85a86c47a098a22400000000085051580156143fd57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561441e576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561446657507f80000000000000000000000000000000000000000000000000000000000000138412155b1561447f57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144cb57507f800000000000000000000000000000000000000000000000000000000000000a8412155b156144e1576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561453057507f80000000000000000000000000000000000000000000000000000000000000028412155b15614546576064850294506002840393506144e1565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561457657506001600160ff1b018412155b1561458857600a850294506001840393505b600a808602908105861480156145a557506001600160ff1b018512155b156145b4578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6145ec8787614383565b9250925092508061461a576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061467d575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612f96576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f83516041036146e8576020840151604085015160608601515f1a6146da88828585614748565b955095509550505050614099565b505081515f9150600290614099565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561478157505f91506003905082614806565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147d2573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166147fd57505f925060019150829050614806565b92505f91508190505b9450945094915050565b604051806080016040528061482361483c565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b0316815260200161488a60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148b661483c565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f602082840312156148f8575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261491f575f80fd5b50813567ffffffffffffffff811115614936575f80fd5b6020830191508360208260051b85010111156130f8575f80fd5b5f805f60408486031215614962575f80fd5b833567ffffffffffffffff80821115614979575f80fd5b9085019060a0828803121561498c575f80fd5b909350602085013590808211156149a1575f80fd5b506149ae8682870161490f565b9497909650939450505050565b5f602082840312156149cb575f80fd5b5035919050565b6001600160a01b0381168114612e76575f80fd5b80356141a1816149d2565b5f805f805f60808688031215614a05575f80fd5b8535614a10816149d2565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a39575f80fd5b614a458882890161490f565b969995985093965092949392505050565b5f805f60608486031215614a68575f80fd5b8335614a73816149d2565b92506020840135614a83816149d2565b929592945050506040919091013590565b5f805f805f60808688031215614aa8575f80fd5b8535614ab3816149d2565b94506020860135614ac3816149d2565b935060408601359250606086013567ffffffffffffffff80821115614ae6575f80fd5b818801915088601f830112614af9575f80fd5b813581811115614b07575f80fd5b896020828501011115614b18575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b3b575f80fd5b81356103bb816149d2565b5f60c08284031215614b56575f80fd5b50919050565b5f60208284031215614b6c575f80fd5b813567ffffffffffffffff811115614b82575f80fd5b61052d84828501614b46565b5f805f60408486031215614ba0575f80fd5b833567ffffffffffffffff80821115614bb7575f80fd5b614bc387838801614b46565b945060208601359150808211156149a1575f80fd5b5f60208284031215614be8575f80fd5b813567ffffffffffffffff811115614bfe575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c20575f80fd5b823567ffffffffffffffff811115614c36575f80fd5b614c428582860161490f565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cd157603f19888603018452614cbf858351614c4e565b94509285019290850190600101614ca3565b5092979650505050505050565b5f8060408385031215614cef575f80fd5b8235614cfa816149d2565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b60405290565b6040805190810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b60405160a0810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b604051601f8201601f1916810167ffffffffffffffff81118282101715614db457614db4614d08565b604052919050565b5f82601f830112614dcb575f80fd5b813567ffffffffffffffff811115614de557614de5614d08565b614df8601f8201601f1916602001614d8b565b818152846020838601011115614e0c575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e38575f80fd5b614e40614d1c565b90508135614e4d816149d2565b81526020820135614e5d816149d2565b6020820152604082013567ffffffffffffffff811115614e7b575f80fd5b614e8784828501614dbc565b60408301525092915050565b5f67ffffffffffffffff821115614eac57614eac614d08565b5060051b60200190565b5f60408284031215614ec6575f80fd5b614ece614d45565b90508135614edb816149d2565b808252506020820135602082015292915050565b5f82601f830112614efe575f80fd5b81356020614f13614f0e83614e93565b614d8b565b8083825260208201915060208460061b870101935086841115614f34575f80fd5b602086015b84811015614f5957614f4b8882614eb6565b835291830191604001614f39565b509695505050505050565b5f60a08284031215614f74575f80fd5b614f7c614d68565b9050614f87826149e6565b8152602082013567ffffffffffffffff80821115614fa3575f80fd5b614faf85838601614e28565b60208401526040840135915080821115614fc7575f80fd5b614fd385838601614eef565b60408401526060840135915080821115614feb575f80fd5b50614ff884828501614eef565b6060830152506080820135608082015292915050565b5f61501b614f0e84614e93565b8381529050602080820190600585811b850187811115615039575f80fd5b855b8181101561512657803567ffffffffffffffff8082111561505a575f80fd5b908801906060828c03121561506d575f80fd5b615075614d1c565b8235615080816149d2565b81528287013582811115615092575f80fd5b8301601f81018d136150a2575f80fd5b80356150b0614f0e82614e93565b81815290881b8201890190898101908f8311156150cb575f80fd5b928a01925b828410156150e95783358252928a0192908a01906150d0565b848b01525060409150508381013583811115615103575f80fd5b61510f8e828701614dbc565b91830191909152508752505093830193830161503b565b50505050509392505050565b5f82601f830112615141575f80fd5b6103bb8383356020850161500e565b5f805f805f6101408688031215615165575f80fd5b853567ffffffffffffffff8082111561517c575f80fd5b61518889838a01614f64565b9650602088013591508082111561519d575f80fd5b6151a989838a01614f64565b95506151b88960408a01614b46565b94506101008801359150808211156151ce575f80fd5b6151da89838a01615132565b93506101208801359150808211156151f0575f80fd5b506151fd88828901615132565b9150509295509295909350565b5f6102b43683614f64565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8135615249816149d2565b6001600160a01b039081168452602083013590615265826149d2565b166020840152604082013536839003601e19018112615282575f80fd5b820160208101903567ffffffffffffffff81111561529e575f80fd5b8036038213156152ac575f80fd5b606060408601526152c1606086018284615215565b95945050505050565b5f808335601e198436030181126152df575f80fd5b830160208101925035905067ffffffffffffffff8111156152fe575f80fd5b8060061b36038213156130f8575f80fd5b8183525f60208085019450825f5b85811015615355578135615330816149d2565b6001600160a01b0316875281830135838801526040968701969091019060010161531d565b509495945050505050565b5f6001600160a01b038086168352846020840152606060408401528335615386816149d2565b166060830152602083013536849003605e190181126153a3575f80fd5b60a060808401526153ba610100840185830161523d565b90506153c960408501856152ca565b605f19808685030160a08701526153e184838561530f565b93506153f060608801886152ca565b93509150808685030160c08701525061540a83838361530f565b92505050608084013560e084015280915050949350505050565b5f615431614f0e84614e93565b80848252602080830192508560051b85013681111561544e575f80fd5b855b818110156154d857803567ffffffffffffffff8082111561546f575f80fd5b818901915060408236031215615483575f80fd5b61548b614d45565b823582811115615499575f80fd5b6154a536828601614e28565b82525085830135828111156154b8575f80fd5b6154c436828601615132565b828801525087525050938201938201615450565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261551c60a083018486615215565b98975050505050505050565b5f60208284031215615538575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461553f565b5f808335601e1984360301811261557b575f80fd5b83018035915067ffffffffffffffff821115615595575f80fd5b6020019150600581901b36038213156130f8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155d4575f80fd5b9190910192915050565b5f8235609e198336030181126155d4575f80fd5b5f808335601e19843603018112615607575f80fd5b83018035915067ffffffffffffffff821115615621575f80fd5b6020019150600681901b36038213156130f8575f80fd5b5f60808236031215615648575f80fd5b6040516080810167ffffffffffffffff828210818311171561566c5761566c614d08565b816040528435915080821115615680575f80fd5b61568c36838701614f64565b8352602085013560208401526040850135604084015260608501359150808211156156b5575f80fd5b506156c236828601615132565b60608301525092915050565b5f602082840312156156de575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561535557815180516001600160a01b031688528301518388015260409096019590820190600101615700565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261577d610100850182614c4e565b90506040830151848203604086015261579682826156ed565b915050606083015184820360608601526157b082826156ed565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615355578151875295820195908201906001016157da565b5f6001600160a01b03808716835260206080818501528651608080860152615822610100860182615730565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158be57601f1988830301845284518a815116835289810151878b850152615892888501826157c7565b91890151848303858b01529190506158aa8183614c4e565b968b0196958b019593505050600101615864565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e198436030181126158f5575f80fd5b83018035915067ffffffffffffffff82111561590f575f80fd5b6020019150368190038213156130f8575f80fd5b5f8235605e198336030181126155d4575f80fd5b5f6102b43683614e28565b5f60408284031215615952575f80fd5b6103bb8383614eb6565b6001600160a01b0384168152826020820152606060408201525f6152c16060830184615730565b6001600160a01b0385168152836020820152606060408201525f6159ab606083018486615215565b9695505050505050565b5f6103bb36848461500e565b818103818111156102b4576102b461553f565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a1981840187615730565b90508281036040840152615a2d8186615730565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615730565b5f60018201615a9657615a9661553f565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615ae857601f19868403018952615ad68383516157c7565b98840198925090830190600101615aba565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b2e610100840182614c4e565b9050606084015160808401526080840151601f19808584030160a0860152615b568383615a9d565b925060a08601519150808584030160c0860152615b7383836157c7565b925060c08601519150808584030160e0860152506152c182826157c7565b5f82601f830112615ba0575f80fd5b81516020615bb0614f0e83614e93565b8083825260208201915060208460051b870101935086841115615bd1575f80fd5b602086015b84811015614f595780518352918301918301615bd6565b5f8060408385031215615bfe575f80fd5b825167ffffffffffffffff80821115615c15575f80fd5b818501915085601f830112615c28575f80fd5b81516020615c38614f0e83614e93565b82815260059290921b84018101918181019089841115615c56575f80fd5b948201945b83861015615c7457855182529482019490820190615c5b565b91880151919650909350505080821115615c8c575f80fd5b50615c9985828601615b91565b9150509250929050565b828152604060208201525f61052d60408301846157c7565b6001600160a01b0383168152604060208201525f61052d6040830184615a9d565b634e487b7160e01b5f52601260045260245ffd5b5f82615d0a57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c4e565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d6157634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac61553f565b600181815b80851115615dc757815f1904821115615dad57615dad61553f565b80851615615dba57918102915b93841c9390800290615d92565b509250929050565b5f82615ddd575060016102b4565b81615de957505f6102b4565b8160018114615dff5760028114615e0957615e25565b60019150506102b4565b60ff841115615e1a57615e1a61553f565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e48575081810a6102b4565b615e528383615d8d565b805f1904821115615e6557615e6561553f565b029392505050565b5f6103bb8383615dcf565b5f8060408385031215615e89575f80fd5b825160048110615e97575f80fd5b602084015190925060ff81168114615ead575f80fd5b809150509250929050565b5f600160ff1b82016141975761419761553f56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f0f806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b61010761010236600461490a565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614972565b6102ba565b61010761013d3660046149dd565b5f9081526020819052604090205460011490565b61016461015f366004614a13565b6103c2565b005b610179610174366004614a78565b610521565b604051908152602001610113565b610107610195366004614ab6565b610535565b6101646101a8366004614a13565b610635565b6101796101bb366004614b4d565b6107c8565b6101d36101ce366004614b7e565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bb0565b610fc9565b61020e610209366004614bfa565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c31565b6113ce565b6040516101139190614c9e565b610164610259366004614c31565b6114b4565b61017961026c366004614d00565b61150e565b61016461027f366004615172565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611abc565b6102d06020850185614b4d565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b4d565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661522c565b611ad7565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615382565b60405180910390a16103a4818585611b06565b506103bb60015f80516020615eef83398151915255565b9392505050565b6103ca611abc565b3385856103d8838383611b3d565b6103e2865f611b6e565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611ba8565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c28565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615446565b611d18565b5050505050505061051a60015f80516020615eef83398151915255565b5050505050565b5f61052d848484611ee6565b949350505050565b5f61054a6001600160a01b0386168786612070565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615506565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c2919061554a565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615575565b6001600160a01b038a169291906120a5565b5060019695505050505050565b61063d611abc565b33858561064b838383611b3d565b5f8080806106598a82611b6e565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ee6565b90506106a58b826120e1565b94506106b3338e8e886120fd565b90935091505f6106c4338f88612174565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615446565b50505050505050505061051a60015f80516020615eef83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b4919061554a565b5f8061083a611abc565b6108476080840184615588565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614832565b61087861485e565b5f60405180606001604052808780608001906108949190615588565b5f8181106108a4576108a46155ce565b90506020028101906108b691906155e2565b6108c09080615600565b6108ce906040810190615614565b6108db60808b018b615588565b5f8181106108eb576108eb6155ce565b90506020028101906108fd91906155e2565b60200135818110610910576109106155ce565b6109269260206040909202019081019150614b4d565b6001600160a01b031681526020016109416080890189615588565b5f818110610951576109516155ce565b905060200281019061096391906155e2565b61096d9080615600565b61097b906060810190615614565b61098860808b018b615588565b5f818110610998576109986155ce565b90506020028101906109aa91906155e2565b604001358181106109bd576109bd6155ce565b6109d39260206040909202019081019150614b4d565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615588565b604080516001909201602002820181528501519093505f9250610a1d915082611b6e565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615588565b905081108015610a6357506040840151610a63905f611b6e565b15610e7157610a7560808a018a615588565b82818110610a8557610a856155ce565b9050602002810190610a9791906155e2565b610aa09061565a565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ce565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ce565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121dd565b5f610b6586611ad7565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d2a565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061224f565b90505f610c458c604001358360600151611b6e90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b6e565b1580610cc257506060820151610cc0905f611b6e565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156f0565b15610d6e576040808a015190850151610d40916120e1565b6060850151909250610d529083612714565b60408a0151909150610d649083612761565b60408a0152610dd5565b5f610d8a8560400151866060015161271490919063ffffffff16565b9050610da38a60400151826120e190919063ffffffff16565b9150610dbc85606001518361279190919063ffffffff16565b60408b0151909350610dce9083612761565b60408b0152505b610ddf8c826127c1565b9b50610deb8d836127c1565b9c50610df782856127f1565b610e0181856128b2565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e369493929190615818565b60405180910390a187516001018089526020028801849052610e5784612a5e565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156f0565b610e8d5786610e8f565b875b9050610e9c818a35612ca1565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612174565b505f9050610ee560a08a018a615902565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f615902565b6040518763ffffffff1660e01b8152600401610f3596959493929190615506565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611ba8565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ce565b6020026020010151612cdb565b600101610f75565b505050505050610fc460015f80516020615eef83398151915255565b915091565b5f610fd2611abc565b5f61102f61102a610fe38780615945565b610ff1906040810190615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612de592505050565b612e56565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f6020860186615614565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad6040860186615614565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615945565b6110f590615959565b815260200187806020019061110a9190615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615964565b81526020019060010190611129565b505050918352505060200161116d6040890189615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615964565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ad7565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061597e565b60405180910390a15f61124a60a08a018a615902565b905011156112e65761129b61126260a08a018a615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e7092505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c615902565b6040516112dd94939291906159a5565b60405180910390a15b6112f1828888611b06565b93505050506103bb60015f80516020615eef83398151915255565b5f80808061132661131d8680615600565b61032c9061522c565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a8680615600565b6113639061522c565b866020013587604001356121dd565b5f6113b06113808780615600565b6113899061522c565b60208801356040890135336113a160608c018c615588565b6113aa916159d7565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d2a565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ce565b90506020028101906114609190615902565b85604051602001611473939291906159f6565b604051602081830303815290604052612e9b565b838281518110611499576114996155ce565b6020908102919091010152600101611430565b505092915050565b6114bc611abc565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615446565b61150a60015f80516020615eef83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611576919061554a565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611abc565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ce565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ce565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ce565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ce565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ce565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ce565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ad7565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611aa6565b5f6117b186611ad7565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611aa6565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d9493929190615a19565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d2a565b90505f6118ad8383612f3b565b606081015181519192506118cd915f916118c79190612761565b90612ca1565b806118ec5750604081015160208201516118ec915f916118c791612761565b1561190a57604051630d86822160e01b815260040160405180910390fd5b805161191690846127f1565b6119248160200151836127f1565b6119328160400151846128b2565b6119408160600151836128b2565b61194983612cdb565b61195282612cdb565b606081015181515f916119659190612761565b90505f6119838360400151846020015161276190919063ffffffff16565b90506119b9338b606001518a60200135815181106119a3576119a36155ce565b60200260200101515f01518a6080013585611c28565b50506119ef338a606001518a60600135815181106119d9576119d96155ce565b60200260200101515f01518a60a0013584611c28565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a5883612a5e565b611a6182612a5e565b80516001600160e01b0316158015611a84575060208101516001600160e01b0316155b15611aa2576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615eef83398151915255565b611ac4612f89565b60025f80516020615eef83398151915255565b5f81604051602001611ae99190615a95565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b3890611b2e906104d6565b6104f88385615446565b505050565b80611b38576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b9c84848484612fba565b12979650505050505050565b5f805f611bb48561308e565b9050611bc0845f612ca1565b15611bde57604051632eaefac360e21b815260040160405180910390fd5b5f80611bea86846130f4565b9150915080611bff57611bfc82615aa7565b91505b8115611c1a57611c1a6001600160a01b0388168930856120a5565b50925090505b935093915050565b5f80611c348382612ca1565b15611c555760405163793a8f5560e01b815260048101849052602401610316565b83611c7357611c65868685612174565b505f9250829150611d0f9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad82866127c1565b9050611cb9815f612ca1565b15611cda5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611edc57868181518110611d7f57611d7f6155ce565b602002602001015193505f845f015160400151511115611ed4575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611df78d8a60200151613121565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e229190615b17565b5f60405180830381865afa158015611e3c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e639190810190615c0f565b9150505f81511115611ed25784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611ea4908a908590600401615cc5565b5f604051808303815f87803b158015611ebb575f80fd5b505af1158015611ecd573d5f803e3d5ffd5b505050505b505b600101611d64565b5050505050505050565b5f8115611f2057506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f2a84613403565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611fa291908716906370a0823190602401602060405180830381865afa158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c919061554a565b8361340f565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612021919088169063dd62ed3e90604401602060405180830381865afa158015611ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201b919061554a565b8461340f565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120669061206084846120e1565b906127c1565b93505050506103bb565b61207d838383600161344f565b611b3857604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b38484848460016134b1565b6120db57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ec8383612ca1565b6120f657816103bb565b5090919050565b5f806121098382612ca1565b1561212a5760405163793a8f5560e01b815260048101849052602401610316565b8361213a57611c65868685611ba8565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad8286612761565b5f805f6121808561308e565b905061218c845f612ca1565b156121aa57604051632d1671a360e11b815260040160405180910390fd5b5f6121b585836130f4565b50905080156121d2576121d26001600160a01b0387168883612070565b969095509350505050565b826060015181815181106121f3576121f36155ce565b60200260200101515f01516001600160a01b03168360400151838151811061221d5761221d6155ce565b60200260200101515f01516001600160a01b031603611b3857604051631cd2f1c760e21b815260040160405180910390fd5b6122576148c5565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122725790505090506122c76122958a611ad7565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122dc576122dc6155ce565b60200260200101819052505f6123118a604001518a81518110612301576123016155ce565b60200260200101515f0151613403565b90505f6123638b5f01518c604001518c81518110612331576123316155ce565b60200260200101515f01518d604001518d81518110612352576123526155ce565b602002602001015160200151611ee6565b90506123f28b604001518b8151811061237e5761237e6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123b0576123b06155ce565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612408576124086155ce565b602002602001018190525050505f61242f8a606001518981518110612301576123016155ce565b90505f6124708b5f01518c606001518b8151811061244f5761244f6155ce565b60200260200101515f01518d606001518c81518110612352576123526155ce565b90506124bd8b606001518a8151811061248b5761248b6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123b0576123b06155ce565b836001600403815181106124d3576124d36155ce565b602002602001018190525050506124ea8186613121565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161254a87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561258257612582614d2a565b6040519080825280602002602001820160405280156125ab578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125d19190615b17565b5f60405180830381865afa1580156125eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126129190810190615c0f565b9150915060028251101561263e578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126929087906004908110612661576126616155ce565b602002602001015160038151811061267b5761267b6155ce565b6020026020010151826120e190919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126c4576126c46155ce565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661351e565b915091505f612753838361363d565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661368a565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612744868686866136b4565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061274486868686613bf1565b818160800151600481518110612809576128096155ce565b6020026020010151600481518110612823576128236155ce565b6020026020010181815250506120db815f01515f01518260800151600481518110612850576128506155ce565b60200260200101515f81518110612869576128696155ce565b60200260200101515f1c836080015160048151811061288a5761288a6155ce565b60200260200101516002815181106128a4576128a46155ce565b6020026020010151856120fd565b8181608001516003815181106128ca576128ca6155ce565b60200260200101516004815181106128e4576128e46155ce565b6020908102919091010152805151608082015180515f9190600390811061290d5761290d6155ce565b60200260200101515f81518110612926576129266155ce565b60200260200101515f1c90505f836080015160038151811061294a5761294a6155ce565b6020026020010151600281518110612964576129646155ce565b602002602001015190505f801b8103612a0b57612981855f612ca1565b156129a25760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129d990866127c1565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a1a565b612a1783838388611c28565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a4f929190615cdd565b60405180910390a15050505050565b60c08101515115612ad8578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612aaa929091600401615cc5565b5f604051808303815f87803b158015612ac1575f80fd5b505af1158015612ad3573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b2e8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b6e57612b6e614d2a565b604051908082528060200260200182016040528015612b97578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612bc7578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612be79190615b17565b5f60405180830381865afa158015612c01573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c289190810190615c0f565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c70918590600401615cc5565b5f604051808303815f87803b158015612c87575f80fd5b505af1158015612c99573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612ccf84848484612fba565b13979650505050505050565b5f8160800151600381518110612cf357612cf36155ce565b6020026020010151600281518110612d0d57612d0d6155ce565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d3e57612d3e6155ce565b60200260200101515f81518110612d5757612d576155ce565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612ddc838383612174565b50505050505050565b6060604082511015612e0457505060408051602081019091525f815290565b5f60208301519050602060408451612e1c91906159e3565b612e269190615d12565b811115612e4257505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e6657505f919050565b50602001515f1a90565b612e7981613cef565b612e985780604051630c89984b60e31b81526004016103169190615d31565b50565b60605f612ea88484613d1d565b9050808015612ec957505f3d1180612ec957505f846001600160a01b03163b115b15612ede57612ed6613d30565b9150506102b4565b8015612f0857604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f1b57612f16613d49565b612f34565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f688383613d54565b82526040820152612f798284613d54565b6020830152606082015292915050565b5f80516020615eef83398151915254600203612fb857604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fdf5786859250925050611d0f565b505f85841315612ff3575092949193919260015b8386035f8112604c8213178015613026578215613018575f8994509450505050611d0f565b885f94509450505050611d0f565b600a82900a8981028a82828161303e5761303e615cfe565b051461306a57841561305a575f8b965096505050505050611d0f565b8a5f965096505050505050611d0f565b841561307f578896509450611d0f9350505050565b9550879450611d0f9350505050565b5f805f61309a84613dbd565b909250905060018260038111156130b3576130b3615d43565b141580156130d257505f8260038111156130cf576130cf615d43565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d57565b5f806001600160e01b038416601b0b60e085901d613113828287613e4a565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561313e5761313e614d2a565b604051908082528060200260200182016040528015613167578160200160208202803683370190505b5090505f80845111613179575f61317f565b83516001015b85516001010190505f8167ffffffffffffffff8111156131a1576131a1614d2a565b6040519080825280602002602001820160405280156131d457816020015b60608152602001906001900390816131bf5790505b5090505f6131f8604080516002815233602082015230818301526060810190915290565b82828151811061320a5761320a6155ce565b60200260200101819052505f5b875181101561326757818060010192505087818151811061323a5761323a6155ce565b6020026020010151838381518110613254576132546155ce565b6020908102919091010152600101613217565b508551156133f95780806001019150508382828151811061328a5761328a6155ce565b60200260200101819052505f5b86518110156133f7576133468782815181106132b5576132b56155ce565b60200260200101515f01516133236132f18a85815181106132d8576132d86155ce565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613335576133356155ce565b602002602001015160400151613fb0565b61336657604051630a57f30960e31b815260048101829052602401610316565b868181518110613378576133786155ce565b60200260200101515f01516001600160a01b03165f1b8582815181106133a0576133a06155ce565b60200260200101818152505081806001019250508681815181106133c6576133c66155ce565b6020026020010151602001518383815181106133e4576133e46155ce565b6020908102919091010152600101613297565b505b5095945050505050565b5f805f61309a84614020565b5f805f805f61341e878761407f565b9250925092505f8061343085856140c2565b915091508183801561343f5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134a5578383151615613499573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661350d578383151615613501573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613536575f92505f9150613633565b6135408487615d90565b91505f61354c8861419a565b90505f6135588761419a565b90505f61356583836141c8565b5090505f6f0785ee10d5da46d900f436a00000000082111561359a576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135bb57670de0b6b3a7640000820491506012015b633b9aca008211156135d457633b9aca00820491506009015b6127108211156135e957612710820491506004015b81156135fd57600a820491506001016135e9565b6136078187615d90565b95506136298b8a613623878761361e87600a615e8f565b6141e4565b896142b0565b9097509550505050505b5094509492505050565b5f805f61364a85856140c2565b915091508015801561365a575081155b1561368257604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136968484614350565b90945092506136a786868686613bf1565b9150915094509492505050565b5f80835f036136e057604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136f157505f905080611d0f565b5f805f806136ff8a8a6143a5565b919b509950915061371088886143a5565b919950975090505f6137218b61419a565b90505f61372d8a61419a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613af257841561378457507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aca565b6f4b3b4ca85a86c47a098a2240000000008310156138b057678ac7230489e80000831015613814576402540be4008310156137e257620186a08310156137d25750620186a090506005613a8b565b506402540be4009050600a613a8b565b655af3107a40008310156138015750655af3107a40009050600e613a8b565b50678ac7230489e8000090506013613a8b565b6b204fce5e3e250261100000008310156138665769152d02c7e14af680000083101561384f575069152d02c7e14af680000090506017613a8b565b506b204fce5e3e250261100000009050601c613a8b565b6d314dc6448d9338c15b0a0000000083101561389557506d314dc6448d9338c15b0a0000000090506021613a8b565b506f4b3b4ca85a86c47a098a22400000000090506026613a8b565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139a85773af298d050e4395d69670b12b7f41000000000000831015613943577172cb5bd86321e38cb6ce6682e8000000000083101561392457507172cb5bd86321e38cb6ce6682e800000000009050602b613a8b565b5073af298d050e4395d69670b12b7f4100000000000090506030613a8b565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613984575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a8b565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a8b565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a3e577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a1657507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a8b565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a8b565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a8b57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613aa057600a820491505f1901613a8b565b815f03613aca576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613af2576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b0957808d039c50613b47565b600160ff1b9c90038c015f811315613b4757806001600160ff1b03038b13613b3457998a0199613b47565b5f80995099505050505050505050611d0f565b5f808e128015613b5657505f8c135b15613b7757600160ff1b8e01808d13613b6f575f613b73565b808d035b9150505b8b818f01039750613b948f8e613b8e8887896141e4565b8b6142b0565b90995097505f811315613bde57604c811315613bbe575f809a509a50505050505050505050611d0f565b80600a0a8981613bd057613bd0615cfe565b059850885f03613bde575f97505b50969850949650611d0f95505050505050565b5f8085158415178015613c1d57865f03613c115784849250925050611d0f565b86869250925050611d0f565b613c2787876145ff565b9097509550613c3685856145ff565b909550935085841315613c4a579395929492935b838603604c811115613c63578787935093505050611d0f565b80600a0a8681613c7557613c75615cfe565b0595505086850180881860ff90811c151589881890911c15168015613cde57876001600160ff1b0303613cc55760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613ce2565b8198505b5096979596505050505050565b5f600882511015613d0157505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d718460600151856040015161271490919063ffffffff16565b915083604001519050613d91836040015183611b6e90919063ffffffff16565b1561311a5782604001519150613db484606001518361279190919063ffffffff16565b90509250929050565b5f80613dc7614648565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e419190615e9a565b91509150915091565b5f805f851215613e7757604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e8957505f90506001611c20565b8460ff8416850185811215613ebb5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f0757604c19831215613ede575f809550955050505050611c20565b825f03600a0a9150818481613ef557613ef5615cfe565b0495505084029091149150611c209050565b5f831315613fa057604d831315613f445760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f5a57613f5a615cfe565b04841115613f8e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611c209050565b8360019550955050505050611c20565b5f836001600160a01b03163b5f0361400e575f80613fce85856146d3565b5090925090505f816003811115613fe757613fe7615d43565b1480156140055750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614019848484614719565b90506103bb565b5f8061402a614648565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e1d573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140b157600a860460018201600a88065f14935093509350506140bb565b8593509150600190505b9250925092565b5f601b83900b8314838382614126577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561410657620186a0860595506005850194505b8586601b0b1461412157600a86059550846001019450614106565b61413c565b855f0361413c57505f92506001915061311a9050565b848560030b1461417f575f85121561415c57505f925082915061311a9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141bf57600160ff1b82036141b95750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141f186866141c8565b91509150815f036142155783818161420b5761420b615cfe565b04925050506103bb565b8382106142465760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561432c576001600160ff1b03841115614319576142dd6001600160ff1b036001615575565b84036142f15750600160ff1b905081611d0f565b6142fc600a85615d12565b61430590615eda565b614310846001615d90565b91509150611d0f565b61432284615eda565b8391509150611d0f565b6001600160ff1b0384111561434657614305600a85615d12565b5082905081611d0f565b5f80600160ff1b840361439b576001600160ff1b03830361438e5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143bd57505f915081905060016140bb565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145aa576f4b3b4ca85a86c47a098a224000000000850515801561441f57507f80000000000000000000000000000000000000000000000000000000000000268412155b15614440576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561448857507f80000000000000000000000000000000000000000000000000000000000000138412155b156144a157678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144ed57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614503576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561455257507f80000000000000000000000000000000000000000000000000000000000000028412155b1561456857606485029450600284039350614503565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561459857506001600160ff1b018412155b156145aa57600a850294506001840393505b600a808602908105861480156145c757506001600160ff1b018512155b156145d6578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61460e87876143a5565b9250925092508061463c576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061469f575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fb8576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f835160410361470a576020840151604085015160608601515f1a6146fc8882858561476a565b9550955095505050506140bb565b505081515f91506002906140bb565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147a357505f91506003905082614828565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147f4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661481f57505f925060019150829050614828565b92505f91508190505b9450945094915050565b604051806080016040528061484561485e565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148ac60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148d861485e565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f6020828403121561491a575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614941575f80fd5b50813567ffffffffffffffff811115614958575f80fd5b6020830191508360208260051b850101111561311a575f80fd5b5f805f60408486031215614984575f80fd5b833567ffffffffffffffff8082111561499b575f80fd5b9085019060a082880312156149ae575f80fd5b909350602085013590808211156149c3575f80fd5b506149d086828701614931565b9497909650939450505050565b5f602082840312156149ed575f80fd5b5035919050565b6001600160a01b0381168114612e98575f80fd5b80356141c3816149f4565b5f805f805f60808688031215614a27575f80fd5b8535614a32816149f4565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a5b575f80fd5b614a6788828901614931565b969995985093965092949392505050565b5f805f60608486031215614a8a575f80fd5b8335614a95816149f4565b92506020840135614aa5816149f4565b929592945050506040919091013590565b5f805f805f60808688031215614aca575f80fd5b8535614ad5816149f4565b94506020860135614ae5816149f4565b935060408601359250606086013567ffffffffffffffff80821115614b08575f80fd5b818801915088601f830112614b1b575f80fd5b813581811115614b29575f80fd5b896020828501011115614b3a575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b5d575f80fd5b81356103bb816149f4565b5f60c08284031215614b78575f80fd5b50919050565b5f60208284031215614b8e575f80fd5b813567ffffffffffffffff811115614ba4575f80fd5b61052d84828501614b68565b5f805f60408486031215614bc2575f80fd5b833567ffffffffffffffff80821115614bd9575f80fd5b614be587838801614b68565b945060208601359150808211156149c3575f80fd5b5f60208284031215614c0a575f80fd5b813567ffffffffffffffff811115614c20575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c42575f80fd5b823567ffffffffffffffff811115614c58575f80fd5b614c6485828601614931565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cf357603f19888603018452614ce1858351614c70565b94509285019290850190600101614cc5565b5092979650505050505050565b5f8060408385031215614d11575f80fd5b8235614d1c816149f4565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405290565b6040805190810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405160a0810167ffffffffffffffff81118282101715614d6157614d61614d2a565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dd657614dd6614d2a565b604052919050565b5f82601f830112614ded575f80fd5b813567ffffffffffffffff811115614e0757614e07614d2a565b614e1a601f8201601f1916602001614dad565b818152846020838601011115614e2e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e5a575f80fd5b614e62614d3e565b90508135614e6f816149f4565b81526020820135614e7f816149f4565b6020820152604082013567ffffffffffffffff811115614e9d575f80fd5b614ea984828501614dde565b60408301525092915050565b5f67ffffffffffffffff821115614ece57614ece614d2a565b5060051b60200190565b5f60408284031215614ee8575f80fd5b614ef0614d67565b90508135614efd816149f4565b808252506020820135602082015292915050565b5f82601f830112614f20575f80fd5b81356020614f35614f3083614eb5565b614dad565b8083825260208201915060208460061b870101935086841115614f56575f80fd5b602086015b84811015614f7b57614f6d8882614ed8565b835291830191604001614f5b565b509695505050505050565b5f60a08284031215614f96575f80fd5b614f9e614d8a565b9050614fa982614a08565b8152602082013567ffffffffffffffff80821115614fc5575f80fd5b614fd185838601614e4a565b60208401526040840135915080821115614fe9575f80fd5b614ff585838601614f11565b6040840152606084013591508082111561500d575f80fd5b5061501a84828501614f11565b6060830152506080820135608082015292915050565b5f61503d614f3084614eb5565b8381529050602080820190600585811b85018781111561505b575f80fd5b855b8181101561514857803567ffffffffffffffff8082111561507c575f80fd5b908801906060828c03121561508f575f80fd5b615097614d3e565b82356150a2816149f4565b815282870135828111156150b4575f80fd5b8301601f81018d136150c4575f80fd5b80356150d2614f3082614eb5565b81815290881b8201890190898101908f8311156150ed575f80fd5b928a01925b8284101561510b5783358252928a0192908a01906150f2565b848b01525060409150508381013583811115615125575f80fd5b6151318e828701614dde565b91830191909152508752505093830193830161505d565b50505050509392505050565b5f82601f830112615163575f80fd5b6103bb83833560208501615030565b5f805f805f6101408688031215615187575f80fd5b853567ffffffffffffffff8082111561519e575f80fd5b6151aa89838a01614f86565b965060208801359150808211156151bf575f80fd5b6151cb89838a01614f86565b95506151da8960408a01614b68565b94506101008801359150808211156151f0575f80fd5b6151fc89838a01615154565b9350610120880135915080821115615212575f80fd5b5061521f88828901615154565b9150509295509295909350565b5f6102b43683614f86565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561526b816149f4565b6001600160a01b039081168452602083013590615287826149f4565b166020840152604082013536839003601e190181126152a4575f80fd5b820160208101903567ffffffffffffffff8111156152c0575f80fd5b8036038213156152ce575f80fd5b606060408601526152e3606086018284615237565b95945050505050565b5f808335601e19843603018112615301575f80fd5b830160208101925035905067ffffffffffffffff811115615320575f80fd5b8060061b360382131561311a575f80fd5b8183525f60208085019450825f5b85811015615377578135615352816149f4565b6001600160a01b0316875281830135838801526040968701969091019060010161533f565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153a8816149f4565b166060830152602083013536849003605e190181126153c5575f80fd5b60a060808401526153dc610100840185830161525f565b90506153eb60408501856152ec565b605f19808685030160a0870152615403848385615331565b935061541260608801886152ec565b93509150808685030160c08701525061542c838383615331565b92505050608084013560e084015280915050949350505050565b5f615453614f3084614eb5565b80848252602080830192508560051b850136811115615470575f80fd5b855b818110156154fa57803567ffffffffffffffff80821115615491575f80fd5b8189019150604082360312156154a5575f80fd5b6154ad614d67565b8235828111156154bb575f80fd5b6154c736828601614e4a565b82525085830135828111156154da575f80fd5b6154e636828601615154565b828801525087525050938201938201615472565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261553e60a083018486615237565b98975050505050505050565b5f6020828403121561555a575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615561565b5f808335601e1984360301811261559d575f80fd5b83018035915067ffffffffffffffff8211156155b7575f80fd5b6020019150600581901b360382131561311a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155f6575f80fd5b9190910192915050565b5f8235609e198336030181126155f6575f80fd5b5f808335601e19843603018112615629575f80fd5b83018035915067ffffffffffffffff821115615643575f80fd5b6020019150600681901b360382131561311a575f80fd5b5f6080823603121561566a575f80fd5b6040516080810167ffffffffffffffff828210818311171561568e5761568e614d2a565b8160405284359150808211156156a2575f80fd5b6156ae36838701614f86565b8352602085013560208401526040850135604084015260608501359150808211156156d7575f80fd5b506156e436828601615154565b60608301525092915050565b5f60208284031215615700575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561537757815180516001600160a01b031688528301518388015260409096019590820190600101615722565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261579f610100850182614c70565b9050604083015184820360408601526157b8828261570f565b915050606083015184820360608601526157d2828261570f565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615377578151875295820195908201906001016157fc565b5f6001600160a01b03808716835260206080818501528651608080860152615844610100860182615752565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158e057601f1988830301845284518a815116835289810151878b8501526158b4888501826157e9565b91890151848303858b01529190506158cc8183614c70565b968b0196958b019593505050600101615886565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615917575f80fd5b83018035915067ffffffffffffffff821115615931575f80fd5b60200191503681900382131561311a575f80fd5b5f8235605e198336030181126155f6575f80fd5b5f6102b43683614e4a565b5f60408284031215615974575f80fd5b6103bb8383614ed8565b6001600160a01b0384168152826020820152606060408201525f6152e36060830184615752565b6001600160a01b0385168152836020820152606060408201525f6159cd606083018486615237565b9695505050505050565b5f6103bb368484615030565b818103818111156102b4576102b4615561565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a3b81840187615752565b90508281036040840152615a4f8186615752565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615752565b5f60018201615ab857615ab8615561565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0a57601f19868403018952615af88383516157e9565b98840198925090830190600101615adc565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b50610100840182614c70565b9050606084015160808401526080840151601f19808584030160a0860152615b788383615abf565b925060a08601519150808584030160c0860152615b9583836157e9565b925060c08601519150808584030160e0860152506152e382826157e9565b5f82601f830112615bc2575f80fd5b81516020615bd2614f3083614eb5565b8083825260208201915060208460051b870101935086841115615bf3575f80fd5b602086015b84811015614f7b5780518352918301918301615bf8565b5f8060408385031215615c20575f80fd5b825167ffffffffffffffff80821115615c37575f80fd5b818501915085601f830112615c4a575f80fd5b81516020615c5a614f3083614eb5565b82815260059290921b84018101918181019089841115615c78575f80fd5b948201945b83861015615c9657855182529482019490820190615c7d565b91880151919650909350505080821115615cae575f80fd5b50615cbb85828601615bb3565b9150509250929050565b828152604060208201525f61052d60408301846157e9565b6001600160a01b0383168152604060208201525f61052d6040830184615abf565b634e487b7160e01b5f52601260045260245ffd5b5f82615d2c57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c70565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d8357634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac615561565b600181815b80851115615de957815f1904821115615dcf57615dcf615561565b80851615615ddc57918102915b93841c9390800290615db4565b509250929050565b5f82615dff575060016102b4565b81615e0b57505f6102b4565b8160018114615e215760028114615e2b57615e47565b60019150506102b4565b60ff841115615e3c57615e3c615561565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e6a575081810a6102b4565b615e748383615daf565b805f1904821115615e8757615e87615561565b029392505050565b5f6103bb8383615df1565b5f8060408385031215615eab575f80fd5b825160048110615eb9575f80fd5b602084015190925060ff81168114615ecf575f80fd5b809150509250929050565b5f600160ff1b82016141b9576141b961556156fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b6101076101023660046148e8565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614950565b6102ba565b61010761013d3660046149bb565b5f9081526020819052604090205460011490565b61016461015f3660046149f1565b6103c2565b005b610179610174366004614a56565b610521565b604051908152602001610113565b610107610195366004614a94565b610535565b6101646101a83660046149f1565b610635565b6101796101bb366004614b2b565b6107c8565b6101d36101ce366004614b5c565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614b8e565b610fc9565b61020e610209366004614bd8565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c0f565b6113ce565b6040516101139190614c7c565b610164610259366004614c0f565b6114b4565b61017961026c366004614cde565b61150e565b61016461027f366004615150565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9a565b6102d06020850185614b2b565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b2b565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661520a565b611ab5565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615360565b60405180910390a16103a4818585611ae4565b506103bb60015f80516020615ecd83398151915255565b9392505050565b6103ca611a9a565b3385856103d8838383611b1b565b6103e2865f611b4c565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b86565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c06565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615424565b611cf6565b5050505050505061051a60015f80516020615ecd83398151915255565b5050505050565b5f61052d848484611ec4565b949350505050565b5f61054a6001600160a01b038616878661204e565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b906004016154e4565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615528565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615553565b6001600160a01b038a16929190612083565b5060019695505050505050565b61063d611a9a565b33858561064b838383611b1b565b5f8080806106598a82611b4c565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec4565b90506106a58b826120bf565b94506106b3338e8e886120db565b90935091505f6106c4338f88612152565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615424565b50505050505050505061051a60015f80516020615ecd83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615528565b5f8061083a611a9a565b6108476080840184615566565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614810565b61087861483c565b5f60405180606001604052808780608001906108949190615566565b5f8181106108a4576108a46155ac565b90506020028101906108b691906155c0565b6108c090806155de565b6108ce9060408101906155f2565b6108db60808b018b615566565b5f8181106108eb576108eb6155ac565b90506020028101906108fd91906155c0565b60200135818110610910576109106155ac565b6109269260206040909202019081019150614b2b565b6001600160a01b031681526020016109416080890189615566565b5f818110610951576109516155ac565b905060200281019061096391906155c0565b61096d90806155de565b61097b9060608101906155f2565b61098860808b018b615566565b5f818110610998576109986155ac565b90506020028101906109aa91906155c0565b604001358181106109bd576109bd6155ac565b6109d39260206040909202019081019150614b2b565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615566565b604080516001909201602002820181528501519093505f9250610a1d915082611b4c565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615566565b905081108015610a6357506040840151610a63905f611b4c565b15610e7157610a7560808a018a615566565b82818110610a8557610a856155ac565b9050602002810190610a9791906155c0565b610aa090615638565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ac565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ac565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121bb565b5f610b6586611ab5565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d08565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061222d565b90505f610c458c604001358360600151611b4c90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b4c565b1580610cc257506060820151610cc0905f611b4c565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156ce565b15610d6e576040808a015190850151610d40916120bf565b6060850151909250610d5290836126f2565b60408a0151909150610d64908361273f565b60408a0152610dd5565b5f610d8a856040015186606001516126f290919063ffffffff16565b9050610da38a60400151826120bf90919063ffffffff16565b9150610dbc85606001518361276f90919063ffffffff16565b60408b0151909350610dce908361273f565b60408b0152505b610ddf8c8261279f565b9b50610deb8d8361279f565b9c50610df782856127cf565b610e018185612890565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e3694939291906157f6565b60405180910390a187516001018089526020028801849052610e5784612a3c565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156ce565b610e8d5786610e8f565b875b9050610e9c818a35612c7f565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612152565b505f9050610ee560a08a018a6158e0565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f6158e0565b6040518763ffffffff1660e01b8152600401610f35969594939291906154e4565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611b86565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ac565b6020026020010151612cb9565b600101610f75565b505050505050610fc460015f80516020615ecd83398151915255565b915091565b5f610fd2611a9a565b5f61102f61102a610fe38780615923565b610ff19060408101906158e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612dc392505050565b612e34565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f60208601866155f2565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad60408601866155f2565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615923565b6110f590615937565b815260200187806020019061110a91906155f2565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615942565b81526020019060010190611129565b505050918352505060200161116d60408901896155f2565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615942565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ab5565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061595c565b60405180910390a15f61124a60a08a018a6158e0565b905011156112e65761129b61126260a08a018a6158e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e4e92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c6158e0565b6040516112dd9493929190615983565b60405180910390a15b6112f1828888611ae4565b93505050506103bb60015f80516020615ecd83398151915255565b5f80808061132661131d86806155de565b61032c9061520a565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a86806155de565b6113639061520a565b866020013587604001356121bb565b5f6113b061138087806155de565b6113899061520a565b60208801356040890135336113a160608c018c615566565b6113aa916159b5565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d08565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ac565b905060200281019061146091906158e0565b85604051602001611473939291906159d4565b604051602081830303815290604052612e79565b838281518110611499576114996155ac565b6020908102919091010152600101611430565b505092915050565b6114bc611a9a565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615424565b61150a60015f80516020615ecd83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115769190615528565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611a9a565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ac565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ac565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ac565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ac565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ac565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ac565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ab5565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a84565b5f6117b186611ab5565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a84565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d94939291906159f7565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d08565b90505f6118ad8383612f19565b90506118bc815f0151846127cf565b6118ca8160200151836127cf565b6118d8816040015184612890565b6118e6816060015183612890565b6118ef83612cb9565b6118f882612cb9565b606081015181515f9161190b919061273f565b90505f6119298360400151846020015161273f90919063ffffffff16565b9050611935825f612c7f565b806119455750611945815f612c7f565b1561196357604051630d86822160e01b815260040160405180910390fd5b611997338b606001518a6020013581518110611981576119816155ac565b60200260200101515f01518a6080013585611c06565b50506119cd338a606001518a60600135815181106119b7576119b76155ac565b60200260200101515f01518a60a0013584611c06565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3683612a3c565b611a3f82612a3c565b80516001600160e01b0316158015611a62575060208101516001600160e01b0316155b15611a80576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615ecd83398151915255565b611aa2612f67565b60025f80516020615ecd83398151915255565b5f81604051602001611ac79190615a73565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1690611b0c906104d6565b6104f88385615424565b505050565b80611b16576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7a84848484612f98565b12979650505050505050565b5f805f611b928561306c565b9050611b9e845f612c7f565b15611bbc57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc886846130d2565b9150915080611bdd57611bda82615a85565b91505b8115611bf857611bf86001600160a01b038816893085612083565b50925090505b935093915050565b5f80611c128382612c7f565b15611c335760405163793a8f5560e01b815260048101849052602401610316565b83611c5157611c43868685612152565b505f9250829150611ced9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8b828661279f565b9050611c97815f612c7f565b15611cb85760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eba57868181518110611d5d57611d5d6155ac565b602002602001015193505f845f015160400151511115611eb2575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd58d8a602001516130ff565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e009190615af5565b5f60405180830381865afa158015611e1a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e419190810190615bed565b9150505f81511115611eb05784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e82908a908590600401615ca3565b5f604051808303815f87803b158015611e99575f80fd5b505af1158015611eab573d5f803e3d5ffd5b505050505b505b600101611d42565b5050505050505050565b5f8115611efe57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f08846133e1565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8091908716906370a0823190602401602060405180830381865afa158015611f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7a9190615528565b836133ed565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611fff919088169063dd62ed3e90604401602060405180830381865afa158015611fd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff99190615528565b846133ed565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120449061203e84846120bf565b9061279f565b93505050506103bb565b61205b838383600161342d565b611b1657604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b61209184848484600161348f565b6120b957604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ca8383612c7f565b6120d457816103bb565b5090919050565b5f806120e78382612c7f565b156121085760405163793a8f5560e01b815260048101849052602401610316565b8361211857611c43868685611b86565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8b828661273f565b5f805f61215e8561306c565b905061216a845f612c7f565b1561218857604051632d1671a360e11b815260040160405180910390fd5b5f61219385836130d2565b50905080156121b0576121b06001600160a01b038716888361204e565b969095509350505050565b826060015181815181106121d1576121d16155ac565b60200260200101515f01516001600160a01b0316836040015183815181106121fb576121fb6155ac565b60200260200101515f01516001600160a01b031603611b1657604051631cd2f1c760e21b815260040160405180910390fd5b6122356148a3565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122505790505090506122a56122738a611ab5565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122ba576122ba6155ac565b60200260200101819052505f6122ef8a604001518a815181106122df576122df6155ac565b60200260200101515f01516133e1565b90505f6123418b5f01518c604001518c8151811061230f5761230f6155ac565b60200260200101515f01518d604001518d81518110612330576123306155ac565b602002602001015160200151611ec4565b90506123d08b604001518b8151811061235c5761235c6155ac565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d8151811061238e5761238e6155ac565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b836001600303815181106123e6576123e66155ac565b602002602001018190525050505f61240d8a6060015189815181106122df576122df6155ac565b90505f61244e8b5f01518c606001518b8151811061242d5761242d6155ac565b60200260200101515f01518d606001518c81518110612330576123306155ac565b905061249b8b606001518a81518110612469576124696155ac565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c8151811061238e5761238e6155ac565b836001600403815181106124b1576124b16155ac565b602002602001018190525050506124c881866130ff565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161252887305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561256057612560614d08565b604051908082528060200260200182016040528015612589578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125af9190615af5565b5f60405180830381865afa1580156125c9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125f09190810190615bed565b9150915060028251101561261c578151604051630fbb8e5560e21b815260040161031691815260200190565b602082015160408301518551612670908790600490811061263f5761263f6155ac565b6020026020010151600381518110612659576126596155ac565b6020026020010151826120bf90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126a2576126a26155ac565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612722868686866134fc565b915091505f612731838361361b565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613668565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613692565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272286868686613bcf565b8181608001516004815181106127e7576127e76155ac565b6020026020010151600481518110612801576128016155ac565b6020026020010181815250506120b9815f01515f0151826080015160048151811061282e5761282e6155ac565b60200260200101515f81518110612847576128476155ac565b60200260200101515f1c8360800151600481518110612868576128686155ac565b6020026020010151600281518110612882576128826155ac565b6020026020010151856120db565b8181608001516003815181106128a8576128a86155ac565b60200260200101516004815181106128c2576128c26155ac565b6020908102919091010152805151608082015180515f919060039081106128eb576128eb6155ac565b60200260200101515f81518110612904576129046155ac565b60200260200101515f1c90505f8360800151600381518110612928576129286155ac565b6020026020010151600281518110612942576129426155ac565b602002602001015190505f801b81036129e95761295f855f612c7f565b156129805760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129b7908661279f565b6001600160a01b038085165f9081526001602090815260408083209387168352928152828220858352905220556129f8565b6129f583838388611c06565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a2d929190615cbb565b60405180910390a15050505050565b60c08101515115612ab6578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612a88929091600401615ca3565b5f604051808303815f87803b158015612a9f575f80fd5b505af1158015612ab1573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b0c8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b4c57612b4c614d08565b604051908082528060200260200182016040528015612b75578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612ba5578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612bc59190615af5565b5f60405180830381865afa158015612bdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c069190810190615bed565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c4e918590600401615ca3565b5f604051808303815f87803b158015612c65575f80fd5b505af1158015612c77573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cad84848484612f98565b13979650505050505050565b5f8160800151600381518110612cd157612cd16155ac565b6020026020010151600281518110612ceb57612ceb6155ac565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d1c57612d1c6155ac565b60200260200101515f81518110612d3557612d356155ac565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dba838383612152565b50505050505050565b6060604082511015612de257505060408051602081019091525f815290565b5f60208301519050602060408451612dfa91906159c1565b612e049190615cf0565b811115612e2057505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e4457505f919050565b50602001515f1a90565b612e5781613ccd565b612e765780604051630c89984b60e31b81526004016103169190615d0f565b50565b60605f612e868484613cfb565b9050808015612ea757505f3d1180612ea757505f846001600160a01b03163b115b15612ebc57612eb4613d0e565b9150506102b4565b8015612ee657604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612ef957612ef4613d27565b612f12565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f468383613d32565b82526040820152612f578284613d32565b6020830152606082015292915050565b5f80516020615ecd83398151915254600203612f9657604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fbd5786859250925050611ced565b505f85841315612fd1575092949193919260015b8386035f8112604c8213178015613004578215612ff6575f8994509450505050611ced565b885f94509450505050611ced565b600a82900a8981028a82828161301c5761301c615cdc565b0514613048578415613038575f8b965096505050505050611ced565b8a5f965096505050505050611ced565b841561305d578896509450611ced9350505050565b9550879450611ced9350505050565b5f805f61307884613d9b565b9092509050600182600381111561309157613091615d21565b141580156130b057505f8260038111156130ad576130ad615d21565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d35565b5f806001600160e01b038416601b0b60e085901d6130f1828287613e28565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561311c5761311c614d08565b604051908082528060200260200182016040528015613145578160200160208202803683370190505b5090505f80845111613157575f61315d565b83516001015b85516001010190505f8167ffffffffffffffff81111561317f5761317f614d08565b6040519080825280602002602001820160405280156131b257816020015b606081526020019060019003908161319d5790505b5090505f6131d6604080516002815233602082015230818301526060810190915290565b8282815181106131e8576131e86155ac565b60200260200101819052505f5b8751811015613245578180600101925050878181518110613218576132186155ac565b6020026020010151838381518110613232576132326155ac565b60209081029190910101526001016131f5565b508551156133d757808060010191505083828281518110613268576132686155ac565b60200260200101819052505f5b86518110156133d557613324878281518110613293576132936155ac565b60200260200101515f01516133016132cf8a85815181106132b6576132b66155ac565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613313576133136155ac565b602002602001015160400151613f8e565b61334457604051630a57f30960e31b815260048101829052602401610316565b868181518110613356576133566155ac565b60200260200101515f01516001600160a01b03165f1b85828151811061337e5761337e6155ac565b60200260200101818152505081806001019250508681815181106133a4576133a46155ac565b6020026020010151602001518383815181106133c2576133c26155ac565b6020908102919091010152600101613275565b505b5095945050505050565b5f805f61307884613ffe565b5f805f805f6133fc878761405d565b9250925092505f8061340e85856140a0565b915091508183801561341d5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316613483578383151615613477573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166134eb5783831516156134df573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613514575f92505f9150613611565b61351e8487615d6e565b91505f61352a88614178565b90505f61353687614178565b90505f61354383836141a6565b5090505f6f0785ee10d5da46d900f436a000000000821115613578576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561359957670de0b6b3a7640000820491506012015b633b9aca008211156135b257633b9aca00820491506009015b6127108211156135c757612710820491506004015b81156135db57600a820491506001016135c7565b6135e58187615d6e565b95506136078b8a61360187876135fc87600a615e6d565b6141c2565b8961428e565b9097509550505050505b5094509492505050565b5f805f61362885856140a0565b9150915080158015613638575081155b1561366057604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f80613674848461432e565b909450925061368586868686613bcf565b9150915094509492505050565b5f80835f036136be57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136cf57505f905080611ced565b5f805f806136dd8a8a614383565b919b50995091506136ee8888614383565b919950975090505f6136ff8b614178565b90505f61370b8a614178565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613ad057841561376257507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aa8565b6f4b3b4ca85a86c47a098a22400000000083101561388e57678ac7230489e800008310156137f2576402540be4008310156137c057620186a08310156137b05750620186a090506005613a69565b506402540be4009050600a613a69565b655af3107a40008310156137df5750655af3107a40009050600e613a69565b50678ac7230489e8000090506013613a69565b6b204fce5e3e250261100000008310156138445769152d02c7e14af680000083101561382d575069152d02c7e14af680000090506017613a69565b506b204fce5e3e250261100000009050601c613a69565b6d314dc6448d9338c15b0a0000000083101561387357506d314dc6448d9338c15b0a0000000090506021613a69565b506f4b3b4ca85a86c47a098a22400000000090506026613a69565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139865773af298d050e4395d69670b12b7f41000000000000831015613921577172cb5bd86321e38cb6ce6682e8000000000083101561390257507172cb5bd86321e38cb6ce6682e800000000009050602b613a69565b5073af298d050e4395d69670b12b7f4100000000000090506030613a69565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613962575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a69565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a69565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a1c577a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000008310156139f457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a69565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a69565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a6957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613a7e57600a820491505f1901613a69565b815f03613aa8576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613ad0576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613ae757808d039c50613b25565b600160ff1b9c90038c015f811315613b2557806001600160ff1b03038b13613b1257998a0199613b25565b5f80995099505050505050505050611ced565b5f808e128015613b3457505f8c135b15613b5557600160ff1b8e01808d13613b4d575f613b51565b808d035b9150505b8b818f01039750613b728f8e613b6c8887896141c2565b8b61428e565b90995097505f811315613bbc57604c811315613b9c575f809a509a50505050505050505050611ced565b80600a0a8981613bae57613bae615cdc565b059850885f03613bbc575f97505b50969850949650611ced95505050505050565b5f8085158415178015613bfb57865f03613bef5784849250925050611ced565b86869250925050611ced565b613c0587876145dd565b9097509550613c1485856145dd565b909550935085841315613c28579395929492935b838603604c811115613c41578787935093505050611ced565b80600a0a8681613c5357613c53615cdc565b0595505086850180881860ff90811c151589881890911c15168015613cbc57876001600160ff1b0303613ca35760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cc0565b8198505b5096979596505050505050565b5f600882511015613cdf57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d4f846060015185604001516126f290919063ffffffff16565b915083604001519050613d6f836040015183611b4c90919063ffffffff16565b156130f85782604001519150613d9284606001518361276f90919063ffffffff16565b90509250929050565b5f80613da5614626565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613dfb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e1f9190615e78565b91509150915091565b5f805f851215613e5557604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e6757505f90506001611bfe565b8460ff8416850185811215613e995760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613ee557604c19831215613ebc575f809550955050505050611bfe565b825f03600a0a9150818481613ed357613ed3615cdc565b0495505084029091149150611bfe9050565b5f831315613f7e57604d831315613f225760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f3857613f38615cdc565b04841115613f6c5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfe9050565b8360019550955050505050611bfe565b5f836001600160a01b03163b5f03613fec575f80613fac85856146b1565b5090925090505f816003811115613fc557613fc5615d21565b148015613fe35750856001600160a01b0316826001600160a01b0316145b925050506103bb565b613ff78484846146f7565b90506103bb565b5f80614008614626565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613dfb573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b0386111561408f57600a860460018201600a88065f1493509350935050614099565b8593509150600190505b9250925092565b5f601b83900b8314838382614104577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156140e457620186a0860595506005850194505b8586601b0b146140ff57600a860595508460010194506140e4565b61411a565b855f0361411a57505f9250600191506130f89050565b848560030b1461415d575f85121561413a57505f92508291506130f89050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561419d57600160ff1b82036141975750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141cf86866141a6565b91509150815f036141f3578381816141e9576141e9615cdc565b04925050506103bb565b8382106142245760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561430a576001600160ff1b038411156142f7576142bb6001600160ff1b036001615553565b84036142cf5750600160ff1b905081611ced565b6142da600a85615cf0565b6142e390615eb8565b6142ee846001615d6e565b91509150611ced565b61430084615eb8565b8391509150611ced565b6001600160ff1b03841115614324576142e3600a85615cf0565b5082905081611ced565b5f80600160ff1b8403614379576001600160ff1b03830361436c5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361439b57505f91508190506001614099565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f03614588576f4b3b4ca85a86c47a098a22400000000085051580156143fd57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561441e576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561446657507f80000000000000000000000000000000000000000000000000000000000000138412155b1561447f57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144cb57507f800000000000000000000000000000000000000000000000000000000000000a8412155b156144e1576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561453057507f80000000000000000000000000000000000000000000000000000000000000028412155b15614546576064850294506002840393506144e1565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561457657506001600160ff1b018412155b1561458857600a850294506001840393505b600a808602908105861480156145a557506001600160ff1b018512155b156145b4578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6145ec8787614383565b9250925092508061461a576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061467d575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612f96576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f83516041036146e8576020840151604085015160608601515f1a6146da88828585614748565b955095509550505050614099565b505081515f9150600290614099565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561478157505f91506003905082614806565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147d2573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166147fd57505f925060019150829050614806565b92505f91508190505b9450945094915050565b604051806080016040528061482361483c565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b0316815260200161488a60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148b661483c565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f602082840312156148f8575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261491f575f80fd5b50813567ffffffffffffffff811115614936575f80fd5b6020830191508360208260051b85010111156130f8575f80fd5b5f805f60408486031215614962575f80fd5b833567ffffffffffffffff80821115614979575f80fd5b9085019060a0828803121561498c575f80fd5b909350602085013590808211156149a1575f80fd5b506149ae8682870161490f565b9497909650939450505050565b5f602082840312156149cb575f80fd5b5035919050565b6001600160a01b0381168114612e76575f80fd5b80356141a1816149d2565b5f805f805f60808688031215614a05575f80fd5b8535614a10816149d2565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a39575f80fd5b614a458882890161490f565b969995985093965092949392505050565b5f805f60608486031215614a68575f80fd5b8335614a73816149d2565b92506020840135614a83816149d2565b929592945050506040919091013590565b5f805f805f60808688031215614aa8575f80fd5b8535614ab3816149d2565b94506020860135614ac3816149d2565b935060408601359250606086013567ffffffffffffffff80821115614ae6575f80fd5b818801915088601f830112614af9575f80fd5b813581811115614b07575f80fd5b896020828501011115614b18575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b3b575f80fd5b81356103bb816149d2565b5f60c08284031215614b56575f80fd5b50919050565b5f60208284031215614b6c575f80fd5b813567ffffffffffffffff811115614b82575f80fd5b61052d84828501614b46565b5f805f60408486031215614ba0575f80fd5b833567ffffffffffffffff80821115614bb7575f80fd5b614bc387838801614b46565b945060208601359150808211156149a1575f80fd5b5f60208284031215614be8575f80fd5b813567ffffffffffffffff811115614bfe575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c20575f80fd5b823567ffffffffffffffff811115614c36575f80fd5b614c428582860161490f565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cd157603f19888603018452614cbf858351614c4e565b94509285019290850190600101614ca3565b5092979650505050505050565b5f8060408385031215614cef575f80fd5b8235614cfa816149d2565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b60405290565b6040805190810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b60405160a0810167ffffffffffffffff81118282101715614d3f57614d3f614d08565b604051601f8201601f1916810167ffffffffffffffff81118282101715614db457614db4614d08565b604052919050565b5f82601f830112614dcb575f80fd5b813567ffffffffffffffff811115614de557614de5614d08565b614df8601f8201601f1916602001614d8b565b818152846020838601011115614e0c575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e38575f80fd5b614e40614d1c565b90508135614e4d816149d2565b81526020820135614e5d816149d2565b6020820152604082013567ffffffffffffffff811115614e7b575f80fd5b614e8784828501614dbc565b60408301525092915050565b5f67ffffffffffffffff821115614eac57614eac614d08565b5060051b60200190565b5f60408284031215614ec6575f80fd5b614ece614d45565b90508135614edb816149d2565b808252506020820135602082015292915050565b5f82601f830112614efe575f80fd5b81356020614f13614f0e83614e93565b614d8b565b8083825260208201915060208460061b870101935086841115614f34575f80fd5b602086015b84811015614f5957614f4b8882614eb6565b835291830191604001614f39565b509695505050505050565b5f60a08284031215614f74575f80fd5b614f7c614d68565b9050614f87826149e6565b8152602082013567ffffffffffffffff80821115614fa3575f80fd5b614faf85838601614e28565b60208401526040840135915080821115614fc7575f80fd5b614fd385838601614eef565b60408401526060840135915080821115614feb575f80fd5b50614ff884828501614eef565b6060830152506080820135608082015292915050565b5f61501b614f0e84614e93565b8381529050602080820190600585811b850187811115615039575f80fd5b855b8181101561512657803567ffffffffffffffff8082111561505a575f80fd5b908801906060828c03121561506d575f80fd5b615075614d1c565b8235615080816149d2565b81528287013582811115615092575f80fd5b8301601f81018d136150a2575f80fd5b80356150b0614f0e82614e93565b81815290881b8201890190898101908f8311156150cb575f80fd5b928a01925b828410156150e95783358252928a0192908a01906150d0565b848b01525060409150508381013583811115615103575f80fd5b61510f8e828701614dbc565b91830191909152508752505093830193830161503b565b50505050509392505050565b5f82601f830112615141575f80fd5b6103bb8383356020850161500e565b5f805f805f6101408688031215615165575f80fd5b853567ffffffffffffffff8082111561517c575f80fd5b61518889838a01614f64565b9650602088013591508082111561519d575f80fd5b6151a989838a01614f64565b95506151b88960408a01614b46565b94506101008801359150808211156151ce575f80fd5b6151da89838a01615132565b93506101208801359150808211156151f0575f80fd5b506151fd88828901615132565b9150509295509295909350565b5f6102b43683614f64565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8135615249816149d2565b6001600160a01b039081168452602083013590615265826149d2565b166020840152604082013536839003601e19018112615282575f80fd5b820160208101903567ffffffffffffffff81111561529e575f80fd5b8036038213156152ac575f80fd5b606060408601526152c1606086018284615215565b95945050505050565b5f808335601e198436030181126152df575f80fd5b830160208101925035905067ffffffffffffffff8111156152fe575f80fd5b8060061b36038213156130f8575f80fd5b8183525f60208085019450825f5b85811015615355578135615330816149d2565b6001600160a01b0316875281830135838801526040968701969091019060010161531d565b509495945050505050565b5f6001600160a01b038086168352846020840152606060408401528335615386816149d2565b166060830152602083013536849003605e190181126153a3575f80fd5b60a060808401526153ba610100840185830161523d565b90506153c960408501856152ca565b605f19808685030160a08701526153e184838561530f565b93506153f060608801886152ca565b93509150808685030160c08701525061540a83838361530f565b92505050608084013560e084015280915050949350505050565b5f615431614f0e84614e93565b80848252602080830192508560051b85013681111561544e575f80fd5b855b818110156154d857803567ffffffffffffffff8082111561546f575f80fd5b818901915060408236031215615483575f80fd5b61548b614d45565b823582811115615499575f80fd5b6154a536828601614e28565b82525085830135828111156154b8575f80fd5b6154c436828601615132565b828801525087525050938201938201615450565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261551c60a083018486615215565b98975050505050505050565b5f60208284031215615538575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461553f565b5f808335601e1984360301811261557b575f80fd5b83018035915067ffffffffffffffff821115615595575f80fd5b6020019150600581901b36038213156130f8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155d4575f80fd5b9190910192915050565b5f8235609e198336030181126155d4575f80fd5b5f808335601e19843603018112615607575f80fd5b83018035915067ffffffffffffffff821115615621575f80fd5b6020019150600681901b36038213156130f8575f80fd5b5f60808236031215615648575f80fd5b6040516080810167ffffffffffffffff828210818311171561566c5761566c614d08565b816040528435915080821115615680575f80fd5b61568c36838701614f64565b8352602085013560208401526040850135604084015260608501359150808211156156b5575f80fd5b506156c236828601615132565b60608301525092915050565b5f602082840312156156de575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561535557815180516001600160a01b031688528301518388015260409096019590820190600101615700565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261577d610100850182614c4e565b90506040830151848203604086015261579682826156ed565b915050606083015184820360608601526157b082826156ed565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615355578151875295820195908201906001016157da565b5f6001600160a01b03808716835260206080818501528651608080860152615822610100860182615730565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158be57601f1988830301845284518a815116835289810151878b850152615892888501826157c7565b91890151848303858b01529190506158aa8183614c4e565b968b0196958b019593505050600101615864565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e198436030181126158f5575f80fd5b83018035915067ffffffffffffffff82111561590f575f80fd5b6020019150368190038213156130f8575f80fd5b5f8235605e198336030181126155d4575f80fd5b5f6102b43683614e28565b5f60408284031215615952575f80fd5b6103bb8383614eb6565b6001600160a01b0384168152826020820152606060408201525f6152c16060830184615730565b6001600160a01b0385168152836020820152606060408201525f6159ab606083018486615215565b9695505050505050565b5f6103bb36848461500e565b818103818111156102b4576102b461553f565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a1981840187615730565b90508281036040840152615a2d8186615730565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615730565b5f60018201615a9657615a9661553f565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615ae857601f19868403018952615ad68383516157c7565b98840198925090830190600101615aba565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b2e610100840182614c4e565b9050606084015160808401526080840151601f19808584030160a0860152615b568383615a9d565b925060a08601519150808584030160c0860152615b7383836157c7565b925060c08601519150808584030160e0860152506152c182826157c7565b5f82601f830112615ba0575f80fd5b81516020615bb0614f0e83614e93565b8083825260208201915060208460051b870101935086841115615bd1575f80fd5b602086015b84811015614f595780518352918301918301615bd6565b5f8060408385031215615bfe575f80fd5b825167ffffffffffffffff80821115615c15575f80fd5b818501915085601f830112615c28575f80fd5b81516020615c38614f0e83614e93565b82815260059290921b84018101918181019089841115615c56575f80fd5b948201945b83861015615c7457855182529482019490820190615c5b565b91880151919650909350505080821115615c8c575f80fd5b50615c9985828601615b91565b9150509250929050565b828152604060208201525f61052d60408301846157c7565b6001600160a01b0383168152604060208201525f61052d6040830184615a9d565b634e487b7160e01b5f52601260045260245ffd5b5f82615d0a57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c4e565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d6157634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac61553f565b600181815b80851115615dc757815f1904821115615dad57615dad61553f565b80851615615dba57918102915b93841c9390800290615d92565b509250929050565b5f82615ddd575060016102b4565b81615de957505f6102b4565b8160018114615dff5760028114615e0957615e25565b60019150506102b4565b60ff841115615e1a57615e1a61553f565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e48575081810a6102b4565b615e528383615d8d565b805f1904821115615e6557615e6561553f565b029392505050565b5f6103bb8383615dcf565b5f8060408385031215615e89575f80fd5b825160048110615e97575f80fd5b602084015190925060ff81168114615ead575f80fd5b809150509250929050565b5f600160ff1b82016141975761419761553f56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b61010761010236600461490a565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614972565b6102ba565b61010761013d3660046149dd565b5f9081526020819052604090205460011490565b61016461015f366004614a13565b6103c2565b005b610179610174366004614a78565b610521565b604051908152602001610113565b610107610195366004614ab6565b610535565b6101646101a8366004614a13565b610635565b6101796101bb366004614b4d565b6107c8565b6101d36101ce366004614b7e565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bb0565b610fc9565b61020e610209366004614bfa565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c31565b6113ce565b6040516101139190614c9e565b610164610259366004614c31565b6114b4565b61017961026c366004614d00565b61150e565b61016461027f366004615172565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611abc565b6102d06020850185614b4d565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b4d565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661522c565b611ad7565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615382565b60405180910390a16103a4818585611b06565b506103bb60015f80516020615eef83398151915255565b9392505050565b6103ca611abc565b3385856103d8838383611b3d565b6103e2865f611b6e565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611ba8565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c28565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615446565b611d18565b5050505050505061051a60015f80516020615eef83398151915255565b5050505050565b5f61052d848484611ee6565b949350505050565b5f61054a6001600160a01b0386168786612070565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615506565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c2919061554a565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615575565b6001600160a01b038a169291906120a5565b5060019695505050505050565b61063d611abc565b33858561064b838383611b3d565b5f8080806106598a82611b6e565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ee6565b90506106a58b826120e1565b94506106b3338e8e886120fd565b90935091505f6106c4338f88612174565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615446565b50505050505050505061051a60015f80516020615eef83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b4919061554a565b5f8061083a611abc565b6108476080840184615588565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614832565b61087861485e565b5f60405180606001604052808780608001906108949190615588565b5f8181106108a4576108a46155ce565b90506020028101906108b691906155e2565b6108c09080615600565b6108ce906040810190615614565b6108db60808b018b615588565b5f8181106108eb576108eb6155ce565b90506020028101906108fd91906155e2565b60200135818110610910576109106155ce565b6109269260206040909202019081019150614b4d565b6001600160a01b031681526020016109416080890189615588565b5f818110610951576109516155ce565b905060200281019061096391906155e2565b61096d9080615600565b61097b906060810190615614565b61098860808b018b615588565b5f818110610998576109986155ce565b90506020028101906109aa91906155e2565b604001358181106109bd576109bd6155ce565b6109d39260206040909202019081019150614b4d565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615588565b604080516001909201602002820181528501519093505f9250610a1d915082611b6e565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615588565b905081108015610a6357506040840151610a63905f611b6e565b15610e7157610a7560808a018a615588565b82818110610a8557610a856155ce565b9050602002810190610a9791906155e2565b610aa09061565a565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ce565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ce565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121dd565b5f610b6586611ad7565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d2a565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061224f565b90505f610c458c604001358360600151611b6e90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b6e565b1580610cc257506060820151610cc0905f611b6e565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156f0565b15610d6e576040808a015190850151610d40916120e1565b6060850151909250610d529083612714565b60408a0151909150610d649083612761565b60408a0152610dd5565b5f610d8a8560400151866060015161271490919063ffffffff16565b9050610da38a60400151826120e190919063ffffffff16565b9150610dbc85606001518361279190919063ffffffff16565b60408b0151909350610dce9083612761565b60408b0152505b610ddf8c826127c1565b9b50610deb8d836127c1565b9c50610df782856127f1565b610e0181856128b2565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e369493929190615818565b60405180910390a187516001018089526020028801849052610e5784612a5e565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156f0565b610e8d5786610e8f565b875b9050610e9c818a35612ca1565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612174565b505f9050610ee560a08a018a615902565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f615902565b6040518763ffffffff1660e01b8152600401610f3596959493929190615506565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611ba8565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ce565b6020026020010151612cdb565b600101610f75565b505050505050610fc460015f80516020615eef83398151915255565b915091565b5f610fd2611abc565b5f61102f61102a610fe38780615945565b610ff1906040810190615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612de592505050565b612e56565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f6020860186615614565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad6040860186615614565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615945565b6110f590615959565b815260200187806020019061110a9190615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615964565b81526020019060010190611129565b505050918352505060200161116d6040890189615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615964565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ad7565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061597e565b60405180910390a15f61124a60a08a018a615902565b905011156112e65761129b61126260a08a018a615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e7092505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c615902565b6040516112dd94939291906159a5565b60405180910390a15b6112f1828888611b06565b93505050506103bb60015f80516020615eef83398151915255565b5f80808061132661131d8680615600565b61032c9061522c565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a8680615600565b6113639061522c565b866020013587604001356121dd565b5f6113b06113808780615600565b6113899061522c565b60208801356040890135336113a160608c018c615588565b6113aa916159d7565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d2a565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ce565b90506020028101906114609190615902565b85604051602001611473939291906159f6565b604051602081830303815290604052612e9b565b838281518110611499576114996155ce565b6020908102919091010152600101611430565b505092915050565b6114bc611abc565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615446565b61150a60015f80516020615eef83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611576919061554a565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611abc565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ce565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ce565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ce565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ce565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ce565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ce565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ad7565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611aa6565b5f6117b186611ad7565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611aa6565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d9493929190615a19565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d2a565b90505f6118ad8383612f3b565b606081015181519192506118cd915f916118c79190612761565b90612ca1565b806118ec5750604081015160208201516118ec915f916118c791612761565b1561190a57604051630d86822160e01b815260040160405180910390fd5b805161191690846127f1565b6119248160200151836127f1565b6119328160400151846128b2565b6119408160600151836128b2565b61194983612cdb565b61195282612cdb565b606081015181515f916119659190612761565b90505f6119838360400151846020015161276190919063ffffffff16565b90506119b9338b606001518a60200135815181106119a3576119a36155ce565b60200260200101515f01518a6080013585611c28565b50506119ef338a606001518a60600135815181106119d9576119d96155ce565b60200260200101515f01518a60a0013584611c28565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a5883612a5e565b611a6182612a5e565b80516001600160e01b0316158015611a84575060208101516001600160e01b0316155b15611aa2576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615eef83398151915255565b611ac4612f89565b60025f80516020615eef83398151915255565b5f81604051602001611ae99190615a95565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b3890611b2e906104d6565b6104f88385615446565b505050565b80611b38576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b9c84848484612fba565b12979650505050505050565b5f805f611bb48561308e565b9050611bc0845f612ca1565b15611bde57604051632eaefac360e21b815260040160405180910390fd5b5f80611bea86846130f4565b9150915080611bff57611bfc82615aa7565b91505b8115611c1a57611c1a6001600160a01b0388168930856120a5565b50925090505b935093915050565b5f80611c348382612ca1565b15611c555760405163793a8f5560e01b815260048101849052602401610316565b83611c7357611c65868685612174565b505f9250829150611d0f9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad82866127c1565b9050611cb9815f612ca1565b15611cda5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611edc57868181518110611d7f57611d7f6155ce565b602002602001015193505f845f015160400151511115611ed4575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611df78d8a60200151613121565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e229190615b17565b5f60405180830381865afa158015611e3c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e639190810190615c0f565b9150505f81511115611ed25784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611ea4908a908590600401615cc5565b5f604051808303815f87803b158015611ebb575f80fd5b505af1158015611ecd573d5f803e3d5ffd5b505050505b505b600101611d64565b5050505050505050565b5f8115611f2057506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f2a84613403565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611fa291908716906370a0823190602401602060405180830381865afa158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c919061554a565b8361340f565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612021919088169063dd62ed3e90604401602060405180830381865afa158015611ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201b919061554a565b8461340f565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120669061206084846120e1565b906127c1565b93505050506103bb565b61207d838383600161344f565b611b3857604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b38484848460016134b1565b6120db57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ec8383612ca1565b6120f657816103bb565b5090919050565b5f806121098382612ca1565b1561212a5760405163793a8f5560e01b815260048101849052602401610316565b8361213a57611c65868685611ba8565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad8286612761565b5f805f6121808561308e565b905061218c845f612ca1565b156121aa57604051632d1671a360e11b815260040160405180910390fd5b5f6121b585836130f4565b50905080156121d2576121d26001600160a01b0387168883612070565b969095509350505050565b826060015181815181106121f3576121f36155ce565b60200260200101515f01516001600160a01b03168360400151838151811061221d5761221d6155ce565b60200260200101515f01516001600160a01b031603611b3857604051631cd2f1c760e21b815260040160405180910390fd5b6122576148c5565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122725790505090506122c76122958a611ad7565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122dc576122dc6155ce565b60200260200101819052505f6123118a604001518a81518110612301576123016155ce565b60200260200101515f0151613403565b90505f6123638b5f01518c604001518c81518110612331576123316155ce565b60200260200101515f01518d604001518d81518110612352576123526155ce565b602002602001015160200151611ee6565b90506123f28b604001518b8151811061237e5761237e6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123b0576123b06155ce565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612408576124086155ce565b602002602001018190525050505f61242f8a606001518981518110612301576123016155ce565b90505f6124708b5f01518c606001518b8151811061244f5761244f6155ce565b60200260200101515f01518d606001518c81518110612352576123526155ce565b90506124bd8b606001518a8151811061248b5761248b6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123b0576123b06155ce565b836001600403815181106124d3576124d36155ce565b602002602001018190525050506124ea8186613121565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161254a87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561258257612582614d2a565b6040519080825280602002602001820160405280156125ab578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125d19190615b17565b5f60405180830381865afa1580156125eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126129190810190615c0f565b9150915060028251101561263e578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126929087906004908110612661576126616155ce565b602002602001015160038151811061267b5761267b6155ce565b6020026020010151826120e190919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126c4576126c46155ce565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661351e565b915091505f612753838361363d565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661368a565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612744868686866136b4565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061274486868686613bf1565b818160800151600481518110612809576128096155ce565b6020026020010151600481518110612823576128236155ce565b6020026020010181815250506120db815f01515f01518260800151600481518110612850576128506155ce565b60200260200101515f81518110612869576128696155ce565b60200260200101515f1c836080015160048151811061288a5761288a6155ce565b60200260200101516002815181106128a4576128a46155ce565b6020026020010151856120fd565b8181608001516003815181106128ca576128ca6155ce565b60200260200101516004815181106128e4576128e46155ce565b6020908102919091010152805151608082015180515f9190600390811061290d5761290d6155ce565b60200260200101515f81518110612926576129266155ce565b60200260200101515f1c90505f836080015160038151811061294a5761294a6155ce565b6020026020010151600281518110612964576129646155ce565b602002602001015190505f801b8103612a0b57612981855f612ca1565b156129a25760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129d990866127c1565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a1a565b612a1783838388611c28565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a4f929190615cdd565b60405180910390a15050505050565b60c08101515115612ad8578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612aaa929091600401615cc5565b5f604051808303815f87803b158015612ac1575f80fd5b505af1158015612ad3573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b2e8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b6e57612b6e614d2a565b604051908082528060200260200182016040528015612b97578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612bc7578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612be79190615b17565b5f60405180830381865afa158015612c01573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c289190810190615c0f565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c70918590600401615cc5565b5f604051808303815f87803b158015612c87575f80fd5b505af1158015612c99573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612ccf84848484612fba565b13979650505050505050565b5f8160800151600381518110612cf357612cf36155ce565b6020026020010151600281518110612d0d57612d0d6155ce565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d3e57612d3e6155ce565b60200260200101515f81518110612d5757612d576155ce565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612ddc838383612174565b50505050505050565b6060604082511015612e0457505060408051602081019091525f815290565b5f60208301519050602060408451612e1c91906159e3565b612e269190615d12565b811115612e4257505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e6657505f919050565b50602001515f1a90565b612e7981613cef565b612e985780604051630c89984b60e31b81526004016103169190615d31565b50565b60605f612ea88484613d1d565b9050808015612ec957505f3d1180612ec957505f846001600160a01b03163b115b15612ede57612ed6613d30565b9150506102b4565b8015612f0857604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f1b57612f16613d49565b612f34565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f688383613d54565b82526040820152612f798284613d54565b6020830152606082015292915050565b5f80516020615eef83398151915254600203612fb857604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fdf5786859250925050611d0f565b505f85841315612ff3575092949193919260015b8386035f8112604c8213178015613026578215613018575f8994509450505050611d0f565b885f94509450505050611d0f565b600a82900a8981028a82828161303e5761303e615cfe565b051461306a57841561305a575f8b965096505050505050611d0f565b8a5f965096505050505050611d0f565b841561307f578896509450611d0f9350505050565b9550879450611d0f9350505050565b5f805f61309a84613dbd565b909250905060018260038111156130b3576130b3615d43565b141580156130d257505f8260038111156130cf576130cf615d43565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d57565b5f806001600160e01b038416601b0b60e085901d613113828287613e4a565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561313e5761313e614d2a565b604051908082528060200260200182016040528015613167578160200160208202803683370190505b5090505f80845111613179575f61317f565b83516001015b85516001010190505f8167ffffffffffffffff8111156131a1576131a1614d2a565b6040519080825280602002602001820160405280156131d457816020015b60608152602001906001900390816131bf5790505b5090505f6131f8604080516002815233602082015230818301526060810190915290565b82828151811061320a5761320a6155ce565b60200260200101819052505f5b875181101561326757818060010192505087818151811061323a5761323a6155ce565b6020026020010151838381518110613254576132546155ce565b6020908102919091010152600101613217565b508551156133f95780806001019150508382828151811061328a5761328a6155ce565b60200260200101819052505f5b86518110156133f7576133468782815181106132b5576132b56155ce565b60200260200101515f01516133236132f18a85815181106132d8576132d86155ce565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613335576133356155ce565b602002602001015160400151613fb0565b61336657604051630a57f30960e31b815260048101829052602401610316565b868181518110613378576133786155ce565b60200260200101515f01516001600160a01b03165f1b8582815181106133a0576133a06155ce565b60200260200101818152505081806001019250508681815181106133c6576133c66155ce565b6020026020010151602001518383815181106133e4576133e46155ce565b6020908102919091010152600101613297565b505b5095945050505050565b5f805f61309a84614020565b5f805f805f61341e878761407f565b9250925092505f8061343085856140c2565b915091508183801561343f5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134a5578383151615613499573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661350d578383151615613501573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613536575f92505f9150613633565b6135408487615d90565b91505f61354c8861419a565b90505f6135588761419a565b90505f61356583836141c8565b5090505f6f0785ee10d5da46d900f436a00000000082111561359a576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135bb57670de0b6b3a7640000820491506012015b633b9aca008211156135d457633b9aca00820491506009015b6127108211156135e957612710820491506004015b81156135fd57600a820491506001016135e9565b6136078187615d90565b95506136298b8a613623878761361e87600a615e8f565b6141e4565b896142b0565b9097509550505050505b5094509492505050565b5f805f61364a85856140c2565b915091508015801561365a575081155b1561368257604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136968484614350565b90945092506136a786868686613bf1565b9150915094509492505050565b5f80835f036136e057604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136f157505f905080611d0f565b5f805f806136ff8a8a6143a5565b919b509950915061371088886143a5565b919950975090505f6137218b61419a565b90505f61372d8a61419a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613af257841561378457507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aca565b6f4b3b4ca85a86c47a098a2240000000008310156138b057678ac7230489e80000831015613814576402540be4008310156137e257620186a08310156137d25750620186a090506005613a8b565b506402540be4009050600a613a8b565b655af3107a40008310156138015750655af3107a40009050600e613a8b565b50678ac7230489e8000090506013613a8b565b6b204fce5e3e250261100000008310156138665769152d02c7e14af680000083101561384f575069152d02c7e14af680000090506017613a8b565b506b204fce5e3e250261100000009050601c613a8b565b6d314dc6448d9338c15b0a0000000083101561389557506d314dc6448d9338c15b0a0000000090506021613a8b565b506f4b3b4ca85a86c47a098a22400000000090506026613a8b565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139a85773af298d050e4395d69670b12b7f41000000000000831015613943577172cb5bd86321e38cb6ce6682e8000000000083101561392457507172cb5bd86321e38cb6ce6682e800000000009050602b613a8b565b5073af298d050e4395d69670b12b7f4100000000000090506030613a8b565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613984575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a8b565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a8b565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a3e577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a1657507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a8b565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a8b565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a8b57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613aa057600a820491505f1901613a8b565b815f03613aca576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613af2576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b0957808d039c50613b47565b600160ff1b9c90038c015f811315613b4757806001600160ff1b03038b13613b3457998a0199613b47565b5f80995099505050505050505050611d0f565b5f808e128015613b5657505f8c135b15613b7757600160ff1b8e01808d13613b6f575f613b73565b808d035b9150505b8b818f01039750613b948f8e613b8e8887896141e4565b8b6142b0565b90995097505f811315613bde57604c811315613bbe575f809a509a50505050505050505050611d0f565b80600a0a8981613bd057613bd0615cfe565b059850885f03613bde575f97505b50969850949650611d0f95505050505050565b5f8085158415178015613c1d57865f03613c115784849250925050611d0f565b86869250925050611d0f565b613c2787876145ff565b9097509550613c3685856145ff565b909550935085841315613c4a579395929492935b838603604c811115613c63578787935093505050611d0f565b80600a0a8681613c7557613c75615cfe565b0595505086850180881860ff90811c151589881890911c15168015613cde57876001600160ff1b0303613cc55760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613ce2565b8198505b5096979596505050505050565b5f600882511015613d0157505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d718460600151856040015161271490919063ffffffff16565b915083604001519050613d91836040015183611b6e90919063ffffffff16565b1561311a5782604001519150613db484606001518361279190919063ffffffff16565b90509250929050565b5f80613dc7614648565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e419190615e9a565b91509150915091565b5f805f851215613e7757604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e8957505f90506001611c20565b8460ff8416850185811215613ebb5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f0757604c19831215613ede575f809550955050505050611c20565b825f03600a0a9150818481613ef557613ef5615cfe565b0495505084029091149150611c209050565b5f831315613fa057604d831315613f445760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f5a57613f5a615cfe565b04841115613f8e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611c209050565b8360019550955050505050611c20565b5f836001600160a01b03163b5f0361400e575f80613fce85856146d3565b5090925090505f816003811115613fe757613fe7615d43565b1480156140055750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614019848484614719565b90506103bb565b5f8061402a614648565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e1d573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140b157600a860460018201600a88065f14935093509350506140bb565b8593509150600190505b9250925092565b5f601b83900b8314838382614126577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561410657620186a0860595506005850194505b8586601b0b1461412157600a86059550846001019450614106565b61413c565b855f0361413c57505f92506001915061311a9050565b848560030b1461417f575f85121561415c57505f925082915061311a9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141bf57600160ff1b82036141b95750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141f186866141c8565b91509150815f036142155783818161420b5761420b615cfe565b04925050506103bb565b8382106142465760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561432c576001600160ff1b03841115614319576142dd6001600160ff1b036001615575565b84036142f15750600160ff1b905081611d0f565b6142fc600a85615d12565b61430590615eda565b614310846001615d90565b91509150611d0f565b61432284615eda565b8391509150611d0f565b6001600160ff1b0384111561434657614305600a85615d12565b5082905081611d0f565b5f80600160ff1b840361439b576001600160ff1b03830361438e5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143bd57505f915081905060016140bb565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145aa576f4b3b4ca85a86c47a098a224000000000850515801561441f57507f80000000000000000000000000000000000000000000000000000000000000268412155b15614440576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561448857507f80000000000000000000000000000000000000000000000000000000000000138412155b156144a157678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144ed57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614503576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561455257507f80000000000000000000000000000000000000000000000000000000000000028412155b1561456857606485029450600284039350614503565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561459857506001600160ff1b018412155b156145aa57600a850294506001840393505b600a808602908105861480156145c757506001600160ff1b018512155b156145d6578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61460e87876143a5565b9250925092508061463c576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061469f575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fb8576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f835160410361470a576020840151604085015160608601515f1a6146fc8882858561476a565b9550955095505050506140bb565b505081515f91506002906140bb565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147a357505f91506003905082614828565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147f4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661481f57505f925060019150829050614828565b92505f91508190505b9450945094915050565b604051806080016040528061484561485e565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148ac60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148d861485e565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f6020828403121561491a575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614941575f80fd5b50813567ffffffffffffffff811115614958575f80fd5b6020830191508360208260051b850101111561311a575f80fd5b5f805f60408486031215614984575f80fd5b833567ffffffffffffffff8082111561499b575f80fd5b9085019060a082880312156149ae575f80fd5b909350602085013590808211156149c3575f80fd5b506149d086828701614931565b9497909650939450505050565b5f602082840312156149ed575f80fd5b5035919050565b6001600160a01b0381168114612e98575f80fd5b80356141c3816149f4565b5f805f805f60808688031215614a27575f80fd5b8535614a32816149f4565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a5b575f80fd5b614a6788828901614931565b969995985093965092949392505050565b5f805f60608486031215614a8a575f80fd5b8335614a95816149f4565b92506020840135614aa5816149f4565b929592945050506040919091013590565b5f805f805f60808688031215614aca575f80fd5b8535614ad5816149f4565b94506020860135614ae5816149f4565b935060408601359250606086013567ffffffffffffffff80821115614b08575f80fd5b818801915088601f830112614b1b575f80fd5b813581811115614b29575f80fd5b896020828501011115614b3a575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b5d575f80fd5b81356103bb816149f4565b5f60c08284031215614b78575f80fd5b50919050565b5f60208284031215614b8e575f80fd5b813567ffffffffffffffff811115614ba4575f80fd5b61052d84828501614b68565b5f805f60408486031215614bc2575f80fd5b833567ffffffffffffffff80821115614bd9575f80fd5b614be587838801614b68565b945060208601359150808211156149c3575f80fd5b5f60208284031215614c0a575f80fd5b813567ffffffffffffffff811115614c20575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c42575f80fd5b823567ffffffffffffffff811115614c58575f80fd5b614c6485828601614931565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cf357603f19888603018452614ce1858351614c70565b94509285019290850190600101614cc5565b5092979650505050505050565b5f8060408385031215614d11575f80fd5b8235614d1c816149f4565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405290565b6040805190810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405160a0810167ffffffffffffffff81118282101715614d6157614d61614d2a565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dd657614dd6614d2a565b604052919050565b5f82601f830112614ded575f80fd5b813567ffffffffffffffff811115614e0757614e07614d2a565b614e1a601f8201601f1916602001614dad565b818152846020838601011115614e2e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e5a575f80fd5b614e62614d3e565b90508135614e6f816149f4565b81526020820135614e7f816149f4565b6020820152604082013567ffffffffffffffff811115614e9d575f80fd5b614ea984828501614dde565b60408301525092915050565b5f67ffffffffffffffff821115614ece57614ece614d2a565b5060051b60200190565b5f60408284031215614ee8575f80fd5b614ef0614d67565b90508135614efd816149f4565b808252506020820135602082015292915050565b5f82601f830112614f20575f80fd5b81356020614f35614f3083614eb5565b614dad565b8083825260208201915060208460061b870101935086841115614f56575f80fd5b602086015b84811015614f7b57614f6d8882614ed8565b835291830191604001614f5b565b509695505050505050565b5f60a08284031215614f96575f80fd5b614f9e614d8a565b9050614fa982614a08565b8152602082013567ffffffffffffffff80821115614fc5575f80fd5b614fd185838601614e4a565b60208401526040840135915080821115614fe9575f80fd5b614ff585838601614f11565b6040840152606084013591508082111561500d575f80fd5b5061501a84828501614f11565b6060830152506080820135608082015292915050565b5f61503d614f3084614eb5565b8381529050602080820190600585811b85018781111561505b575f80fd5b855b8181101561514857803567ffffffffffffffff8082111561507c575f80fd5b908801906060828c03121561508f575f80fd5b615097614d3e565b82356150a2816149f4565b815282870135828111156150b4575f80fd5b8301601f81018d136150c4575f80fd5b80356150d2614f3082614eb5565b81815290881b8201890190898101908f8311156150ed575f80fd5b928a01925b8284101561510b5783358252928a0192908a01906150f2565b848b01525060409150508381013583811115615125575f80fd5b6151318e828701614dde565b91830191909152508752505093830193830161505d565b50505050509392505050565b5f82601f830112615163575f80fd5b6103bb83833560208501615030565b5f805f805f6101408688031215615187575f80fd5b853567ffffffffffffffff8082111561519e575f80fd5b6151aa89838a01614f86565b965060208801359150808211156151bf575f80fd5b6151cb89838a01614f86565b95506151da8960408a01614b68565b94506101008801359150808211156151f0575f80fd5b6151fc89838a01615154565b9350610120880135915080821115615212575f80fd5b5061521f88828901615154565b9150509295509295909350565b5f6102b43683614f86565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561526b816149f4565b6001600160a01b039081168452602083013590615287826149f4565b166020840152604082013536839003601e190181126152a4575f80fd5b820160208101903567ffffffffffffffff8111156152c0575f80fd5b8036038213156152ce575f80fd5b606060408601526152e3606086018284615237565b95945050505050565b5f808335601e19843603018112615301575f80fd5b830160208101925035905067ffffffffffffffff811115615320575f80fd5b8060061b360382131561311a575f80fd5b8183525f60208085019450825f5b85811015615377578135615352816149f4565b6001600160a01b0316875281830135838801526040968701969091019060010161533f565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153a8816149f4565b166060830152602083013536849003605e190181126153c5575f80fd5b60a060808401526153dc610100840185830161525f565b90506153eb60408501856152ec565b605f19808685030160a0870152615403848385615331565b935061541260608801886152ec565b93509150808685030160c08701525061542c838383615331565b92505050608084013560e084015280915050949350505050565b5f615453614f3084614eb5565b80848252602080830192508560051b850136811115615470575f80fd5b855b818110156154fa57803567ffffffffffffffff80821115615491575f80fd5b8189019150604082360312156154a5575f80fd5b6154ad614d67565b8235828111156154bb575f80fd5b6154c736828601614e4a565b82525085830135828111156154da575f80fd5b6154e636828601615154565b828801525087525050938201938201615472565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261553e60a083018486615237565b98975050505050505050565b5f6020828403121561555a575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615561565b5f808335601e1984360301811261559d575f80fd5b83018035915067ffffffffffffffff8211156155b7575f80fd5b6020019150600581901b360382131561311a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155f6575f80fd5b9190910192915050565b5f8235609e198336030181126155f6575f80fd5b5f808335601e19843603018112615629575f80fd5b83018035915067ffffffffffffffff821115615643575f80fd5b6020019150600681901b360382131561311a575f80fd5b5f6080823603121561566a575f80fd5b6040516080810167ffffffffffffffff828210818311171561568e5761568e614d2a565b8160405284359150808211156156a2575f80fd5b6156ae36838701614f86565b8352602085013560208401526040850135604084015260608501359150808211156156d7575f80fd5b506156e436828601615154565b60608301525092915050565b5f60208284031215615700575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561537757815180516001600160a01b031688528301518388015260409096019590820190600101615722565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261579f610100850182614c70565b9050604083015184820360408601526157b8828261570f565b915050606083015184820360608601526157d2828261570f565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615377578151875295820195908201906001016157fc565b5f6001600160a01b03808716835260206080818501528651608080860152615844610100860182615752565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158e057601f1988830301845284518a815116835289810151878b8501526158b4888501826157e9565b91890151848303858b01529190506158cc8183614c70565b968b0196958b019593505050600101615886565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615917575f80fd5b83018035915067ffffffffffffffff821115615931575f80fd5b60200191503681900382131561311a575f80fd5b5f8235605e198336030181126155f6575f80fd5b5f6102b43683614e4a565b5f60408284031215615974575f80fd5b6103bb8383614ed8565b6001600160a01b0384168152826020820152606060408201525f6152e36060830184615752565b6001600160a01b0385168152836020820152606060408201525f6159cd606083018486615237565b9695505050505050565b5f6103bb368484615030565b818103818111156102b4576102b4615561565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a3b81840187615752565b90508281036040840152615a4f8186615752565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615752565b5f60018201615ab857615ab8615561565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0a57601f19868403018952615af88383516157e9565b98840198925090830190600101615adc565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b50610100840182614c70565b9050606084015160808401526080840151601f19808584030160a0860152615b788383615abf565b925060a08601519150808584030160c0860152615b9583836157e9565b925060c08601519150808584030160e0860152506152e382826157e9565b5f82601f830112615bc2575f80fd5b81516020615bd2614f3083614eb5565b8083825260208201915060208460051b870101935086841115615bf3575f80fd5b602086015b84811015614f7b5780518352918301918301615bf8565b5f8060408385031215615c20575f80fd5b825167ffffffffffffffff80821115615c37575f80fd5b818501915085601f830112615c4a575f80fd5b81516020615c5a614f3083614eb5565b82815260059290921b84018101918181019089841115615c78575f80fd5b948201945b83861015615c9657855182529482019490820190615c7d565b91880151919650909350505080821115615cae575f80fd5b50615cbb85828601615bb3565b9150509250929050565b828152604060208201525f61052d60408301846157e9565b6001600160a01b0383168152604060208201525f61052d6040830184615abf565b634e487b7160e01b5f52601260045260245ffd5b5f82615d2c57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c70565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d8357634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac615561565b600181815b80851115615de957815f1904821115615dcf57615dcf615561565b80851615615ddc57918102915b93841c9390800290615db4565b509250929050565b5f82615dff575060016102b4565b81615e0b57505f6102b4565b8160018114615e215760028114615e2b57615e47565b60019150506102b4565b60ff841115615e3c57615e3c615561565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e6a575081810a6102b4565b615e748383615daf565b805f1904821115615e8757615e87615561565b029392505050565b5f6103bb8383615df1565b5f8060408385031215615eab575f80fd5b825160048110615eb9575f80fd5b602084015190925060ff81168114615ecf575f80fd5b809150509250929050565b5f600160ff1b82016141b9576141b961556156fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; diff --git a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol index ff62d82305..e84b701bfd 100644 --- a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xc3fb3bb0355fee22e54cade57f5ff828478d59f34fdd8057bc0bc6a11b3d48fc); +bytes32 constant BYTECODE_HASH = bytes32(0x2ec369e891917e44cd05bd5a17212324cf784ce0764ecee89939244c9e50e6f6); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x5Ec2625ee7c73c85fAb2bc4cf527E1434F0dcC5d); +address constant DEPLOYED_ADDRESS = address(0x6E52a7C2D66A1A4F3474B6384C03C7D7319Bd80a); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b0383167386594ac4319230870c6e587f4aca48fab575619e146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b038316739da435ffe32f40cc112d4d25601d0d7592cdded9146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/test/concrete/raindex/RaindexV6.takeOrder.vaultZeroInput.t.sol b/test/concrete/raindex/RaindexV6.takeOrder.vaultZeroInput.t.sol index 39bc13d6ac..b36babf64d 100644 --- a/test/concrete/raindex/RaindexV6.takeOrder.vaultZeroInput.t.sol +++ b/test/concrete/raindex/RaindexV6.takeOrder.vaultZeroInput.t.sol @@ -17,6 +17,7 @@ import { TaskV2 } from "raindex-interface-0.1.1/src/interface/IRaindexV6.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {NegativeBounty} from "../../../src/concrete/raindex/RaindexV6.sol"; /// @title RaindexV6TakeOrderVaultZeroInputTest /// @notice An order with a `vaultId == 0` INPUT is settled as a direct wallet @@ -673,4 +674,43 @@ contract RaindexV6TakeOrderVaultZeroInputTest is RaindexV6ExternalRealTest { vm.expectRevert(); iRaindex.vaultBalance2(owner, address(token0), bytes32(0)); } + + /// A `clear3` whose orders cross into a negative bounty reverts with the + /// explicit `NegativeBounty` before any vault is settled. Both orders take + /// and give via vault 0 against an orderbook with zero ambient balance, so + /// the only funds that could settle a vault-0 input are the capped outputs + /// pulled from the counterparty. The negative-bounty guard runs ahead of that + /// settlement, so the explicit error is the revert rather than the vault-0 + /// token push running short first. + /// + /// Alice: gives token0, wants token1 @ IO ratio 2 (both vault 0) + /// Bob: gives token1, wants token0 @ IO ratio 2 (both vault 0) + /// + /// Each order's input demand (1 * 2 = 2) caps to the counterparty's max + /// output (1): each output is 0.5 and each input is 1, so both bounties are + /// 0.5 - 1 = -0.5. + function testClearNegativeBountyVaultZeroRevertsNegativeBounty() external { + token0.mint(alice, 10e18); + vm.prank(alice); + token0.approve(address(iRaindex), 10e18); + + token1.mint(bob, 10e18); + vm.prank(bob); + token1.approve(address(iRaindex), 10e18); + + OrderV4 memory aliceOrder = LibTestTakeOrder.addOrderWithExpression( + vm, alice, "_ _: 1 2;:;", address(token1), bytes32(0), address(token0), bytes32(0) + ); + OrderV4 memory bobOrder = LibTestTakeOrder.addOrderWithExpression( + vm, bob, "_ _: 1 2;:;", address(token0), bytes32(0), address(token1), bytes32(0) + ); + + assertEq(token0.balanceOf(address(iRaindex)), 0, "orderbook starts with zero ambient token0"); + assertEq(token1.balanceOf(address(iRaindex)), 0, "orderbook starts with zero ambient token1"); + + vm.expectRevert(NegativeBounty.selector); + iRaindex.clear3( + aliceOrder, bobOrder, ClearConfigV2(0, 0, 0, 0, 0, 0), new SignedContextV1[](0), new SignedContextV1[](0) + ); + } } From 0fddaa636459a723cd648740867ccc0a6df21014 Mon Sep 17 00:00:00 2001 From: David Meister Date: Mon, 15 Jun 2026 15:20:37 +0000 Subject: [PATCH 2/4] clear3: compute NegativeBounty spread once and reuse in settlement Compute aliceBounty/bobBounty before the NegativeBounty guard and reuse the same values when crediting the bounty vaults, so the spread is computed once. Co-Authored-By: Claude Opus 4.8 --- crates/test_fixtures/abis/RaindexV6.json | 2 +- src/concrete/raindex/RaindexV6.sol | 11 ++++------- .../GenericPoolRaindexV6ArbOrderTaker.pointers.sol | 6 +++--- .../GenericPoolRaindexV6FlashBorrower.pointers.sol | 6 +++--- src/generated/RaindexV6.pointers.sol | 8 ++++---- .../RouteProcessorRaindexV6ArbOrderTaker.pointers.sol | 6 +++--- 6 files changed, 18 insertions(+), 21 deletions(-) diff --git a/crates/test_fixtures/abis/RaindexV6.json b/crates/test_fixtures/abis/RaindexV6.json index 2ca2adc365..8a0b335acc 100644 --- a/crates/test_fixtures/abis/RaindexV6.json +++ b/crates/test_fixtures/abis/RaindexV6.json @@ -2352,7 +2352,7 @@ } ], "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f0f806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b61010761010236600461490a565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614972565b6102ba565b61010761013d3660046149dd565b5f9081526020819052604090205460011490565b61016461015f366004614a13565b6103c2565b005b610179610174366004614a78565b610521565b604051908152602001610113565b610107610195366004614ab6565b610535565b6101646101a8366004614a13565b610635565b6101796101bb366004614b4d565b6107c8565b6101d36101ce366004614b7e565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bb0565b610fc9565b61020e610209366004614bfa565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c31565b6113ce565b6040516101139190614c9e565b610164610259366004614c31565b6114b4565b61017961026c366004614d00565b61150e565b61016461027f366004615172565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611abc565b6102d06020850185614b4d565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b4d565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661522c565b611ad7565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615382565b60405180910390a16103a4818585611b06565b506103bb60015f80516020615eef83398151915255565b9392505050565b6103ca611abc565b3385856103d8838383611b3d565b6103e2865f611b6e565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611ba8565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c28565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615446565b611d18565b5050505050505061051a60015f80516020615eef83398151915255565b5050505050565b5f61052d848484611ee6565b949350505050565b5f61054a6001600160a01b0386168786612070565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615506565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c2919061554a565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615575565b6001600160a01b038a169291906120a5565b5060019695505050505050565b61063d611abc565b33858561064b838383611b3d565b5f8080806106598a82611b6e565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ee6565b90506106a58b826120e1565b94506106b3338e8e886120fd565b90935091505f6106c4338f88612174565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615446565b50505050505050505061051a60015f80516020615eef83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b4919061554a565b5f8061083a611abc565b6108476080840184615588565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614832565b61087861485e565b5f60405180606001604052808780608001906108949190615588565b5f8181106108a4576108a46155ce565b90506020028101906108b691906155e2565b6108c09080615600565b6108ce906040810190615614565b6108db60808b018b615588565b5f8181106108eb576108eb6155ce565b90506020028101906108fd91906155e2565b60200135818110610910576109106155ce565b6109269260206040909202019081019150614b4d565b6001600160a01b031681526020016109416080890189615588565b5f818110610951576109516155ce565b905060200281019061096391906155e2565b61096d9080615600565b61097b906060810190615614565b61098860808b018b615588565b5f818110610998576109986155ce565b90506020028101906109aa91906155e2565b604001358181106109bd576109bd6155ce565b6109d39260206040909202019081019150614b4d565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615588565b604080516001909201602002820181528501519093505f9250610a1d915082611b6e565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615588565b905081108015610a6357506040840151610a63905f611b6e565b15610e7157610a7560808a018a615588565b82818110610a8557610a856155ce565b9050602002810190610a9791906155e2565b610aa09061565a565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ce565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ce565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121dd565b5f610b6586611ad7565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d2a565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061224f565b90505f610c458c604001358360600151611b6e90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b6e565b1580610cc257506060820151610cc0905f611b6e565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156f0565b15610d6e576040808a015190850151610d40916120e1565b6060850151909250610d529083612714565b60408a0151909150610d649083612761565b60408a0152610dd5565b5f610d8a8560400151866060015161271490919063ffffffff16565b9050610da38a60400151826120e190919063ffffffff16565b9150610dbc85606001518361279190919063ffffffff16565b60408b0151909350610dce9083612761565b60408b0152505b610ddf8c826127c1565b9b50610deb8d836127c1565b9c50610df782856127f1565b610e0181856128b2565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e369493929190615818565b60405180910390a187516001018089526020028801849052610e5784612a5e565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156f0565b610e8d5786610e8f565b875b9050610e9c818a35612ca1565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612174565b505f9050610ee560a08a018a615902565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f615902565b6040518763ffffffff1660e01b8152600401610f3596959493929190615506565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611ba8565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ce565b6020026020010151612cdb565b600101610f75565b505050505050610fc460015f80516020615eef83398151915255565b915091565b5f610fd2611abc565b5f61102f61102a610fe38780615945565b610ff1906040810190615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612de592505050565b612e56565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f6020860186615614565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad6040860186615614565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615945565b6110f590615959565b815260200187806020019061110a9190615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615964565b81526020019060010190611129565b505050918352505060200161116d6040890189615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615964565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ad7565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061597e565b60405180910390a15f61124a60a08a018a615902565b905011156112e65761129b61126260a08a018a615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e7092505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c615902565b6040516112dd94939291906159a5565b60405180910390a15b6112f1828888611b06565b93505050506103bb60015f80516020615eef83398151915255565b5f80808061132661131d8680615600565b61032c9061522c565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a8680615600565b6113639061522c565b866020013587604001356121dd565b5f6113b06113808780615600565b6113899061522c565b60208801356040890135336113a160608c018c615588565b6113aa916159d7565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d2a565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ce565b90506020028101906114609190615902565b85604051602001611473939291906159f6565b604051602081830303815290604052612e9b565b838281518110611499576114996155ce565b6020908102919091010152600101611430565b505092915050565b6114bc611abc565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615446565b61150a60015f80516020615eef83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611576919061554a565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611abc565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ce565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ce565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ce565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ce565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ce565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ce565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ad7565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611aa6565b5f6117b186611ad7565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611aa6565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d9493929190615a19565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d2a565b90505f6118ad8383612f3b565b606081015181519192506118cd915f916118c79190612761565b90612ca1565b806118ec5750604081015160208201516118ec915f916118c791612761565b1561190a57604051630d86822160e01b815260040160405180910390fd5b805161191690846127f1565b6119248160200151836127f1565b6119328160400151846128b2565b6119408160600151836128b2565b61194983612cdb565b61195282612cdb565b606081015181515f916119659190612761565b90505f6119838360400151846020015161276190919063ffffffff16565b90506119b9338b606001518a60200135815181106119a3576119a36155ce565b60200260200101515f01518a6080013585611c28565b50506119ef338a606001518a60600135815181106119d9576119d96155ce565b60200260200101515f01518a60a0013584611c28565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a5883612a5e565b611a6182612a5e565b80516001600160e01b0316158015611a84575060208101516001600160e01b0316155b15611aa2576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615eef83398151915255565b611ac4612f89565b60025f80516020615eef83398151915255565b5f81604051602001611ae99190615a95565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b3890611b2e906104d6565b6104f88385615446565b505050565b80611b38576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b9c84848484612fba565b12979650505050505050565b5f805f611bb48561308e565b9050611bc0845f612ca1565b15611bde57604051632eaefac360e21b815260040160405180910390fd5b5f80611bea86846130f4565b9150915080611bff57611bfc82615aa7565b91505b8115611c1a57611c1a6001600160a01b0388168930856120a5565b50925090505b935093915050565b5f80611c348382612ca1565b15611c555760405163793a8f5560e01b815260048101849052602401610316565b83611c7357611c65868685612174565b505f9250829150611d0f9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad82866127c1565b9050611cb9815f612ca1565b15611cda5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611edc57868181518110611d7f57611d7f6155ce565b602002602001015193505f845f015160400151511115611ed4575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611df78d8a60200151613121565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e229190615b17565b5f60405180830381865afa158015611e3c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e639190810190615c0f565b9150505f81511115611ed25784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611ea4908a908590600401615cc5565b5f604051808303815f87803b158015611ebb575f80fd5b505af1158015611ecd573d5f803e3d5ffd5b505050505b505b600101611d64565b5050505050505050565b5f8115611f2057506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f2a84613403565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611fa291908716906370a0823190602401602060405180830381865afa158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c919061554a565b8361340f565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612021919088169063dd62ed3e90604401602060405180830381865afa158015611ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201b919061554a565b8461340f565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120669061206084846120e1565b906127c1565b93505050506103bb565b61207d838383600161344f565b611b3857604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b38484848460016134b1565b6120db57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ec8383612ca1565b6120f657816103bb565b5090919050565b5f806121098382612ca1565b1561212a5760405163793a8f5560e01b815260048101849052602401610316565b8361213a57611c65868685611ba8565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad8286612761565b5f805f6121808561308e565b905061218c845f612ca1565b156121aa57604051632d1671a360e11b815260040160405180910390fd5b5f6121b585836130f4565b50905080156121d2576121d26001600160a01b0387168883612070565b969095509350505050565b826060015181815181106121f3576121f36155ce565b60200260200101515f01516001600160a01b03168360400151838151811061221d5761221d6155ce565b60200260200101515f01516001600160a01b031603611b3857604051631cd2f1c760e21b815260040160405180910390fd5b6122576148c5565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122725790505090506122c76122958a611ad7565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122dc576122dc6155ce565b60200260200101819052505f6123118a604001518a81518110612301576123016155ce565b60200260200101515f0151613403565b90505f6123638b5f01518c604001518c81518110612331576123316155ce565b60200260200101515f01518d604001518d81518110612352576123526155ce565b602002602001015160200151611ee6565b90506123f28b604001518b8151811061237e5761237e6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123b0576123b06155ce565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612408576124086155ce565b602002602001018190525050505f61242f8a606001518981518110612301576123016155ce565b90505f6124708b5f01518c606001518b8151811061244f5761244f6155ce565b60200260200101515f01518d606001518c81518110612352576123526155ce565b90506124bd8b606001518a8151811061248b5761248b6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123b0576123b06155ce565b836001600403815181106124d3576124d36155ce565b602002602001018190525050506124ea8186613121565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161254a87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561258257612582614d2a565b6040519080825280602002602001820160405280156125ab578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125d19190615b17565b5f60405180830381865afa1580156125eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126129190810190615c0f565b9150915060028251101561263e578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126929087906004908110612661576126616155ce565b602002602001015160038151811061267b5761267b6155ce565b6020026020010151826120e190919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126c4576126c46155ce565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661351e565b915091505f612753838361363d565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661368a565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612744868686866136b4565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061274486868686613bf1565b818160800151600481518110612809576128096155ce565b6020026020010151600481518110612823576128236155ce565b6020026020010181815250506120db815f01515f01518260800151600481518110612850576128506155ce565b60200260200101515f81518110612869576128696155ce565b60200260200101515f1c836080015160048151811061288a5761288a6155ce565b60200260200101516002815181106128a4576128a46155ce565b6020026020010151856120fd565b8181608001516003815181106128ca576128ca6155ce565b60200260200101516004815181106128e4576128e46155ce565b6020908102919091010152805151608082015180515f9190600390811061290d5761290d6155ce565b60200260200101515f81518110612926576129266155ce565b60200260200101515f1c90505f836080015160038151811061294a5761294a6155ce565b6020026020010151600281518110612964576129646155ce565b602002602001015190505f801b8103612a0b57612981855f612ca1565b156129a25760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129d990866127c1565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a1a565b612a1783838388611c28565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a4f929190615cdd565b60405180910390a15050505050565b60c08101515115612ad8578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612aaa929091600401615cc5565b5f604051808303815f87803b158015612ac1575f80fd5b505af1158015612ad3573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b2e8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b6e57612b6e614d2a565b604051908082528060200260200182016040528015612b97578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612bc7578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612be79190615b17565b5f60405180830381865afa158015612c01573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c289190810190615c0f565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c70918590600401615cc5565b5f604051808303815f87803b158015612c87575f80fd5b505af1158015612c99573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612ccf84848484612fba565b13979650505050505050565b5f8160800151600381518110612cf357612cf36155ce565b6020026020010151600281518110612d0d57612d0d6155ce565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d3e57612d3e6155ce565b60200260200101515f81518110612d5757612d576155ce565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612ddc838383612174565b50505050505050565b6060604082511015612e0457505060408051602081019091525f815290565b5f60208301519050602060408451612e1c91906159e3565b612e269190615d12565b811115612e4257505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e6657505f919050565b50602001515f1a90565b612e7981613cef565b612e985780604051630c89984b60e31b81526004016103169190615d31565b50565b60605f612ea88484613d1d565b9050808015612ec957505f3d1180612ec957505f846001600160a01b03163b115b15612ede57612ed6613d30565b9150506102b4565b8015612f0857604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f1b57612f16613d49565b612f34565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f688383613d54565b82526040820152612f798284613d54565b6020830152606082015292915050565b5f80516020615eef83398151915254600203612fb857604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fdf5786859250925050611d0f565b505f85841315612ff3575092949193919260015b8386035f8112604c8213178015613026578215613018575f8994509450505050611d0f565b885f94509450505050611d0f565b600a82900a8981028a82828161303e5761303e615cfe565b051461306a57841561305a575f8b965096505050505050611d0f565b8a5f965096505050505050611d0f565b841561307f578896509450611d0f9350505050565b9550879450611d0f9350505050565b5f805f61309a84613dbd565b909250905060018260038111156130b3576130b3615d43565b141580156130d257505f8260038111156130cf576130cf615d43565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d57565b5f806001600160e01b038416601b0b60e085901d613113828287613e4a565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561313e5761313e614d2a565b604051908082528060200260200182016040528015613167578160200160208202803683370190505b5090505f80845111613179575f61317f565b83516001015b85516001010190505f8167ffffffffffffffff8111156131a1576131a1614d2a565b6040519080825280602002602001820160405280156131d457816020015b60608152602001906001900390816131bf5790505b5090505f6131f8604080516002815233602082015230818301526060810190915290565b82828151811061320a5761320a6155ce565b60200260200101819052505f5b875181101561326757818060010192505087818151811061323a5761323a6155ce565b6020026020010151838381518110613254576132546155ce565b6020908102919091010152600101613217565b508551156133f95780806001019150508382828151811061328a5761328a6155ce565b60200260200101819052505f5b86518110156133f7576133468782815181106132b5576132b56155ce565b60200260200101515f01516133236132f18a85815181106132d8576132d86155ce565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613335576133356155ce565b602002602001015160400151613fb0565b61336657604051630a57f30960e31b815260048101829052602401610316565b868181518110613378576133786155ce565b60200260200101515f01516001600160a01b03165f1b8582815181106133a0576133a06155ce565b60200260200101818152505081806001019250508681815181106133c6576133c66155ce565b6020026020010151602001518383815181106133e4576133e46155ce565b6020908102919091010152600101613297565b505b5095945050505050565b5f805f61309a84614020565b5f805f805f61341e878761407f565b9250925092505f8061343085856140c2565b915091508183801561343f5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134a5578383151615613499573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661350d578383151615613501573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613536575f92505f9150613633565b6135408487615d90565b91505f61354c8861419a565b90505f6135588761419a565b90505f61356583836141c8565b5090505f6f0785ee10d5da46d900f436a00000000082111561359a576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135bb57670de0b6b3a7640000820491506012015b633b9aca008211156135d457633b9aca00820491506009015b6127108211156135e957612710820491506004015b81156135fd57600a820491506001016135e9565b6136078187615d90565b95506136298b8a613623878761361e87600a615e8f565b6141e4565b896142b0565b9097509550505050505b5094509492505050565b5f805f61364a85856140c2565b915091508015801561365a575081155b1561368257604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136968484614350565b90945092506136a786868686613bf1565b9150915094509492505050565b5f80835f036136e057604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136f157505f905080611d0f565b5f805f806136ff8a8a6143a5565b919b509950915061371088886143a5565b919950975090505f6137218b61419a565b90505f61372d8a61419a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613af257841561378457507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aca565b6f4b3b4ca85a86c47a098a2240000000008310156138b057678ac7230489e80000831015613814576402540be4008310156137e257620186a08310156137d25750620186a090506005613a8b565b506402540be4009050600a613a8b565b655af3107a40008310156138015750655af3107a40009050600e613a8b565b50678ac7230489e8000090506013613a8b565b6b204fce5e3e250261100000008310156138665769152d02c7e14af680000083101561384f575069152d02c7e14af680000090506017613a8b565b506b204fce5e3e250261100000009050601c613a8b565b6d314dc6448d9338c15b0a0000000083101561389557506d314dc6448d9338c15b0a0000000090506021613a8b565b506f4b3b4ca85a86c47a098a22400000000090506026613a8b565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139a85773af298d050e4395d69670b12b7f41000000000000831015613943577172cb5bd86321e38cb6ce6682e8000000000083101561392457507172cb5bd86321e38cb6ce6682e800000000009050602b613a8b565b5073af298d050e4395d69670b12b7f4100000000000090506030613a8b565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613984575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a8b565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a8b565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a3e577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a1657507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a8b565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a8b565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a8b57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613aa057600a820491505f1901613a8b565b815f03613aca576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613af2576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b0957808d039c50613b47565b600160ff1b9c90038c015f811315613b4757806001600160ff1b03038b13613b3457998a0199613b47565b5f80995099505050505050505050611d0f565b5f808e128015613b5657505f8c135b15613b7757600160ff1b8e01808d13613b6f575f613b73565b808d035b9150505b8b818f01039750613b948f8e613b8e8887896141e4565b8b6142b0565b90995097505f811315613bde57604c811315613bbe575f809a509a50505050505050505050611d0f565b80600a0a8981613bd057613bd0615cfe565b059850885f03613bde575f97505b50969850949650611d0f95505050505050565b5f8085158415178015613c1d57865f03613c115784849250925050611d0f565b86869250925050611d0f565b613c2787876145ff565b9097509550613c3685856145ff565b909550935085841315613c4a579395929492935b838603604c811115613c63578787935093505050611d0f565b80600a0a8681613c7557613c75615cfe565b0595505086850180881860ff90811c151589881890911c15168015613cde57876001600160ff1b0303613cc55760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613ce2565b8198505b5096979596505050505050565b5f600882511015613d0157505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d718460600151856040015161271490919063ffffffff16565b915083604001519050613d91836040015183611b6e90919063ffffffff16565b1561311a5782604001519150613db484606001518361279190919063ffffffff16565b90509250929050565b5f80613dc7614648565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e419190615e9a565b91509150915091565b5f805f851215613e7757604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e8957505f90506001611c20565b8460ff8416850185811215613ebb5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f0757604c19831215613ede575f809550955050505050611c20565b825f03600a0a9150818481613ef557613ef5615cfe565b0495505084029091149150611c209050565b5f831315613fa057604d831315613f445760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f5a57613f5a615cfe565b04841115613f8e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611c209050565b8360019550955050505050611c20565b5f836001600160a01b03163b5f0361400e575f80613fce85856146d3565b5090925090505f816003811115613fe757613fe7615d43565b1480156140055750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614019848484614719565b90506103bb565b5f8061402a614648565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e1d573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140b157600a860460018201600a88065f14935093509350506140bb565b8593509150600190505b9250925092565b5f601b83900b8314838382614126577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561410657620186a0860595506005850194505b8586601b0b1461412157600a86059550846001019450614106565b61413c565b855f0361413c57505f92506001915061311a9050565b848560030b1461417f575f85121561415c57505f925082915061311a9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141bf57600160ff1b82036141b95750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141f186866141c8565b91509150815f036142155783818161420b5761420b615cfe565b04925050506103bb565b8382106142465760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561432c576001600160ff1b03841115614319576142dd6001600160ff1b036001615575565b84036142f15750600160ff1b905081611d0f565b6142fc600a85615d12565b61430590615eda565b614310846001615d90565b91509150611d0f565b61432284615eda565b8391509150611d0f565b6001600160ff1b0384111561434657614305600a85615d12565b5082905081611d0f565b5f80600160ff1b840361439b576001600160ff1b03830361438e5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143bd57505f915081905060016140bb565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145aa576f4b3b4ca85a86c47a098a224000000000850515801561441f57507f80000000000000000000000000000000000000000000000000000000000000268412155b15614440576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561448857507f80000000000000000000000000000000000000000000000000000000000000138412155b156144a157678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144ed57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614503576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561455257507f80000000000000000000000000000000000000000000000000000000000000028412155b1561456857606485029450600284039350614503565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561459857506001600160ff1b018412155b156145aa57600a850294506001840393505b600a808602908105861480156145c757506001600160ff1b018512155b156145d6578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61460e87876143a5565b9250925092508061463c576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061469f575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fb8576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f835160410361470a576020840151604085015160608601515f1a6146fc8882858561476a565b9550955095505050506140bb565b505081515f91506002906140bb565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147a357505f91506003905082614828565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147f4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661481f57505f925060019150829050614828565b92505f91508190505b9450945094915050565b604051806080016040528061484561485e565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148ac60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148d861485e565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f6020828403121561491a575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614941575f80fd5b50813567ffffffffffffffff811115614958575f80fd5b6020830191508360208260051b850101111561311a575f80fd5b5f805f60408486031215614984575f80fd5b833567ffffffffffffffff8082111561499b575f80fd5b9085019060a082880312156149ae575f80fd5b909350602085013590808211156149c3575f80fd5b506149d086828701614931565b9497909650939450505050565b5f602082840312156149ed575f80fd5b5035919050565b6001600160a01b0381168114612e98575f80fd5b80356141c3816149f4565b5f805f805f60808688031215614a27575f80fd5b8535614a32816149f4565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a5b575f80fd5b614a6788828901614931565b969995985093965092949392505050565b5f805f60608486031215614a8a575f80fd5b8335614a95816149f4565b92506020840135614aa5816149f4565b929592945050506040919091013590565b5f805f805f60808688031215614aca575f80fd5b8535614ad5816149f4565b94506020860135614ae5816149f4565b935060408601359250606086013567ffffffffffffffff80821115614b08575f80fd5b818801915088601f830112614b1b575f80fd5b813581811115614b29575f80fd5b896020828501011115614b3a575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b5d575f80fd5b81356103bb816149f4565b5f60c08284031215614b78575f80fd5b50919050565b5f60208284031215614b8e575f80fd5b813567ffffffffffffffff811115614ba4575f80fd5b61052d84828501614b68565b5f805f60408486031215614bc2575f80fd5b833567ffffffffffffffff80821115614bd9575f80fd5b614be587838801614b68565b945060208601359150808211156149c3575f80fd5b5f60208284031215614c0a575f80fd5b813567ffffffffffffffff811115614c20575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c42575f80fd5b823567ffffffffffffffff811115614c58575f80fd5b614c6485828601614931565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cf357603f19888603018452614ce1858351614c70565b94509285019290850190600101614cc5565b5092979650505050505050565b5f8060408385031215614d11575f80fd5b8235614d1c816149f4565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405290565b6040805190810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405160a0810167ffffffffffffffff81118282101715614d6157614d61614d2a565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dd657614dd6614d2a565b604052919050565b5f82601f830112614ded575f80fd5b813567ffffffffffffffff811115614e0757614e07614d2a565b614e1a601f8201601f1916602001614dad565b818152846020838601011115614e2e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e5a575f80fd5b614e62614d3e565b90508135614e6f816149f4565b81526020820135614e7f816149f4565b6020820152604082013567ffffffffffffffff811115614e9d575f80fd5b614ea984828501614dde565b60408301525092915050565b5f67ffffffffffffffff821115614ece57614ece614d2a565b5060051b60200190565b5f60408284031215614ee8575f80fd5b614ef0614d67565b90508135614efd816149f4565b808252506020820135602082015292915050565b5f82601f830112614f20575f80fd5b81356020614f35614f3083614eb5565b614dad565b8083825260208201915060208460061b870101935086841115614f56575f80fd5b602086015b84811015614f7b57614f6d8882614ed8565b835291830191604001614f5b565b509695505050505050565b5f60a08284031215614f96575f80fd5b614f9e614d8a565b9050614fa982614a08565b8152602082013567ffffffffffffffff80821115614fc5575f80fd5b614fd185838601614e4a565b60208401526040840135915080821115614fe9575f80fd5b614ff585838601614f11565b6040840152606084013591508082111561500d575f80fd5b5061501a84828501614f11565b6060830152506080820135608082015292915050565b5f61503d614f3084614eb5565b8381529050602080820190600585811b85018781111561505b575f80fd5b855b8181101561514857803567ffffffffffffffff8082111561507c575f80fd5b908801906060828c03121561508f575f80fd5b615097614d3e565b82356150a2816149f4565b815282870135828111156150b4575f80fd5b8301601f81018d136150c4575f80fd5b80356150d2614f3082614eb5565b81815290881b8201890190898101908f8311156150ed575f80fd5b928a01925b8284101561510b5783358252928a0192908a01906150f2565b848b01525060409150508381013583811115615125575f80fd5b6151318e828701614dde565b91830191909152508752505093830193830161505d565b50505050509392505050565b5f82601f830112615163575f80fd5b6103bb83833560208501615030565b5f805f805f6101408688031215615187575f80fd5b853567ffffffffffffffff8082111561519e575f80fd5b6151aa89838a01614f86565b965060208801359150808211156151bf575f80fd5b6151cb89838a01614f86565b95506151da8960408a01614b68565b94506101008801359150808211156151f0575f80fd5b6151fc89838a01615154565b9350610120880135915080821115615212575f80fd5b5061521f88828901615154565b9150509295509295909350565b5f6102b43683614f86565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561526b816149f4565b6001600160a01b039081168452602083013590615287826149f4565b166020840152604082013536839003601e190181126152a4575f80fd5b820160208101903567ffffffffffffffff8111156152c0575f80fd5b8036038213156152ce575f80fd5b606060408601526152e3606086018284615237565b95945050505050565b5f808335601e19843603018112615301575f80fd5b830160208101925035905067ffffffffffffffff811115615320575f80fd5b8060061b360382131561311a575f80fd5b8183525f60208085019450825f5b85811015615377578135615352816149f4565b6001600160a01b0316875281830135838801526040968701969091019060010161533f565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153a8816149f4565b166060830152602083013536849003605e190181126153c5575f80fd5b60a060808401526153dc610100840185830161525f565b90506153eb60408501856152ec565b605f19808685030160a0870152615403848385615331565b935061541260608801886152ec565b93509150808685030160c08701525061542c838383615331565b92505050608084013560e084015280915050949350505050565b5f615453614f3084614eb5565b80848252602080830192508560051b850136811115615470575f80fd5b855b818110156154fa57803567ffffffffffffffff80821115615491575f80fd5b8189019150604082360312156154a5575f80fd5b6154ad614d67565b8235828111156154bb575f80fd5b6154c736828601614e4a565b82525085830135828111156154da575f80fd5b6154e636828601615154565b828801525087525050938201938201615472565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261553e60a083018486615237565b98975050505050505050565b5f6020828403121561555a575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615561565b5f808335601e1984360301811261559d575f80fd5b83018035915067ffffffffffffffff8211156155b7575f80fd5b6020019150600581901b360382131561311a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155f6575f80fd5b9190910192915050565b5f8235609e198336030181126155f6575f80fd5b5f808335601e19843603018112615629575f80fd5b83018035915067ffffffffffffffff821115615643575f80fd5b6020019150600681901b360382131561311a575f80fd5b5f6080823603121561566a575f80fd5b6040516080810167ffffffffffffffff828210818311171561568e5761568e614d2a565b8160405284359150808211156156a2575f80fd5b6156ae36838701614f86565b8352602085013560208401526040850135604084015260608501359150808211156156d7575f80fd5b506156e436828601615154565b60608301525092915050565b5f60208284031215615700575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561537757815180516001600160a01b031688528301518388015260409096019590820190600101615722565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261579f610100850182614c70565b9050604083015184820360408601526157b8828261570f565b915050606083015184820360608601526157d2828261570f565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615377578151875295820195908201906001016157fc565b5f6001600160a01b03808716835260206080818501528651608080860152615844610100860182615752565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158e057601f1988830301845284518a815116835289810151878b8501526158b4888501826157e9565b91890151848303858b01529190506158cc8183614c70565b968b0196958b019593505050600101615886565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615917575f80fd5b83018035915067ffffffffffffffff821115615931575f80fd5b60200191503681900382131561311a575f80fd5b5f8235605e198336030181126155f6575f80fd5b5f6102b43683614e4a565b5f60408284031215615974575f80fd5b6103bb8383614ed8565b6001600160a01b0384168152826020820152606060408201525f6152e36060830184615752565b6001600160a01b0385168152836020820152606060408201525f6159cd606083018486615237565b9695505050505050565b5f6103bb368484615030565b818103818111156102b4576102b4615561565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a3b81840187615752565b90508281036040840152615a4f8186615752565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615752565b5f60018201615ab857615ab8615561565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0a57601f19868403018952615af88383516157e9565b98840198925090830190600101615adc565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b50610100840182614c70565b9050606084015160808401526080840151601f19808584030160a0860152615b788383615abf565b925060a08601519150808584030160c0860152615b9583836157e9565b925060c08601519150808584030160e0860152506152e382826157e9565b5f82601f830112615bc2575f80fd5b81516020615bd2614f3083614eb5565b8083825260208201915060208460051b870101935086841115615bf3575f80fd5b602086015b84811015614f7b5780518352918301918301615bf8565b5f8060408385031215615c20575f80fd5b825167ffffffffffffffff80821115615c37575f80fd5b818501915085601f830112615c4a575f80fd5b81516020615c5a614f3083614eb5565b82815260059290921b84018101918181019089841115615c78575f80fd5b948201945b83861015615c9657855182529482019490820190615c7d565b91880151919650909350505080821115615cae575f80fd5b50615cbb85828601615bb3565b9150509250929050565b828152604060208201525f61052d60408301846157e9565b6001600160a01b0383168152604060208201525f61052d6040830184615abf565b634e487b7160e01b5f52601260045260245ffd5b5f82615d2c57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c70565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d8357634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac615561565b600181815b80851115615de957815f1904821115615dcf57615dcf615561565b80851615615ddc57918102915b93841c9390800290615db4565b509250929050565b5f82615dff575060016102b4565b81615e0b57505f6102b4565b8160018114615e215760028114615e2b57615e47565b60019150506102b4565b60ff841115615e3c57615e3c615561565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e6a575081810a6102b4565b615e748383615daf565b805f1904821115615e8757615e87615561565b029392505050565b5f6103bb8383615df1565b5f8060408385031215615eab575f80fd5b825160048110615eb9575f80fd5b602084015190925060ff81168114615ecf575f80fd5b809150509250929050565b5f600160ff1b82016141b9576141b961556156fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", + "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615eeb806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b6101076101023660046148e6565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461494e565b6102ba565b61010761013d3660046149b9565b5f9081526020819052604090205460011490565b61016461015f3660046149ef565b6103c2565b005b610179610174366004614a54565b610521565b604051908152602001610113565b610107610195366004614a92565b610535565b6101646101a83660046149ef565b610635565b6101796101bb366004614b29565b6107c8565b6101d36101ce366004614b5a565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614b8c565b610fc9565b61020e610209366004614bd6565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c0d565b6113ce565b6040516101139190614c7a565b610164610259366004614c0d565b6114b4565b61017961026c366004614cdc565b61150e565b61016461027f36600461514e565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a98565b6102d06020850185614b29565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b29565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615208565b611ab3565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061535e565b60405180910390a16103a4818585611ae2565b506103bb60015f80516020615ecb83398151915255565b9392505050565b6103ca611a98565b3385856103d8838383611b19565b6103e2865f611b4a565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b84565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c04565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615422565b611cf4565b5050505050505061051a60015f80516020615ecb83398151915255565b5050505050565b5f61052d848484611ec2565b949350505050565b5f61054a6001600160a01b038616878661204c565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b906004016154e2565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615526565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615551565b6001600160a01b038a16929190612081565b5060019695505050505050565b61063d611a98565b33858561064b838383611b19565b5f8080806106598a82611b4a565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec2565b90506106a58b826120bd565b94506106b3338e8e886120d9565b90935091505f6106c4338f88612150565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615422565b50505050505050505061051a60015f80516020615ecb83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615526565b5f8061083a611a98565b6108476080840184615564565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087061480e565b61087861483a565b5f60405180606001604052808780608001906108949190615564565b5f8181106108a4576108a46155aa565b90506020028101906108b691906155be565b6108c090806155dc565b6108ce9060408101906155f0565b6108db60808b018b615564565b5f8181106108eb576108eb6155aa565b90506020028101906108fd91906155be565b60200135818110610910576109106155aa565b6109269260206040909202019081019150614b29565b6001600160a01b031681526020016109416080890189615564565b5f818110610951576109516155aa565b905060200281019061096391906155be565b61096d90806155dc565b61097b9060608101906155f0565b61098860808b018b615564565b5f818110610998576109986155aa565b90506020028101906109aa91906155be565b604001358181106109bd576109bd6155aa565b6109d39260206040909202019081019150614b29565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615564565b604080516001909201602002820181528501519093505f9250610a1d915082611b4a565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615564565b905081108015610a6357506040840151610a63905f611b4a565b15610e7157610a7560808a018a615564565b82818110610a8557610a856155aa565b9050602002810190610a9791906155be565b610aa090615636565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155aa565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155aa565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121b9565b5f610b6586611ab3565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d06565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061222b565b90505f610c458c604001358360600151611b4a90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b4a565b1580610cc257506060820151610cc0905f611b4a565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156cc565b15610d6e576040808a015190850151610d40916120bd565b6060850151909250610d5290836126f0565b60408a0151909150610d64908361273d565b60408a0152610dd5565b5f610d8a856040015186606001516126f090919063ffffffff16565b9050610da38a60400151826120bd90919063ffffffff16565b9150610dbc85606001518361276d90919063ffffffff16565b60408b0151909350610dce908361273d565b60408b0152505b610ddf8c8261279d565b9b50610deb8d8361279d565b9c50610df782856127cd565b610e01818561288e565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e3694939291906157f4565b60405180910390a187516001018089526020028801849052610e5784612a3a565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156cc565b610e8d5786610e8f565b875b9050610e9c818a35612c7d565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612150565b505f9050610ee560a08a018a6158de565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f6158de565b6040518763ffffffff1660e01b8152600401610f35969594939291906154e2565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611b84565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155aa565b6020026020010151612cb7565b600101610f75565b505050505050610fc460015f80516020615ecb83398151915255565b915091565b5f610fd2611a98565b5f61102f61102a610fe38780615921565b610ff19060408101906158de565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612dc192505050565b612e32565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f60208601866155f0565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad60408601866155f0565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615921565b6110f590615935565b815260200187806020019061110a91906155f0565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615940565b81526020019060010190611129565b505050918352505060200161116d60408901896155f0565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615940565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ab3565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061595a565b60405180910390a15f61124a60a08a018a6158de565b905011156112e65761129b61126260a08a018a6158de565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e4c92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c6158de565b6040516112dd9493929190615981565b60405180910390a15b6112f1828888611ae2565b93505050506103bb60015f80516020615ecb83398151915255565b5f80808061132661131d86806155dc565b61032c90615208565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a86806155dc565b61136390615208565b866020013587604001356121b9565b5f6113b061138087806155dc565b61138990615208565b60208801356040890135336113a160608c018c615564565b6113aa916159b3565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d06565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155aa565b905060200281019061146091906158de565b85604051602001611473939291906159d2565b604051602081830303815290604052612e77565b838281518110611499576114996155aa565b6020908102919091010152600101611430565b505092915050565b6114bc611a98565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615422565b61150a60015f80516020615ecb83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115769190615526565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611a98565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155aa565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155aa565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155aa565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155aa565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155aa565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155aa565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ab3565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a82565b5f6117b186611ab3565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a82565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d94939291906159f5565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d06565b90505f6118ad8383612f17565b606081015181519192505f916118c29161273d565b90505f6118e08360400151846020015161273d90919063ffffffff16565b90506118ec825f612c7d565b806118fc57506118fc815f612c7d565b1561191a57604051630d86822160e01b815260040160405180910390fd5b825161192690866127cd565b6119348360200151856127cd565b61194283604001518661288e565b61195083606001518561288e565b61195985612cb7565b61196284612cb7565b611996338b606001518a6020013581518110611980576119806155aa565b60200260200101515f01518a6080013585611c04565b50506119cc338a606001518a60600135815181106119b6576119b66155aa565b60200260200101515f01518a60a0013584611c04565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3285612a3a565b611a3b84612a3a565b82516001600160e01b0316158015611a5e575060208301516001600160e01b0316155b15611a7c576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615ecb83398151915255565b611aa0612f65565b60025f80516020615ecb83398151915255565b5f81604051602001611ac59190615a71565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1490611b0a906104d6565b6104f88385615422565b505050565b80611b14576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7884848484612f96565b12979650505050505050565b5f805f611b908561306a565b9050611b9c845f612c7d565b15611bba57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc686846130d0565b9150915080611bdb57611bd882615a83565b91505b8115611bf657611bf66001600160a01b038816893085612081565b50925090505b935093915050565b5f80611c108382612c7d565b15611c315760405163793a8f5560e01b815260048101849052602401610316565b83611c4f57611c41868685612150565b505f9250829150611ceb9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c89828661279d565b9050611c95815f612c7d565b15611cb65760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb857868181518110611d5b57611d5b6155aa565b602002602001015193505f845f015160400151511115611eb0575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd38d8a602001516130fd565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dfe9190615af3565b5f60405180830381865afa158015611e18573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e3f9190810190615beb565b9150505f81511115611eae5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e80908a908590600401615ca1565b5f604051808303815f87803b158015611e97575f80fd5b505af1158015611ea9573d5f803e3d5ffd5b505050505b505b600101611d40565b5050505050505050565b5f8115611efc57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f06846133df565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7e91908716906370a0823190602401602060405180830381865afa158015611f54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f789190615526565b836133eb565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffd919088169063dd62ed3e90604401602060405180830381865afa158015611fd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff79190615526565b846133eb565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120429061203c84846120bd565b9061279d565b93505050506103bb565b612059838383600161342b565b611b1457604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b61208f84848484600161348d565b6120b757604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c88383612c7d565b6120d257816103bb565b5090919050565b5f806120e58382612c7d565b156121065760405163793a8f5560e01b815260048101849052602401610316565b8361211657611c41868685611b84565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c89828661273d565b5f805f61215c8561306a565b9050612168845f612c7d565b1561218657604051632d1671a360e11b815260040160405180910390fd5b5f61219185836130d0565b50905080156121ae576121ae6001600160a01b038716888361204c565b969095509350505050565b826060015181815181106121cf576121cf6155aa565b60200260200101515f01516001600160a01b0316836040015183815181106121f9576121f96155aa565b60200260200101515f01516001600160a01b031603611b1457604051631cd2f1c760e21b815260040160405180910390fd5b6122336148a1565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224e5790505090506122a36122718a611ab3565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b8576122b86155aa565b60200260200101819052505f6122ed8a604001518a815181106122dd576122dd6155aa565b60200260200101515f01516133df565b90505f61233f8b5f01518c604001518c8151811061230d5761230d6155aa565b60200260200101515f01518d604001518d8151811061232e5761232e6155aa565b602002602001015160200151611ec2565b90506123ce8b604001518b8151811061235a5761235a6155aa565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d8151811061238c5761238c6155aa565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b836001600303815181106123e4576123e46155aa565b602002602001018190525050505f61240b8a6060015189815181106122dd576122dd6155aa565b90505f61244c8b5f01518c606001518b8151811061242b5761242b6155aa565b60200260200101515f01518d606001518c8151811061232e5761232e6155aa565b90506124998b606001518a81518110612467576124676155aa565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c8151811061238c5761238c6155aa565b836001600403815181106124af576124af6155aa565b602002602001018190525050506124c681866130fd565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161252687305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561255e5761255e614d06565b604051908082528060200260200182016040528015612587578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ad9190615af3565b5f60405180830381865afa1580156125c7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ee9190810190615beb565b9150915060028251101561261a578151604051630fbb8e5560e21b815260040161031691815260200190565b60208201516040830151855161266e908790600490811061263d5761263d6155aa565b6020026020010151600381518110612657576126576155aa565b6020026020010151826120bd90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126a0576126a06155aa565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612720868686866134fa565b915091505f61272f8383613619565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613666565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613690565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613bcd565b8181608001516004815181106127e5576127e56155aa565b60200260200101516004815181106127ff576127ff6155aa565b6020026020010181815250506120b7815f01515f0151826080015160048151811061282c5761282c6155aa565b60200260200101515f81518110612845576128456155aa565b60200260200101515f1c8360800151600481518110612866576128666155aa565b6020026020010151600281518110612880576128806155aa565b6020026020010151856120d9565b8181608001516003815181106128a6576128a66155aa565b60200260200101516004815181106128c0576128c06155aa565b6020908102919091010152805151608082015180515f919060039081106128e9576128e96155aa565b60200260200101515f81518110612902576129026155aa565b60200260200101515f1c90505f8360800151600381518110612926576129266155aa565b6020026020010151600281518110612940576129406155aa565b602002602001015190505f801b81036129e75761295d855f612c7d565b1561297e5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129b5908661279d565b6001600160a01b038085165f9081526001602090815260408083209387168352928152828220858352905220556129f6565b6129f383838388611c04565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a2b929190615cb9565b60405180910390a15050505050565b60c08101515115612ab4578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612a86929091600401615ca1565b5f604051808303815f87803b158015612a9d575f80fd5b505af1158015612aaf573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b0a8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b4a57612b4a614d06565b604051908082528060200260200182016040528015612b73578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612ba3578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612bc39190615af3565b5f60405180830381865afa158015612bdd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c049190810190615beb565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c4c918590600401615ca1565b5f604051808303815f87803b158015612c63575f80fd5b505af1158015612c75573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cab84848484612f96565b13979650505050505050565b5f8160800151600381518110612ccf57612ccf6155aa565b6020026020010151600281518110612ce957612ce96155aa565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d1a57612d1a6155aa565b60200260200101515f81518110612d3357612d336155aa565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612db8838383612150565b50505050505050565b6060604082511015612de057505060408051602081019091525f815290565b5f60208301519050602060408451612df891906159bf565b612e029190615cee565b811115612e1e57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e4257505f919050565b50602001515f1a90565b612e5581613ccb565b612e745780604051630c89984b60e31b81526004016103169190615d0d565b50565b60605f612e848484613cf9565b9050808015612ea557505f3d1180612ea557505f846001600160a01b03163b115b15612eba57612eb2613d0c565b9150506102b4565b8015612ee457604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612ef757612ef2613d25565b612f10565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f448383613d30565b82526040820152612f558284613d30565b6020830152606082015292915050565b5f80516020615ecb83398151915254600203612f9457604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fbb5786859250925050611ceb565b505f85841315612fcf575092949193919260015b8386035f8112604c8213178015613002578215612ff4575f8994509450505050611ceb565b885f94509450505050611ceb565b600a82900a8981028a82828161301a5761301a615cda565b0514613046578415613036575f8b965096505050505050611ceb565b8a5f965096505050505050611ceb565b841561305b578896509450611ceb9350505050565b9550879450611ceb9350505050565b5f805f61307684613d99565b9092509050600182600381111561308f5761308f615d1f565b141580156130ae57505f8260038111156130ab576130ab615d1f565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d33565b5f806001600160e01b038416601b0b60e085901d6130ef828287613e26565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561311a5761311a614d06565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5090505f80845111613155575f61315b565b83516001015b85516001010190505f8167ffffffffffffffff81111561317d5761317d614d06565b6040519080825280602002602001820160405280156131b057816020015b606081526020019060019003908161319b5790505b5090505f6131d4604080516002815233602082015230818301526060810190915290565b8282815181106131e6576131e66155aa565b60200260200101819052505f5b8751811015613243578180600101925050878181518110613216576132166155aa565b6020026020010151838381518110613230576132306155aa565b60209081029190910101526001016131f3565b508551156133d557808060010191505083828281518110613266576132666155aa565b60200260200101819052505f5b86518110156133d357613322878281518110613291576132916155aa565b60200260200101515f01516132ff6132cd8a85815181106132b4576132b46155aa565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613311576133116155aa565b602002602001015160400151613f8c565b61334257604051630a57f30960e31b815260048101829052602401610316565b868181518110613354576133546155aa565b60200260200101515f01516001600160a01b03165f1b85828151811061337c5761337c6155aa565b60200260200101818152505081806001019250508681815181106133a2576133a26155aa565b6020026020010151602001518383815181106133c0576133c06155aa565b6020908102919091010152600101613273565b505b5095945050505050565b5f805f61307684613ffc565b5f805f805f6133fa878761405b565b9250925092505f8061340c858561409e565b915091508183801561341b5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316613481578383151615613475573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166134e95783831516156134dd573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613512575f92505f915061360f565b61351c8487615d6c565b91505f61352888614176565b90505f61353487614176565b90505f61354183836141a4565b5090505f6f0785ee10d5da46d900f436a000000000821115613576576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561359757670de0b6b3a7640000820491506012015b633b9aca008211156135b057633b9aca00820491506009015b6127108211156135c557612710820491506004015b81156135d957600a820491506001016135c5565b6135e38187615d6c565b95506136058b8a6135ff87876135fa87600a615e6b565b6141c0565b8961428c565b9097509550505050505b5094509492505050565b5f805f613626858561409e565b9150915080158015613636575081155b1561365e57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f80613672848461432c565b909450925061368386868686613bcd565b9150915094509492505050565b5f80835f036136bc57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136cd57505f905080611ceb565b5f805f806136db8a8a614381565b919b50995091506136ec8888614381565b919950975090505f6136fd8b614176565b90505f6137098a614176565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613ace57841561376057507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aa6565b6f4b3b4ca85a86c47a098a22400000000083101561388c57678ac7230489e800008310156137f0576402540be4008310156137be57620186a08310156137ae5750620186a090506005613a67565b506402540be4009050600a613a67565b655af3107a40008310156137dd5750655af3107a40009050600e613a67565b50678ac7230489e8000090506013613a67565b6b204fce5e3e250261100000008310156138425769152d02c7e14af680000083101561382b575069152d02c7e14af680000090506017613a67565b506b204fce5e3e250261100000009050601c613a67565b6d314dc6448d9338c15b0a0000000083101561387157506d314dc6448d9338c15b0a0000000090506021613a67565b506f4b3b4ca85a86c47a098a22400000000090506026613a67565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139845773af298d050e4395d69670b12b7f4100000000000083101561391f577172cb5bd86321e38cb6ce6682e8000000000083101561390057507172cb5bd86321e38cb6ce6682e800000000009050602b613a67565b5073af298d050e4395d69670b12b7f4100000000000090506030613a67565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613960575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a67565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a67565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a1a577a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000008310156139f257507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a67565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a67565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a6757507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613a7c57600a820491505f1901613a67565b815f03613aa6576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613ace576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613ae557808d039c50613b23565b600160ff1b9c90038c015f811315613b2357806001600160ff1b03038b13613b1057998a0199613b23565b5f80995099505050505050505050611ceb565b5f808e128015613b3257505f8c135b15613b5357600160ff1b8e01808d13613b4b575f613b4f565b808d035b9150505b8b818f01039750613b708f8e613b6a8887896141c0565b8b61428c565b90995097505f811315613bba57604c811315613b9a575f809a509a50505050505050505050611ceb565b80600a0a8981613bac57613bac615cda565b059850885f03613bba575f97505b50969850949650611ceb95505050505050565b5f8085158415178015613bf957865f03613bed5784849250925050611ceb565b86869250925050611ceb565b613c0387876145db565b9097509550613c1285856145db565b909550935085841315613c26579395929492935b838603604c811115613c3f578787935093505050611ceb565b80600a0a8681613c5157613c51615cda565b0595505086850180881860ff90811c151589881890911c15168015613cba57876001600160ff1b0303613ca15760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cbe565b8198505b5096979596505050505050565b5f600882511015613cdd57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d4d846060015185604001516126f090919063ffffffff16565b915083604001519050613d6d836040015183611b4a90919063ffffffff16565b156130f65782604001519150613d9084606001518361276d90919063ffffffff16565b90509250929050565b5f80613da3614624565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613df9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e1d9190615e76565b91509150915091565b5f805f851215613e5357604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e6557505f90506001611bfc565b8460ff8416850185811215613e975760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613ee357604c19831215613eba575f809550955050505050611bfc565b825f03600a0a9150818481613ed157613ed1615cda565b0495505084029091149150611bfc9050565b5f831315613f7c57604d831315613f205760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f3657613f36615cda565b04841115613f6a5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfc9050565b8360019550955050505050611bfc565b5f836001600160a01b03163b5f03613fea575f80613faa85856146af565b5090925090505f816003811115613fc357613fc3615d1f565b148015613fe15750856001600160a01b0316826001600160a01b0316145b925050506103bb565b613ff58484846146f5565b90506103bb565b5f80614006614624565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613df9573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b0386111561408d57600a860460018201600a88065f1493509350935050614097565b8593509150600190505b9250925092565b5f601b83900b8314838382614102577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156140e257620186a0860595506005850194505b8586601b0b146140fd57600a860595508460010194506140e2565b614118565b855f0361411857505f9250600191506130f69050565b848560030b1461415b575f85121561413857505f92508291506130f69050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561419b57600160ff1b82036141955750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141cd86866141a4565b91509150815f036141f1578381816141e7576141e7615cda565b04925050506103bb565b8382106142225760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614308576001600160ff1b038411156142f5576142b96001600160ff1b036001615551565b84036142cd5750600160ff1b905081611ceb565b6142d8600a85615cee565b6142e190615eb6565b6142ec846001615d6c565b91509150611ceb565b6142fe84615eb6565b8391509150611ceb565b6001600160ff1b03841115614322576142e1600a85615cee565b5082905081611ceb565b5f80600160ff1b8403614377576001600160ff1b03830361436a5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361439957505f91508190506001614097565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f03614586576f4b3b4ca85a86c47a098a22400000000085051580156143fb57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561441c576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561446457507f80000000000000000000000000000000000000000000000000000000000000138412155b1561447d57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144c957507f800000000000000000000000000000000000000000000000000000000000000a8412155b156144df576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561452e57507f80000000000000000000000000000000000000000000000000000000000000028412155b15614544576064850294506002840393506144df565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561457457506001600160ff1b018412155b1561458657600a850294506001840393505b600a808602908105861480156145a357506001600160ff1b018512155b156145b2578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6145ea8787614381565b92509250925080614618576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061467b575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612f94576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f83516041036146e6576020840151604085015160608601515f1a6146d888828585614746565b955095509550505050614097565b505081515f9150600290614097565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561477f57505f91506003905082614804565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147d0573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166147fb57505f925060019150829050614804565b92505f91508190505b9450945094915050565b604051806080016040528061482161483a565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b0316815260200161488860405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148b461483a565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f602082840312156148f6575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261491d575f80fd5b50813567ffffffffffffffff811115614934575f80fd5b6020830191508360208260051b85010111156130f6575f80fd5b5f805f60408486031215614960575f80fd5b833567ffffffffffffffff80821115614977575f80fd5b9085019060a0828803121561498a575f80fd5b9093506020850135908082111561499f575f80fd5b506149ac8682870161490d565b9497909650939450505050565b5f602082840312156149c9575f80fd5b5035919050565b6001600160a01b0381168114612e74575f80fd5b803561419f816149d0565b5f805f805f60808688031215614a03575f80fd5b8535614a0e816149d0565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a37575f80fd5b614a438882890161490d565b969995985093965092949392505050565b5f805f60608486031215614a66575f80fd5b8335614a71816149d0565b92506020840135614a81816149d0565b929592945050506040919091013590565b5f805f805f60808688031215614aa6575f80fd5b8535614ab1816149d0565b94506020860135614ac1816149d0565b935060408601359250606086013567ffffffffffffffff80821115614ae4575f80fd5b818801915088601f830112614af7575f80fd5b813581811115614b05575f80fd5b896020828501011115614b16575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b39575f80fd5b81356103bb816149d0565b5f60c08284031215614b54575f80fd5b50919050565b5f60208284031215614b6a575f80fd5b813567ffffffffffffffff811115614b80575f80fd5b61052d84828501614b44565b5f805f60408486031215614b9e575f80fd5b833567ffffffffffffffff80821115614bb5575f80fd5b614bc187838801614b44565b9450602086013591508082111561499f575f80fd5b5f60208284031215614be6575f80fd5b813567ffffffffffffffff811115614bfc575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c1e575f80fd5b823567ffffffffffffffff811115614c34575f80fd5b614c408582860161490d565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614ccf57603f19888603018452614cbd858351614c4c565b94509285019290850190600101614ca1565b5092979650505050505050565b5f8060408385031215614ced575f80fd5b8235614cf8816149d0565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b60405290565b6040805190810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b60405160a0810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b604051601f8201601f1916810167ffffffffffffffff81118282101715614db257614db2614d06565b604052919050565b5f82601f830112614dc9575f80fd5b813567ffffffffffffffff811115614de357614de3614d06565b614df6601f8201601f1916602001614d89565b818152846020838601011115614e0a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e36575f80fd5b614e3e614d1a565b90508135614e4b816149d0565b81526020820135614e5b816149d0565b6020820152604082013567ffffffffffffffff811115614e79575f80fd5b614e8584828501614dba565b60408301525092915050565b5f67ffffffffffffffff821115614eaa57614eaa614d06565b5060051b60200190565b5f60408284031215614ec4575f80fd5b614ecc614d43565b90508135614ed9816149d0565b808252506020820135602082015292915050565b5f82601f830112614efc575f80fd5b81356020614f11614f0c83614e91565b614d89565b8083825260208201915060208460061b870101935086841115614f32575f80fd5b602086015b84811015614f5757614f498882614eb4565b835291830191604001614f37565b509695505050505050565b5f60a08284031215614f72575f80fd5b614f7a614d66565b9050614f85826149e4565b8152602082013567ffffffffffffffff80821115614fa1575f80fd5b614fad85838601614e26565b60208401526040840135915080821115614fc5575f80fd5b614fd185838601614eed565b60408401526060840135915080821115614fe9575f80fd5b50614ff684828501614eed565b6060830152506080820135608082015292915050565b5f615019614f0c84614e91565b8381529050602080820190600585811b850187811115615037575f80fd5b855b8181101561512457803567ffffffffffffffff80821115615058575f80fd5b908801906060828c03121561506b575f80fd5b615073614d1a565b823561507e816149d0565b81528287013582811115615090575f80fd5b8301601f81018d136150a0575f80fd5b80356150ae614f0c82614e91565b81815290881b8201890190898101908f8311156150c9575f80fd5b928a01925b828410156150e75783358252928a0192908a01906150ce565b848b01525060409150508381013583811115615101575f80fd5b61510d8e828701614dba565b918301919091525087525050938301938301615039565b50505050509392505050565b5f82601f83011261513f575f80fd5b6103bb8383356020850161500c565b5f805f805f6101408688031215615163575f80fd5b853567ffffffffffffffff8082111561517a575f80fd5b61518689838a01614f62565b9650602088013591508082111561519b575f80fd5b6151a789838a01614f62565b95506151b68960408a01614b44565b94506101008801359150808211156151cc575f80fd5b6151d889838a01615130565b93506101208801359150808211156151ee575f80fd5b506151fb88828901615130565b9150509295509295909350565b5f6102b43683614f62565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8135615247816149d0565b6001600160a01b039081168452602083013590615263826149d0565b166020840152604082013536839003601e19018112615280575f80fd5b820160208101903567ffffffffffffffff81111561529c575f80fd5b8036038213156152aa575f80fd5b606060408601526152bf606086018284615213565b95945050505050565b5f808335601e198436030181126152dd575f80fd5b830160208101925035905067ffffffffffffffff8111156152fc575f80fd5b8060061b36038213156130f6575f80fd5b8183525f60208085019450825f5b8581101561535357813561532e816149d0565b6001600160a01b0316875281830135838801526040968701969091019060010161531b565b509495945050505050565b5f6001600160a01b038086168352846020840152606060408401528335615384816149d0565b166060830152602083013536849003605e190181126153a1575f80fd5b60a060808401526153b8610100840185830161523b565b90506153c760408501856152c8565b605f19808685030160a08701526153df84838561530d565b93506153ee60608801886152c8565b93509150808685030160c08701525061540883838361530d565b92505050608084013560e084015280915050949350505050565b5f61542f614f0c84614e91565b80848252602080830192508560051b85013681111561544c575f80fd5b855b818110156154d657803567ffffffffffffffff8082111561546d575f80fd5b818901915060408236031215615481575f80fd5b615489614d43565b823582811115615497575f80fd5b6154a336828601614e26565b82525085830135828111156154b6575f80fd5b6154c236828601615130565b82880152508752505093820193820161544e565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261551a60a083018486615213565b98975050505050505050565b5f60208284031215615536575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461553d565b5f808335601e19843603018112615579575f80fd5b83018035915067ffffffffffffffff821115615593575f80fd5b6020019150600581901b36038213156130f6575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155d2575f80fd5b9190910192915050565b5f8235609e198336030181126155d2575f80fd5b5f808335601e19843603018112615605575f80fd5b83018035915067ffffffffffffffff82111561561f575f80fd5b6020019150600681901b36038213156130f6575f80fd5b5f60808236031215615646575f80fd5b6040516080810167ffffffffffffffff828210818311171561566a5761566a614d06565b81604052843591508082111561567e575f80fd5b61568a36838701614f62565b8352602085013560208401526040850135604084015260608501359150808211156156b3575f80fd5b506156c036828601615130565b60608301525092915050565b5f602082840312156156dc575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561535357815180516001600160a01b0316885283015183880152604090960195908201906001016156fe565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261577b610100850182614c4c565b90506040830151848203604086015261579482826156eb565b915050606083015184820360608601526157ae82826156eb565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615353578151875295820195908201906001016157d8565b5f6001600160a01b0380871683526020608081850152865160808086015261582061010086018261572e565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158bc57601f1988830301845284518a815116835289810151878b850152615890888501826157c5565b91890151848303858b01529190506158a88183614c4c565b968b0196958b019593505050600101615862565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e198436030181126158f3575f80fd5b83018035915067ffffffffffffffff82111561590d575f80fd5b6020019150368190038213156130f6575f80fd5b5f8235605e198336030181126155d2575f80fd5b5f6102b43683614e26565b5f60408284031215615950575f80fd5b6103bb8383614eb4565b6001600160a01b0384168152826020820152606060408201525f6152bf606083018461572e565b6001600160a01b0385168152836020820152606060408201525f6159a9606083018486615213565b9695505050505050565b5f6103bb36848461500c565b818103818111156102b4576102b461553d565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a178184018761572e565b90508281036040840152615a2b818661572e565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461572e565b5f60018201615a9457615a9461553d565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615ae657601f19868403018952615ad48383516157c5565b98840198925090830190600101615ab8565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b2c610100840182614c4c565b9050606084015160808401526080840151601f19808584030160a0860152615b548383615a9b565b925060a08601519150808584030160c0860152615b7183836157c5565b925060c08601519150808584030160e0860152506152bf82826157c5565b5f82601f830112615b9e575f80fd5b81516020615bae614f0c83614e91565b8083825260208201915060208460051b870101935086841115615bcf575f80fd5b602086015b84811015614f575780518352918301918301615bd4565b5f8060408385031215615bfc575f80fd5b825167ffffffffffffffff80821115615c13575f80fd5b818501915085601f830112615c26575f80fd5b81516020615c36614f0c83614e91565b82815260059290921b84018101918181019089841115615c54575f80fd5b948201945b83861015615c7257855182529482019490820190615c59565b91880151919650909350505080821115615c8a575f80fd5b50615c9785828601615b8f565b9150509250929050565b828152604060208201525f61052d60408301846157c5565b6001600160a01b0383168152604060208201525f61052d6040830184615a9b565b634e487b7160e01b5f52601260045260245ffd5b5f82615d0857634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c4c565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d5f57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac61553d565b600181815b80851115615dc557815f1904821115615dab57615dab61553d565b80851615615db857918102915b93841c9390800290615d90565b509250929050565b5f82615ddb575060016102b4565b81615de757505f6102b4565b8160018114615dfd5760028114615e0757615e23565b60019150506102b4565b60ff841115615e1857615e1861553d565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e46575081810a6102b4565b615e508383615d8b565b805f1904821115615e6357615e6361553d565b029392505050565b5f6103bb8383615dcd565b5f8060408385031215615e87575f80fd5b825160048110615e95575f80fd5b602084015190925060ff81168114615eab575f80fd5b809150509250929050565b5f600160ff1b82016141955761419561553d56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", "linkReferences": {} } } diff --git a/src/concrete/raindex/RaindexV6.sol b/src/concrete/raindex/RaindexV6.sol index c0003738e1..3692770bba 100644 --- a/src/concrete/raindex/RaindexV6.sol +++ b/src/concrete/raindex/RaindexV6.sol @@ -721,14 +721,14 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex ClearStateChangeV2 memory clearStateChange = calculateClearStateChange(aliceOrderIOCalculation, bobOrderIOCalculation); + Float aliceBounty = clearStateChange.aliceOutput.sub(clearStateChange.bobInput); + Float bobBounty = clearStateChange.bobOutput.sub(clearStateChange.aliceInput); + // A negative bounty means there is a spread between the orders. This is a // critical error because it means the DEX could be exploited if allowed. // Checked before any vault settlement so a spread always reverts with this // explicit error. - if ( - clearStateChange.aliceOutput.sub(clearStateChange.bobInput).lt(LibDecimalFloat.FLOAT_ZERO) - || clearStateChange.bobOutput.sub(clearStateChange.aliceInput).lt(LibDecimalFloat.FLOAT_ZERO) - ) { + if (aliceBounty.lt(LibDecimalFloat.FLOAT_ZERO) || bobBounty.lt(LibDecimalFloat.FLOAT_ZERO)) { revert NegativeBounty(); } @@ -744,9 +744,6 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex pushVaultZeroInput(bobOrderIOCalculation); { - Float aliceBounty = clearStateChange.aliceOutput.sub(clearStateChange.bobInput); - Float bobBounty = clearStateChange.bobOutput.sub(clearStateChange.aliceInput); - increaseVaultBalance( msg.sender, aliceOrder.validOutputs[clearConfig.aliceOutputIOIndex].token, diff --git a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol index 9c4c237bfb..4f5ca769ac 100644 --- a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x28928b4a6ff0a93af7b1c79eddc0712a1fb86962871a491c7174ae0a5a83dcd1); +bytes32 constant BYTECODE_HASH = bytes32(0x66649f61bd378d8b19ceaaada0d458d04b4cbe85d62556d4a34c4de7e3d452ed); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x8d6911fe853d3aB7ec64f6662a76F8fB64560811); +address constant DEPLOYED_ADDRESS = address(0x41fda7D5631149f516bd10f0B3e2d46d1D9ae1Da); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b038316739da435ffe32f40cc112d4d25601d0d7592cdded9146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b03831673e1f01e722d3f2d8ffc05ff806b652f2350a58e96146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol index 553a59bc4b..5bc695f9c6 100644 --- a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol +++ b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xf665ce7b386a4d6a6de9dfd6d0cd25f2b5beab334396a8c1c3db84e8a031af71); +bytes32 constant BYTECODE_HASH = bytes32(0x0fbc88d7e4a32a0f51626869e11c3850868c29413768de3fb570ea8febf80087); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x9731091Df79c7E8d2744ed1a4cef8Ee9d19E6E9c); +address constant DEPLOYED_ADDRESS = address(0x39F0b404515fc52ff3D455b61287918e1E0d1863); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f33739da435ffe32f40cc112d4d25601d0d7592cdded91461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f3373e1f01e722d3f2d8ffc05ff806b652f2350a58e961461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/RaindexV6.pointers.sol b/src/generated/RaindexV6.pointers.sol index 44179f6da4..f88c91ec2e 100644 --- a/src/generated/RaindexV6.pointers.sol +++ b/src/generated/RaindexV6.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xd0d544f211a3fea2cd1a6287d752c9b137a830aab27dfb1401c8c18b53f18a09); +bytes32 constant BYTECODE_HASH = bytes32(0x14360eb50af55f8a6df7050ac33bbddd9738273ec801c4b92f7cd9992dcd832d); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x9Da435ffE32F40cC112d4D25601d0D7592cDDEd9); +address constant DEPLOYED_ADDRESS = address(0xE1f01E722D3F2D8ffc05fF806b652f2350a58E96); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f0f806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b61010761010236600461490a565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614972565b6102ba565b61010761013d3660046149dd565b5f9081526020819052604090205460011490565b61016461015f366004614a13565b6103c2565b005b610179610174366004614a78565b610521565b604051908152602001610113565b610107610195366004614ab6565b610535565b6101646101a8366004614a13565b610635565b6101796101bb366004614b4d565b6107c8565b6101d36101ce366004614b7e565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bb0565b610fc9565b61020e610209366004614bfa565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c31565b6113ce565b6040516101139190614c9e565b610164610259366004614c31565b6114b4565b61017961026c366004614d00565b61150e565b61016461027f366004615172565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611abc565b6102d06020850185614b4d565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b4d565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661522c565b611ad7565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615382565b60405180910390a16103a4818585611b06565b506103bb60015f80516020615eef83398151915255565b9392505050565b6103ca611abc565b3385856103d8838383611b3d565b6103e2865f611b6e565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611ba8565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c28565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615446565b611d18565b5050505050505061051a60015f80516020615eef83398151915255565b5050505050565b5f61052d848484611ee6565b949350505050565b5f61054a6001600160a01b0386168786612070565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615506565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c2919061554a565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615575565b6001600160a01b038a169291906120a5565b5060019695505050505050565b61063d611abc565b33858561064b838383611b3d565b5f8080806106598a82611b6e565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ee6565b90506106a58b826120e1565b94506106b3338e8e886120fd565b90935091505f6106c4338f88612174565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615446565b50505050505050505061051a60015f80516020615eef83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b4919061554a565b5f8061083a611abc565b6108476080840184615588565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614832565b61087861485e565b5f60405180606001604052808780608001906108949190615588565b5f8181106108a4576108a46155ce565b90506020028101906108b691906155e2565b6108c09080615600565b6108ce906040810190615614565b6108db60808b018b615588565b5f8181106108eb576108eb6155ce565b90506020028101906108fd91906155e2565b60200135818110610910576109106155ce565b6109269260206040909202019081019150614b4d565b6001600160a01b031681526020016109416080890189615588565b5f818110610951576109516155ce565b905060200281019061096391906155e2565b61096d9080615600565b61097b906060810190615614565b61098860808b018b615588565b5f818110610998576109986155ce565b90506020028101906109aa91906155e2565b604001358181106109bd576109bd6155ce565b6109d39260206040909202019081019150614b4d565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615588565b604080516001909201602002820181528501519093505f9250610a1d915082611b6e565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615588565b905081108015610a6357506040840151610a63905f611b6e565b15610e7157610a7560808a018a615588565b82818110610a8557610a856155ce565b9050602002810190610a9791906155e2565b610aa09061565a565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ce565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ce565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121dd565b5f610b6586611ad7565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d2a565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061224f565b90505f610c458c604001358360600151611b6e90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b6e565b1580610cc257506060820151610cc0905f611b6e565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156f0565b15610d6e576040808a015190850151610d40916120e1565b6060850151909250610d529083612714565b60408a0151909150610d649083612761565b60408a0152610dd5565b5f610d8a8560400151866060015161271490919063ffffffff16565b9050610da38a60400151826120e190919063ffffffff16565b9150610dbc85606001518361279190919063ffffffff16565b60408b0151909350610dce9083612761565b60408b0152505b610ddf8c826127c1565b9b50610deb8d836127c1565b9c50610df782856127f1565b610e0181856128b2565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e369493929190615818565b60405180910390a187516001018089526020028801849052610e5784612a5e565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156f0565b610e8d5786610e8f565b875b9050610e9c818a35612ca1565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612174565b505f9050610ee560a08a018a615902565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f615902565b6040518763ffffffff1660e01b8152600401610f3596959493929190615506565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611ba8565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ce565b6020026020010151612cdb565b600101610f75565b505050505050610fc460015f80516020615eef83398151915255565b915091565b5f610fd2611abc565b5f61102f61102a610fe38780615945565b610ff1906040810190615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612de592505050565b612e56565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f6020860186615614565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad6040860186615614565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615945565b6110f590615959565b815260200187806020019061110a9190615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615964565b81526020019060010190611129565b505050918352505060200161116d6040890189615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615964565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ad7565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061597e565b60405180910390a15f61124a60a08a018a615902565b905011156112e65761129b61126260a08a018a615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e7092505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c615902565b6040516112dd94939291906159a5565b60405180910390a15b6112f1828888611b06565b93505050506103bb60015f80516020615eef83398151915255565b5f80808061132661131d8680615600565b61032c9061522c565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a8680615600565b6113639061522c565b866020013587604001356121dd565b5f6113b06113808780615600565b6113899061522c565b60208801356040890135336113a160608c018c615588565b6113aa916159d7565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d2a565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ce565b90506020028101906114609190615902565b85604051602001611473939291906159f6565b604051602081830303815290604052612e9b565b838281518110611499576114996155ce565b6020908102919091010152600101611430565b505092915050565b6114bc611abc565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615446565b61150a60015f80516020615eef83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611576919061554a565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611abc565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ce565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ce565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ce565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ce565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ce565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ce565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ad7565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611aa6565b5f6117b186611ad7565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611aa6565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d9493929190615a19565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d2a565b90505f6118ad8383612f3b565b606081015181519192506118cd915f916118c79190612761565b90612ca1565b806118ec5750604081015160208201516118ec915f916118c791612761565b1561190a57604051630d86822160e01b815260040160405180910390fd5b805161191690846127f1565b6119248160200151836127f1565b6119328160400151846128b2565b6119408160600151836128b2565b61194983612cdb565b61195282612cdb565b606081015181515f916119659190612761565b90505f6119838360400151846020015161276190919063ffffffff16565b90506119b9338b606001518a60200135815181106119a3576119a36155ce565b60200260200101515f01518a6080013585611c28565b50506119ef338a606001518a60600135815181106119d9576119d96155ce565b60200260200101515f01518a60a0013584611c28565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a5883612a5e565b611a6182612a5e565b80516001600160e01b0316158015611a84575060208101516001600160e01b0316155b15611aa2576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615eef83398151915255565b611ac4612f89565b60025f80516020615eef83398151915255565b5f81604051602001611ae99190615a95565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b3890611b2e906104d6565b6104f88385615446565b505050565b80611b38576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b9c84848484612fba565b12979650505050505050565b5f805f611bb48561308e565b9050611bc0845f612ca1565b15611bde57604051632eaefac360e21b815260040160405180910390fd5b5f80611bea86846130f4565b9150915080611bff57611bfc82615aa7565b91505b8115611c1a57611c1a6001600160a01b0388168930856120a5565b50925090505b935093915050565b5f80611c348382612ca1565b15611c555760405163793a8f5560e01b815260048101849052602401610316565b83611c7357611c65868685612174565b505f9250829150611d0f9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad82866127c1565b9050611cb9815f612ca1565b15611cda5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611edc57868181518110611d7f57611d7f6155ce565b602002602001015193505f845f015160400151511115611ed4575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611df78d8a60200151613121565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e229190615b17565b5f60405180830381865afa158015611e3c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e639190810190615c0f565b9150505f81511115611ed25784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611ea4908a908590600401615cc5565b5f604051808303815f87803b158015611ebb575f80fd5b505af1158015611ecd573d5f803e3d5ffd5b505050505b505b600101611d64565b5050505050505050565b5f8115611f2057506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f2a84613403565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611fa291908716906370a0823190602401602060405180830381865afa158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c919061554a565b8361340f565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612021919088169063dd62ed3e90604401602060405180830381865afa158015611ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201b919061554a565b8461340f565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120669061206084846120e1565b906127c1565b93505050506103bb565b61207d838383600161344f565b611b3857604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b38484848460016134b1565b6120db57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ec8383612ca1565b6120f657816103bb565b5090919050565b5f806121098382612ca1565b1561212a5760405163793a8f5560e01b815260048101849052602401610316565b8361213a57611c65868685611ba8565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad8286612761565b5f805f6121808561308e565b905061218c845f612ca1565b156121aa57604051632d1671a360e11b815260040160405180910390fd5b5f6121b585836130f4565b50905080156121d2576121d26001600160a01b0387168883612070565b969095509350505050565b826060015181815181106121f3576121f36155ce565b60200260200101515f01516001600160a01b03168360400151838151811061221d5761221d6155ce565b60200260200101515f01516001600160a01b031603611b3857604051631cd2f1c760e21b815260040160405180910390fd5b6122576148c5565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122725790505090506122c76122958a611ad7565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122dc576122dc6155ce565b60200260200101819052505f6123118a604001518a81518110612301576123016155ce565b60200260200101515f0151613403565b90505f6123638b5f01518c604001518c81518110612331576123316155ce565b60200260200101515f01518d604001518d81518110612352576123526155ce565b602002602001015160200151611ee6565b90506123f28b604001518b8151811061237e5761237e6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123b0576123b06155ce565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612408576124086155ce565b602002602001018190525050505f61242f8a606001518981518110612301576123016155ce565b90505f6124708b5f01518c606001518b8151811061244f5761244f6155ce565b60200260200101515f01518d606001518c81518110612352576123526155ce565b90506124bd8b606001518a8151811061248b5761248b6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123b0576123b06155ce565b836001600403815181106124d3576124d36155ce565b602002602001018190525050506124ea8186613121565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161254a87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561258257612582614d2a565b6040519080825280602002602001820160405280156125ab578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125d19190615b17565b5f60405180830381865afa1580156125eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126129190810190615c0f565b9150915060028251101561263e578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126929087906004908110612661576126616155ce565b602002602001015160038151811061267b5761267b6155ce565b6020026020010151826120e190919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126c4576126c46155ce565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661351e565b915091505f612753838361363d565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661368a565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612744868686866136b4565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061274486868686613bf1565b818160800151600481518110612809576128096155ce565b6020026020010151600481518110612823576128236155ce565b6020026020010181815250506120db815f01515f01518260800151600481518110612850576128506155ce565b60200260200101515f81518110612869576128696155ce565b60200260200101515f1c836080015160048151811061288a5761288a6155ce565b60200260200101516002815181106128a4576128a46155ce565b6020026020010151856120fd565b8181608001516003815181106128ca576128ca6155ce565b60200260200101516004815181106128e4576128e46155ce565b6020908102919091010152805151608082015180515f9190600390811061290d5761290d6155ce565b60200260200101515f81518110612926576129266155ce565b60200260200101515f1c90505f836080015160038151811061294a5761294a6155ce565b6020026020010151600281518110612964576129646155ce565b602002602001015190505f801b8103612a0b57612981855f612ca1565b156129a25760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129d990866127c1565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a1a565b612a1783838388611c28565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a4f929190615cdd565b60405180910390a15050505050565b60c08101515115612ad8578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612aaa929091600401615cc5565b5f604051808303815f87803b158015612ac1575f80fd5b505af1158015612ad3573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b2e8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b6e57612b6e614d2a565b604051908082528060200260200182016040528015612b97578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612bc7578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612be79190615b17565b5f60405180830381865afa158015612c01573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c289190810190615c0f565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c70918590600401615cc5565b5f604051808303815f87803b158015612c87575f80fd5b505af1158015612c99573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612ccf84848484612fba565b13979650505050505050565b5f8160800151600381518110612cf357612cf36155ce565b6020026020010151600281518110612d0d57612d0d6155ce565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d3e57612d3e6155ce565b60200260200101515f81518110612d5757612d576155ce565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612ddc838383612174565b50505050505050565b6060604082511015612e0457505060408051602081019091525f815290565b5f60208301519050602060408451612e1c91906159e3565b612e269190615d12565b811115612e4257505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e6657505f919050565b50602001515f1a90565b612e7981613cef565b612e985780604051630c89984b60e31b81526004016103169190615d31565b50565b60605f612ea88484613d1d565b9050808015612ec957505f3d1180612ec957505f846001600160a01b03163b115b15612ede57612ed6613d30565b9150506102b4565b8015612f0857604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f1b57612f16613d49565b612f34565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f688383613d54565b82526040820152612f798284613d54565b6020830152606082015292915050565b5f80516020615eef83398151915254600203612fb857604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fdf5786859250925050611d0f565b505f85841315612ff3575092949193919260015b8386035f8112604c8213178015613026578215613018575f8994509450505050611d0f565b885f94509450505050611d0f565b600a82900a8981028a82828161303e5761303e615cfe565b051461306a57841561305a575f8b965096505050505050611d0f565b8a5f965096505050505050611d0f565b841561307f578896509450611d0f9350505050565b9550879450611d0f9350505050565b5f805f61309a84613dbd565b909250905060018260038111156130b3576130b3615d43565b141580156130d257505f8260038111156130cf576130cf615d43565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d57565b5f806001600160e01b038416601b0b60e085901d613113828287613e4a565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561313e5761313e614d2a565b604051908082528060200260200182016040528015613167578160200160208202803683370190505b5090505f80845111613179575f61317f565b83516001015b85516001010190505f8167ffffffffffffffff8111156131a1576131a1614d2a565b6040519080825280602002602001820160405280156131d457816020015b60608152602001906001900390816131bf5790505b5090505f6131f8604080516002815233602082015230818301526060810190915290565b82828151811061320a5761320a6155ce565b60200260200101819052505f5b875181101561326757818060010192505087818151811061323a5761323a6155ce565b6020026020010151838381518110613254576132546155ce565b6020908102919091010152600101613217565b508551156133f95780806001019150508382828151811061328a5761328a6155ce565b60200260200101819052505f5b86518110156133f7576133468782815181106132b5576132b56155ce565b60200260200101515f01516133236132f18a85815181106132d8576132d86155ce565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613335576133356155ce565b602002602001015160400151613fb0565b61336657604051630a57f30960e31b815260048101829052602401610316565b868181518110613378576133786155ce565b60200260200101515f01516001600160a01b03165f1b8582815181106133a0576133a06155ce565b60200260200101818152505081806001019250508681815181106133c6576133c66155ce565b6020026020010151602001518383815181106133e4576133e46155ce565b6020908102919091010152600101613297565b505b5095945050505050565b5f805f61309a84614020565b5f805f805f61341e878761407f565b9250925092505f8061343085856140c2565b915091508183801561343f5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134a5578383151615613499573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661350d578383151615613501573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613536575f92505f9150613633565b6135408487615d90565b91505f61354c8861419a565b90505f6135588761419a565b90505f61356583836141c8565b5090505f6f0785ee10d5da46d900f436a00000000082111561359a576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135bb57670de0b6b3a7640000820491506012015b633b9aca008211156135d457633b9aca00820491506009015b6127108211156135e957612710820491506004015b81156135fd57600a820491506001016135e9565b6136078187615d90565b95506136298b8a613623878761361e87600a615e8f565b6141e4565b896142b0565b9097509550505050505b5094509492505050565b5f805f61364a85856140c2565b915091508015801561365a575081155b1561368257604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136968484614350565b90945092506136a786868686613bf1565b9150915094509492505050565b5f80835f036136e057604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136f157505f905080611d0f565b5f805f806136ff8a8a6143a5565b919b509950915061371088886143a5565b919950975090505f6137218b61419a565b90505f61372d8a61419a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613af257841561378457507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aca565b6f4b3b4ca85a86c47a098a2240000000008310156138b057678ac7230489e80000831015613814576402540be4008310156137e257620186a08310156137d25750620186a090506005613a8b565b506402540be4009050600a613a8b565b655af3107a40008310156138015750655af3107a40009050600e613a8b565b50678ac7230489e8000090506013613a8b565b6b204fce5e3e250261100000008310156138665769152d02c7e14af680000083101561384f575069152d02c7e14af680000090506017613a8b565b506b204fce5e3e250261100000009050601c613a8b565b6d314dc6448d9338c15b0a0000000083101561389557506d314dc6448d9338c15b0a0000000090506021613a8b565b506f4b3b4ca85a86c47a098a22400000000090506026613a8b565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139a85773af298d050e4395d69670b12b7f41000000000000831015613943577172cb5bd86321e38cb6ce6682e8000000000083101561392457507172cb5bd86321e38cb6ce6682e800000000009050602b613a8b565b5073af298d050e4395d69670b12b7f4100000000000090506030613a8b565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613984575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a8b565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a8b565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a3e577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a1657507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a8b565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a8b565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a8b57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613aa057600a820491505f1901613a8b565b815f03613aca576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613af2576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b0957808d039c50613b47565b600160ff1b9c90038c015f811315613b4757806001600160ff1b03038b13613b3457998a0199613b47565b5f80995099505050505050505050611d0f565b5f808e128015613b5657505f8c135b15613b7757600160ff1b8e01808d13613b6f575f613b73565b808d035b9150505b8b818f01039750613b948f8e613b8e8887896141e4565b8b6142b0565b90995097505f811315613bde57604c811315613bbe575f809a509a50505050505050505050611d0f565b80600a0a8981613bd057613bd0615cfe565b059850885f03613bde575f97505b50969850949650611d0f95505050505050565b5f8085158415178015613c1d57865f03613c115784849250925050611d0f565b86869250925050611d0f565b613c2787876145ff565b9097509550613c3685856145ff565b909550935085841315613c4a579395929492935b838603604c811115613c63578787935093505050611d0f565b80600a0a8681613c7557613c75615cfe565b0595505086850180881860ff90811c151589881890911c15168015613cde57876001600160ff1b0303613cc55760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613ce2565b8198505b5096979596505050505050565b5f600882511015613d0157505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d718460600151856040015161271490919063ffffffff16565b915083604001519050613d91836040015183611b6e90919063ffffffff16565b1561311a5782604001519150613db484606001518361279190919063ffffffff16565b90509250929050565b5f80613dc7614648565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e419190615e9a565b91509150915091565b5f805f851215613e7757604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e8957505f90506001611c20565b8460ff8416850185811215613ebb5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f0757604c19831215613ede575f809550955050505050611c20565b825f03600a0a9150818481613ef557613ef5615cfe565b0495505084029091149150611c209050565b5f831315613fa057604d831315613f445760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f5a57613f5a615cfe565b04841115613f8e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611c209050565b8360019550955050505050611c20565b5f836001600160a01b03163b5f0361400e575f80613fce85856146d3565b5090925090505f816003811115613fe757613fe7615d43565b1480156140055750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614019848484614719565b90506103bb565b5f8061402a614648565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e1d573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140b157600a860460018201600a88065f14935093509350506140bb565b8593509150600190505b9250925092565b5f601b83900b8314838382614126577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561410657620186a0860595506005850194505b8586601b0b1461412157600a86059550846001019450614106565b61413c565b855f0361413c57505f92506001915061311a9050565b848560030b1461417f575f85121561415c57505f925082915061311a9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141bf57600160ff1b82036141b95750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141f186866141c8565b91509150815f036142155783818161420b5761420b615cfe565b04925050506103bb565b8382106142465760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561432c576001600160ff1b03841115614319576142dd6001600160ff1b036001615575565b84036142f15750600160ff1b905081611d0f565b6142fc600a85615d12565b61430590615eda565b614310846001615d90565b91509150611d0f565b61432284615eda565b8391509150611d0f565b6001600160ff1b0384111561434657614305600a85615d12565b5082905081611d0f565b5f80600160ff1b840361439b576001600160ff1b03830361438e5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143bd57505f915081905060016140bb565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145aa576f4b3b4ca85a86c47a098a224000000000850515801561441f57507f80000000000000000000000000000000000000000000000000000000000000268412155b15614440576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561448857507f80000000000000000000000000000000000000000000000000000000000000138412155b156144a157678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144ed57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614503576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561455257507f80000000000000000000000000000000000000000000000000000000000000028412155b1561456857606485029450600284039350614503565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561459857506001600160ff1b018412155b156145aa57600a850294506001840393505b600a808602908105861480156145c757506001600160ff1b018512155b156145d6578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61460e87876143a5565b9250925092508061463c576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061469f575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fb8576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f835160410361470a576020840151604085015160608601515f1a6146fc8882858561476a565b9550955095505050506140bb565b505081515f91506002906140bb565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147a357505f91506003905082614828565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147f4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661481f57505f925060019150829050614828565b92505f91508190505b9450945094915050565b604051806080016040528061484561485e565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148ac60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148d861485e565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f6020828403121561491a575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614941575f80fd5b50813567ffffffffffffffff811115614958575f80fd5b6020830191508360208260051b850101111561311a575f80fd5b5f805f60408486031215614984575f80fd5b833567ffffffffffffffff8082111561499b575f80fd5b9085019060a082880312156149ae575f80fd5b909350602085013590808211156149c3575f80fd5b506149d086828701614931565b9497909650939450505050565b5f602082840312156149ed575f80fd5b5035919050565b6001600160a01b0381168114612e98575f80fd5b80356141c3816149f4565b5f805f805f60808688031215614a27575f80fd5b8535614a32816149f4565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a5b575f80fd5b614a6788828901614931565b969995985093965092949392505050565b5f805f60608486031215614a8a575f80fd5b8335614a95816149f4565b92506020840135614aa5816149f4565b929592945050506040919091013590565b5f805f805f60808688031215614aca575f80fd5b8535614ad5816149f4565b94506020860135614ae5816149f4565b935060408601359250606086013567ffffffffffffffff80821115614b08575f80fd5b818801915088601f830112614b1b575f80fd5b813581811115614b29575f80fd5b896020828501011115614b3a575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b5d575f80fd5b81356103bb816149f4565b5f60c08284031215614b78575f80fd5b50919050565b5f60208284031215614b8e575f80fd5b813567ffffffffffffffff811115614ba4575f80fd5b61052d84828501614b68565b5f805f60408486031215614bc2575f80fd5b833567ffffffffffffffff80821115614bd9575f80fd5b614be587838801614b68565b945060208601359150808211156149c3575f80fd5b5f60208284031215614c0a575f80fd5b813567ffffffffffffffff811115614c20575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c42575f80fd5b823567ffffffffffffffff811115614c58575f80fd5b614c6485828601614931565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cf357603f19888603018452614ce1858351614c70565b94509285019290850190600101614cc5565b5092979650505050505050565b5f8060408385031215614d11575f80fd5b8235614d1c816149f4565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405290565b6040805190810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405160a0810167ffffffffffffffff81118282101715614d6157614d61614d2a565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dd657614dd6614d2a565b604052919050565b5f82601f830112614ded575f80fd5b813567ffffffffffffffff811115614e0757614e07614d2a565b614e1a601f8201601f1916602001614dad565b818152846020838601011115614e2e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e5a575f80fd5b614e62614d3e565b90508135614e6f816149f4565b81526020820135614e7f816149f4565b6020820152604082013567ffffffffffffffff811115614e9d575f80fd5b614ea984828501614dde565b60408301525092915050565b5f67ffffffffffffffff821115614ece57614ece614d2a565b5060051b60200190565b5f60408284031215614ee8575f80fd5b614ef0614d67565b90508135614efd816149f4565b808252506020820135602082015292915050565b5f82601f830112614f20575f80fd5b81356020614f35614f3083614eb5565b614dad565b8083825260208201915060208460061b870101935086841115614f56575f80fd5b602086015b84811015614f7b57614f6d8882614ed8565b835291830191604001614f5b565b509695505050505050565b5f60a08284031215614f96575f80fd5b614f9e614d8a565b9050614fa982614a08565b8152602082013567ffffffffffffffff80821115614fc5575f80fd5b614fd185838601614e4a565b60208401526040840135915080821115614fe9575f80fd5b614ff585838601614f11565b6040840152606084013591508082111561500d575f80fd5b5061501a84828501614f11565b6060830152506080820135608082015292915050565b5f61503d614f3084614eb5565b8381529050602080820190600585811b85018781111561505b575f80fd5b855b8181101561514857803567ffffffffffffffff8082111561507c575f80fd5b908801906060828c03121561508f575f80fd5b615097614d3e565b82356150a2816149f4565b815282870135828111156150b4575f80fd5b8301601f81018d136150c4575f80fd5b80356150d2614f3082614eb5565b81815290881b8201890190898101908f8311156150ed575f80fd5b928a01925b8284101561510b5783358252928a0192908a01906150f2565b848b01525060409150508381013583811115615125575f80fd5b6151318e828701614dde565b91830191909152508752505093830193830161505d565b50505050509392505050565b5f82601f830112615163575f80fd5b6103bb83833560208501615030565b5f805f805f6101408688031215615187575f80fd5b853567ffffffffffffffff8082111561519e575f80fd5b6151aa89838a01614f86565b965060208801359150808211156151bf575f80fd5b6151cb89838a01614f86565b95506151da8960408a01614b68565b94506101008801359150808211156151f0575f80fd5b6151fc89838a01615154565b9350610120880135915080821115615212575f80fd5b5061521f88828901615154565b9150509295509295909350565b5f6102b43683614f86565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561526b816149f4565b6001600160a01b039081168452602083013590615287826149f4565b166020840152604082013536839003601e190181126152a4575f80fd5b820160208101903567ffffffffffffffff8111156152c0575f80fd5b8036038213156152ce575f80fd5b606060408601526152e3606086018284615237565b95945050505050565b5f808335601e19843603018112615301575f80fd5b830160208101925035905067ffffffffffffffff811115615320575f80fd5b8060061b360382131561311a575f80fd5b8183525f60208085019450825f5b85811015615377578135615352816149f4565b6001600160a01b0316875281830135838801526040968701969091019060010161533f565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153a8816149f4565b166060830152602083013536849003605e190181126153c5575f80fd5b60a060808401526153dc610100840185830161525f565b90506153eb60408501856152ec565b605f19808685030160a0870152615403848385615331565b935061541260608801886152ec565b93509150808685030160c08701525061542c838383615331565b92505050608084013560e084015280915050949350505050565b5f615453614f3084614eb5565b80848252602080830192508560051b850136811115615470575f80fd5b855b818110156154fa57803567ffffffffffffffff80821115615491575f80fd5b8189019150604082360312156154a5575f80fd5b6154ad614d67565b8235828111156154bb575f80fd5b6154c736828601614e4a565b82525085830135828111156154da575f80fd5b6154e636828601615154565b828801525087525050938201938201615472565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261553e60a083018486615237565b98975050505050505050565b5f6020828403121561555a575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615561565b5f808335601e1984360301811261559d575f80fd5b83018035915067ffffffffffffffff8211156155b7575f80fd5b6020019150600581901b360382131561311a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155f6575f80fd5b9190910192915050565b5f8235609e198336030181126155f6575f80fd5b5f808335601e19843603018112615629575f80fd5b83018035915067ffffffffffffffff821115615643575f80fd5b6020019150600681901b360382131561311a575f80fd5b5f6080823603121561566a575f80fd5b6040516080810167ffffffffffffffff828210818311171561568e5761568e614d2a565b8160405284359150808211156156a2575f80fd5b6156ae36838701614f86565b8352602085013560208401526040850135604084015260608501359150808211156156d7575f80fd5b506156e436828601615154565b60608301525092915050565b5f60208284031215615700575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561537757815180516001600160a01b031688528301518388015260409096019590820190600101615722565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261579f610100850182614c70565b9050604083015184820360408601526157b8828261570f565b915050606083015184820360608601526157d2828261570f565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615377578151875295820195908201906001016157fc565b5f6001600160a01b03808716835260206080818501528651608080860152615844610100860182615752565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158e057601f1988830301845284518a815116835289810151878b8501526158b4888501826157e9565b91890151848303858b01529190506158cc8183614c70565b968b0196958b019593505050600101615886565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615917575f80fd5b83018035915067ffffffffffffffff821115615931575f80fd5b60200191503681900382131561311a575f80fd5b5f8235605e198336030181126155f6575f80fd5b5f6102b43683614e4a565b5f60408284031215615974575f80fd5b6103bb8383614ed8565b6001600160a01b0384168152826020820152606060408201525f6152e36060830184615752565b6001600160a01b0385168152836020820152606060408201525f6159cd606083018486615237565b9695505050505050565b5f6103bb368484615030565b818103818111156102b4576102b4615561565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a3b81840187615752565b90508281036040840152615a4f8186615752565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615752565b5f60018201615ab857615ab8615561565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0a57601f19868403018952615af88383516157e9565b98840198925090830190600101615adc565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b50610100840182614c70565b9050606084015160808401526080840151601f19808584030160a0860152615b788383615abf565b925060a08601519150808584030160c0860152615b9583836157e9565b925060c08601519150808584030160e0860152506152e382826157e9565b5f82601f830112615bc2575f80fd5b81516020615bd2614f3083614eb5565b8083825260208201915060208460051b870101935086841115615bf3575f80fd5b602086015b84811015614f7b5780518352918301918301615bf8565b5f8060408385031215615c20575f80fd5b825167ffffffffffffffff80821115615c37575f80fd5b818501915085601f830112615c4a575f80fd5b81516020615c5a614f3083614eb5565b82815260059290921b84018101918181019089841115615c78575f80fd5b948201945b83861015615c9657855182529482019490820190615c7d565b91880151919650909350505080821115615cae575f80fd5b50615cbb85828601615bb3565b9150509250929050565b828152604060208201525f61052d60408301846157e9565b6001600160a01b0383168152604060208201525f61052d6040830184615abf565b634e487b7160e01b5f52601260045260245ffd5b5f82615d2c57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c70565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d8357634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac615561565b600181815b80851115615de957815f1904821115615dcf57615dcf615561565b80851615615ddc57918102915b93841c9390800290615db4565b509250929050565b5f82615dff575060016102b4565b81615e0b57505f6102b4565b8160018114615e215760028114615e2b57615e47565b60019150506102b4565b60ff841115615e3c57615e3c615561565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e6a575081810a6102b4565b615e748383615daf565b805f1904821115615e8757615e87615561565b029392505050565b5f6103bb8383615df1565b5f8060408385031215615eab575f80fd5b825160048110615eb9575f80fd5b602084015190925060ff81168114615ecf575f80fd5b809150509250929050565b5f600160ff1b82016141b9576141b961556156fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615eeb806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b6101076101023660046148e6565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461494e565b6102ba565b61010761013d3660046149b9565b5f9081526020819052604090205460011490565b61016461015f3660046149ef565b6103c2565b005b610179610174366004614a54565b610521565b604051908152602001610113565b610107610195366004614a92565b610535565b6101646101a83660046149ef565b610635565b6101796101bb366004614b29565b6107c8565b6101d36101ce366004614b5a565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614b8c565b610fc9565b61020e610209366004614bd6565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c0d565b6113ce565b6040516101139190614c7a565b610164610259366004614c0d565b6114b4565b61017961026c366004614cdc565b61150e565b61016461027f36600461514e565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a98565b6102d06020850185614b29565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b29565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615208565b611ab3565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061535e565b60405180910390a16103a4818585611ae2565b506103bb60015f80516020615ecb83398151915255565b9392505050565b6103ca611a98565b3385856103d8838383611b19565b6103e2865f611b4a565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b84565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c04565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615422565b611cf4565b5050505050505061051a60015f80516020615ecb83398151915255565b5050505050565b5f61052d848484611ec2565b949350505050565b5f61054a6001600160a01b038616878661204c565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b906004016154e2565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615526565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615551565b6001600160a01b038a16929190612081565b5060019695505050505050565b61063d611a98565b33858561064b838383611b19565b5f8080806106598a82611b4a565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec2565b90506106a58b826120bd565b94506106b3338e8e886120d9565b90935091505f6106c4338f88612150565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615422565b50505050505050505061051a60015f80516020615ecb83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615526565b5f8061083a611a98565b6108476080840184615564565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087061480e565b61087861483a565b5f60405180606001604052808780608001906108949190615564565b5f8181106108a4576108a46155aa565b90506020028101906108b691906155be565b6108c090806155dc565b6108ce9060408101906155f0565b6108db60808b018b615564565b5f8181106108eb576108eb6155aa565b90506020028101906108fd91906155be565b60200135818110610910576109106155aa565b6109269260206040909202019081019150614b29565b6001600160a01b031681526020016109416080890189615564565b5f818110610951576109516155aa565b905060200281019061096391906155be565b61096d90806155dc565b61097b9060608101906155f0565b61098860808b018b615564565b5f818110610998576109986155aa565b90506020028101906109aa91906155be565b604001358181106109bd576109bd6155aa565b6109d39260206040909202019081019150614b29565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615564565b604080516001909201602002820181528501519093505f9250610a1d915082611b4a565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615564565b905081108015610a6357506040840151610a63905f611b4a565b15610e7157610a7560808a018a615564565b82818110610a8557610a856155aa565b9050602002810190610a9791906155be565b610aa090615636565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155aa565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155aa565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121b9565b5f610b6586611ab3565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d06565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061222b565b90505f610c458c604001358360600151611b4a90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b4a565b1580610cc257506060820151610cc0905f611b4a565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156cc565b15610d6e576040808a015190850151610d40916120bd565b6060850151909250610d5290836126f0565b60408a0151909150610d64908361273d565b60408a0152610dd5565b5f610d8a856040015186606001516126f090919063ffffffff16565b9050610da38a60400151826120bd90919063ffffffff16565b9150610dbc85606001518361276d90919063ffffffff16565b60408b0151909350610dce908361273d565b60408b0152505b610ddf8c8261279d565b9b50610deb8d8361279d565b9c50610df782856127cd565b610e01818561288e565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e3694939291906157f4565b60405180910390a187516001018089526020028801849052610e5784612a3a565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156cc565b610e8d5786610e8f565b875b9050610e9c818a35612c7d565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612150565b505f9050610ee560a08a018a6158de565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f6158de565b6040518763ffffffff1660e01b8152600401610f35969594939291906154e2565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611b84565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155aa565b6020026020010151612cb7565b600101610f75565b505050505050610fc460015f80516020615ecb83398151915255565b915091565b5f610fd2611a98565b5f61102f61102a610fe38780615921565b610ff19060408101906158de565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612dc192505050565b612e32565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f60208601866155f0565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad60408601866155f0565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615921565b6110f590615935565b815260200187806020019061110a91906155f0565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615940565b81526020019060010190611129565b505050918352505060200161116d60408901896155f0565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615940565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ab3565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061595a565b60405180910390a15f61124a60a08a018a6158de565b905011156112e65761129b61126260a08a018a6158de565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e4c92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c6158de565b6040516112dd9493929190615981565b60405180910390a15b6112f1828888611ae2565b93505050506103bb60015f80516020615ecb83398151915255565b5f80808061132661131d86806155dc565b61032c90615208565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a86806155dc565b61136390615208565b866020013587604001356121b9565b5f6113b061138087806155dc565b61138990615208565b60208801356040890135336113a160608c018c615564565b6113aa916159b3565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d06565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155aa565b905060200281019061146091906158de565b85604051602001611473939291906159d2565b604051602081830303815290604052612e77565b838281518110611499576114996155aa565b6020908102919091010152600101611430565b505092915050565b6114bc611a98565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615422565b61150a60015f80516020615ecb83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115769190615526565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611a98565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155aa565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155aa565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155aa565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155aa565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155aa565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155aa565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ab3565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a82565b5f6117b186611ab3565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a82565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d94939291906159f5565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d06565b90505f6118ad8383612f17565b606081015181519192505f916118c29161273d565b90505f6118e08360400151846020015161273d90919063ffffffff16565b90506118ec825f612c7d565b806118fc57506118fc815f612c7d565b1561191a57604051630d86822160e01b815260040160405180910390fd5b825161192690866127cd565b6119348360200151856127cd565b61194283604001518661288e565b61195083606001518561288e565b61195985612cb7565b61196284612cb7565b611996338b606001518a6020013581518110611980576119806155aa565b60200260200101515f01518a6080013585611c04565b50506119cc338a606001518a60600135815181106119b6576119b66155aa565b60200260200101515f01518a60a0013584611c04565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3285612a3a565b611a3b84612a3a565b82516001600160e01b0316158015611a5e575060208301516001600160e01b0316155b15611a7c576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615ecb83398151915255565b611aa0612f65565b60025f80516020615ecb83398151915255565b5f81604051602001611ac59190615a71565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1490611b0a906104d6565b6104f88385615422565b505050565b80611b14576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7884848484612f96565b12979650505050505050565b5f805f611b908561306a565b9050611b9c845f612c7d565b15611bba57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc686846130d0565b9150915080611bdb57611bd882615a83565b91505b8115611bf657611bf66001600160a01b038816893085612081565b50925090505b935093915050565b5f80611c108382612c7d565b15611c315760405163793a8f5560e01b815260048101849052602401610316565b83611c4f57611c41868685612150565b505f9250829150611ceb9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c89828661279d565b9050611c95815f612c7d565b15611cb65760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb857868181518110611d5b57611d5b6155aa565b602002602001015193505f845f015160400151511115611eb0575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd38d8a602001516130fd565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dfe9190615af3565b5f60405180830381865afa158015611e18573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e3f9190810190615beb565b9150505f81511115611eae5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e80908a908590600401615ca1565b5f604051808303815f87803b158015611e97575f80fd5b505af1158015611ea9573d5f803e3d5ffd5b505050505b505b600101611d40565b5050505050505050565b5f8115611efc57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f06846133df565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7e91908716906370a0823190602401602060405180830381865afa158015611f54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f789190615526565b836133eb565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffd919088169063dd62ed3e90604401602060405180830381865afa158015611fd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff79190615526565b846133eb565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120429061203c84846120bd565b9061279d565b93505050506103bb565b612059838383600161342b565b611b1457604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b61208f84848484600161348d565b6120b757604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c88383612c7d565b6120d257816103bb565b5090919050565b5f806120e58382612c7d565b156121065760405163793a8f5560e01b815260048101849052602401610316565b8361211657611c41868685611b84565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c89828661273d565b5f805f61215c8561306a565b9050612168845f612c7d565b1561218657604051632d1671a360e11b815260040160405180910390fd5b5f61219185836130d0565b50905080156121ae576121ae6001600160a01b038716888361204c565b969095509350505050565b826060015181815181106121cf576121cf6155aa565b60200260200101515f01516001600160a01b0316836040015183815181106121f9576121f96155aa565b60200260200101515f01516001600160a01b031603611b1457604051631cd2f1c760e21b815260040160405180910390fd5b6122336148a1565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224e5790505090506122a36122718a611ab3565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b8576122b86155aa565b60200260200101819052505f6122ed8a604001518a815181106122dd576122dd6155aa565b60200260200101515f01516133df565b90505f61233f8b5f01518c604001518c8151811061230d5761230d6155aa565b60200260200101515f01518d604001518d8151811061232e5761232e6155aa565b602002602001015160200151611ec2565b90506123ce8b604001518b8151811061235a5761235a6155aa565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d8151811061238c5761238c6155aa565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b836001600303815181106123e4576123e46155aa565b602002602001018190525050505f61240b8a6060015189815181106122dd576122dd6155aa565b90505f61244c8b5f01518c606001518b8151811061242b5761242b6155aa565b60200260200101515f01518d606001518c8151811061232e5761232e6155aa565b90506124998b606001518a81518110612467576124676155aa565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c8151811061238c5761238c6155aa565b836001600403815181106124af576124af6155aa565b602002602001018190525050506124c681866130fd565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161252687305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561255e5761255e614d06565b604051908082528060200260200182016040528015612587578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ad9190615af3565b5f60405180830381865afa1580156125c7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ee9190810190615beb565b9150915060028251101561261a578151604051630fbb8e5560e21b815260040161031691815260200190565b60208201516040830151855161266e908790600490811061263d5761263d6155aa565b6020026020010151600381518110612657576126576155aa565b6020026020010151826120bd90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126a0576126a06155aa565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612720868686866134fa565b915091505f61272f8383613619565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613666565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613690565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613bcd565b8181608001516004815181106127e5576127e56155aa565b60200260200101516004815181106127ff576127ff6155aa565b6020026020010181815250506120b7815f01515f0151826080015160048151811061282c5761282c6155aa565b60200260200101515f81518110612845576128456155aa565b60200260200101515f1c8360800151600481518110612866576128666155aa565b6020026020010151600281518110612880576128806155aa565b6020026020010151856120d9565b8181608001516003815181106128a6576128a66155aa565b60200260200101516004815181106128c0576128c06155aa565b6020908102919091010152805151608082015180515f919060039081106128e9576128e96155aa565b60200260200101515f81518110612902576129026155aa565b60200260200101515f1c90505f8360800151600381518110612926576129266155aa565b6020026020010151600281518110612940576129406155aa565b602002602001015190505f801b81036129e75761295d855f612c7d565b1561297e5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129b5908661279d565b6001600160a01b038085165f9081526001602090815260408083209387168352928152828220858352905220556129f6565b6129f383838388611c04565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a2b929190615cb9565b60405180910390a15050505050565b60c08101515115612ab4578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612a86929091600401615ca1565b5f604051808303815f87803b158015612a9d575f80fd5b505af1158015612aaf573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b0a8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b4a57612b4a614d06565b604051908082528060200260200182016040528015612b73578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612ba3578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612bc39190615af3565b5f60405180830381865afa158015612bdd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c049190810190615beb565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c4c918590600401615ca1565b5f604051808303815f87803b158015612c63575f80fd5b505af1158015612c75573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cab84848484612f96565b13979650505050505050565b5f8160800151600381518110612ccf57612ccf6155aa565b6020026020010151600281518110612ce957612ce96155aa565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d1a57612d1a6155aa565b60200260200101515f81518110612d3357612d336155aa565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612db8838383612150565b50505050505050565b6060604082511015612de057505060408051602081019091525f815290565b5f60208301519050602060408451612df891906159bf565b612e029190615cee565b811115612e1e57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e4257505f919050565b50602001515f1a90565b612e5581613ccb565b612e745780604051630c89984b60e31b81526004016103169190615d0d565b50565b60605f612e848484613cf9565b9050808015612ea557505f3d1180612ea557505f846001600160a01b03163b115b15612eba57612eb2613d0c565b9150506102b4565b8015612ee457604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612ef757612ef2613d25565b612f10565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f448383613d30565b82526040820152612f558284613d30565b6020830152606082015292915050565b5f80516020615ecb83398151915254600203612f9457604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fbb5786859250925050611ceb565b505f85841315612fcf575092949193919260015b8386035f8112604c8213178015613002578215612ff4575f8994509450505050611ceb565b885f94509450505050611ceb565b600a82900a8981028a82828161301a5761301a615cda565b0514613046578415613036575f8b965096505050505050611ceb565b8a5f965096505050505050611ceb565b841561305b578896509450611ceb9350505050565b9550879450611ceb9350505050565b5f805f61307684613d99565b9092509050600182600381111561308f5761308f615d1f565b141580156130ae57505f8260038111156130ab576130ab615d1f565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d33565b5f806001600160e01b038416601b0b60e085901d6130ef828287613e26565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561311a5761311a614d06565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5090505f80845111613155575f61315b565b83516001015b85516001010190505f8167ffffffffffffffff81111561317d5761317d614d06565b6040519080825280602002602001820160405280156131b057816020015b606081526020019060019003908161319b5790505b5090505f6131d4604080516002815233602082015230818301526060810190915290565b8282815181106131e6576131e66155aa565b60200260200101819052505f5b8751811015613243578180600101925050878181518110613216576132166155aa565b6020026020010151838381518110613230576132306155aa565b60209081029190910101526001016131f3565b508551156133d557808060010191505083828281518110613266576132666155aa565b60200260200101819052505f5b86518110156133d357613322878281518110613291576132916155aa565b60200260200101515f01516132ff6132cd8a85815181106132b4576132b46155aa565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613311576133116155aa565b602002602001015160400151613f8c565b61334257604051630a57f30960e31b815260048101829052602401610316565b868181518110613354576133546155aa565b60200260200101515f01516001600160a01b03165f1b85828151811061337c5761337c6155aa565b60200260200101818152505081806001019250508681815181106133a2576133a26155aa565b6020026020010151602001518383815181106133c0576133c06155aa565b6020908102919091010152600101613273565b505b5095945050505050565b5f805f61307684613ffc565b5f805f805f6133fa878761405b565b9250925092505f8061340c858561409e565b915091508183801561341b5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316613481578383151615613475573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166134e95783831516156134dd573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613512575f92505f915061360f565b61351c8487615d6c565b91505f61352888614176565b90505f61353487614176565b90505f61354183836141a4565b5090505f6f0785ee10d5da46d900f436a000000000821115613576576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561359757670de0b6b3a7640000820491506012015b633b9aca008211156135b057633b9aca00820491506009015b6127108211156135c557612710820491506004015b81156135d957600a820491506001016135c5565b6135e38187615d6c565b95506136058b8a6135ff87876135fa87600a615e6b565b6141c0565b8961428c565b9097509550505050505b5094509492505050565b5f805f613626858561409e565b9150915080158015613636575081155b1561365e57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f80613672848461432c565b909450925061368386868686613bcd565b9150915094509492505050565b5f80835f036136bc57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136cd57505f905080611ceb565b5f805f806136db8a8a614381565b919b50995091506136ec8888614381565b919950975090505f6136fd8b614176565b90505f6137098a614176565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613ace57841561376057507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aa6565b6f4b3b4ca85a86c47a098a22400000000083101561388c57678ac7230489e800008310156137f0576402540be4008310156137be57620186a08310156137ae5750620186a090506005613a67565b506402540be4009050600a613a67565b655af3107a40008310156137dd5750655af3107a40009050600e613a67565b50678ac7230489e8000090506013613a67565b6b204fce5e3e250261100000008310156138425769152d02c7e14af680000083101561382b575069152d02c7e14af680000090506017613a67565b506b204fce5e3e250261100000009050601c613a67565b6d314dc6448d9338c15b0a0000000083101561387157506d314dc6448d9338c15b0a0000000090506021613a67565b506f4b3b4ca85a86c47a098a22400000000090506026613a67565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139845773af298d050e4395d69670b12b7f4100000000000083101561391f577172cb5bd86321e38cb6ce6682e8000000000083101561390057507172cb5bd86321e38cb6ce6682e800000000009050602b613a67565b5073af298d050e4395d69670b12b7f4100000000000090506030613a67565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613960575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a67565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a67565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a1a577a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000008310156139f257507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a67565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a67565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a6757507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613a7c57600a820491505f1901613a67565b815f03613aa6576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613ace576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613ae557808d039c50613b23565b600160ff1b9c90038c015f811315613b2357806001600160ff1b03038b13613b1057998a0199613b23565b5f80995099505050505050505050611ceb565b5f808e128015613b3257505f8c135b15613b5357600160ff1b8e01808d13613b4b575f613b4f565b808d035b9150505b8b818f01039750613b708f8e613b6a8887896141c0565b8b61428c565b90995097505f811315613bba57604c811315613b9a575f809a509a50505050505050505050611ceb565b80600a0a8981613bac57613bac615cda565b059850885f03613bba575f97505b50969850949650611ceb95505050505050565b5f8085158415178015613bf957865f03613bed5784849250925050611ceb565b86869250925050611ceb565b613c0387876145db565b9097509550613c1285856145db565b909550935085841315613c26579395929492935b838603604c811115613c3f578787935093505050611ceb565b80600a0a8681613c5157613c51615cda565b0595505086850180881860ff90811c151589881890911c15168015613cba57876001600160ff1b0303613ca15760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cbe565b8198505b5096979596505050505050565b5f600882511015613cdd57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d4d846060015185604001516126f090919063ffffffff16565b915083604001519050613d6d836040015183611b4a90919063ffffffff16565b156130f65782604001519150613d9084606001518361276d90919063ffffffff16565b90509250929050565b5f80613da3614624565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613df9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e1d9190615e76565b91509150915091565b5f805f851215613e5357604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e6557505f90506001611bfc565b8460ff8416850185811215613e975760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613ee357604c19831215613eba575f809550955050505050611bfc565b825f03600a0a9150818481613ed157613ed1615cda565b0495505084029091149150611bfc9050565b5f831315613f7c57604d831315613f205760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f3657613f36615cda565b04841115613f6a5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfc9050565b8360019550955050505050611bfc565b5f836001600160a01b03163b5f03613fea575f80613faa85856146af565b5090925090505f816003811115613fc357613fc3615d1f565b148015613fe15750856001600160a01b0316826001600160a01b0316145b925050506103bb565b613ff58484846146f5565b90506103bb565b5f80614006614624565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613df9573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b0386111561408d57600a860460018201600a88065f1493509350935050614097565b8593509150600190505b9250925092565b5f601b83900b8314838382614102577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156140e257620186a0860595506005850194505b8586601b0b146140fd57600a860595508460010194506140e2565b614118565b855f0361411857505f9250600191506130f69050565b848560030b1461415b575f85121561413857505f92508291506130f69050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561419b57600160ff1b82036141955750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141cd86866141a4565b91509150815f036141f1578381816141e7576141e7615cda565b04925050506103bb565b8382106142225760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614308576001600160ff1b038411156142f5576142b96001600160ff1b036001615551565b84036142cd5750600160ff1b905081611ceb565b6142d8600a85615cee565b6142e190615eb6565b6142ec846001615d6c565b91509150611ceb565b6142fe84615eb6565b8391509150611ceb565b6001600160ff1b03841115614322576142e1600a85615cee565b5082905081611ceb565b5f80600160ff1b8403614377576001600160ff1b03830361436a5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361439957505f91508190506001614097565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f03614586576f4b3b4ca85a86c47a098a22400000000085051580156143fb57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561441c576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561446457507f80000000000000000000000000000000000000000000000000000000000000138412155b1561447d57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144c957507f800000000000000000000000000000000000000000000000000000000000000a8412155b156144df576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561452e57507f80000000000000000000000000000000000000000000000000000000000000028412155b15614544576064850294506002840393506144df565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561457457506001600160ff1b018412155b1561458657600a850294506001840393505b600a808602908105861480156145a357506001600160ff1b018512155b156145b2578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6145ea8787614381565b92509250925080614618576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061467b575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612f94576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f83516041036146e6576020840151604085015160608601515f1a6146d888828585614746565b955095509550505050614097565b505081515f9150600290614097565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561477f57505f91506003905082614804565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147d0573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166147fb57505f925060019150829050614804565b92505f91508190505b9450945094915050565b604051806080016040528061482161483a565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b0316815260200161488860405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148b461483a565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f602082840312156148f6575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261491d575f80fd5b50813567ffffffffffffffff811115614934575f80fd5b6020830191508360208260051b85010111156130f6575f80fd5b5f805f60408486031215614960575f80fd5b833567ffffffffffffffff80821115614977575f80fd5b9085019060a0828803121561498a575f80fd5b9093506020850135908082111561499f575f80fd5b506149ac8682870161490d565b9497909650939450505050565b5f602082840312156149c9575f80fd5b5035919050565b6001600160a01b0381168114612e74575f80fd5b803561419f816149d0565b5f805f805f60808688031215614a03575f80fd5b8535614a0e816149d0565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a37575f80fd5b614a438882890161490d565b969995985093965092949392505050565b5f805f60608486031215614a66575f80fd5b8335614a71816149d0565b92506020840135614a81816149d0565b929592945050506040919091013590565b5f805f805f60808688031215614aa6575f80fd5b8535614ab1816149d0565b94506020860135614ac1816149d0565b935060408601359250606086013567ffffffffffffffff80821115614ae4575f80fd5b818801915088601f830112614af7575f80fd5b813581811115614b05575f80fd5b896020828501011115614b16575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b39575f80fd5b81356103bb816149d0565b5f60c08284031215614b54575f80fd5b50919050565b5f60208284031215614b6a575f80fd5b813567ffffffffffffffff811115614b80575f80fd5b61052d84828501614b44565b5f805f60408486031215614b9e575f80fd5b833567ffffffffffffffff80821115614bb5575f80fd5b614bc187838801614b44565b9450602086013591508082111561499f575f80fd5b5f60208284031215614be6575f80fd5b813567ffffffffffffffff811115614bfc575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c1e575f80fd5b823567ffffffffffffffff811115614c34575f80fd5b614c408582860161490d565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614ccf57603f19888603018452614cbd858351614c4c565b94509285019290850190600101614ca1565b5092979650505050505050565b5f8060408385031215614ced575f80fd5b8235614cf8816149d0565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b60405290565b6040805190810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b60405160a0810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b604051601f8201601f1916810167ffffffffffffffff81118282101715614db257614db2614d06565b604052919050565b5f82601f830112614dc9575f80fd5b813567ffffffffffffffff811115614de357614de3614d06565b614df6601f8201601f1916602001614d89565b818152846020838601011115614e0a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e36575f80fd5b614e3e614d1a565b90508135614e4b816149d0565b81526020820135614e5b816149d0565b6020820152604082013567ffffffffffffffff811115614e79575f80fd5b614e8584828501614dba565b60408301525092915050565b5f67ffffffffffffffff821115614eaa57614eaa614d06565b5060051b60200190565b5f60408284031215614ec4575f80fd5b614ecc614d43565b90508135614ed9816149d0565b808252506020820135602082015292915050565b5f82601f830112614efc575f80fd5b81356020614f11614f0c83614e91565b614d89565b8083825260208201915060208460061b870101935086841115614f32575f80fd5b602086015b84811015614f5757614f498882614eb4565b835291830191604001614f37565b509695505050505050565b5f60a08284031215614f72575f80fd5b614f7a614d66565b9050614f85826149e4565b8152602082013567ffffffffffffffff80821115614fa1575f80fd5b614fad85838601614e26565b60208401526040840135915080821115614fc5575f80fd5b614fd185838601614eed565b60408401526060840135915080821115614fe9575f80fd5b50614ff684828501614eed565b6060830152506080820135608082015292915050565b5f615019614f0c84614e91565b8381529050602080820190600585811b850187811115615037575f80fd5b855b8181101561512457803567ffffffffffffffff80821115615058575f80fd5b908801906060828c03121561506b575f80fd5b615073614d1a565b823561507e816149d0565b81528287013582811115615090575f80fd5b8301601f81018d136150a0575f80fd5b80356150ae614f0c82614e91565b81815290881b8201890190898101908f8311156150c9575f80fd5b928a01925b828410156150e75783358252928a0192908a01906150ce565b848b01525060409150508381013583811115615101575f80fd5b61510d8e828701614dba565b918301919091525087525050938301938301615039565b50505050509392505050565b5f82601f83011261513f575f80fd5b6103bb8383356020850161500c565b5f805f805f6101408688031215615163575f80fd5b853567ffffffffffffffff8082111561517a575f80fd5b61518689838a01614f62565b9650602088013591508082111561519b575f80fd5b6151a789838a01614f62565b95506151b68960408a01614b44565b94506101008801359150808211156151cc575f80fd5b6151d889838a01615130565b93506101208801359150808211156151ee575f80fd5b506151fb88828901615130565b9150509295509295909350565b5f6102b43683614f62565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8135615247816149d0565b6001600160a01b039081168452602083013590615263826149d0565b166020840152604082013536839003601e19018112615280575f80fd5b820160208101903567ffffffffffffffff81111561529c575f80fd5b8036038213156152aa575f80fd5b606060408601526152bf606086018284615213565b95945050505050565b5f808335601e198436030181126152dd575f80fd5b830160208101925035905067ffffffffffffffff8111156152fc575f80fd5b8060061b36038213156130f6575f80fd5b8183525f60208085019450825f5b8581101561535357813561532e816149d0565b6001600160a01b0316875281830135838801526040968701969091019060010161531b565b509495945050505050565b5f6001600160a01b038086168352846020840152606060408401528335615384816149d0565b166060830152602083013536849003605e190181126153a1575f80fd5b60a060808401526153b8610100840185830161523b565b90506153c760408501856152c8565b605f19808685030160a08701526153df84838561530d565b93506153ee60608801886152c8565b93509150808685030160c08701525061540883838361530d565b92505050608084013560e084015280915050949350505050565b5f61542f614f0c84614e91565b80848252602080830192508560051b85013681111561544c575f80fd5b855b818110156154d657803567ffffffffffffffff8082111561546d575f80fd5b818901915060408236031215615481575f80fd5b615489614d43565b823582811115615497575f80fd5b6154a336828601614e26565b82525085830135828111156154b6575f80fd5b6154c236828601615130565b82880152508752505093820193820161544e565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261551a60a083018486615213565b98975050505050505050565b5f60208284031215615536575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461553d565b5f808335601e19843603018112615579575f80fd5b83018035915067ffffffffffffffff821115615593575f80fd5b6020019150600581901b36038213156130f6575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155d2575f80fd5b9190910192915050565b5f8235609e198336030181126155d2575f80fd5b5f808335601e19843603018112615605575f80fd5b83018035915067ffffffffffffffff82111561561f575f80fd5b6020019150600681901b36038213156130f6575f80fd5b5f60808236031215615646575f80fd5b6040516080810167ffffffffffffffff828210818311171561566a5761566a614d06565b81604052843591508082111561567e575f80fd5b61568a36838701614f62565b8352602085013560208401526040850135604084015260608501359150808211156156b3575f80fd5b506156c036828601615130565b60608301525092915050565b5f602082840312156156dc575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561535357815180516001600160a01b0316885283015183880152604090960195908201906001016156fe565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261577b610100850182614c4c565b90506040830151848203604086015261579482826156eb565b915050606083015184820360608601526157ae82826156eb565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615353578151875295820195908201906001016157d8565b5f6001600160a01b0380871683526020608081850152865160808086015261582061010086018261572e565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158bc57601f1988830301845284518a815116835289810151878b850152615890888501826157c5565b91890151848303858b01529190506158a88183614c4c565b968b0196958b019593505050600101615862565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e198436030181126158f3575f80fd5b83018035915067ffffffffffffffff82111561590d575f80fd5b6020019150368190038213156130f6575f80fd5b5f8235605e198336030181126155d2575f80fd5b5f6102b43683614e26565b5f60408284031215615950575f80fd5b6103bb8383614eb4565b6001600160a01b0384168152826020820152606060408201525f6152bf606083018461572e565b6001600160a01b0385168152836020820152606060408201525f6159a9606083018486615213565b9695505050505050565b5f6103bb36848461500c565b818103818111156102b4576102b461553d565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a178184018761572e565b90508281036040840152615a2b818661572e565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461572e565b5f60018201615a9457615a9461553d565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615ae657601f19868403018952615ad48383516157c5565b98840198925090830190600101615ab8565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b2c610100840182614c4c565b9050606084015160808401526080840151601f19808584030160a0860152615b548383615a9b565b925060a08601519150808584030160c0860152615b7183836157c5565b925060c08601519150808584030160e0860152506152bf82826157c5565b5f82601f830112615b9e575f80fd5b81516020615bae614f0c83614e91565b8083825260208201915060208460051b870101935086841115615bcf575f80fd5b602086015b84811015614f575780518352918301918301615bd4565b5f8060408385031215615bfc575f80fd5b825167ffffffffffffffff80821115615c13575f80fd5b818501915085601f830112615c26575f80fd5b81516020615c36614f0c83614e91565b82815260059290921b84018101918181019089841115615c54575f80fd5b948201945b83861015615c7257855182529482019490820190615c59565b91880151919650909350505080821115615c8a575f80fd5b50615c9785828601615b8f565b9150509250929050565b828152604060208201525f61052d60408301846157c5565b6001600160a01b0383168152604060208201525f61052d6040830184615a9b565b634e487b7160e01b5f52601260045260245ffd5b5f82615d0857634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c4c565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d5f57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac61553d565b600181815b80851115615dc557815f1904821115615dab57615dab61553d565b80851615615db857918102915b93841c9390800290615d90565b509250929050565b5f82615ddb575060016102b4565b81615de757505f6102b4565b8160018114615dfd5760028114615e0757615e23565b60019150506102b4565b60ff841115615e1857615e1861553d565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e46575081810a6102b4565b615e508383615d8b565b805f1904821115615e6357615e6361553d565b029392505050565b5f6103bb8383615dcd565b5f8060408385031215615e87575f80fd5b825160048110615e95575f80fd5b602084015190925060ff81168114615eab575f80fd5b809150509250929050565b5f600160ff1b82016141955761419561553d56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b61010761010236600461490a565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614972565b6102ba565b61010761013d3660046149dd565b5f9081526020819052604090205460011490565b61016461015f366004614a13565b6103c2565b005b610179610174366004614a78565b610521565b604051908152602001610113565b610107610195366004614ab6565b610535565b6101646101a8366004614a13565b610635565b6101796101bb366004614b4d565b6107c8565b6101d36101ce366004614b7e565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bb0565b610fc9565b61020e610209366004614bfa565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c31565b6113ce565b6040516101139190614c9e565b610164610259366004614c31565b6114b4565b61017961026c366004614d00565b61150e565b61016461027f366004615172565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611abc565b6102d06020850185614b4d565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b4d565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661522c565b611ad7565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e639061039190339084908990615382565b60405180910390a16103a4818585611b06565b506103bb60015f80516020615eef83398151915255565b9392505050565b6103ca611abc565b3385856103d8838383611b3d565b6103e2865f611b6e565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611ba8565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c28565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615446565b611d18565b5050505050505061051a60015f80516020615eef83398151915255565b5050505050565b5f61052d848484611ee6565b949350505050565b5f61054a6001600160a01b0386168786612070565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615506565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c2919061554a565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615575565b6001600160a01b038a169291906120a5565b5060019695505050505050565b61063d611abc565b33858561064b838383611b3d565b5f8080806106598a82611b6e565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ee6565b90506106a58b826120e1565b94506106b3338e8e886120fd565b90935091505f6106c4338f88612174565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615446565b50505050505050505061051a60015f80516020615eef83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b4919061554a565b5f8061083a611abc565b6108476080840184615588565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b610870614832565b61087861485e565b5f60405180606001604052808780608001906108949190615588565b5f8181106108a4576108a46155ce565b90506020028101906108b691906155e2565b6108c09080615600565b6108ce906040810190615614565b6108db60808b018b615588565b5f8181106108eb576108eb6155ce565b90506020028101906108fd91906155e2565b60200135818110610910576109106155ce565b6109269260206040909202019081019150614b4d565b6001600160a01b031681526020016109416080890189615588565b5f818110610951576109516155ce565b905060200281019061096391906155e2565b61096d9080615600565b61097b906060810190615614565b61098860808b018b615588565b5f818110610998576109986155ce565b90506020028101906109aa91906155e2565b604001358181106109bd576109bd6155ce565b6109d39260206040909202019081019150614b4d565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615588565b604080516001909201602002820181528501519093505f9250610a1d915082611b6e565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615588565b905081108015610a6357506040840151610a63905f611b6e565b15610e7157610a7560808a018a615588565b82818110610a8557610a856155ce565b9050602002810190610a9791906155e2565b610aa09061565a565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155ce565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155ce565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121dd565b5f610b6586611ad7565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d2a565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061224f565b90505f610c458c604001358360600151611b6e90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b6e565b1580610cc257506060820151610cc0905f611b6e565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156f0565b15610d6e576040808a015190850151610d40916120e1565b6060850151909250610d529083612714565b60408a0151909150610d649083612761565b60408a0152610dd5565b5f610d8a8560400151866060015161271490919063ffffffff16565b9050610da38a60400151826120e190919063ffffffff16565b9150610dbc85606001518361279190919063ffffffff16565b60408b0151909350610dce9083612761565b60408b0152505b610ddf8c826127c1565b9b50610deb8d836127c1565b9c50610df782856127f1565b610e0181856128b2565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e369493929190615818565b60405180910390a187516001018089526020028801849052610e5784612a5e565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156f0565b610e8d5786610e8f565b875b9050610e9c818a35612ca1565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612174565b505f9050610ee560a08a018a615902565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f615902565b6040518763ffffffff1660e01b8152600401610f3596959493929190615506565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611ba8565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155ce565b6020026020010151612cdb565b600101610f75565b505050505050610fc460015f80516020615eef83398151915255565b915091565b5f610fd2611abc565b5f61102f61102a610fe38780615945565b610ff1906040810190615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612de592505050565b612e56565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f6020860186615614565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad6040860186615614565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615945565b6110f590615959565b815260200187806020019061110a9190615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615964565b81526020019060010190611129565b505050918352505060200161116d6040890189615614565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615964565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ad7565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061597e565b60405180910390a15f61124a60a08a018a615902565b905011156112e65761129b61126260a08a018a615902565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e7092505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c615902565b6040516112dd94939291906159a5565b60405180910390a15b6112f1828888611b06565b93505050506103bb60015f80516020615eef83398151915255565b5f80808061132661131d8680615600565b61032c9061522c565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a8680615600565b6113639061522c565b866020013587604001356121dd565b5f6113b06113808780615600565b6113899061522c565b60208801356040890135336113a160608c018c615588565b6113aa916159d7565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d2a565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155ce565b90506020028101906114609190615902565b85604051602001611473939291906159f6565b604051602081830303815290604052612e9b565b838281518110611499576114996155ce565b6020908102919091010152600101611430565b505092915050565b6114bc611abc565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615446565b61150a60015f80516020615eef83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611576919061554a565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611abc565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155ce565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155ce565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155ce565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155ce565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155ce565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155ce565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ad7565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611aa6565b5f6117b186611ad7565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611aa6565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d9493929190615a19565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d2a565b90505f6118ad8383612f3b565b606081015181519192506118cd915f916118c79190612761565b90612ca1565b806118ec5750604081015160208201516118ec915f916118c791612761565b1561190a57604051630d86822160e01b815260040160405180910390fd5b805161191690846127f1565b6119248160200151836127f1565b6119328160400151846128b2565b6119408160600151836128b2565b61194983612cdb565b61195282612cdb565b606081015181515f916119659190612761565b90505f6119838360400151846020015161276190919063ffffffff16565b90506119b9338b606001518a60200135815181106119a3576119a36155ce565b60200260200101515f01518a6080013585611c28565b50506119ef338a606001518a60600135815181106119d9576119d96155ce565b60200260200101515f01518a60a0013584611c28565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a5883612a5e565b611a6182612a5e565b80516001600160e01b0316158015611a84575060208101516001600160e01b0316155b15611aa2576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615eef83398151915255565b611ac4612f89565b60025f80516020615eef83398151915255565b5f81604051602001611ae99190615a95565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b3890611b2e906104d6565b6104f88385615446565b505050565b80611b38576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b9c84848484612fba565b12979650505050505050565b5f805f611bb48561308e565b9050611bc0845f612ca1565b15611bde57604051632eaefac360e21b815260040160405180910390fd5b5f80611bea86846130f4565b9150915080611bff57611bfc82615aa7565b91505b8115611c1a57611c1a6001600160a01b0388168930856120a5565b50925090505b935093915050565b5f80611c348382612ca1565b15611c555760405163793a8f5560e01b815260048101849052602401610316565b83611c7357611c65868685612174565b505f9250829150611d0f9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad82866127c1565b9050611cb9815f612ca1565b15611cda5760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611edc57868181518110611d7f57611d7f6155ce565b602002602001015193505f845f015160400151511115611ed4575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611df78d8a60200151613121565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e229190615b17565b5f60405180830381865afa158015611e3c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e639190810190615c0f565b9150505f81511115611ed25784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611ea4908a908590600401615cc5565b5f604051808303815f87803b158015611ebb575f80fd5b505af1158015611ecd573d5f803e3d5ffd5b505050505b505b600101611d64565b5050505050505050565b5f8115611f2057506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f2a84613403565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611fa291908716906370a0823190602401602060405180830381865afa158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c919061554a565b8361340f565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612021919088169063dd62ed3e90604401602060405180830381865afa158015611ff7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201b919061554a565b8461340f565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120669061206084846120e1565b906127c1565b93505050506103bb565b61207d838383600161344f565b611b3857604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120b38484848460016134b1565b6120db57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120ec8383612ca1565b6120f657816103bb565b5090919050565b5f806121098382612ca1565b1561212a5760405163793a8f5560e01b815260048101849052602401610316565b8361213a57611c65868685611ba8565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611cad8286612761565b5f805f6121808561308e565b905061218c845f612ca1565b156121aa57604051632d1671a360e11b815260040160405180910390fd5b5f6121b585836130f4565b50905080156121d2576121d26001600160a01b0387168883612070565b969095509350505050565b826060015181815181106121f3576121f36155ce565b60200260200101515f01516001600160a01b03168360400151838151811061221d5761221d6155ce565b60200260200101515f01516001600160a01b031603611b3857604051631cd2f1c760e21b815260040160405180910390fd5b6122576148c5565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122725790505090506122c76122958a611ad7565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122dc576122dc6155ce565b60200260200101819052505f6123118a604001518a81518110612301576123016155ce565b60200260200101515f0151613403565b90505f6123638b5f01518c604001518c81518110612331576123316155ce565b60200260200101515f01518d604001518d81518110612352576123526155ce565b602002602001015160200151611ee6565b90506123f28b604001518b8151811061237e5761237e6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123b0576123b06155ce565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612408576124086155ce565b602002602001018190525050505f61242f8a606001518981518110612301576123016155ce565b90505f6124708b5f01518c606001518b8151811061244f5761244f6155ce565b60200260200101515f01518d606001518c81518110612352576123526155ce565b90506124bd8b606001518a8151811061248b5761248b6155ce565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123b0576123b06155ce565b836001600403815181106124d3576124d36155ce565b602002602001018190525050506124ea8186613121565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161254a87305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561258257612582614d2a565b6040519080825280602002602001820160405280156125ab578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125d19190615b17565b5f60405180830381865afa1580156125eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126129190810190615c0f565b9150915060028251101561263e578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126929087906004908110612661576126616155ce565b602002602001015160038151811061267b5761267b6155ce565b6020026020010151826120e190919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126c4576126c46155ce565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661351e565b915091505f612753838361363d565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127448686868661368a565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612744868686866136b4565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061274486868686613bf1565b818160800151600481518110612809576128096155ce565b6020026020010151600481518110612823576128236155ce565b6020026020010181815250506120db815f01515f01518260800151600481518110612850576128506155ce565b60200260200101515f81518110612869576128696155ce565b60200260200101515f1c836080015160048151811061288a5761288a6155ce565b60200260200101516002815181106128a4576128a46155ce565b6020026020010151856120fd565b8181608001516003815181106128ca576128ca6155ce565b60200260200101516004815181106128e4576128e46155ce565b6020908102919091010152805151608082015180515f9190600390811061290d5761290d6155ce565b60200260200101515f81518110612926576129266155ce565b60200260200101515f1c90505f836080015160038151811061294a5761294a6155ce565b6020026020010151600281518110612964576129646155ce565b602002602001015190505f801b8103612a0b57612981855f612ca1565b156129a25760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129d990866127c1565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a1a565b612a1783838388611c28565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a4f929190615cdd565b60405180910390a15050505050565b60c08101515115612ad8578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612aaa929091600401615cc5565b5f604051808303815f87803b158015612ac1575f80fd5b505af1158015612ad3573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b2e8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b6e57612b6e614d2a565b604051908082528060200260200182016040528015612b97578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612bc7578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612be79190615b17565b5f60405180830381865afa158015612c01573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c289190810190615c0f565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c70918590600401615cc5565b5f604051808303815f87803b158015612c87575f80fd5b505af1158015612c99573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612ccf84848484612fba565b13979650505050505050565b5f8160800151600381518110612cf357612cf36155ce565b6020026020010151600281518110612d0d57612d0d6155ce565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d3e57612d3e6155ce565b60200260200101515f81518110612d5757612d576155ce565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612ddc838383612174565b50505050505050565b6060604082511015612e0457505060408051602081019091525f815290565b5f60208301519050602060408451612e1c91906159e3565b612e269190615d12565b811115612e4257505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e6657505f919050565b50602001515f1a90565b612e7981613cef565b612e985780604051630c89984b60e31b81526004016103169190615d31565b50565b60605f612ea88484613d1d565b9050808015612ec957505f3d1180612ec957505f846001600160a01b03163b115b15612ede57612ed6613d30565b9150506102b4565b8015612f0857604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f1b57612f16613d49565b612f34565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f688383613d54565b82526040820152612f798284613d54565b6020830152606082015292915050565b5f80516020615eef83398151915254600203612fb857604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fdf5786859250925050611d0f565b505f85841315612ff3575092949193919260015b8386035f8112604c8213178015613026578215613018575f8994509450505050611d0f565b885f94509450505050611d0f565b600a82900a8981028a82828161303e5761303e615cfe565b051461306a57841561305a575f8b965096505050505050611d0f565b8a5f965096505050505050611d0f565b841561307f578896509450611d0f9350505050565b9550879450611d0f9350505050565b5f805f61309a84613dbd565b909250905060018260038111156130b3576130b3615d43565b141580156130d257505f8260038111156130cf576130cf615d43565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d57565b5f806001600160e01b038416601b0b60e085901d613113828287613e4a565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561313e5761313e614d2a565b604051908082528060200260200182016040528015613167578160200160208202803683370190505b5090505f80845111613179575f61317f565b83516001015b85516001010190505f8167ffffffffffffffff8111156131a1576131a1614d2a565b6040519080825280602002602001820160405280156131d457816020015b60608152602001906001900390816131bf5790505b5090505f6131f8604080516002815233602082015230818301526060810190915290565b82828151811061320a5761320a6155ce565b60200260200101819052505f5b875181101561326757818060010192505087818151811061323a5761323a6155ce565b6020026020010151838381518110613254576132546155ce565b6020908102919091010152600101613217565b508551156133f95780806001019150508382828151811061328a5761328a6155ce565b60200260200101819052505f5b86518110156133f7576133468782815181106132b5576132b56155ce565b60200260200101515f01516133236132f18a85815181106132d8576132d86155ce565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613335576133356155ce565b602002602001015160400151613fb0565b61336657604051630a57f30960e31b815260048101829052602401610316565b868181518110613378576133786155ce565b60200260200101515f01516001600160a01b03165f1b8582815181106133a0576133a06155ce565b60200260200101818152505081806001019250508681815181106133c6576133c66155ce565b6020026020010151602001518383815181106133e4576133e46155ce565b6020908102919091010152600101613297565b505b5095945050505050565b5f805f61309a84614020565b5f805f805f61341e878761407f565b9250925092505f8061343085856140c2565b915091508183801561343f5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134a5578383151615613499573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661350d578383151615613501573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613536575f92505f9150613633565b6135408487615d90565b91505f61354c8861419a565b90505f6135588761419a565b90505f61356583836141c8565b5090505f6f0785ee10d5da46d900f436a00000000082111561359a576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135bb57670de0b6b3a7640000820491506012015b633b9aca008211156135d457633b9aca00820491506009015b6127108211156135e957612710820491506004015b81156135fd57600a820491506001016135e9565b6136078187615d90565b95506136298b8a613623878761361e87600a615e8f565b6141e4565b896142b0565b9097509550505050505b5094509492505050565b5f805f61364a85856140c2565b915091508015801561365a575081155b1561368257604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136968484614350565b90945092506136a786868686613bf1565b9150915094509492505050565b5f80835f036136e057604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136f157505f905080611d0f565b5f805f806136ff8a8a6143a5565b919b509950915061371088886143a5565b919950975090505f6137218b61419a565b90505f61372d8a61419a565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613af257841561378457507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aca565b6f4b3b4ca85a86c47a098a2240000000008310156138b057678ac7230489e80000831015613814576402540be4008310156137e257620186a08310156137d25750620186a090506005613a8b565b506402540be4009050600a613a8b565b655af3107a40008310156138015750655af3107a40009050600e613a8b565b50678ac7230489e8000090506013613a8b565b6b204fce5e3e250261100000008310156138665769152d02c7e14af680000083101561384f575069152d02c7e14af680000090506017613a8b565b506b204fce5e3e250261100000009050601c613a8b565b6d314dc6448d9338c15b0a0000000083101561389557506d314dc6448d9338c15b0a0000000090506021613a8b565b506f4b3b4ca85a86c47a098a22400000000090506026613a8b565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139a85773af298d050e4395d69670b12b7f41000000000000831015613943577172cb5bd86321e38cb6ce6682e8000000000083101561392457507172cb5bd86321e38cb6ce6682e800000000009050602b613a8b565b5073af298d050e4395d69670b12b7f4100000000000090506030613a8b565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613984575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a8b565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a8b565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a3e577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a1657507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a8b565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a8b565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a8b57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613aa057600a820491505f1901613a8b565b815f03613aca576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613af2576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b0957808d039c50613b47565b600160ff1b9c90038c015f811315613b4757806001600160ff1b03038b13613b3457998a0199613b47565b5f80995099505050505050505050611d0f565b5f808e128015613b5657505f8c135b15613b7757600160ff1b8e01808d13613b6f575f613b73565b808d035b9150505b8b818f01039750613b948f8e613b8e8887896141e4565b8b6142b0565b90995097505f811315613bde57604c811315613bbe575f809a509a50505050505050505050611d0f565b80600a0a8981613bd057613bd0615cfe565b059850885f03613bde575f97505b50969850949650611d0f95505050505050565b5f8085158415178015613c1d57865f03613c115784849250925050611d0f565b86869250925050611d0f565b613c2787876145ff565b9097509550613c3685856145ff565b909550935085841315613c4a579395929492935b838603604c811115613c63578787935093505050611d0f565b80600a0a8681613c7557613c75615cfe565b0595505086850180881860ff90811c151589881890911c15168015613cde57876001600160ff1b0303613cc55760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613ce2565b8198505b5096979596505050505050565b5f600882511015613d0157505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d718460600151856040015161271490919063ffffffff16565b915083604001519050613d91836040015183611b6e90919063ffffffff16565b1561311a5782604001519150613db484606001518361279190919063ffffffff16565b90509250929050565b5f80613dc7614648565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e419190615e9a565b91509150915091565b5f805f851215613e7757604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e8957505f90506001611c20565b8460ff8416850185811215613ebb5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f0757604c19831215613ede575f809550955050505050611c20565b825f03600a0a9150818481613ef557613ef5615cfe565b0495505084029091149150611c209050565b5f831315613fa057604d831315613f445760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f5a57613f5a615cfe565b04841115613f8e5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611c209050565b8360019550955050505050611c20565b5f836001600160a01b03163b5f0361400e575f80613fce85856146d3565b5090925090505f816003811115613fe757613fe7615d43565b1480156140055750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614019848484614719565b90506103bb565b5f8061402a614648565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e1d573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140b157600a860460018201600a88065f14935093509350506140bb565b8593509150600190505b9250925092565b5f601b83900b8314838382614126577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561410657620186a0860595506005850194505b8586601b0b1461412157600a86059550846001019450614106565b61413c565b855f0361413c57505f92506001915061311a9050565b848560030b1461417f575f85121561415c57505f925082915061311a9050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141bf57600160ff1b82036141b95750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141f186866141c8565b91509150815f036142155783818161420b5761420b615cfe565b04925050506103bb565b8382106142465760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561432c576001600160ff1b03841115614319576142dd6001600160ff1b036001615575565b84036142f15750600160ff1b905081611d0f565b6142fc600a85615d12565b61430590615eda565b614310846001615d90565b91509150611d0f565b61432284615eda565b8391509150611d0f565b6001600160ff1b0384111561434657614305600a85615d12565b5082905081611d0f565b5f80600160ff1b840361439b576001600160ff1b03830361438e5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143bd57505f915081905060016140bb565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145aa576f4b3b4ca85a86c47a098a224000000000850515801561441f57507f80000000000000000000000000000000000000000000000000000000000000268412155b15614440576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561448857507f80000000000000000000000000000000000000000000000000000000000000138412155b156144a157678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144ed57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614503576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561455257507f80000000000000000000000000000000000000000000000000000000000000028412155b1561456857606485029450600284039350614503565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561459857506001600160ff1b018412155b156145aa57600a850294506001840393505b600a808602908105861480156145c757506001600160ff1b018512155b156145d6578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61460e87876143a5565b9250925092508061463c576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061469f575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fb8576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f835160410361470a576020840151604085015160608601515f1a6146fc8882858561476a565b9550955095505050506140bb565b505081515f91506002906140bb565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147a357505f91506003905082614828565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147f4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661481f57505f925060019150829050614828565b92505f91508190505b9450945094915050565b604051806080016040528061484561485e565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148ac60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148d861485e565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f6020828403121561491a575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614941575f80fd5b50813567ffffffffffffffff811115614958575f80fd5b6020830191508360208260051b850101111561311a575f80fd5b5f805f60408486031215614984575f80fd5b833567ffffffffffffffff8082111561499b575f80fd5b9085019060a082880312156149ae575f80fd5b909350602085013590808211156149c3575f80fd5b506149d086828701614931565b9497909650939450505050565b5f602082840312156149ed575f80fd5b5035919050565b6001600160a01b0381168114612e98575f80fd5b80356141c3816149f4565b5f805f805f60808688031215614a27575f80fd5b8535614a32816149f4565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a5b575f80fd5b614a6788828901614931565b969995985093965092949392505050565b5f805f60608486031215614a8a575f80fd5b8335614a95816149f4565b92506020840135614aa5816149f4565b929592945050506040919091013590565b5f805f805f60808688031215614aca575f80fd5b8535614ad5816149f4565b94506020860135614ae5816149f4565b935060408601359250606086013567ffffffffffffffff80821115614b08575f80fd5b818801915088601f830112614b1b575f80fd5b813581811115614b29575f80fd5b896020828501011115614b3a575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b5d575f80fd5b81356103bb816149f4565b5f60c08284031215614b78575f80fd5b50919050565b5f60208284031215614b8e575f80fd5b813567ffffffffffffffff811115614ba4575f80fd5b61052d84828501614b68565b5f805f60408486031215614bc2575f80fd5b833567ffffffffffffffff80821115614bd9575f80fd5b614be587838801614b68565b945060208601359150808211156149c3575f80fd5b5f60208284031215614c0a575f80fd5b813567ffffffffffffffff811115614c20575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c42575f80fd5b823567ffffffffffffffff811115614c58575f80fd5b614c6485828601614931565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614cf357603f19888603018452614ce1858351614c70565b94509285019290850190600101614cc5565b5092979650505050505050565b5f8060408385031215614d11575f80fd5b8235614d1c816149f4565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405290565b6040805190810167ffffffffffffffff81118282101715614d6157614d61614d2a565b60405160a0810167ffffffffffffffff81118282101715614d6157614d61614d2a565b604051601f8201601f1916810167ffffffffffffffff81118282101715614dd657614dd6614d2a565b604052919050565b5f82601f830112614ded575f80fd5b813567ffffffffffffffff811115614e0757614e07614d2a565b614e1a601f8201601f1916602001614dad565b818152846020838601011115614e2e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e5a575f80fd5b614e62614d3e565b90508135614e6f816149f4565b81526020820135614e7f816149f4565b6020820152604082013567ffffffffffffffff811115614e9d575f80fd5b614ea984828501614dde565b60408301525092915050565b5f67ffffffffffffffff821115614ece57614ece614d2a565b5060051b60200190565b5f60408284031215614ee8575f80fd5b614ef0614d67565b90508135614efd816149f4565b808252506020820135602082015292915050565b5f82601f830112614f20575f80fd5b81356020614f35614f3083614eb5565b614dad565b8083825260208201915060208460061b870101935086841115614f56575f80fd5b602086015b84811015614f7b57614f6d8882614ed8565b835291830191604001614f5b565b509695505050505050565b5f60a08284031215614f96575f80fd5b614f9e614d8a565b9050614fa982614a08565b8152602082013567ffffffffffffffff80821115614fc5575f80fd5b614fd185838601614e4a565b60208401526040840135915080821115614fe9575f80fd5b614ff585838601614f11565b6040840152606084013591508082111561500d575f80fd5b5061501a84828501614f11565b6060830152506080820135608082015292915050565b5f61503d614f3084614eb5565b8381529050602080820190600585811b85018781111561505b575f80fd5b855b8181101561514857803567ffffffffffffffff8082111561507c575f80fd5b908801906060828c03121561508f575f80fd5b615097614d3e565b82356150a2816149f4565b815282870135828111156150b4575f80fd5b8301601f81018d136150c4575f80fd5b80356150d2614f3082614eb5565b81815290881b8201890190898101908f8311156150ed575f80fd5b928a01925b8284101561510b5783358252928a0192908a01906150f2565b848b01525060409150508381013583811115615125575f80fd5b6151318e828701614dde565b91830191909152508752505093830193830161505d565b50505050509392505050565b5f82601f830112615163575f80fd5b6103bb83833560208501615030565b5f805f805f6101408688031215615187575f80fd5b853567ffffffffffffffff8082111561519e575f80fd5b6151aa89838a01614f86565b965060208801359150808211156151bf575f80fd5b6151cb89838a01614f86565b95506151da8960408a01614b68565b94506101008801359150808211156151f0575f80fd5b6151fc89838a01615154565b9350610120880135915080821115615212575f80fd5b5061521f88828901615154565b9150509295509295909350565b5f6102b43683614f86565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561526b816149f4565b6001600160a01b039081168452602083013590615287826149f4565b166020840152604082013536839003601e190181126152a4575f80fd5b820160208101903567ffffffffffffffff8111156152c0575f80fd5b8036038213156152ce575f80fd5b606060408601526152e3606086018284615237565b95945050505050565b5f808335601e19843603018112615301575f80fd5b830160208101925035905067ffffffffffffffff811115615320575f80fd5b8060061b360382131561311a575f80fd5b8183525f60208085019450825f5b85811015615377578135615352816149f4565b6001600160a01b0316875281830135838801526040968701969091019060010161533f565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153a8816149f4565b166060830152602083013536849003605e190181126153c5575f80fd5b60a060808401526153dc610100840185830161525f565b90506153eb60408501856152ec565b605f19808685030160a0870152615403848385615331565b935061541260608801886152ec565b93509150808685030160c08701525061542c838383615331565b92505050608084013560e084015280915050949350505050565b5f615453614f3084614eb5565b80848252602080830192508560051b850136811115615470575f80fd5b855b818110156154fa57803567ffffffffffffffff80821115615491575f80fd5b8189019150604082360312156154a5575f80fd5b6154ad614d67565b8235828111156154bb575f80fd5b6154c736828601614e4a565b82525085830135828111156154da575f80fd5b6154e636828601615154565b828801525087525050938201938201615472565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261553e60a083018486615237565b98975050505050505050565b5f6020828403121561555a575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615561565b5f808335601e1984360301811261559d575f80fd5b83018035915067ffffffffffffffff8211156155b7575f80fd5b6020019150600581901b360382131561311a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155f6575f80fd5b9190910192915050565b5f8235609e198336030181126155f6575f80fd5b5f808335601e19843603018112615629575f80fd5b83018035915067ffffffffffffffff821115615643575f80fd5b6020019150600681901b360382131561311a575f80fd5b5f6080823603121561566a575f80fd5b6040516080810167ffffffffffffffff828210818311171561568e5761568e614d2a565b8160405284359150808211156156a2575f80fd5b6156ae36838701614f86565b8352602085013560208401526040850135604084015260608501359150808211156156d7575f80fd5b506156e436828601615154565b60608301525092915050565b5f60208284031215615700575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561537757815180516001600160a01b031688528301518388015260409096019590820190600101615722565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261579f610100850182614c70565b9050604083015184820360408601526157b8828261570f565b915050606083015184820360608601526157d2828261570f565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615377578151875295820195908201906001016157fc565b5f6001600160a01b03808716835260206080818501528651608080860152615844610100860182615752565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158e057601f1988830301845284518a815116835289810151878b8501526158b4888501826157e9565b91890151848303858b01529190506158cc8183614c70565b968b0196958b019593505050600101615886565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615917575f80fd5b83018035915067ffffffffffffffff821115615931575f80fd5b60200191503681900382131561311a575f80fd5b5f8235605e198336030181126155f6575f80fd5b5f6102b43683614e4a565b5f60408284031215615974575f80fd5b6103bb8383614ed8565b6001600160a01b0384168152826020820152606060408201525f6152e36060830184615752565b6001600160a01b0385168152836020820152606060408201525f6159cd606083018486615237565b9695505050505050565b5f6103bb368484615030565b818103818111156102b4576102b4615561565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a3b81840187615752565b90508281036040840152615a4f8186615752565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615752565b5f60018201615ab857615ab8615561565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b0a57601f19868403018952615af88383516157e9565b98840198925090830190600101615adc565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b50610100840182614c70565b9050606084015160808401526080840151601f19808584030160a0860152615b788383615abf565b925060a08601519150808584030160c0860152615b9583836157e9565b925060c08601519150808584030160e0860152506152e382826157e9565b5f82601f830112615bc2575f80fd5b81516020615bd2614f3083614eb5565b8083825260208201915060208460051b870101935086841115615bf3575f80fd5b602086015b84811015614f7b5780518352918301918301615bf8565b5f8060408385031215615c20575f80fd5b825167ffffffffffffffff80821115615c37575f80fd5b818501915085601f830112615c4a575f80fd5b81516020615c5a614f3083614eb5565b82815260059290921b84018101918181019089841115615c78575f80fd5b948201945b83861015615c9657855182529482019490820190615c7d565b91880151919650909350505080821115615cae575f80fd5b50615cbb85828601615bb3565b9150509250929050565b828152604060208201525f61052d60408301846157e9565b6001600160a01b0383168152604060208201525f61052d6040830184615abf565b634e487b7160e01b5f52601260045260245ffd5b5f82615d2c57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c70565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d8357634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac615561565b600181815b80851115615de957815f1904821115615dcf57615dcf615561565b80851615615ddc57918102915b93841c9390800290615db4565b509250929050565b5f82615dff575060016102b4565b81615e0b57505f6102b4565b8160018114615e215760028114615e2b57615e47565b60019150506102b4565b60ff841115615e3c57615e3c615561565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e6a575081810a6102b4565b615e748383615daf565b805f1904821115615e8757615e87615561565b029392505050565b5f6103bb8383615df1565b5f8060408385031215615eab575f80fd5b825160048110615eb9575f80fd5b602084015190925060ff81168114615ecf575f80fd5b809150509250929050565b5f600160ff1b82016141b9576141b961556156fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b6101076101023660046148e6565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461494e565b6102ba565b61010761013d3660046149b9565b5f9081526020819052604090205460011490565b61016461015f3660046149ef565b6103c2565b005b610179610174366004614a54565b610521565b604051908152602001610113565b610107610195366004614a92565b610535565b6101646101a83660046149ef565b610635565b6101796101bb366004614b29565b6107c8565b6101d36101ce366004614b5a565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614b8c565b610fc9565b61020e610209366004614bd6565b61130c565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c0d565b6113ce565b6040516101139190614c7a565b610164610259366004614c0d565b6114b4565b61017961026c366004614cdc565b61150e565b61016461027f36600461514e565b6115a8565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a98565b6102d06020850185614b29565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b29565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615208565b611ab3565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061535e565b60405180910390a16103a4818585611ae2565b506103bb60015f80516020615ecb83398151915255565b9392505050565b6103ca611a98565b3385856103d8838383611b19565b6103e2865f611b4a565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b84565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c04565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615422565b611cf4565b5050505050505061051a60015f80516020615ecb83398151915255565b5050505050565b5f61052d848484611ec2565b949350505050565b5f61054a6001600160a01b038616878661204c565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b906004016154e2565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615526565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615551565b6001600160a01b038a16929190612081565b5060019695505050505050565b61063d611a98565b33858561064b838383611b19565b5f8080806106598a82611b4a565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec2565b90506106a58b826120bd565b94506106b3338e8e886120d9565b90935091505f6106c4338f88612150565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615422565b50505050505050505061051a60015f80516020615ecb83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615526565b5f8061083a611a98565b6108476080840184615564565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087061480e565b61087861483a565b5f60405180606001604052808780608001906108949190615564565b5f8181106108a4576108a46155aa565b90506020028101906108b691906155be565b6108c090806155dc565b6108ce9060408101906155f0565b6108db60808b018b615564565b5f8181106108eb576108eb6155aa565b90506020028101906108fd91906155be565b60200135818110610910576109106155aa565b6109269260206040909202019081019150614b29565b6001600160a01b031681526020016109416080890189615564565b5f818110610951576109516155aa565b905060200281019061096391906155be565b61096d90806155dc565b61097b9060608101906155f0565b61098860808b018b615564565b5f818110610998576109986155aa565b90506020028101906109aa91906155be565b604001358181106109bd576109bd6155aa565b6109d39260206040909202019081019150614b29565b6001600160a01b03168152602088810135910152905060605f6109f96080890189615564565b604080516001909201602002820181528501519093505f9250610a1d915082611b4a565b610a3a5760405163315f9e2360e21b815260040160405180910390fd5b5f5b610a4960808a018a615564565b905081108015610a6357506040840151610a63905f611b4a565b15610e7157610a7560808a018a615564565b82818110610a8557610a856155aa565b9050602002810190610a9791906155be565b610aa090615636565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610acf57610acf6155aa565b60200260200101515f01516001600160a01b0316141580610b2a575083602001516001600160a01b03168560600151876040015181518110610b1357610b136155aa565b60200260200101515f01516001600160a01b031614155b15610b485760405163936bb5ad60e01b815260040160405180910390fd5b610b5b85876020015188604001516121b9565b5f610b6586611ab3565b5f81815260208190526040902054909150610bca578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e68565b5f610c278789602001518a60400151338c606001515f67ffffffffffffffff811115610bf857610bf8614d06565b604051908082528060200260200182016040528015610c21578160200160208202803683370190505b5061222b565b90505f610c458c604001358360600151611b4a90919063ffffffff16565b15610c9b578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5a565b6040820151610caa905f611b4a565b1580610cc257506060820151610cc0905f611b4a565b155b15610d0f578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8e565b600190505f808d6060016020810190610d2891906156cc565b15610d6e576040808a015190850151610d40916120bd565b6060850151909250610d5290836126f0565b60408a0151909150610d64908361273d565b60408a0152610dd5565b5f610d8a856040015186606001516126f090919063ffffffff16565b9050610da38a60400151826120bd90919063ffffffff16565b9150610dbc85606001518361276d90919063ffffffff16565b60408b0151909350610dce908361273d565b60408b0152505b610ddf8c8261279d565b9b50610deb8d8361279d565b9c50610df782856127cd565b610e01818561288e565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e3694939291906157f4565b60405180910390a187516001018089526020028801849052610e5784612a3a565b50505b8480610e635750805b945050505b50600101610a3c565b505f610e8360808a0160608b016156cc565b610e8d5786610e8f565b875b9050610e9c818a35612c7d565b15610ec45760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed433846020015189612150565b505f9050610ee560a08a018a6158de565b9050118015610ef15750805b15610f635760208301518351339163691f9ed7918a8a610f1460a08f018f6158de565b6040518763ffffffff1660e01b8152600401610f35969594939291906154e2565b5f604051808303815f87803b158015610f4c575f80fd5b505af1158015610f5e573d5f803e3d5ffd5b505050505b610f7133845f015188611b84565b50505f5b8251811015610fa857610fa0838281518110610f9357610f936155aa565b6020026020010151612cb7565b600101610f75565b505050505050610fc460015f80516020615ecb83398151915255565b915091565b5f610fd2611a98565b5f61102f61102a610fe38780615921565b610ff19060408101906158de565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612dc192505050565b612e32565b90505f811161105157604051632cff108b60e21b815260040160405180910390fd5b6001811161107257604051633c8270bd60e21b815260040160405180910390fd5b61107f60208601866155f0565b90505f036110a057604051636c44ef8f60e01b815260040160405180910390fd5b6110ad60408601866155f0565b90505f036110ce5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ec8880615921565b6110f590615935565b815260200187806020019061110a91906155f0565b808060200260200160405190810160405280939291908181526020015f905b828210156111555761114660408302860136819003810190615940565b81526020019060010190611129565b505050918352505060200161116d60408901896155f0565b808060200260200160405190810160405280939291908181526020015f905b828210156111b8576111a960408302860136819003810190615940565b8152602001906001019061118c565b50505050508152602001876060013581525090505f6111d682611ab3565b5f818152602081905260409020549091501580156112f1575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611234918590879061595a565b60405180910390a15f61124a60a08a018a6158de565b905011156112e65761129b61126260a08a018a6158de565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e4c92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112cd60a08c018c6158de565b6040516112dd9493929190615981565b60405180910390a15b6112f1828888611ae2565b93505050506103bb60015f80516020615ecb83398151915255565b5f80808061132661131d86806155dc565b61032c90615208565b5f8181526020819052604090205490915060011461134d57505f92508291508190506113c7565b61137261135a86806155dc565b61136390615208565b866020013587604001356121b9565b5f6113b061138087806155dc565b61138990615208565b60208801356040890135336113a160608c018c615564565b6113aa916159b3565b5f610bf8565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f8576113f8614d06565b60405190808252806020026020018201604052801561142b57816020015b60608152602001906001900390816114165790505b5091505f5b838110156114ac576114873086868481811061144e5761144e6155aa565b905060200281019061146091906158de565b85604051602001611473939291906159d2565b604051602081830303815290604052612e77565b838281518110611499576114996155aa565b6020908102919091010152600101611430565b505092915050565b6114bc611a98565b604080515f808252602082019092526114f4916114e9565b60608152602001906001900390816114d45790505b506104f88385615422565b61150a60015f80516020615ecb83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115769190615526565b5f036115a057604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b0611a98565b835185516001600160a01b039182169116036115df57604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115f9576115f96155aa565b60200260200101515f01516001600160a01b03168560600151846020013581518110611627576116276155aa565b60200260200101515f01516001600160a01b03161415806116a0575060408501518051843590811061165b5761165b6155aa565b60200260200101515f01516001600160a01b03168460600151846060013581518110611689576116896155aa565b60200260200101515f01516001600160a01b031614155b156116be5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d8576116d86155aa565b60200260200101515f01516001600160a01b03168560400151845f013581518110611705576117056155aa565b60200260200101515f01516001600160a01b03160361173757604051631cd2f1c760e21b815260040160405180910390fd5b5f61174186611ab3565b5f818152602081905260409020549091506117a7578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a82565b5f6117b186611ab3565b5f81815260208190526040902054909150611818578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a82565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184d94939291906159f5565b60405180910390a1505083515f906118719087908635906020880135908686610bf8565b90505f6118a086866040013587606001358a5f0151885f67ffffffffffffffff811115610bf857610bf8614d06565b90505f6118ad8383612f17565b606081015181519192505f916118c29161273d565b90505f6118e08360400151846020015161273d90919063ffffffff16565b90506118ec825f612c7d565b806118fc57506118fc815f612c7d565b1561191a57604051630d86822160e01b815260040160405180910390fd5b825161192690866127cd565b6119348360200151856127cd565b61194283604001518661288e565b61195083606001518561288e565b61195985612cb7565b61196284612cb7565b611996338b606001518a6020013581518110611980576119806155aa565b60200260200101515f01518a6080013585611c04565b50506119cc338a606001518a60600135815181106119b6576119b66155aa565b60200260200101515f01518a60a0013584611c04565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3285612a3a565b611a3b84612a3a565b82516001600160e01b0316158015611a5e575060208301516001600160e01b0316155b15611a7c576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615ecb83398151915255565b611aa0612f65565b60025f80516020615ecb83398151915255565b5f81604051602001611ac59190615a71565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1490611b0a906104d6565b6104f88385615422565b505050565b80611b14576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7884848484612f96565b12979650505050505050565b5f805f611b908561306a565b9050611b9c845f612c7d565b15611bba57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc686846130d0565b9150915080611bdb57611bd882615a83565b91505b8115611bf657611bf66001600160a01b038816893085612081565b50925090505b935093915050565b5f80611c108382612c7d565b15611c315760405163793a8f5560e01b815260048101849052602401610316565b83611c4f57611c41868685612150565b505f9250829150611ceb9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c89828661279d565b9050611c95815f612c7d565b15611cb65760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb857868181518110611d5b57611d5b6155aa565b602002602001015193505f845f015160400151511115611eb0575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd38d8a602001516130fd565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dfe9190615af3565b5f60405180830381865afa158015611e18573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e3f9190810190615beb565b9150505f81511115611eae5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e80908a908590600401615ca1565b5f604051808303815f87803b158015611e97575f80fd5b505af1158015611ea9573d5f803e3d5ffd5b505050505b505b600101611d40565b5050505050505050565b5f8115611efc57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f06846133df565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7e91908716906370a0823190602401602060405180830381865afa158015611f54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f789190615526565b836133eb565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffd919088169063dd62ed3e90604401602060405180830381865afa158015611fd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff79190615526565b846133eb565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120429061203c84846120bd565b9061279d565b93505050506103bb565b612059838383600161342b565b611b1457604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b61208f84848484600161348d565b6120b757604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c88383612c7d565b6120d257816103bb565b5090919050565b5f806120e58382612c7d565b156121065760405163793a8f5560e01b815260048101849052602401610316565b8361211657611c41868685611b84565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c89828661273d565b5f805f61215c8561306a565b9050612168845f612c7d565b1561218657604051632d1671a360e11b815260040160405180910390fd5b5f61219185836130d0565b50905080156121ae576121ae6001600160a01b038716888361204c565b969095509350505050565b826060015181815181106121cf576121cf6155aa565b60200260200101515f01516001600160a01b0316836040015183815181106121f9576121f96155aa565b60200260200101515f01516001600160a01b031603611b1457604051631cd2f1c760e21b815260040160405180910390fd5b6122336148a1565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224e5790505090506122a36122718a611ab3565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b8576122b86155aa565b60200260200101819052505f6122ed8a604001518a815181106122dd576122dd6155aa565b60200260200101515f01516133df565b90505f61233f8b5f01518c604001518c8151811061230d5761230d6155aa565b60200260200101515f01518d604001518d8151811061232e5761232e6155aa565b602002602001015160200151611ec2565b90506123ce8b604001518b8151811061235a5761235a6155aa565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d8151811061238c5761238c6155aa565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b836001600303815181106123e4576123e46155aa565b602002602001018190525050505f61240b8a6060015189815181106122dd576122dd6155aa565b90505f61244c8b5f01518c606001518b8151811061242b5761242b6155aa565b60200260200101515f01518d606001518c8151811061232e5761232e6155aa565b90506124998b606001518a81518110612467576124676155aa565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c8151811061238c5761238c6155aa565b836001600403815181106124af576124af6155aa565b602002602001018190525050506124c681866130fd565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161252687305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561255e5761255e614d06565b604051908082528060200260200182016040528015612587578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ad9190615af3565b5f60405180830381865afa1580156125c7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ee9190810190615beb565b9150915060028251101561261a578151604051630fbb8e5560e21b815260040161031691815260200190565b60208201516040830151855161266e908790600490811061263d5761263d6155aa565b6020026020010151600381518110612657576126576155aa565b6020026020010151826120bd90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126a0576126a06155aa565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612720868686866134fa565b915091505f61272f8383613619565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613666565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613690565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061272086868686613bcd565b8181608001516004815181106127e5576127e56155aa565b60200260200101516004815181106127ff576127ff6155aa565b6020026020010181815250506120b7815f01515f0151826080015160048151811061282c5761282c6155aa565b60200260200101515f81518110612845576128456155aa565b60200260200101515f1c8360800151600481518110612866576128666155aa565b6020026020010151600281518110612880576128806155aa565b6020026020010151856120d9565b8181608001516003815181106128a6576128a66155aa565b60200260200101516004815181106128c0576128c06155aa565b6020908102919091010152805151608082015180515f919060039081106128e9576128e96155aa565b60200260200101515f81518110612902576129026155aa565b60200260200101515f1c90505f8360800151600381518110612926576129266155aa565b6020026020010151600281518110612940576129406155aa565b602002602001015190505f801b81036129e75761295d855f612c7d565b1561297e5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129b5908661279d565b6001600160a01b038085165f9081526001602090815260408083209387168352928152828220858352905220556129f6565b6129f383838388611c04565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a2b929190615cb9565b60405180910390a15050505050565b60c08101515115612ab4578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612a86929091600401615ca1565b5f604051808303815f87803b158015612a9d575f80fd5b505af1158015612aaf573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b0a8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b4a57612b4a614d06565b604051908082528060200260200182016040528015612b73578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612ba3578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612bc39190615af3565b5f60405180830381865afa158015612bdd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c049190810190615beb565b9150505f8151111561150a578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c4c918590600401615ca1565b5f604051808303815f87803b158015612c63575f80fd5b505af1158015612c75573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cab84848484612f96565b13979650505050505050565b5f8160800151600381518110612ccf57612ccf6155aa565b6020026020010151600281518110612ce957612ce96155aa565b602002602001015190505f801b810361150a57815151608083015180515f91906003908110612d1a57612d1a6155aa565b60200260200101515f81518110612d3357612d336155aa565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612db8838383612150565b50505050505050565b6060604082511015612de057505060408051602081019091525f815290565b5f60208301519050602060408451612df891906159bf565b612e029190615cee565b811115612e1e57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e4257505f919050565b50602001515f1a90565b612e5581613ccb565b612e745780604051630c89984b60e31b81526004016103169190615d0d565b50565b60605f612e848484613cf9565b9050808015612ea557505f3d1180612ea557505f846001600160a01b03163b115b15612eba57612eb2613d0c565b9150506102b4565b8015612ee457604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612ef757612ef2613d25565b612f10565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f448383613d30565b82526040820152612f558284613d30565b6020830152606082015292915050565b5f80516020615ecb83398151915254600203612f9457604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612fbb5786859250925050611ceb565b505f85841315612fcf575092949193919260015b8386035f8112604c8213178015613002578215612ff4575f8994509450505050611ceb565b885f94509450505050611ceb565b600a82900a8981028a82828161301a5761301a615cda565b0514613046578415613036575f8b965096505050505050611ceb565b8a5f965096505050505050611ceb565b841561305b578896509450611ceb9350505050565b9550879450611ceb9350505050565b5f805f61307684613d99565b9092509050600182600381111561308f5761308f615d1f565b141580156130ae57505f8260038111156130ab576130ab615d1f565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d33565b5f806001600160e01b038416601b0b60e085901d6130ef828287613e26565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561311a5761311a614d06565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5090505f80845111613155575f61315b565b83516001015b85516001010190505f8167ffffffffffffffff81111561317d5761317d614d06565b6040519080825280602002602001820160405280156131b057816020015b606081526020019060019003908161319b5790505b5090505f6131d4604080516002815233602082015230818301526060810190915290565b8282815181106131e6576131e66155aa565b60200260200101819052505f5b8751811015613243578180600101925050878181518110613216576132166155aa565b6020026020010151838381518110613230576132306155aa565b60209081029190910101526001016131f3565b508551156133d557808060010191505083828281518110613266576132666155aa565b60200260200101819052505f5b86518110156133d357613322878281518110613291576132916155aa565b60200260200101515f01516132ff6132cd8a85815181106132b4576132b46155aa565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613311576133116155aa565b602002602001015160400151613f8c565b61334257604051630a57f30960e31b815260048101829052602401610316565b868181518110613354576133546155aa565b60200260200101515f01516001600160a01b03165f1b85828151811061337c5761337c6155aa565b60200260200101818152505081806001019250508681815181106133a2576133a26155aa565b6020026020010151602001518383815181106133c0576133c06155aa565b6020908102919091010152600101613273565b505b5095945050505050565b5f805f61307684613ffc565b5f805f805f6133fa878761405b565b9250925092505f8061340c858561409e565b915091508183801561341b5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316613481578383151615613475573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166134e95783831516156134dd573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613512575f92505f915061360f565b61351c8487615d6c565b91505f61352888614176565b90505f61353487614176565b90505f61354183836141a4565b5090505f6f0785ee10d5da46d900f436a000000000821115613576576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561359757670de0b6b3a7640000820491506012015b633b9aca008211156135b057633b9aca00820491506009015b6127108211156135c557612710820491506004015b81156135d957600a820491506001016135c5565b6135e38187615d6c565b95506136058b8a6135ff87876135fa87600a615e6b565b6141c0565b8961428c565b9097509550505050505b5094509492505050565b5f805f613626858561409e565b9150915080158015613636575081155b1561365e57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f80613672848461432c565b909450925061368386868686613bcd565b9150915094509492505050565b5f80835f036136bc57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f036136cd57505f905080611ceb565b5f805f806136db8a8a614381565b919b50995091506136ec8888614381565b919950975090505f6136fd8b614176565b90505f6137098a614176565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613ace57841561376057507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613aa6565b6f4b3b4ca85a86c47a098a22400000000083101561388c57678ac7230489e800008310156137f0576402540be4008310156137be57620186a08310156137ae5750620186a090506005613a67565b506402540be4009050600a613a67565b655af3107a40008310156137dd5750655af3107a40009050600e613a67565b50678ac7230489e8000090506013613a67565b6b204fce5e3e250261100000008310156138425769152d02c7e14af680000083101561382b575069152d02c7e14af680000090506017613a67565b506b204fce5e3e250261100000009050601c613a67565b6d314dc6448d9338c15b0a0000000083101561387157506d314dc6448d9338c15b0a0000000090506021613a67565b506f4b3b4ca85a86c47a098a22400000000090506026613a67565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139845773af298d050e4395d69670b12b7f4100000000000083101561391f577172cb5bd86321e38cb6ce6682e8000000000083101561390057507172cb5bd86321e38cb6ce6682e800000000009050602b613a67565b5073af298d050e4395d69670b12b7f4100000000000090506030613a67565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015613960575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613a67565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613a67565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a1a577a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000008310156139f257507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613a67565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613a67565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613a6757507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613a7c57600a820491505f1901613a67565b815f03613aa6576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613ace576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613ae557808d039c50613b23565b600160ff1b9c90038c015f811315613b2357806001600160ff1b03038b13613b1057998a0199613b23565b5f80995099505050505050505050611ceb565b5f808e128015613b3257505f8c135b15613b5357600160ff1b8e01808d13613b4b575f613b4f565b808d035b9150505b8b818f01039750613b708f8e613b6a8887896141c0565b8b61428c565b90995097505f811315613bba57604c811315613b9a575f809a509a50505050505050505050611ceb565b80600a0a8981613bac57613bac615cda565b059850885f03613bba575f97505b50969850949650611ceb95505050505050565b5f8085158415178015613bf957865f03613bed5784849250925050611ceb565b86869250925050611ceb565b613c0387876145db565b9097509550613c1285856145db565b909550935085841315613c26579395929492935b838603604c811115613c3f578787935093505050611ceb565b80600a0a8681613c5157613c51615cda565b0595505086850180881860ff90811c151589881890911c15168015613cba57876001600160ff1b0303613ca15760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cbe565b8198505b5096979596505050505050565b5f600882511015613cdd57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d4d846060015185604001516126f090919063ffffffff16565b915083604001519050613d6d836040015183611b4a90919063ffffffff16565b156130f65782604001519150613d9084606001518361276d90919063ffffffff16565b90509250929050565b5f80613da3614624565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613df9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e1d9190615e76565b91509150915091565b5f805f851215613e5357604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613e6557505f90506001611bfc565b8460ff8416850185811215613e975760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613ee357604c19831215613eba575f809550955050505050611bfc565b825f03600a0a9150818481613ed157613ed1615cda565b0495505084029091149150611bfc9050565b5f831315613f7c57604d831315613f205760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f3657613f36615cda565b04841115613f6a5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfc9050565b8360019550955050505050611bfc565b5f836001600160a01b03163b5f03613fea575f80613faa85856146af565b5090925090505f816003811115613fc357613fc3615d1f565b148015613fe15750856001600160a01b0316826001600160a01b0316145b925050506103bb565b613ff58484846146f5565b90506103bb565b5f80614006614624565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613df9573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b0386111561408d57600a860460018201600a88065f1493509350935050614097565b8593509150600190505b9250925092565b5f601b83900b8314838382614102577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156140e257620186a0860595506005850194505b8586601b0b146140fd57600a860595508460010194506140e2565b614118565b855f0361411857505f9250600191506130f69050565b848560030b1461415b575f85121561413857505f92508291506130f69050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f8082121561419b57600160ff1b82036141955750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f6141cd86866141a4565b91509150815f036141f1578381816141e7576141e7615cda565b04925050506103bb565b8382106142225760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614308576001600160ff1b038411156142f5576142b96001600160ff1b036001615551565b84036142cd5750600160ff1b905081611ceb565b6142d8600a85615cee565b6142e190615eb6565b6142ec846001615d6c565b91509150611ceb565b6142fe84615eb6565b8391509150611ceb565b6001600160ff1b03841115614322576142e1600a85615cee565b5082905081611ceb565b5f80600160ff1b8403614377576001600160ff1b03830361436a5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f0361439957505f91508190506001614097565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f03614586576f4b3b4ca85a86c47a098a22400000000085051580156143fb57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561441c576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561446457507f80000000000000000000000000000000000000000000000000000000000000138412155b1561447d57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156144c957507f800000000000000000000000000000000000000000000000000000000000000a8412155b156144df576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561452e57507f80000000000000000000000000000000000000000000000000000000000000028412155b15614544576064850294506002840393506144df565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b850515801561457457506001600160ff1b018412155b1561458657600a850294506001840393505b600a808602908105861480156145a357506001600160ff1b018512155b156145b2578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f6145ea8787614381565b92509250925080614618576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b158061467b575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612f94576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f83516041036146e6576020840151604085015160608601515f1a6146d888828585614746565b955095509550505050614097565b505081515f9150600290614097565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561477f57505f91506003905082614804565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156147d0573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166147fb57505f925060019150829050614804565b92505f91508190505b9450945094915050565b604051806080016040528061482161483a565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b0316815260200161488860405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148b461483a565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f602082840312156148f6575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261491d575f80fd5b50813567ffffffffffffffff811115614934575f80fd5b6020830191508360208260051b85010111156130f6575f80fd5b5f805f60408486031215614960575f80fd5b833567ffffffffffffffff80821115614977575f80fd5b9085019060a0828803121561498a575f80fd5b9093506020850135908082111561499f575f80fd5b506149ac8682870161490d565b9497909650939450505050565b5f602082840312156149c9575f80fd5b5035919050565b6001600160a01b0381168114612e74575f80fd5b803561419f816149d0565b5f805f805f60808688031215614a03575f80fd5b8535614a0e816149d0565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a37575f80fd5b614a438882890161490d565b969995985093965092949392505050565b5f805f60608486031215614a66575f80fd5b8335614a71816149d0565b92506020840135614a81816149d0565b929592945050506040919091013590565b5f805f805f60808688031215614aa6575f80fd5b8535614ab1816149d0565b94506020860135614ac1816149d0565b935060408601359250606086013567ffffffffffffffff80821115614ae4575f80fd5b818801915088601f830112614af7575f80fd5b813581811115614b05575f80fd5b896020828501011115614b16575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b39575f80fd5b81356103bb816149d0565b5f60c08284031215614b54575f80fd5b50919050565b5f60208284031215614b6a575f80fd5b813567ffffffffffffffff811115614b80575f80fd5b61052d84828501614b44565b5f805f60408486031215614b9e575f80fd5b833567ffffffffffffffff80821115614bb5575f80fd5b614bc187838801614b44565b9450602086013591508082111561499f575f80fd5b5f60208284031215614be6575f80fd5b813567ffffffffffffffff811115614bfc575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c1e575f80fd5b823567ffffffffffffffff811115614c34575f80fd5b614c408582860161490d565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614ccf57603f19888603018452614cbd858351614c4c565b94509285019290850190600101614ca1565b5092979650505050505050565b5f8060408385031215614ced575f80fd5b8235614cf8816149d0565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b60405290565b6040805190810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b60405160a0810167ffffffffffffffff81118282101715614d3d57614d3d614d06565b604051601f8201601f1916810167ffffffffffffffff81118282101715614db257614db2614d06565b604052919050565b5f82601f830112614dc9575f80fd5b813567ffffffffffffffff811115614de357614de3614d06565b614df6601f8201601f1916602001614d89565b818152846020838601011115614e0a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e36575f80fd5b614e3e614d1a565b90508135614e4b816149d0565b81526020820135614e5b816149d0565b6020820152604082013567ffffffffffffffff811115614e79575f80fd5b614e8584828501614dba565b60408301525092915050565b5f67ffffffffffffffff821115614eaa57614eaa614d06565b5060051b60200190565b5f60408284031215614ec4575f80fd5b614ecc614d43565b90508135614ed9816149d0565b808252506020820135602082015292915050565b5f82601f830112614efc575f80fd5b81356020614f11614f0c83614e91565b614d89565b8083825260208201915060208460061b870101935086841115614f32575f80fd5b602086015b84811015614f5757614f498882614eb4565b835291830191604001614f37565b509695505050505050565b5f60a08284031215614f72575f80fd5b614f7a614d66565b9050614f85826149e4565b8152602082013567ffffffffffffffff80821115614fa1575f80fd5b614fad85838601614e26565b60208401526040840135915080821115614fc5575f80fd5b614fd185838601614eed565b60408401526060840135915080821115614fe9575f80fd5b50614ff684828501614eed565b6060830152506080820135608082015292915050565b5f615019614f0c84614e91565b8381529050602080820190600585811b850187811115615037575f80fd5b855b8181101561512457803567ffffffffffffffff80821115615058575f80fd5b908801906060828c03121561506b575f80fd5b615073614d1a565b823561507e816149d0565b81528287013582811115615090575f80fd5b8301601f81018d136150a0575f80fd5b80356150ae614f0c82614e91565b81815290881b8201890190898101908f8311156150c9575f80fd5b928a01925b828410156150e75783358252928a0192908a01906150ce565b848b01525060409150508381013583811115615101575f80fd5b61510d8e828701614dba565b918301919091525087525050938301938301615039565b50505050509392505050565b5f82601f83011261513f575f80fd5b6103bb8383356020850161500c565b5f805f805f6101408688031215615163575f80fd5b853567ffffffffffffffff8082111561517a575f80fd5b61518689838a01614f62565b9650602088013591508082111561519b575f80fd5b6151a789838a01614f62565b95506151b68960408a01614b44565b94506101008801359150808211156151cc575f80fd5b6151d889838a01615130565b93506101208801359150808211156151ee575f80fd5b506151fb88828901615130565b9150509295509295909350565b5f6102b43683614f62565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8135615247816149d0565b6001600160a01b039081168452602083013590615263826149d0565b166020840152604082013536839003601e19018112615280575f80fd5b820160208101903567ffffffffffffffff81111561529c575f80fd5b8036038213156152aa575f80fd5b606060408601526152bf606086018284615213565b95945050505050565b5f808335601e198436030181126152dd575f80fd5b830160208101925035905067ffffffffffffffff8111156152fc575f80fd5b8060061b36038213156130f6575f80fd5b8183525f60208085019450825f5b8581101561535357813561532e816149d0565b6001600160a01b0316875281830135838801526040968701969091019060010161531b565b509495945050505050565b5f6001600160a01b038086168352846020840152606060408401528335615384816149d0565b166060830152602083013536849003605e190181126153a1575f80fd5b60a060808401526153b8610100840185830161523b565b90506153c760408501856152c8565b605f19808685030160a08701526153df84838561530d565b93506153ee60608801886152c8565b93509150808685030160c08701525061540883838361530d565b92505050608084013560e084015280915050949350505050565b5f61542f614f0c84614e91565b80848252602080830192508560051b85013681111561544c575f80fd5b855b818110156154d657803567ffffffffffffffff8082111561546d575f80fd5b818901915060408236031215615481575f80fd5b615489614d43565b823582811115615497575f80fd5b6154a336828601614e26565b82525085830135828111156154b6575f80fd5b6154c236828601615130565b82880152508752505093820193820161544e565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261551a60a083018486615213565b98975050505050505050565b5f60208284031215615536575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461553d565b5f808335601e19843603018112615579575f80fd5b83018035915067ffffffffffffffff821115615593575f80fd5b6020019150600581901b36038213156130f6575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126155d2575f80fd5b9190910192915050565b5f8235609e198336030181126155d2575f80fd5b5f808335601e19843603018112615605575f80fd5b83018035915067ffffffffffffffff82111561561f575f80fd5b6020019150600681901b36038213156130f6575f80fd5b5f60808236031215615646575f80fd5b6040516080810167ffffffffffffffff828210818311171561566a5761566a614d06565b81604052843591508082111561567e575f80fd5b61568a36838701614f62565b8352602085013560208401526040850135604084015260608501359150808211156156b3575f80fd5b506156c036828601615130565b60608301525092915050565b5f602082840312156156dc575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561535357815180516001600160a01b0316885283015183880152604090960195908201906001016156fe565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e085015261577b610100850182614c4c565b90506040830151848203604086015261579482826156eb565b915050606083015184820360608601526157ae82826156eb565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b83811015615353578151875295820195908201906001016157d8565b5f6001600160a01b0380871683526020608081850152865160808086015261582061010086018261572e565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158bc57601f1988830301845284518a815116835289810151878b850152615890888501826157c5565b91890151848303858b01529190506158a88183614c4c565b968b0196958b019593505050600101615862565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e198436030181126158f3575f80fd5b83018035915067ffffffffffffffff82111561590d575f80fd5b6020019150368190038213156130f6575f80fd5b5f8235605e198336030181126155d2575f80fd5b5f6102b43683614e26565b5f60408284031215615950575f80fd5b6103bb8383614eb4565b6001600160a01b0384168152826020820152606060408201525f6152bf606083018461572e565b6001600160a01b0385168152836020820152606060408201525f6159a9606083018486615213565b9695505050505050565b5f6103bb36848461500c565b818103818111156102b4576102b461553d565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a178184018761572e565b90508281036040840152615a2b818661572e565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461572e565b5f60018201615a9457615a9461553d565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615ae657601f19868403018952615ad48383516157c5565b98840198925090830190600101615ab8565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b2c610100840182614c4c565b9050606084015160808401526080840151601f19808584030160a0860152615b548383615a9b565b925060a08601519150808584030160c0860152615b7183836157c5565b925060c08601519150808584030160e0860152506152bf82826157c5565b5f82601f830112615b9e575f80fd5b81516020615bae614f0c83614e91565b8083825260208201915060208460051b870101935086841115615bcf575f80fd5b602086015b84811015614f575780518352918301918301615bd4565b5f8060408385031215615bfc575f80fd5b825167ffffffffffffffff80821115615c13575f80fd5b818501915085601f830112615c26575f80fd5b81516020615c36614f0c83614e91565b82815260059290921b84018101918181019089841115615c54575f80fd5b948201945b83861015615c7257855182529482019490820190615c59565b91880151919650909350505080821115615c8a575f80fd5b50615c9785828601615b8f565b9150509250929050565b828152604060208201525f61052d60408301846157c5565b6001600160a01b0383168152604060208201525f61052d6040830184615a9b565b634e487b7160e01b5f52601260045260245ffd5b5f82615d0857634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c4c565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615d5f57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ac576114ac61553d565b600181815b80851115615dc557815f1904821115615dab57615dab61553d565b80851615615db857918102915b93841c9390800290615d90565b509250929050565b5f82615ddb575060016102b4565b81615de757505f6102b4565b8160018114615dfd5760028114615e0757615e23565b60019150506102b4565b60ff841115615e1857615e1861553d565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e46575081810a6102b4565b615e508383615d8b565b805f1904821115615e6357615e6361553d565b029392505050565b5f6103bb8383615dcd565b5f8060408385031215615e87575f80fd5b825160048110615e95575f80fd5b602084015190925060ff81168114615eab575f80fd5b809150509250929050565b5f600160ff1b82016141955761419561553d56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; diff --git a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol index e84b701bfd..c1a98847fa 100644 --- a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x2ec369e891917e44cd05bd5a17212324cf784ce0764ecee89939244c9e50e6f6); +bytes32 constant BYTECODE_HASH = bytes32(0xfb4d209f8ee0e79aab1a9cf11e2aa182a889a4fc18b0b408fed2f48aed65f833); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x6E52a7C2D66A1A4F3474B6384C03C7D7319Bd80a); +address constant DEPLOYED_ADDRESS = address(0xBb29a49cC9A174c8bED08e67B85597c842e9B6dB); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b038316739da435ffe32f40cc112d4d25601d0d7592cdded9146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b03831673e1f01e722d3f2d8ffc05ff806b652f2350a58e96146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; From 42cac7b5d0d6ce07921f8965bcf51c212fd91a11 Mon Sep 17 00:00:00 2001 From: David Meister Date: Mon, 15 Jun 2026 22:58:13 +0000 Subject: [PATCH 3/4] clear3: regenerate RaindexV6 + dependent arb/flash-borrower pointers Rebase onto main (post-#2735 calc-context + #2736 takeOrders4 guard). The clear3 NegativeBounty-guard hoist changes RaindexV6 bytecode -> new CREATE2 address 0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20; the three arb/flash-borrower takers that embed RaindexV6 re-emit to new addresses. Regenerated pointers (fixpoint) + test_fixtures RaindexV6 ABI/bytecode. Co-Authored-By: Claude Opus 4.8 --- crates/test_fixtures/abis/RaindexV6.json | 2 +- .../GenericPoolRaindexV6ArbOrderTaker.pointers.sol | 6 +++--- .../GenericPoolRaindexV6FlashBorrower.pointers.sol | 6 +++--- src/generated/RaindexV6.pointers.sol | 8 ++++---- .../RouteProcessorRaindexV6ArbOrderTaker.pointers.sol | 6 +++--- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/crates/test_fixtures/abis/RaindexV6.json b/crates/test_fixtures/abis/RaindexV6.json index 4c7487fc84..9035fe6a31 100644 --- a/crates/test_fixtures/abis/RaindexV6.json +++ b/crates/test_fixtures/abis/RaindexV6.json @@ -2352,7 +2352,7 @@ } ], "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2e806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614929565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614991565b6102ba565b61010761013d3660046149fc565b5f9081526020819052604090205460011490565b61016461015f366004614a32565b6103c2565b005b610179610174366004614a97565b610521565b604051908152602001610113565b610107610195366004614ad5565b610535565b6101646101a8366004614a32565b610635565b6101796101bb366004614b6c565b6107c8565b6101d36101ce366004614b9d565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcf565b610fca565b61020e610209366004614c19565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c50565b6113cf565b6040516101139190614cbd565b610164610259366004614c50565b6114b5565b61017961026c366004614d1f565b61150f565b61016461027f366004615191565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9b565b6102d06020850185614b6c565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6c565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661524b565b611ab6565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153a1565b60405180910390a16103a4818585611ae5565b506103bb60015f80516020615f0e83398151915255565b9392505050565b6103ca611a9b565b3385856103d8838383611b1c565b6103e2865f611b4d565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b87565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c07565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615465565b611cf7565b5050505050505061051a60015f80516020615f0e83398151915255565b5050505050565b5f61052d848484611ec5565b949350505050565b5f61054a6001600160a01b038616878661204f565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615525565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615569565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615594565b6001600160a01b038a16929190612084565b5060019695505050505050565b61063d611a9b565b33858561064b838383611b1c565b5f8080806106598a82611b4d565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec5565b90506106a58b826120c0565b94506106b3338e8e886120dc565b90935091505f6106c4338f88612153565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615465565b50505050505050505061051a60015f80516020615f0e83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615569565b5f8061083a611a9b565b61084760808401846155a7565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4d565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b614851565b6108a361487d565b5f60405180606001604052808780608001906108bf91906155a7565b5f8181106108cf576108cf6155ed565b90506020028101906108e19190615601565b6108eb908061561f565b6108f9906040810190615633565b61090660808b018b6155a7565b5f818110610916576109166155ed565b90506020028101906109289190615601565b6020013581811061093b5761093b6155ed565b6109519260206040909202019081019150614b6c565b6001600160a01b0316815260200161096c60808901896155a7565b5f81811061097c5761097c6155ed565b905060200281019061098e9190615601565b610998908061561f565b6109a6906060810190615633565b6109b360808b018b6155a7565b5f8181106109c3576109c36155ed565b90506020028101906109d59190615601565b604001358181106109e8576109e86155ed565b6109fe9260206040909202019081019150614b6c565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a7565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a7565b905081108015610a6457506040840151610a64905f611b4d565b15610e7257610a7660808a018a6155a7565b82818110610a8657610a866155ed565b9050602002810190610a989190615601565b610aa190615679565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155ed565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155ed565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121bc565b5f610b6686611ab6565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d49565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222e565b90505f610c468c604001358360600151611b4d90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4d565b1580610cc357506060820151610cc1905f611b4d565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570f565b15610d6f576040808a015190850151610d41916120c0565b6060850151909250610d539083612733565b60408a0151909150610d659083612780565b60408a0152610dd6565b5f610d8b8560400151866060015161273390919063ffffffff16565b9050610da48a60400151826120c090919063ffffffff16565b9150610dbd8560600151836127b090919063ffffffff16565b60408b0151909350610dcf9083612780565b60408b0152505b610de08c826127e0565b9b50610dec8d836127e0565b9c50610df88285612810565b610e0281856128d1565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615837565b60405180910390a187516001018089526020028801849052610e5884612a7d565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570f565b610e8e5786610e90565b875b9050610e9d818a35612cc0565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612153565b505f9050610ee660a08a018a615921565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f615921565b6040518763ffffffff1660e01b8152600401610f3696959493929190615525565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b87565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155ed565b6020026020010151612cfa565b600101610f76565b505050505050610fc560015f80516020615f0e83398151915255565b915091565b5f610fd3611a9b565b5f61103061102b610fe48780615964565b610ff2906040810190615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0492505050565b612e75565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615633565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615633565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615964565b6110f690615978565b815260200187806020019061110b9190615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615983565b8152602001906001019061112a565b505050918352505060200161116e6040890189615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615983565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab6565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599d565b60405180910390a15f61124b60a08a018a615921565b905011156112e75761129c61126360a08a018a615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8f92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c615921565b6040516112de94939291906159c4565b60405180910390a15b6112f2828888611ae5565b93505050506103bb60015f80516020615f0e83398151915255565b5f80808061132761131e868061561f565b61032c9061524b565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561f565b6113649061524b565b866020013587604001356121bc565b5f6113b1611381878061561f565b61138a9061524b565b60208801356040890135336113a260608c018c6155a7565b6113ab916159f6565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d49565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155ed565b90506020028101906114619190615921565b8560405160200161147493929190615a15565b604051602081830303815290604052612eba565b83828151811061149a5761149a6155ed565b6020908102919091010152600101611431565b505092915050565b6114bd611a9b565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615465565b61150b60015f80516020615f0e83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615569565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a9b565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155ed565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155ed565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155ed565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155ed565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155ed565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155ed565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab6565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a85565b5f6117b286611ab6565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a85565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a38565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d49565b90505f6118ae8383612f5a565b90506118bd815f015184612810565b6118cb816020015183612810565b6118d98160400151846128d1565b6118e78160600151836128d1565b6118f083612cfa565b6118f982612cfa565b606081015181515f9161190c9190612780565b90505f61192a8360400151846020015161278090919063ffffffff16565b9050611936825f612cc0565b806119465750611946815f612cc0565b1561196457604051630d86822160e01b815260040160405180910390fd5b611998338b606001518a6020013581518110611982576119826155ed565b60200260200101515f01518a6080013585611c07565b50506119ce338a606001518a60600135815181106119b8576119b86155ed565b60200260200101515f01518a60a0013584611c07565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3783612a7d565b611a4082612a7d565b80516001600160e01b0316158015611a63575060208101516001600160e01b0316155b15611a81576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615f0e83398151915255565b611aa3612fa8565b60025f80516020615f0e83398151915255565b5f81604051602001611ac89190615ab4565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1790611b0d906104d6565b6104f88385615465565b505050565b80611b17576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7b84848484612fd9565b12979650505050505050565b5f805f611b93856130ad565b9050611b9f845f612cc0565b15611bbd57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc98684613113565b9150915080611bde57611bdb82615ac6565b91505b8115611bf957611bf96001600160a01b038816893085612084565b50925090505b935093915050565b5f80611c138382612cc0565b15611c345760405163793a8f5560e01b815260048101849052602401610316565b83611c5257611c44868685612153565b505f9250829150611cee9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c82866127e0565b9050611c98815f612cc0565b15611cb95760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611ebb57868181518110611d5e57611d5e6155ed565b602002602001015193505f845f015160400151511115611eb3575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd68d8a60200151613140565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e019190615b36565b5f60405180830381865afa158015611e1b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e429190810190615c2e565b9150505f81511115611eb15784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e83908a908590600401615ce4565b5f604051808303815f87803b158015611e9a575f80fd5b505af1158015611eac573d5f803e3d5ffd5b505050505b505b600101611d43565b5050505050505050565b5f8115611eff57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0984613422565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8191908716906370a0823190602401602060405180830381865afa158015611f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615569565b8361342e565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612000919088169063dd62ed3e90604401602060405180830381865afa158015611fd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffa9190615569565b8461342e565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120459061203f84846120c0565b906127e0565b93505050506103bb565b61205c838383600161346e565b611b1757604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120928484848460016134d0565b6120ba57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120cb8383612cc0565b6120d557816103bb565b5090919050565b5f806120e88382612cc0565b156121095760405163793a8f5560e01b815260048101849052602401610316565b8361211957611c44868685611b87565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c8286612780565b5f805f61215f856130ad565b905061216b845f612cc0565b1561218957604051632d1671a360e11b815260040160405180910390fd5b5f6121948583613113565b50905080156121b1576121b16001600160a01b038716888361204f565b969095509350505050565b826060015181815181106121d2576121d26155ed565b60200260200101515f01516001600160a01b0316836040015183815181106121fc576121fc6155ed565b60200260200101515f01516001600160a01b031603611b1757604051631cd2f1c760e21b815260040160405180910390fd5b6122366148e4565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122515790505090506122a66122748a611ab6565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122bb576122bb6155ed565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122fb576122fb6155ed565b60200260200101819052505f6123308a604001518a81518110612320576123206155ed565b60200260200101515f0151613422565b90505f6123828b5f01518c604001518c81518110612350576123506155ed565b60200260200101515f01518d604001518d81518110612371576123716155ed565b602002602001015160200151611ec5565b90506124118b604001518b8151811061239d5761239d6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cf576123cf6155ed565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612427576124276155ed565b602002602001018190525050505f61244e8a606001518981518110612320576123206155ed565b90505f61248f8b5f01518c606001518b8151811061246e5761246e6155ed565b60200260200101515f01518d606001518c81518110612371576123716155ed565b90506124dc8b606001518a815181106124aa576124aa6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cf576123cf6155ed565b836001600403815181106124f2576124f26155ed565b602002602001018190525050506125098186613140565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256987305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156125a1576125a1614d49565b6040519080825280602002602001820160405280156125ca578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125f09190615b36565b5f60405180830381865afa15801561260a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126319190810190615c2e565b9150915060028251101561265d578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126b19087906004908110612680576126806155ed565b602002602001015160038151811061269a5761269a6155ed565b6020026020010151826120c090919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e3576126e36155ed565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127638686868661353d565b915091505f612772838361365c565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136a9565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136d3565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276386868686613c10565b818160800151600481518110612828576128286155ed565b6020026020010151600481518110612842576128426155ed565b6020026020010181815250506120ba815f01515f0151826080015160048151811061286f5761286f6155ed565b60200260200101515f81518110612888576128886155ed565b60200260200101515f1c83608001516004815181106128a9576128a96155ed565b60200260200101516002815181106128c3576128c36155ed565b6020026020010151856120dc565b8181608001516003815181106128e9576128e96155ed565b6020026020010151600481518110612903576129036155ed565b6020908102919091010152805151608082015180515f9190600390811061292c5761292c6155ed565b60200260200101515f81518110612945576129456155ed565b60200260200101515f1c90505f8360800151600381518110612969576129696155ed565b6020026020010151600281518110612983576129836155ed565b602002602001015190505f801b8103612a2a576129a0855f612cc0565b156129c15760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f890866127e0565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a39565b612a3683838388611c07565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6e929190615cfc565b60405180910390a15050505050565b60c08101515115612af7578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac9929091600401615ce4565b5f604051808303815f87803b158015612ae0575f80fd5b505af1158015612af2573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4d8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8d57612b8d614d49565b604051908082528060200260200182016040528015612bb6578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be6578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c069190615b36565b5f60405180830381865afa158015612c20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c479190810190615c2e565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8f918590600401615ce4565b5f604051808303815f87803b158015612ca6575f80fd5b505af1158015612cb8573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cee84848484612fd9565b13979650505050505050565b5f8160800151600381518110612d1257612d126155ed565b6020026020010151600281518110612d2c57612d2c6155ed565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5d57612d5d6155ed565b60200260200101515f81518110612d7657612d766155ed565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dfb838383612153565b50505050505050565b6060604082511015612e2357505060408051602081019091525f815290565b5f60208301519050602060408451612e3b9190615a02565b612e459190615d31565b811115612e6157505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8557505f919050565b50602001515f1a90565b612e9881613d0e565b612eb75780604051630c89984b60e31b81526004016103169190615d50565b50565b60605f612ec78484613d3c565b9050808015612ee857505f3d1180612ee857505f846001600160a01b03163b115b15612efd57612ef5613d4f565b9150506102b4565b8015612f2757604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3a57612f35613d68565b612f53565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f878383613d73565b82526040820152612f988284613d73565b6020830152606082015292915050565b5f80516020615f0e83398151915254600203612fd757604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffe5786859250925050611cee565b505f85841315613012575092949193919260015b8386035f8112604c8213178015613045578215613037575f8994509450505050611cee565b885f94509450505050611cee565b600a82900a8981028a82828161305d5761305d615d1d565b0514613089578415613079575f8b965096505050505050611cee565b8a5f965096505050505050611cee565b841561309e578896509450611cee9350505050565b9550879450611cee9350505050565b5f805f6130b984613ddc565b909250905060018260038111156130d2576130d2615d62565b141580156130f157505f8260038111156130ee576130ee615d62565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d76565b5f806001600160e01b038416601b0b60e085901d613132828287613e69565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315d5761315d614d49565b604051908082528060200260200182016040528015613186578160200160208202803683370190505b5090505f80845111613198575f61319e565b83516001015b85516001010190505f8167ffffffffffffffff8111156131c0576131c0614d49565b6040519080825280602002602001820160405280156131f357816020015b60608152602001906001900390816131de5790505b5090505f613217604080516002815233602082015230818301526060810190915290565b828281518110613229576132296155ed565b60200260200101819052505f5b8751811015613286578180600101925050878181518110613259576132596155ed565b6020026020010151838381518110613273576132736155ed565b6020908102919091010152600101613236565b50855115613418578080600101915050838282815181106132a9576132a96155ed565b60200260200101819052505f5b8651811015613416576133658782815181106132d4576132d46155ed565b60200260200101515f01516133426133108a85815181106132f7576132f76155ed565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613354576133546155ed565b602002602001015160400151613fcf565b61338557604051630a57f30960e31b815260048101829052602401610316565b868181518110613397576133976155ed565b60200260200101515f01516001600160a01b03165f1b8582815181106133bf576133bf6155ed565b60200260200101818152505081806001019250508681815181106133e5576133e56155ed565b602002602001015160200151838381518110613403576134036155ed565b60209081029190910101526001016132b6565b505b5095945050505050565b5f805f6130b98461403f565b5f805f805f61343d878761409e565b9250925092505f8061344f85856140e1565b915091508183801561345e5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c45783831516156134b8573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352c578383151615613520573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613555575f92505f9150613652565b61355f8487615daf565b91505f61356b886141b9565b90505f613577876141b9565b90505f61358483836141e7565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135da57670de0b6b3a7640000820491506012015b633b9aca008211156135f357633b9aca00820491506009015b61271082111561360857612710820491506004015b811561361c57600a82049150600101613608565b6136268187615daf565b95506136488b8a613642878761363d87600a615eae565b614203565b896142cf565b9097509550505050505b5094509492505050565b5f805f61366985856140e1565b9150915080158015613679575081155b156136a157604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b5848461436f565b90945092506136c686868686613c10565b9150915094509492505050565b5f80835f036136ff57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361371057505f905080611cee565b5f805f8061371e8a8a6143c4565b919b509950915061372f88886143c4565b919950975090505f6137408b6141b9565b90505f61374c8a6141b9565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b115784156137a357507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae9565b6f4b3b4ca85a86c47a098a2240000000008310156138cf57678ac7230489e80000831015613833576402540be40083101561380157620186a08310156137f15750620186a090506005613aaa565b506402540be4009050600a613aaa565b655af3107a40008310156138205750655af3107a40009050600e613aaa565b50678ac7230489e8000090506013613aaa565b6b204fce5e3e250261100000008310156138855769152d02c7e14af680000083101561386e575069152d02c7e14af680000090506017613aaa565b506b204fce5e3e250261100000009050601c613aaa565b6d314dc6448d9338c15b0a000000008310156138b457506d314dc6448d9338c15b0a0000000090506021613aaa565b506f4b3b4ca85a86c47a098a22400000000090506026613aaa565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c75773af298d050e4395d69670b12b7f41000000000000831015613962577172cb5bd86321e38cb6ce6682e8000000000083101561394357507172cb5bd86321e38cb6ce6682e800000000009050602b613aaa565b5073af298d050e4395d69670b12b7f4100000000000090506030613aaa565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a3575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aaa565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aaa565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5d577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3557507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aaa565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aaa565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aaa57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abf57600a820491505f1901613aaa565b815f03613ae9576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b11576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2857808d039c50613b66565b600160ff1b9c90038c015f811315613b6657806001600160ff1b03038b13613b5357998a0199613b66565b5f80995099505050505050505050611cee565b5f808e128015613b7557505f8c135b15613b9657600160ff1b8e01808d13613b8e575f613b92565b808d035b9150505b8b818f01039750613bb38f8e613bad888789614203565b8b6142cf565b90995097505f811315613bfd57604c811315613bdd575f809a509a50505050505050505050611cee565b80600a0a8981613bef57613bef615d1d565b059850885f03613bfd575f97505b50969850949650611cee95505050505050565b5f8085158415178015613c3c57865f03613c305784849250925050611cee565b86869250925050611cee565b613c46878761461e565b9097509550613c55858561461e565b909550935085841315613c69579395929492935b838603604c811115613c82578787935093505050611cee565b80600a0a8681613c9457613c94615d1d565b0595505086850180881860ff90811c151589881890911c15168015613cfd57876001600160ff1b0303613ce45760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613d01565b8198505b5096979596505050505050565b5f600882511015613d2057505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d908460600151856040015161273390919063ffffffff16565b915083604001519050613db0836040015183611b4d90919063ffffffff16565b156131395782604001519150613dd38460600151836127b090919063ffffffff16565b90509250929050565b5f80613de6614667565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e609190615eb9565b91509150915091565b5f805f851215613e9657604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea857505f90506001611bff565b8460ff8416850185811215613eda5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2657604c19831215613efd575f809550955050505050611bff565b825f03600a0a9150818481613f1457613f14615d1d565b0495505084029091149150611bff9050565b5f831315613fbf57604d831315613f635760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7957613f79615d1d565b04841115613fad5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bff9050565b8360019550955050505050611bff565b5f836001600160a01b03163b5f0361402d575f80613fed85856146f2565b5090925090505f81600381111561400657614006615d62565b1480156140245750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614038848484614738565b90506103bb565b5f80614049614667565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3c573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140d057600a860460018201600a88065f14935093509350506140da565b8593509150600190505b9250925092565b5f601b83900b8314838382614145577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412557620186a0860595506005850194505b8586601b0b1461414057600a86059550846001019450614125565b61415b565b855f0361415b57505f9250600191506131399050565b848560030b1461419e575f85121561417b57505f92508291506131399050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141de57600160ff1b82036141d85750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61421086866141e7565b91509150815f036142345783818161422a5761422a615d1d565b04925050506103bb565b8382106142655760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561434b576001600160ff1b03841115614338576142fc6001600160ff1b036001615594565b84036143105750600160ff1b905081611cee565b61431b600a85615d31565b61432490615ef9565b61432f846001615daf565b91509150611cee565b61434184615ef9565b8391509150611cee565b6001600160ff1b0384111561436557614324600a85615d31565b5082905081611cee565b5f80600160ff1b84036143ba576001600160ff1b0383036143ad5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143dc57505f915081905060016140da565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c9576f4b3b4ca85a86c47a098a224000000000850515801561443e57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445f576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a757507f80000000000000000000000000000000000000000000000000000000000000138412155b156144c057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614522576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561457157507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458757606485029450600284039350614522565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b757506001600160ff1b018412155b156145c957600a850294506001840393505b600a808602908105861480156145e657506001600160ff1b018512155b156145f5578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462d87876143c4565b9250925092508061465b576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146be575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd7576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614729576020840151604085015160608601515f1a61471b88828585614789565b9550955095505050506140da565b505081515f91506002906140da565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c257505f91506003905082614847565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614813573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483e57505f925060019150829050614847565b92505f91508190505b9450945094915050565b604051806080016040528061486461487d565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148cb60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f761487d565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614939575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614960575f80fd5b50813567ffffffffffffffff811115614977575f80fd5b6020830191508360208260051b8501011115613139575f80fd5b5f805f604084860312156149a3575f80fd5b833567ffffffffffffffff808211156149ba575f80fd5b9085019060a082880312156149cd575f80fd5b909350602085013590808211156149e2575f80fd5b506149ef86828701614950565b9497909650939450505050565b5f60208284031215614a0c575f80fd5b5035919050565b6001600160a01b0381168114612eb7575f80fd5b80356141e281614a13565b5f805f805f60808688031215614a46575f80fd5b8535614a5181614a13565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a7a575f80fd5b614a8688828901614950565b969995985093965092949392505050565b5f805f60608486031215614aa9575f80fd5b8335614ab481614a13565b92506020840135614ac481614a13565b929592945050506040919091013590565b5f805f805f60808688031215614ae9575f80fd5b8535614af481614a13565b94506020860135614b0481614a13565b935060408601359250606086013567ffffffffffffffff80821115614b27575f80fd5b818801915088601f830112614b3a575f80fd5b813581811115614b48575f80fd5b896020828501011115614b59575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7c575f80fd5b81356103bb81614a13565b5f60c08284031215614b97575f80fd5b50919050565b5f60208284031215614bad575f80fd5b813567ffffffffffffffff811115614bc3575f80fd5b61052d84828501614b87565b5f805f60408486031215614be1575f80fd5b833567ffffffffffffffff80821115614bf8575f80fd5b614c0487838801614b87565b945060208601359150808211156149e2575f80fd5b5f60208284031215614c29575f80fd5b813567ffffffffffffffff811115614c3f575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c61575f80fd5b823567ffffffffffffffff811115614c77575f80fd5b614c8385828601614950565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1257603f19888603018452614d00858351614c8f565b94509285019290850190600101614ce4565b5092979650505050505050565b5f8060408385031215614d30575f80fd5b8235614d3b81614a13565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405160a0810167ffffffffffffffff81118282101715614d8057614d80614d49565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df557614df5614d49565b604052919050565b5f82601f830112614e0c575f80fd5b813567ffffffffffffffff811115614e2657614e26614d49565b614e39601f8201601f1916602001614dcc565b818152846020838601011115614e4d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e79575f80fd5b614e81614d5d565b90508135614e8e81614a13565b81526020820135614e9e81614a13565b6020820152604082013567ffffffffffffffff811115614ebc575f80fd5b614ec884828501614dfd565b60408301525092915050565b5f67ffffffffffffffff821115614eed57614eed614d49565b5060051b60200190565b5f60408284031215614f07575f80fd5b614f0f614d86565b90508135614f1c81614a13565b808252506020820135602082015292915050565b5f82601f830112614f3f575f80fd5b81356020614f54614f4f83614ed4565b614dcc565b8083825260208201915060208460061b870101935086841115614f75575f80fd5b602086015b84811015614f9a57614f8c8882614ef7565b835291830191604001614f7a565b509695505050505050565b5f60a08284031215614fb5575f80fd5b614fbd614da9565b9050614fc882614a27565b8152602082013567ffffffffffffffff80821115614fe4575f80fd5b614ff085838601614e69565b60208401526040840135915080821115615008575f80fd5b61501485838601614f30565b6040840152606084013591508082111561502c575f80fd5b5061503984828501614f30565b6060830152506080820135608082015292915050565b5f61505c614f4f84614ed4565b8381529050602080820190600585811b85018781111561507a575f80fd5b855b8181101561516757803567ffffffffffffffff8082111561509b575f80fd5b908801906060828c0312156150ae575f80fd5b6150b6614d5d565b82356150c181614a13565b815282870135828111156150d3575f80fd5b8301601f81018d136150e3575f80fd5b80356150f1614f4f82614ed4565b81815290881b8201890190898101908f83111561510c575f80fd5b928a01925b8284101561512a5783358252928a0192908a0190615111565b848b01525060409150508381013583811115615144575f80fd5b6151508e828701614dfd565b91830191909152508752505093830193830161507c565b50505050509392505050565b5f82601f830112615182575f80fd5b6103bb8383356020850161504f565b5f805f805f61014086880312156151a6575f80fd5b853567ffffffffffffffff808211156151bd575f80fd5b6151c989838a01614fa5565b965060208801359150808211156151de575f80fd5b6151ea89838a01614fa5565b95506151f98960408a01614b87565b945061010088013591508082111561520f575f80fd5b61521b89838a01615173565b9350610120880135915080821115615231575f80fd5b5061523e88828901615173565b9150509295509295909350565b5f6102b43683614fa5565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528a81614a13565b6001600160a01b0390811684526020830135906152a682614a13565b166020840152604082013536839003601e190181126152c3575f80fd5b820160208101903567ffffffffffffffff8111156152df575f80fd5b8036038213156152ed575f80fd5b60606040860152615302606086018284615256565b95945050505050565b5f808335601e19843603018112615320575f80fd5b830160208101925035905067ffffffffffffffff81111561533f575f80fd5b8060061b3603821315613139575f80fd5b8183525f60208085019450825f5b8581101561539657813561537181614a13565b6001600160a01b0316875281830135838801526040968701969091019060010161535e565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c781614a13565b166060830152602083013536849003605e190181126153e4575f80fd5b60a060808401526153fb610100840185830161527e565b905061540a604085018561530b565b605f19808685030160a0870152615422848385615350565b9350615431606088018861530b565b93509150808685030160c08701525061544b838383615350565b92505050608084013560e084015280915050949350505050565b5f615472614f4f84614ed4565b80848252602080830192508560051b85013681111561548f575f80fd5b855b8181101561551957803567ffffffffffffffff808211156154b0575f80fd5b8189019150604082360312156154c4575f80fd5b6154cc614d86565b8235828111156154da575f80fd5b6154e636828601614e69565b82525085830135828111156154f9575f80fd5b61550536828601615173565b828801525087525050938201938201615491565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555d60a083018486615256565b98975050505050505050565b5f60208284031215615579575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615580565b5f808335601e198436030181126155bc575f80fd5b83018035915067ffffffffffffffff8211156155d6575f80fd5b6020019150600581901b3603821315613139575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615615575f80fd5b9190910192915050565b5f8235609e19833603018112615615575f80fd5b5f808335601e19843603018112615648575f80fd5b83018035915067ffffffffffffffff821115615662575f80fd5b6020019150600681901b3603821315613139575f80fd5b5f60808236031215615689575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ad576156ad614d49565b8160405284359150808211156156c1575f80fd5b6156cd36838701614fa5565b8352602085013560208401526040850135604084015260608501359150808211156156f6575f80fd5b5061570336828601615173565b60608301525092915050565b5f6020828403121561571f575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539657815180516001600160a01b031688528301518388015260409096019590820190600101615741565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157be610100850182614c8f565b9050604083015184820360408601526157d7828261572e565b915050606083015184820360608601526157f1828261572e565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b838110156153965781518752958201959082019060010161581b565b5f6001600160a01b03808716835260206080818501528651608080860152615863610100860182615771565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158ff57601f1988830301845284518a815116835289810151878b8501526158d388850182615808565b91890151848303858b01529190506158eb8183614c8f565b968b0196958b0195935050506001016158a5565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615936575f80fd5b83018035915067ffffffffffffffff821115615950575f80fd5b602001915036819003821315613139575f80fd5b5f8235605e19833603018112615615575f80fd5b5f6102b43683614e69565b5f60408284031215615993575f80fd5b6103bb8383614ef7565b6001600160a01b0384168152826020820152606060408201525f6153026060830184615771565b6001600160a01b0385168152836020820152606060408201525f6159ec606083018486615256565b9695505050505050565b5f6103bb36848461504f565b818103818111156102b4576102b4615580565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a5a81840187615771565b90508281036040840152615a6e8186615771565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615771565b5f60018201615ad757615ad7615580565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2957601f19868403018952615b17838351615808565b98840198925090830190600101615afb565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6f610100840182614c8f565b9050606084015160808401526080840151601f19808584030160a0860152615b978383615ade565b925060a08601519150808584030160c0860152615bb48383615808565b925060c08601519150808584030160e0860152506153028282615808565b5f82601f830112615be1575f80fd5b81516020615bf1614f4f83614ed4565b8083825260208201915060208460051b870101935086841115615c12575f80fd5b602086015b84811015614f9a5780518352918301918301615c17565b5f8060408385031215615c3f575f80fd5b825167ffffffffffffffff80821115615c56575f80fd5b818501915085601f830112615c69575f80fd5b81516020615c79614f4f83614ed4565b82815260059290921b84018101918181019089841115615c97575f80fd5b948201945b83861015615cb557855182529482019490820190615c9c565b91880151919650909350505080821115615ccd575f80fd5b50615cda85828601615bd2565b9150509250929050565b828152604060208201525f61052d6040830184615808565b6001600160a01b0383168152604060208201525f61052d6040830184615ade565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4b57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8f565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da257634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad615580565b600181815b80851115615e0857815f1904821115615dee57615dee615580565b80851615615dfb57918102915b93841c9390800290615dd3565b509250929050565b5f82615e1e575060016102b4565b81615e2a57505f6102b4565b8160018114615e405760028114615e4a57615e66565b60019150506102b4565b60ff841115615e5b57615e5b615580565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e89575081810a6102b4565b615e938383615dce565b805f1904821115615ea657615ea6615580565b029392505050565b5f6103bb8383615e10565b5f8060408385031215615eca575f80fd5b825160048110615ed8575f80fd5b602084015190925060ff81168114615eee575f80fd5b809150509250929050565b5f600160ff1b82016141d8576141d861558056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", + "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2c806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", "linkReferences": {} } } diff --git a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol index 2633c76c88..834f3f3e69 100644 --- a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x04b0da6d34aaa9b7df623ea46c7849a9e13bcff32dbb02e781b94acaab02bacf); +bytes32 constant BYTECODE_HASH = bytes32(0x02b17ab238a36ebcedee19fa5a374d6122865be8fff61bf45ad15822c8482030); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x032dE54A767125d7F72f30694044E2a8416bF554); +address constant DEPLOYED_ADDRESS = address(0xE84c106B0A89A164d2D65205B9EBAE37c15Fd84a); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b038316731115ebc9c82f074454f6ac28f123b0684a453af7146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b0383167337fc0efec37d19f8a221aa4f8f7600c9ba2acd20146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol index 3df966dc00..87e987a473 100644 --- a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol +++ b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x09617589f55317f6e41e1a1fba10d0d77996af310e5ce4d2705249fcaf3cb029); +bytes32 constant BYTECODE_HASH = bytes32(0x03cde49152f7b5e29826ea8c561481b747b86be1f5cb4136fa064be6e4ac1c0d); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x83ae30FA284da3541904dA0D58772E1d2CDAE5ea); +address constant DEPLOYED_ADDRESS = address(0x032d9D94A79909F3b337ECFE6f73f4e86bA79c7E); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f33731115ebc9c82f074454f6ac28f123b0684a453af71461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f337337fc0efec37d19f8a221aa4f8f7600c9ba2acd201461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/RaindexV6.pointers.sol b/src/generated/RaindexV6.pointers.sol index 5ad86ab3d0..838901073a 100644 --- a/src/generated/RaindexV6.pointers.sol +++ b/src/generated/RaindexV6.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xb9aa0944893a2aa695250428cee0d2e839f3794aebbc229e2070f064598c4b31); +bytes32 constant BYTECODE_HASH = bytes32(0x6dccd7018126439bb9bceec4cd37f5bcfdd5319979fbf70f9faf41450da10b6f); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x1115EBC9C82F074454F6AC28f123B0684A453aF7); +address constant DEPLOYED_ADDRESS = address(0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2e806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614929565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614991565b6102ba565b61010761013d3660046149fc565b5f9081526020819052604090205460011490565b61016461015f366004614a32565b6103c2565b005b610179610174366004614a97565b610521565b604051908152602001610113565b610107610195366004614ad5565b610535565b6101646101a8366004614a32565b610635565b6101796101bb366004614b6c565b6107c8565b6101d36101ce366004614b9d565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcf565b610fca565b61020e610209366004614c19565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c50565b6113cf565b6040516101139190614cbd565b610164610259366004614c50565b6114b5565b61017961026c366004614d1f565b61150f565b61016461027f366004615191565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9b565b6102d06020850185614b6c565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6c565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661524b565b611ab6565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153a1565b60405180910390a16103a4818585611ae5565b506103bb60015f80516020615f0e83398151915255565b9392505050565b6103ca611a9b565b3385856103d8838383611b1c565b6103e2865f611b4d565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b87565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c07565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615465565b611cf7565b5050505050505061051a60015f80516020615f0e83398151915255565b5050505050565b5f61052d848484611ec5565b949350505050565b5f61054a6001600160a01b038616878661204f565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615525565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615569565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615594565b6001600160a01b038a16929190612084565b5060019695505050505050565b61063d611a9b565b33858561064b838383611b1c565b5f8080806106598a82611b4d565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec5565b90506106a58b826120c0565b94506106b3338e8e886120dc565b90935091505f6106c4338f88612153565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615465565b50505050505050505061051a60015f80516020615f0e83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615569565b5f8061083a611a9b565b61084760808401846155a7565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4d565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b614851565b6108a361487d565b5f60405180606001604052808780608001906108bf91906155a7565b5f8181106108cf576108cf6155ed565b90506020028101906108e19190615601565b6108eb908061561f565b6108f9906040810190615633565b61090660808b018b6155a7565b5f818110610916576109166155ed565b90506020028101906109289190615601565b6020013581811061093b5761093b6155ed565b6109519260206040909202019081019150614b6c565b6001600160a01b0316815260200161096c60808901896155a7565b5f81811061097c5761097c6155ed565b905060200281019061098e9190615601565b610998908061561f565b6109a6906060810190615633565b6109b360808b018b6155a7565b5f8181106109c3576109c36155ed565b90506020028101906109d59190615601565b604001358181106109e8576109e86155ed565b6109fe9260206040909202019081019150614b6c565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a7565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a7565b905081108015610a6457506040840151610a64905f611b4d565b15610e7257610a7660808a018a6155a7565b82818110610a8657610a866155ed565b9050602002810190610a989190615601565b610aa190615679565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155ed565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155ed565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121bc565b5f610b6686611ab6565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d49565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222e565b90505f610c468c604001358360600151611b4d90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4d565b1580610cc357506060820151610cc1905f611b4d565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570f565b15610d6f576040808a015190850151610d41916120c0565b6060850151909250610d539083612733565b60408a0151909150610d659083612780565b60408a0152610dd6565b5f610d8b8560400151866060015161273390919063ffffffff16565b9050610da48a60400151826120c090919063ffffffff16565b9150610dbd8560600151836127b090919063ffffffff16565b60408b0151909350610dcf9083612780565b60408b0152505b610de08c826127e0565b9b50610dec8d836127e0565b9c50610df88285612810565b610e0281856128d1565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615837565b60405180910390a187516001018089526020028801849052610e5884612a7d565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570f565b610e8e5786610e90565b875b9050610e9d818a35612cc0565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612153565b505f9050610ee660a08a018a615921565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f615921565b6040518763ffffffff1660e01b8152600401610f3696959493929190615525565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b87565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155ed565b6020026020010151612cfa565b600101610f76565b505050505050610fc560015f80516020615f0e83398151915255565b915091565b5f610fd3611a9b565b5f61103061102b610fe48780615964565b610ff2906040810190615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0492505050565b612e75565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615633565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615633565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615964565b6110f690615978565b815260200187806020019061110b9190615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615983565b8152602001906001019061112a565b505050918352505060200161116e6040890189615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615983565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab6565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599d565b60405180910390a15f61124b60a08a018a615921565b905011156112e75761129c61126360a08a018a615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8f92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c615921565b6040516112de94939291906159c4565b60405180910390a15b6112f2828888611ae5565b93505050506103bb60015f80516020615f0e83398151915255565b5f80808061132761131e868061561f565b61032c9061524b565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561f565b6113649061524b565b866020013587604001356121bc565b5f6113b1611381878061561f565b61138a9061524b565b60208801356040890135336113a260608c018c6155a7565b6113ab916159f6565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d49565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155ed565b90506020028101906114619190615921565b8560405160200161147493929190615a15565b604051602081830303815290604052612eba565b83828151811061149a5761149a6155ed565b6020908102919091010152600101611431565b505092915050565b6114bd611a9b565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615465565b61150b60015f80516020615f0e83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615569565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a9b565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155ed565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155ed565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155ed565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155ed565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155ed565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155ed565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab6565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a85565b5f6117b286611ab6565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a85565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a38565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d49565b90505f6118ae8383612f5a565b90506118bd815f015184612810565b6118cb816020015183612810565b6118d98160400151846128d1565b6118e78160600151836128d1565b6118f083612cfa565b6118f982612cfa565b606081015181515f9161190c9190612780565b90505f61192a8360400151846020015161278090919063ffffffff16565b9050611936825f612cc0565b806119465750611946815f612cc0565b1561196457604051630d86822160e01b815260040160405180910390fd5b611998338b606001518a6020013581518110611982576119826155ed565b60200260200101515f01518a6080013585611c07565b50506119ce338a606001518a60600135815181106119b8576119b86155ed565b60200260200101515f01518a60a0013584611c07565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3783612a7d565b611a4082612a7d565b80516001600160e01b0316158015611a63575060208101516001600160e01b0316155b15611a81576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615f0e83398151915255565b611aa3612fa8565b60025f80516020615f0e83398151915255565b5f81604051602001611ac89190615ab4565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1790611b0d906104d6565b6104f88385615465565b505050565b80611b17576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7b84848484612fd9565b12979650505050505050565b5f805f611b93856130ad565b9050611b9f845f612cc0565b15611bbd57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc98684613113565b9150915080611bde57611bdb82615ac6565b91505b8115611bf957611bf96001600160a01b038816893085612084565b50925090505b935093915050565b5f80611c138382612cc0565b15611c345760405163793a8f5560e01b815260048101849052602401610316565b83611c5257611c44868685612153565b505f9250829150611cee9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c82866127e0565b9050611c98815f612cc0565b15611cb95760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611ebb57868181518110611d5e57611d5e6155ed565b602002602001015193505f845f015160400151511115611eb3575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd68d8a60200151613140565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e019190615b36565b5f60405180830381865afa158015611e1b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e429190810190615c2e565b9150505f81511115611eb15784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e83908a908590600401615ce4565b5f604051808303815f87803b158015611e9a575f80fd5b505af1158015611eac573d5f803e3d5ffd5b505050505b505b600101611d43565b5050505050505050565b5f8115611eff57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0984613422565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8191908716906370a0823190602401602060405180830381865afa158015611f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615569565b8361342e565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612000919088169063dd62ed3e90604401602060405180830381865afa158015611fd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffa9190615569565b8461342e565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120459061203f84846120c0565b906127e0565b93505050506103bb565b61205c838383600161346e565b611b1757604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120928484848460016134d0565b6120ba57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120cb8383612cc0565b6120d557816103bb565b5090919050565b5f806120e88382612cc0565b156121095760405163793a8f5560e01b815260048101849052602401610316565b8361211957611c44868685611b87565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c8286612780565b5f805f61215f856130ad565b905061216b845f612cc0565b1561218957604051632d1671a360e11b815260040160405180910390fd5b5f6121948583613113565b50905080156121b1576121b16001600160a01b038716888361204f565b969095509350505050565b826060015181815181106121d2576121d26155ed565b60200260200101515f01516001600160a01b0316836040015183815181106121fc576121fc6155ed565b60200260200101515f01516001600160a01b031603611b1757604051631cd2f1c760e21b815260040160405180910390fd5b6122366148e4565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122515790505090506122a66122748a611ab6565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122bb576122bb6155ed565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122fb576122fb6155ed565b60200260200101819052505f6123308a604001518a81518110612320576123206155ed565b60200260200101515f0151613422565b90505f6123828b5f01518c604001518c81518110612350576123506155ed565b60200260200101515f01518d604001518d81518110612371576123716155ed565b602002602001015160200151611ec5565b90506124118b604001518b8151811061239d5761239d6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cf576123cf6155ed565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612427576124276155ed565b602002602001018190525050505f61244e8a606001518981518110612320576123206155ed565b90505f61248f8b5f01518c606001518b8151811061246e5761246e6155ed565b60200260200101515f01518d606001518c81518110612371576123716155ed565b90506124dc8b606001518a815181106124aa576124aa6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cf576123cf6155ed565b836001600403815181106124f2576124f26155ed565b602002602001018190525050506125098186613140565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256987305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156125a1576125a1614d49565b6040519080825280602002602001820160405280156125ca578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125f09190615b36565b5f60405180830381865afa15801561260a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126319190810190615c2e565b9150915060028251101561265d578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126b19087906004908110612680576126806155ed565b602002602001015160038151811061269a5761269a6155ed565b6020026020010151826120c090919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e3576126e36155ed565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127638686868661353d565b915091505f612772838361365c565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136a9565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136d3565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276386868686613c10565b818160800151600481518110612828576128286155ed565b6020026020010151600481518110612842576128426155ed565b6020026020010181815250506120ba815f01515f0151826080015160048151811061286f5761286f6155ed565b60200260200101515f81518110612888576128886155ed565b60200260200101515f1c83608001516004815181106128a9576128a96155ed565b60200260200101516002815181106128c3576128c36155ed565b6020026020010151856120dc565b8181608001516003815181106128e9576128e96155ed565b6020026020010151600481518110612903576129036155ed565b6020908102919091010152805151608082015180515f9190600390811061292c5761292c6155ed565b60200260200101515f81518110612945576129456155ed565b60200260200101515f1c90505f8360800151600381518110612969576129696155ed565b6020026020010151600281518110612983576129836155ed565b602002602001015190505f801b8103612a2a576129a0855f612cc0565b156129c15760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f890866127e0565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a39565b612a3683838388611c07565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6e929190615cfc565b60405180910390a15050505050565b60c08101515115612af7578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac9929091600401615ce4565b5f604051808303815f87803b158015612ae0575f80fd5b505af1158015612af2573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4d8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8d57612b8d614d49565b604051908082528060200260200182016040528015612bb6578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be6578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c069190615b36565b5f60405180830381865afa158015612c20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c479190810190615c2e565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8f918590600401615ce4565b5f604051808303815f87803b158015612ca6575f80fd5b505af1158015612cb8573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cee84848484612fd9565b13979650505050505050565b5f8160800151600381518110612d1257612d126155ed565b6020026020010151600281518110612d2c57612d2c6155ed565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5d57612d5d6155ed565b60200260200101515f81518110612d7657612d766155ed565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dfb838383612153565b50505050505050565b6060604082511015612e2357505060408051602081019091525f815290565b5f60208301519050602060408451612e3b9190615a02565b612e459190615d31565b811115612e6157505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8557505f919050565b50602001515f1a90565b612e9881613d0e565b612eb75780604051630c89984b60e31b81526004016103169190615d50565b50565b60605f612ec78484613d3c565b9050808015612ee857505f3d1180612ee857505f846001600160a01b03163b115b15612efd57612ef5613d4f565b9150506102b4565b8015612f2757604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3a57612f35613d68565b612f53565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f878383613d73565b82526040820152612f988284613d73565b6020830152606082015292915050565b5f80516020615f0e83398151915254600203612fd757604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffe5786859250925050611cee565b505f85841315613012575092949193919260015b8386035f8112604c8213178015613045578215613037575f8994509450505050611cee565b885f94509450505050611cee565b600a82900a8981028a82828161305d5761305d615d1d565b0514613089578415613079575f8b965096505050505050611cee565b8a5f965096505050505050611cee565b841561309e578896509450611cee9350505050565b9550879450611cee9350505050565b5f805f6130b984613ddc565b909250905060018260038111156130d2576130d2615d62565b141580156130f157505f8260038111156130ee576130ee615d62565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d76565b5f806001600160e01b038416601b0b60e085901d613132828287613e69565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315d5761315d614d49565b604051908082528060200260200182016040528015613186578160200160208202803683370190505b5090505f80845111613198575f61319e565b83516001015b85516001010190505f8167ffffffffffffffff8111156131c0576131c0614d49565b6040519080825280602002602001820160405280156131f357816020015b60608152602001906001900390816131de5790505b5090505f613217604080516002815233602082015230818301526060810190915290565b828281518110613229576132296155ed565b60200260200101819052505f5b8751811015613286578180600101925050878181518110613259576132596155ed565b6020026020010151838381518110613273576132736155ed565b6020908102919091010152600101613236565b50855115613418578080600101915050838282815181106132a9576132a96155ed565b60200260200101819052505f5b8651811015613416576133658782815181106132d4576132d46155ed565b60200260200101515f01516133426133108a85815181106132f7576132f76155ed565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613354576133546155ed565b602002602001015160400151613fcf565b61338557604051630a57f30960e31b815260048101829052602401610316565b868181518110613397576133976155ed565b60200260200101515f01516001600160a01b03165f1b8582815181106133bf576133bf6155ed565b60200260200101818152505081806001019250508681815181106133e5576133e56155ed565b602002602001015160200151838381518110613403576134036155ed565b60209081029190910101526001016132b6565b505b5095945050505050565b5f805f6130b98461403f565b5f805f805f61343d878761409e565b9250925092505f8061344f85856140e1565b915091508183801561345e5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c45783831516156134b8573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352c578383151615613520573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613555575f92505f9150613652565b61355f8487615daf565b91505f61356b886141b9565b90505f613577876141b9565b90505f61358483836141e7565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135da57670de0b6b3a7640000820491506012015b633b9aca008211156135f357633b9aca00820491506009015b61271082111561360857612710820491506004015b811561361c57600a82049150600101613608565b6136268187615daf565b95506136488b8a613642878761363d87600a615eae565b614203565b896142cf565b9097509550505050505b5094509492505050565b5f805f61366985856140e1565b9150915080158015613679575081155b156136a157604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b5848461436f565b90945092506136c686868686613c10565b9150915094509492505050565b5f80835f036136ff57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361371057505f905080611cee565b5f805f8061371e8a8a6143c4565b919b509950915061372f88886143c4565b919950975090505f6137408b6141b9565b90505f61374c8a6141b9565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b115784156137a357507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae9565b6f4b3b4ca85a86c47a098a2240000000008310156138cf57678ac7230489e80000831015613833576402540be40083101561380157620186a08310156137f15750620186a090506005613aaa565b506402540be4009050600a613aaa565b655af3107a40008310156138205750655af3107a40009050600e613aaa565b50678ac7230489e8000090506013613aaa565b6b204fce5e3e250261100000008310156138855769152d02c7e14af680000083101561386e575069152d02c7e14af680000090506017613aaa565b506b204fce5e3e250261100000009050601c613aaa565b6d314dc6448d9338c15b0a000000008310156138b457506d314dc6448d9338c15b0a0000000090506021613aaa565b506f4b3b4ca85a86c47a098a22400000000090506026613aaa565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c75773af298d050e4395d69670b12b7f41000000000000831015613962577172cb5bd86321e38cb6ce6682e8000000000083101561394357507172cb5bd86321e38cb6ce6682e800000000009050602b613aaa565b5073af298d050e4395d69670b12b7f4100000000000090506030613aaa565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a3575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aaa565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aaa565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5d577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3557507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aaa565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aaa565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aaa57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abf57600a820491505f1901613aaa565b815f03613ae9576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b11576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2857808d039c50613b66565b600160ff1b9c90038c015f811315613b6657806001600160ff1b03038b13613b5357998a0199613b66565b5f80995099505050505050505050611cee565b5f808e128015613b7557505f8c135b15613b9657600160ff1b8e01808d13613b8e575f613b92565b808d035b9150505b8b818f01039750613bb38f8e613bad888789614203565b8b6142cf565b90995097505f811315613bfd57604c811315613bdd575f809a509a50505050505050505050611cee565b80600a0a8981613bef57613bef615d1d565b059850885f03613bfd575f97505b50969850949650611cee95505050505050565b5f8085158415178015613c3c57865f03613c305784849250925050611cee565b86869250925050611cee565b613c46878761461e565b9097509550613c55858561461e565b909550935085841315613c69579395929492935b838603604c811115613c82578787935093505050611cee565b80600a0a8681613c9457613c94615d1d565b0595505086850180881860ff90811c151589881890911c15168015613cfd57876001600160ff1b0303613ce45760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613d01565b8198505b5096979596505050505050565b5f600882511015613d2057505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d908460600151856040015161273390919063ffffffff16565b915083604001519050613db0836040015183611b4d90919063ffffffff16565b156131395782604001519150613dd38460600151836127b090919063ffffffff16565b90509250929050565b5f80613de6614667565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e609190615eb9565b91509150915091565b5f805f851215613e9657604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea857505f90506001611bff565b8460ff8416850185811215613eda5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2657604c19831215613efd575f809550955050505050611bff565b825f03600a0a9150818481613f1457613f14615d1d565b0495505084029091149150611bff9050565b5f831315613fbf57604d831315613f635760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7957613f79615d1d565b04841115613fad5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bff9050565b8360019550955050505050611bff565b5f836001600160a01b03163b5f0361402d575f80613fed85856146f2565b5090925090505f81600381111561400657614006615d62565b1480156140245750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614038848484614738565b90506103bb565b5f80614049614667565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3c573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140d057600a860460018201600a88065f14935093509350506140da565b8593509150600190505b9250925092565b5f601b83900b8314838382614145577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412557620186a0860595506005850194505b8586601b0b1461414057600a86059550846001019450614125565b61415b565b855f0361415b57505f9250600191506131399050565b848560030b1461419e575f85121561417b57505f92508291506131399050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141de57600160ff1b82036141d85750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61421086866141e7565b91509150815f036142345783818161422a5761422a615d1d565b04925050506103bb565b8382106142655760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561434b576001600160ff1b03841115614338576142fc6001600160ff1b036001615594565b84036143105750600160ff1b905081611cee565b61431b600a85615d31565b61432490615ef9565b61432f846001615daf565b91509150611cee565b61434184615ef9565b8391509150611cee565b6001600160ff1b0384111561436557614324600a85615d31565b5082905081611cee565b5f80600160ff1b84036143ba576001600160ff1b0383036143ad5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143dc57505f915081905060016140da565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c9576f4b3b4ca85a86c47a098a224000000000850515801561443e57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445f576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a757507f80000000000000000000000000000000000000000000000000000000000000138412155b156144c057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614522576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561457157507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458757606485029450600284039350614522565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b757506001600160ff1b018412155b156145c957600a850294506001840393505b600a808602908105861480156145e657506001600160ff1b018512155b156145f5578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462d87876143c4565b9250925092508061465b576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146be575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd7576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614729576020840151604085015160608601515f1a61471b88828585614789565b9550955095505050506140da565b505081515f91506002906140da565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c257505f91506003905082614847565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614813573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483e57505f925060019150829050614847565b92505f91508190505b9450945094915050565b604051806080016040528061486461487d565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148cb60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f761487d565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614939575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614960575f80fd5b50813567ffffffffffffffff811115614977575f80fd5b6020830191508360208260051b8501011115613139575f80fd5b5f805f604084860312156149a3575f80fd5b833567ffffffffffffffff808211156149ba575f80fd5b9085019060a082880312156149cd575f80fd5b909350602085013590808211156149e2575f80fd5b506149ef86828701614950565b9497909650939450505050565b5f60208284031215614a0c575f80fd5b5035919050565b6001600160a01b0381168114612eb7575f80fd5b80356141e281614a13565b5f805f805f60808688031215614a46575f80fd5b8535614a5181614a13565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a7a575f80fd5b614a8688828901614950565b969995985093965092949392505050565b5f805f60608486031215614aa9575f80fd5b8335614ab481614a13565b92506020840135614ac481614a13565b929592945050506040919091013590565b5f805f805f60808688031215614ae9575f80fd5b8535614af481614a13565b94506020860135614b0481614a13565b935060408601359250606086013567ffffffffffffffff80821115614b27575f80fd5b818801915088601f830112614b3a575f80fd5b813581811115614b48575f80fd5b896020828501011115614b59575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7c575f80fd5b81356103bb81614a13565b5f60c08284031215614b97575f80fd5b50919050565b5f60208284031215614bad575f80fd5b813567ffffffffffffffff811115614bc3575f80fd5b61052d84828501614b87565b5f805f60408486031215614be1575f80fd5b833567ffffffffffffffff80821115614bf8575f80fd5b614c0487838801614b87565b945060208601359150808211156149e2575f80fd5b5f60208284031215614c29575f80fd5b813567ffffffffffffffff811115614c3f575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c61575f80fd5b823567ffffffffffffffff811115614c77575f80fd5b614c8385828601614950565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1257603f19888603018452614d00858351614c8f565b94509285019290850190600101614ce4565b5092979650505050505050565b5f8060408385031215614d30575f80fd5b8235614d3b81614a13565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405160a0810167ffffffffffffffff81118282101715614d8057614d80614d49565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df557614df5614d49565b604052919050565b5f82601f830112614e0c575f80fd5b813567ffffffffffffffff811115614e2657614e26614d49565b614e39601f8201601f1916602001614dcc565b818152846020838601011115614e4d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e79575f80fd5b614e81614d5d565b90508135614e8e81614a13565b81526020820135614e9e81614a13565b6020820152604082013567ffffffffffffffff811115614ebc575f80fd5b614ec884828501614dfd565b60408301525092915050565b5f67ffffffffffffffff821115614eed57614eed614d49565b5060051b60200190565b5f60408284031215614f07575f80fd5b614f0f614d86565b90508135614f1c81614a13565b808252506020820135602082015292915050565b5f82601f830112614f3f575f80fd5b81356020614f54614f4f83614ed4565b614dcc565b8083825260208201915060208460061b870101935086841115614f75575f80fd5b602086015b84811015614f9a57614f8c8882614ef7565b835291830191604001614f7a565b509695505050505050565b5f60a08284031215614fb5575f80fd5b614fbd614da9565b9050614fc882614a27565b8152602082013567ffffffffffffffff80821115614fe4575f80fd5b614ff085838601614e69565b60208401526040840135915080821115615008575f80fd5b61501485838601614f30565b6040840152606084013591508082111561502c575f80fd5b5061503984828501614f30565b6060830152506080820135608082015292915050565b5f61505c614f4f84614ed4565b8381529050602080820190600585811b85018781111561507a575f80fd5b855b8181101561516757803567ffffffffffffffff8082111561509b575f80fd5b908801906060828c0312156150ae575f80fd5b6150b6614d5d565b82356150c181614a13565b815282870135828111156150d3575f80fd5b8301601f81018d136150e3575f80fd5b80356150f1614f4f82614ed4565b81815290881b8201890190898101908f83111561510c575f80fd5b928a01925b8284101561512a5783358252928a0192908a0190615111565b848b01525060409150508381013583811115615144575f80fd5b6151508e828701614dfd565b91830191909152508752505093830193830161507c565b50505050509392505050565b5f82601f830112615182575f80fd5b6103bb8383356020850161504f565b5f805f805f61014086880312156151a6575f80fd5b853567ffffffffffffffff808211156151bd575f80fd5b6151c989838a01614fa5565b965060208801359150808211156151de575f80fd5b6151ea89838a01614fa5565b95506151f98960408a01614b87565b945061010088013591508082111561520f575f80fd5b61521b89838a01615173565b9350610120880135915080821115615231575f80fd5b5061523e88828901615173565b9150509295509295909350565b5f6102b43683614fa5565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528a81614a13565b6001600160a01b0390811684526020830135906152a682614a13565b166020840152604082013536839003601e190181126152c3575f80fd5b820160208101903567ffffffffffffffff8111156152df575f80fd5b8036038213156152ed575f80fd5b60606040860152615302606086018284615256565b95945050505050565b5f808335601e19843603018112615320575f80fd5b830160208101925035905067ffffffffffffffff81111561533f575f80fd5b8060061b3603821315613139575f80fd5b8183525f60208085019450825f5b8581101561539657813561537181614a13565b6001600160a01b0316875281830135838801526040968701969091019060010161535e565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c781614a13565b166060830152602083013536849003605e190181126153e4575f80fd5b60a060808401526153fb610100840185830161527e565b905061540a604085018561530b565b605f19808685030160a0870152615422848385615350565b9350615431606088018861530b565b93509150808685030160c08701525061544b838383615350565b92505050608084013560e084015280915050949350505050565b5f615472614f4f84614ed4565b80848252602080830192508560051b85013681111561548f575f80fd5b855b8181101561551957803567ffffffffffffffff808211156154b0575f80fd5b8189019150604082360312156154c4575f80fd5b6154cc614d86565b8235828111156154da575f80fd5b6154e636828601614e69565b82525085830135828111156154f9575f80fd5b61550536828601615173565b828801525087525050938201938201615491565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555d60a083018486615256565b98975050505050505050565b5f60208284031215615579575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615580565b5f808335601e198436030181126155bc575f80fd5b83018035915067ffffffffffffffff8211156155d6575f80fd5b6020019150600581901b3603821315613139575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615615575f80fd5b9190910192915050565b5f8235609e19833603018112615615575f80fd5b5f808335601e19843603018112615648575f80fd5b83018035915067ffffffffffffffff821115615662575f80fd5b6020019150600681901b3603821315613139575f80fd5b5f60808236031215615689575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ad576156ad614d49565b8160405284359150808211156156c1575f80fd5b6156cd36838701614fa5565b8352602085013560208401526040850135604084015260608501359150808211156156f6575f80fd5b5061570336828601615173565b60608301525092915050565b5f6020828403121561571f575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539657815180516001600160a01b031688528301518388015260409096019590820190600101615741565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157be610100850182614c8f565b9050604083015184820360408601526157d7828261572e565b915050606083015184820360608601526157f1828261572e565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b838110156153965781518752958201959082019060010161581b565b5f6001600160a01b03808716835260206080818501528651608080860152615863610100860182615771565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158ff57601f1988830301845284518a815116835289810151878b8501526158d388850182615808565b91890151848303858b01529190506158eb8183614c8f565b968b0196958b0195935050506001016158a5565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615936575f80fd5b83018035915067ffffffffffffffff821115615950575f80fd5b602001915036819003821315613139575f80fd5b5f8235605e19833603018112615615575f80fd5b5f6102b43683614e69565b5f60408284031215615993575f80fd5b6103bb8383614ef7565b6001600160a01b0384168152826020820152606060408201525f6153026060830184615771565b6001600160a01b0385168152836020820152606060408201525f6159ec606083018486615256565b9695505050505050565b5f6103bb36848461504f565b818103818111156102b4576102b4615580565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a5a81840187615771565b90508281036040840152615a6e8186615771565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615771565b5f60018201615ad757615ad7615580565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2957601f19868403018952615b17838351615808565b98840198925090830190600101615afb565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6f610100840182614c8f565b9050606084015160808401526080840151601f19808584030160a0860152615b978383615ade565b925060a08601519150808584030160c0860152615bb48383615808565b925060c08601519150808584030160e0860152506153028282615808565b5f82601f830112615be1575f80fd5b81516020615bf1614f4f83614ed4565b8083825260208201915060208460051b870101935086841115615c12575f80fd5b602086015b84811015614f9a5780518352918301918301615c17565b5f8060408385031215615c3f575f80fd5b825167ffffffffffffffff80821115615c56575f80fd5b818501915085601f830112615c69575f80fd5b81516020615c79614f4f83614ed4565b82815260059290921b84018101918181019089841115615c97575f80fd5b948201945b83861015615cb557855182529482019490820190615c9c565b91880151919650909350505080821115615ccd575f80fd5b50615cda85828601615bd2565b9150509250929050565b828152604060208201525f61052d6040830184615808565b6001600160a01b0383168152604060208201525f61052d6040830184615ade565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4b57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8f565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da257634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad615580565b600181815b80851115615e0857815f1904821115615dee57615dee615580565b80851615615dfb57918102915b93841c9390800290615dd3565b509250929050565b5f82615e1e575060016102b4565b81615e2a57505f6102b4565b8160018114615e405760028114615e4a57615e66565b60019150506102b4565b60ff841115615e5b57615e5b615580565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e89575081810a6102b4565b615e938383615dce565b805f1904821115615ea657615ea6615580565b029392505050565b5f6103bb8383615e10565b5f8060408385031215615eca575f80fd5b825160048110615ed8575f80fd5b602084015190925060ff81168114615eee575f80fd5b809150509250929050565b5f600160ff1b82016141d8576141d861558056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2c806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614929565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614991565b6102ba565b61010761013d3660046149fc565b5f9081526020819052604090205460011490565b61016461015f366004614a32565b6103c2565b005b610179610174366004614a97565b610521565b604051908152602001610113565b610107610195366004614ad5565b610535565b6101646101a8366004614a32565b610635565b6101796101bb366004614b6c565b6107c8565b6101d36101ce366004614b9d565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcf565b610fca565b61020e610209366004614c19565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c50565b6113cf565b6040516101139190614cbd565b610164610259366004614c50565b6114b5565b61017961026c366004614d1f565b61150f565b61016461027f366004615191565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9b565b6102d06020850185614b6c565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6c565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661524b565b611ab6565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153a1565b60405180910390a16103a4818585611ae5565b506103bb60015f80516020615f0e83398151915255565b9392505050565b6103ca611a9b565b3385856103d8838383611b1c565b6103e2865f611b4d565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b87565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c07565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615465565b611cf7565b5050505050505061051a60015f80516020615f0e83398151915255565b5050505050565b5f61052d848484611ec5565b949350505050565b5f61054a6001600160a01b038616878661204f565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615525565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615569565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615594565b6001600160a01b038a16929190612084565b5060019695505050505050565b61063d611a9b565b33858561064b838383611b1c565b5f8080806106598a82611b4d565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec5565b90506106a58b826120c0565b94506106b3338e8e886120dc565b90935091505f6106c4338f88612153565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615465565b50505050505050505061051a60015f80516020615f0e83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615569565b5f8061083a611a9b565b61084760808401846155a7565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4d565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b614851565b6108a361487d565b5f60405180606001604052808780608001906108bf91906155a7565b5f8181106108cf576108cf6155ed565b90506020028101906108e19190615601565b6108eb908061561f565b6108f9906040810190615633565b61090660808b018b6155a7565b5f818110610916576109166155ed565b90506020028101906109289190615601565b6020013581811061093b5761093b6155ed565b6109519260206040909202019081019150614b6c565b6001600160a01b0316815260200161096c60808901896155a7565b5f81811061097c5761097c6155ed565b905060200281019061098e9190615601565b610998908061561f565b6109a6906060810190615633565b6109b360808b018b6155a7565b5f8181106109c3576109c36155ed565b90506020028101906109d59190615601565b604001358181106109e8576109e86155ed565b6109fe9260206040909202019081019150614b6c565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a7565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a7565b905081108015610a6457506040840151610a64905f611b4d565b15610e7257610a7660808a018a6155a7565b82818110610a8657610a866155ed565b9050602002810190610a989190615601565b610aa190615679565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155ed565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155ed565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121bc565b5f610b6686611ab6565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d49565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222e565b90505f610c468c604001358360600151611b4d90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4d565b1580610cc357506060820151610cc1905f611b4d565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570f565b15610d6f576040808a015190850151610d41916120c0565b6060850151909250610d539083612733565b60408a0151909150610d659083612780565b60408a0152610dd6565b5f610d8b8560400151866060015161273390919063ffffffff16565b9050610da48a60400151826120c090919063ffffffff16565b9150610dbd8560600151836127b090919063ffffffff16565b60408b0151909350610dcf9083612780565b60408b0152505b610de08c826127e0565b9b50610dec8d836127e0565b9c50610df88285612810565b610e0281856128d1565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615837565b60405180910390a187516001018089526020028801849052610e5884612a7d565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570f565b610e8e5786610e90565b875b9050610e9d818a35612cc0565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612153565b505f9050610ee660a08a018a615921565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f615921565b6040518763ffffffff1660e01b8152600401610f3696959493929190615525565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b87565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155ed565b6020026020010151612cfa565b600101610f76565b505050505050610fc560015f80516020615f0e83398151915255565b915091565b5f610fd3611a9b565b5f61103061102b610fe48780615964565b610ff2906040810190615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0492505050565b612e75565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615633565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615633565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615964565b6110f690615978565b815260200187806020019061110b9190615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615983565b8152602001906001019061112a565b505050918352505060200161116e6040890189615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615983565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab6565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599d565b60405180910390a15f61124b60a08a018a615921565b905011156112e75761129c61126360a08a018a615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8f92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c615921565b6040516112de94939291906159c4565b60405180910390a15b6112f2828888611ae5565b93505050506103bb60015f80516020615f0e83398151915255565b5f80808061132761131e868061561f565b61032c9061524b565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561f565b6113649061524b565b866020013587604001356121bc565b5f6113b1611381878061561f565b61138a9061524b565b60208801356040890135336113a260608c018c6155a7565b6113ab916159f6565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d49565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155ed565b90506020028101906114619190615921565b8560405160200161147493929190615a15565b604051602081830303815290604052612eba565b83828151811061149a5761149a6155ed565b6020908102919091010152600101611431565b505092915050565b6114bd611a9b565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615465565b61150b60015f80516020615f0e83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615569565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a9b565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155ed565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155ed565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155ed565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155ed565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155ed565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155ed565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab6565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a85565b5f6117b286611ab6565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a85565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a38565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d49565b90505f6118ae8383612f5a565b90506118bd815f015184612810565b6118cb816020015183612810565b6118d98160400151846128d1565b6118e78160600151836128d1565b6118f083612cfa565b6118f982612cfa565b606081015181515f9161190c9190612780565b90505f61192a8360400151846020015161278090919063ffffffff16565b9050611936825f612cc0565b806119465750611946815f612cc0565b1561196457604051630d86822160e01b815260040160405180910390fd5b611998338b606001518a6020013581518110611982576119826155ed565b60200260200101515f01518a6080013585611c07565b50506119ce338a606001518a60600135815181106119b8576119b86155ed565b60200260200101515f01518a60a0013584611c07565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3783612a7d565b611a4082612a7d565b80516001600160e01b0316158015611a63575060208101516001600160e01b0316155b15611a81576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615f0e83398151915255565b611aa3612fa8565b60025f80516020615f0e83398151915255565b5f81604051602001611ac89190615ab4565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1790611b0d906104d6565b6104f88385615465565b505050565b80611b17576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7b84848484612fd9565b12979650505050505050565b5f805f611b93856130ad565b9050611b9f845f612cc0565b15611bbd57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc98684613113565b9150915080611bde57611bdb82615ac6565b91505b8115611bf957611bf96001600160a01b038816893085612084565b50925090505b935093915050565b5f80611c138382612cc0565b15611c345760405163793a8f5560e01b815260048101849052602401610316565b83611c5257611c44868685612153565b505f9250829150611cee9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c82866127e0565b9050611c98815f612cc0565b15611cb95760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611ebb57868181518110611d5e57611d5e6155ed565b602002602001015193505f845f015160400151511115611eb3575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd68d8a60200151613140565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e019190615b36565b5f60405180830381865afa158015611e1b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e429190810190615c2e565b9150505f81511115611eb15784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e83908a908590600401615ce4565b5f604051808303815f87803b158015611e9a575f80fd5b505af1158015611eac573d5f803e3d5ffd5b505050505b505b600101611d43565b5050505050505050565b5f8115611eff57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0984613422565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8191908716906370a0823190602401602060405180830381865afa158015611f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615569565b8361342e565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612000919088169063dd62ed3e90604401602060405180830381865afa158015611fd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffa9190615569565b8461342e565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120459061203f84846120c0565b906127e0565b93505050506103bb565b61205c838383600161346e565b611b1757604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120928484848460016134d0565b6120ba57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120cb8383612cc0565b6120d557816103bb565b5090919050565b5f806120e88382612cc0565b156121095760405163793a8f5560e01b815260048101849052602401610316565b8361211957611c44868685611b87565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c8286612780565b5f805f61215f856130ad565b905061216b845f612cc0565b1561218957604051632d1671a360e11b815260040160405180910390fd5b5f6121948583613113565b50905080156121b1576121b16001600160a01b038716888361204f565b969095509350505050565b826060015181815181106121d2576121d26155ed565b60200260200101515f01516001600160a01b0316836040015183815181106121fc576121fc6155ed565b60200260200101515f01516001600160a01b031603611b1757604051631cd2f1c760e21b815260040160405180910390fd5b6122366148e4565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122515790505090506122a66122748a611ab6565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122bb576122bb6155ed565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122fb576122fb6155ed565b60200260200101819052505f6123308a604001518a81518110612320576123206155ed565b60200260200101515f0151613422565b90505f6123828b5f01518c604001518c81518110612350576123506155ed565b60200260200101515f01518d604001518d81518110612371576123716155ed565b602002602001015160200151611ec5565b90506124118b604001518b8151811061239d5761239d6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cf576123cf6155ed565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612427576124276155ed565b602002602001018190525050505f61244e8a606001518981518110612320576123206155ed565b90505f61248f8b5f01518c606001518b8151811061246e5761246e6155ed565b60200260200101515f01518d606001518c81518110612371576123716155ed565b90506124dc8b606001518a815181106124aa576124aa6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cf576123cf6155ed565b836001600403815181106124f2576124f26155ed565b602002602001018190525050506125098186613140565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256987305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156125a1576125a1614d49565b6040519080825280602002602001820160405280156125ca578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125f09190615b36565b5f60405180830381865afa15801561260a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126319190810190615c2e565b9150915060028251101561265d578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126b19087906004908110612680576126806155ed565b602002602001015160038151811061269a5761269a6155ed565b6020026020010151826120c090919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e3576126e36155ed565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127638686868661353d565b915091505f612772838361365c565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136a9565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136d3565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276386868686613c10565b818160800151600481518110612828576128286155ed565b6020026020010151600481518110612842576128426155ed565b6020026020010181815250506120ba815f01515f0151826080015160048151811061286f5761286f6155ed565b60200260200101515f81518110612888576128886155ed565b60200260200101515f1c83608001516004815181106128a9576128a96155ed565b60200260200101516002815181106128c3576128c36155ed565b6020026020010151856120dc565b8181608001516003815181106128e9576128e96155ed565b6020026020010151600481518110612903576129036155ed565b6020908102919091010152805151608082015180515f9190600390811061292c5761292c6155ed565b60200260200101515f81518110612945576129456155ed565b60200260200101515f1c90505f8360800151600381518110612969576129696155ed565b6020026020010151600281518110612983576129836155ed565b602002602001015190505f801b8103612a2a576129a0855f612cc0565b156129c15760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f890866127e0565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a39565b612a3683838388611c07565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6e929190615cfc565b60405180910390a15050505050565b60c08101515115612af7578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac9929091600401615ce4565b5f604051808303815f87803b158015612ae0575f80fd5b505af1158015612af2573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4d8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8d57612b8d614d49565b604051908082528060200260200182016040528015612bb6578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be6578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c069190615b36565b5f60405180830381865afa158015612c20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c479190810190615c2e565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8f918590600401615ce4565b5f604051808303815f87803b158015612ca6575f80fd5b505af1158015612cb8573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cee84848484612fd9565b13979650505050505050565b5f8160800151600381518110612d1257612d126155ed565b6020026020010151600281518110612d2c57612d2c6155ed565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5d57612d5d6155ed565b60200260200101515f81518110612d7657612d766155ed565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dfb838383612153565b50505050505050565b6060604082511015612e2357505060408051602081019091525f815290565b5f60208301519050602060408451612e3b9190615a02565b612e459190615d31565b811115612e6157505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8557505f919050565b50602001515f1a90565b612e9881613d0e565b612eb75780604051630c89984b60e31b81526004016103169190615d50565b50565b60605f612ec78484613d3c565b9050808015612ee857505f3d1180612ee857505f846001600160a01b03163b115b15612efd57612ef5613d4f565b9150506102b4565b8015612f2757604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3a57612f35613d68565b612f53565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f878383613d73565b82526040820152612f988284613d73565b6020830152606082015292915050565b5f80516020615f0e83398151915254600203612fd757604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffe5786859250925050611cee565b505f85841315613012575092949193919260015b8386035f8112604c8213178015613045578215613037575f8994509450505050611cee565b885f94509450505050611cee565b600a82900a8981028a82828161305d5761305d615d1d565b0514613089578415613079575f8b965096505050505050611cee565b8a5f965096505050505050611cee565b841561309e578896509450611cee9350505050565b9550879450611cee9350505050565b5f805f6130b984613ddc565b909250905060018260038111156130d2576130d2615d62565b141580156130f157505f8260038111156130ee576130ee615d62565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d76565b5f806001600160e01b038416601b0b60e085901d613132828287613e69565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315d5761315d614d49565b604051908082528060200260200182016040528015613186578160200160208202803683370190505b5090505f80845111613198575f61319e565b83516001015b85516001010190505f8167ffffffffffffffff8111156131c0576131c0614d49565b6040519080825280602002602001820160405280156131f357816020015b60608152602001906001900390816131de5790505b5090505f613217604080516002815233602082015230818301526060810190915290565b828281518110613229576132296155ed565b60200260200101819052505f5b8751811015613286578180600101925050878181518110613259576132596155ed565b6020026020010151838381518110613273576132736155ed565b6020908102919091010152600101613236565b50855115613418578080600101915050838282815181106132a9576132a96155ed565b60200260200101819052505f5b8651811015613416576133658782815181106132d4576132d46155ed565b60200260200101515f01516133426133108a85815181106132f7576132f76155ed565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613354576133546155ed565b602002602001015160400151613fcf565b61338557604051630a57f30960e31b815260048101829052602401610316565b868181518110613397576133976155ed565b60200260200101515f01516001600160a01b03165f1b8582815181106133bf576133bf6155ed565b60200260200101818152505081806001019250508681815181106133e5576133e56155ed565b602002602001015160200151838381518110613403576134036155ed565b60209081029190910101526001016132b6565b505b5095945050505050565b5f805f6130b98461403f565b5f805f805f61343d878761409e565b9250925092505f8061344f85856140e1565b915091508183801561345e5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c45783831516156134b8573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352c578383151615613520573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613555575f92505f9150613652565b61355f8487615daf565b91505f61356b886141b9565b90505f613577876141b9565b90505f61358483836141e7565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135da57670de0b6b3a7640000820491506012015b633b9aca008211156135f357633b9aca00820491506009015b61271082111561360857612710820491506004015b811561361c57600a82049150600101613608565b6136268187615daf565b95506136488b8a613642878761363d87600a615eae565b614203565b896142cf565b9097509550505050505b5094509492505050565b5f805f61366985856140e1565b9150915080158015613679575081155b156136a157604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b5848461436f565b90945092506136c686868686613c10565b9150915094509492505050565b5f80835f036136ff57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361371057505f905080611cee565b5f805f8061371e8a8a6143c4565b919b509950915061372f88886143c4565b919950975090505f6137408b6141b9565b90505f61374c8a6141b9565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b115784156137a357507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae9565b6f4b3b4ca85a86c47a098a2240000000008310156138cf57678ac7230489e80000831015613833576402540be40083101561380157620186a08310156137f15750620186a090506005613aaa565b506402540be4009050600a613aaa565b655af3107a40008310156138205750655af3107a40009050600e613aaa565b50678ac7230489e8000090506013613aaa565b6b204fce5e3e250261100000008310156138855769152d02c7e14af680000083101561386e575069152d02c7e14af680000090506017613aaa565b506b204fce5e3e250261100000009050601c613aaa565b6d314dc6448d9338c15b0a000000008310156138b457506d314dc6448d9338c15b0a0000000090506021613aaa565b506f4b3b4ca85a86c47a098a22400000000090506026613aaa565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c75773af298d050e4395d69670b12b7f41000000000000831015613962577172cb5bd86321e38cb6ce6682e8000000000083101561394357507172cb5bd86321e38cb6ce6682e800000000009050602b613aaa565b5073af298d050e4395d69670b12b7f4100000000000090506030613aaa565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a3575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aaa565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aaa565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5d577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3557507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aaa565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aaa565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aaa57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abf57600a820491505f1901613aaa565b815f03613ae9576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b11576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2857808d039c50613b66565b600160ff1b9c90038c015f811315613b6657806001600160ff1b03038b13613b5357998a0199613b66565b5f80995099505050505050505050611cee565b5f808e128015613b7557505f8c135b15613b9657600160ff1b8e01808d13613b8e575f613b92565b808d035b9150505b8b818f01039750613bb38f8e613bad888789614203565b8b6142cf565b90995097505f811315613bfd57604c811315613bdd575f809a509a50505050505050505050611cee565b80600a0a8981613bef57613bef615d1d565b059850885f03613bfd575f97505b50969850949650611cee95505050505050565b5f8085158415178015613c3c57865f03613c305784849250925050611cee565b86869250925050611cee565b613c46878761461e565b9097509550613c55858561461e565b909550935085841315613c69579395929492935b838603604c811115613c82578787935093505050611cee565b80600a0a8681613c9457613c94615d1d565b0595505086850180881860ff90811c151589881890911c15168015613cfd57876001600160ff1b0303613ce45760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613d01565b8198505b5096979596505050505050565b5f600882511015613d2057505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d908460600151856040015161273390919063ffffffff16565b915083604001519050613db0836040015183611b4d90919063ffffffff16565b156131395782604001519150613dd38460600151836127b090919063ffffffff16565b90509250929050565b5f80613de6614667565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e609190615eb9565b91509150915091565b5f805f851215613e9657604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea857505f90506001611bff565b8460ff8416850185811215613eda5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2657604c19831215613efd575f809550955050505050611bff565b825f03600a0a9150818481613f1457613f14615d1d565b0495505084029091149150611bff9050565b5f831315613fbf57604d831315613f635760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7957613f79615d1d565b04841115613fad5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bff9050565b8360019550955050505050611bff565b5f836001600160a01b03163b5f0361402d575f80613fed85856146f2565b5090925090505f81600381111561400657614006615d62565b1480156140245750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614038848484614738565b90506103bb565b5f80614049614667565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3c573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140d057600a860460018201600a88065f14935093509350506140da565b8593509150600190505b9250925092565b5f601b83900b8314838382614145577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412557620186a0860595506005850194505b8586601b0b1461414057600a86059550846001019450614125565b61415b565b855f0361415b57505f9250600191506131399050565b848560030b1461419e575f85121561417b57505f92508291506131399050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141de57600160ff1b82036141d85750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61421086866141e7565b91509150815f036142345783818161422a5761422a615d1d565b04925050506103bb565b8382106142655760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561434b576001600160ff1b03841115614338576142fc6001600160ff1b036001615594565b84036143105750600160ff1b905081611cee565b61431b600a85615d31565b61432490615ef9565b61432f846001615daf565b91509150611cee565b61434184615ef9565b8391509150611cee565b6001600160ff1b0384111561436557614324600a85615d31565b5082905081611cee565b5f80600160ff1b84036143ba576001600160ff1b0383036143ad5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143dc57505f915081905060016140da565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c9576f4b3b4ca85a86c47a098a224000000000850515801561443e57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445f576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a757507f80000000000000000000000000000000000000000000000000000000000000138412155b156144c057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614522576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561457157507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458757606485029450600284039350614522565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b757506001600160ff1b018412155b156145c957600a850294506001840393505b600a808602908105861480156145e657506001600160ff1b018512155b156145f5578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462d87876143c4565b9250925092508061465b576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146be575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd7576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614729576020840151604085015160608601515f1a61471b88828585614789565b9550955095505050506140da565b505081515f91506002906140da565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c257505f91506003905082614847565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614813573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483e57505f925060019150829050614847565b92505f91508190505b9450945094915050565b604051806080016040528061486461487d565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148cb60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f761487d565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614939575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614960575f80fd5b50813567ffffffffffffffff811115614977575f80fd5b6020830191508360208260051b8501011115613139575f80fd5b5f805f604084860312156149a3575f80fd5b833567ffffffffffffffff808211156149ba575f80fd5b9085019060a082880312156149cd575f80fd5b909350602085013590808211156149e2575f80fd5b506149ef86828701614950565b9497909650939450505050565b5f60208284031215614a0c575f80fd5b5035919050565b6001600160a01b0381168114612eb7575f80fd5b80356141e281614a13565b5f805f805f60808688031215614a46575f80fd5b8535614a5181614a13565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a7a575f80fd5b614a8688828901614950565b969995985093965092949392505050565b5f805f60608486031215614aa9575f80fd5b8335614ab481614a13565b92506020840135614ac481614a13565b929592945050506040919091013590565b5f805f805f60808688031215614ae9575f80fd5b8535614af481614a13565b94506020860135614b0481614a13565b935060408601359250606086013567ffffffffffffffff80821115614b27575f80fd5b818801915088601f830112614b3a575f80fd5b813581811115614b48575f80fd5b896020828501011115614b59575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7c575f80fd5b81356103bb81614a13565b5f60c08284031215614b97575f80fd5b50919050565b5f60208284031215614bad575f80fd5b813567ffffffffffffffff811115614bc3575f80fd5b61052d84828501614b87565b5f805f60408486031215614be1575f80fd5b833567ffffffffffffffff80821115614bf8575f80fd5b614c0487838801614b87565b945060208601359150808211156149e2575f80fd5b5f60208284031215614c29575f80fd5b813567ffffffffffffffff811115614c3f575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c61575f80fd5b823567ffffffffffffffff811115614c77575f80fd5b614c8385828601614950565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1257603f19888603018452614d00858351614c8f565b94509285019290850190600101614ce4565b5092979650505050505050565b5f8060408385031215614d30575f80fd5b8235614d3b81614a13565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405160a0810167ffffffffffffffff81118282101715614d8057614d80614d49565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df557614df5614d49565b604052919050565b5f82601f830112614e0c575f80fd5b813567ffffffffffffffff811115614e2657614e26614d49565b614e39601f8201601f1916602001614dcc565b818152846020838601011115614e4d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e79575f80fd5b614e81614d5d565b90508135614e8e81614a13565b81526020820135614e9e81614a13565b6020820152604082013567ffffffffffffffff811115614ebc575f80fd5b614ec884828501614dfd565b60408301525092915050565b5f67ffffffffffffffff821115614eed57614eed614d49565b5060051b60200190565b5f60408284031215614f07575f80fd5b614f0f614d86565b90508135614f1c81614a13565b808252506020820135602082015292915050565b5f82601f830112614f3f575f80fd5b81356020614f54614f4f83614ed4565b614dcc565b8083825260208201915060208460061b870101935086841115614f75575f80fd5b602086015b84811015614f9a57614f8c8882614ef7565b835291830191604001614f7a565b509695505050505050565b5f60a08284031215614fb5575f80fd5b614fbd614da9565b9050614fc882614a27565b8152602082013567ffffffffffffffff80821115614fe4575f80fd5b614ff085838601614e69565b60208401526040840135915080821115615008575f80fd5b61501485838601614f30565b6040840152606084013591508082111561502c575f80fd5b5061503984828501614f30565b6060830152506080820135608082015292915050565b5f61505c614f4f84614ed4565b8381529050602080820190600585811b85018781111561507a575f80fd5b855b8181101561516757803567ffffffffffffffff8082111561509b575f80fd5b908801906060828c0312156150ae575f80fd5b6150b6614d5d565b82356150c181614a13565b815282870135828111156150d3575f80fd5b8301601f81018d136150e3575f80fd5b80356150f1614f4f82614ed4565b81815290881b8201890190898101908f83111561510c575f80fd5b928a01925b8284101561512a5783358252928a0192908a0190615111565b848b01525060409150508381013583811115615144575f80fd5b6151508e828701614dfd565b91830191909152508752505093830193830161507c565b50505050509392505050565b5f82601f830112615182575f80fd5b6103bb8383356020850161504f565b5f805f805f61014086880312156151a6575f80fd5b853567ffffffffffffffff808211156151bd575f80fd5b6151c989838a01614fa5565b965060208801359150808211156151de575f80fd5b6151ea89838a01614fa5565b95506151f98960408a01614b87565b945061010088013591508082111561520f575f80fd5b61521b89838a01615173565b9350610120880135915080821115615231575f80fd5b5061523e88828901615173565b9150509295509295909350565b5f6102b43683614fa5565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528a81614a13565b6001600160a01b0390811684526020830135906152a682614a13565b166020840152604082013536839003601e190181126152c3575f80fd5b820160208101903567ffffffffffffffff8111156152df575f80fd5b8036038213156152ed575f80fd5b60606040860152615302606086018284615256565b95945050505050565b5f808335601e19843603018112615320575f80fd5b830160208101925035905067ffffffffffffffff81111561533f575f80fd5b8060061b3603821315613139575f80fd5b8183525f60208085019450825f5b8581101561539657813561537181614a13565b6001600160a01b0316875281830135838801526040968701969091019060010161535e565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c781614a13565b166060830152602083013536849003605e190181126153e4575f80fd5b60a060808401526153fb610100840185830161527e565b905061540a604085018561530b565b605f19808685030160a0870152615422848385615350565b9350615431606088018861530b565b93509150808685030160c08701525061544b838383615350565b92505050608084013560e084015280915050949350505050565b5f615472614f4f84614ed4565b80848252602080830192508560051b85013681111561548f575f80fd5b855b8181101561551957803567ffffffffffffffff808211156154b0575f80fd5b8189019150604082360312156154c4575f80fd5b6154cc614d86565b8235828111156154da575f80fd5b6154e636828601614e69565b82525085830135828111156154f9575f80fd5b61550536828601615173565b828801525087525050938201938201615491565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555d60a083018486615256565b98975050505050505050565b5f60208284031215615579575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615580565b5f808335601e198436030181126155bc575f80fd5b83018035915067ffffffffffffffff8211156155d6575f80fd5b6020019150600581901b3603821315613139575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615615575f80fd5b9190910192915050565b5f8235609e19833603018112615615575f80fd5b5f808335601e19843603018112615648575f80fd5b83018035915067ffffffffffffffff821115615662575f80fd5b6020019150600681901b3603821315613139575f80fd5b5f60808236031215615689575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ad576156ad614d49565b8160405284359150808211156156c1575f80fd5b6156cd36838701614fa5565b8352602085013560208401526040850135604084015260608501359150808211156156f6575f80fd5b5061570336828601615173565b60608301525092915050565b5f6020828403121561571f575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539657815180516001600160a01b031688528301518388015260409096019590820190600101615741565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157be610100850182614c8f565b9050604083015184820360408601526157d7828261572e565b915050606083015184820360608601526157f1828261572e565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b838110156153965781518752958201959082019060010161581b565b5f6001600160a01b03808716835260206080818501528651608080860152615863610100860182615771565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158ff57601f1988830301845284518a815116835289810151878b8501526158d388850182615808565b91890151848303858b01529190506158eb8183614c8f565b968b0196958b0195935050506001016158a5565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615936575f80fd5b83018035915067ffffffffffffffff821115615950575f80fd5b602001915036819003821315613139575f80fd5b5f8235605e19833603018112615615575f80fd5b5f6102b43683614e69565b5f60408284031215615993575f80fd5b6103bb8383614ef7565b6001600160a01b0384168152826020820152606060408201525f6153026060830184615771565b6001600160a01b0385168152836020820152606060408201525f6159ec606083018486615256565b9695505050505050565b5f6103bb36848461504f565b818103818111156102b4576102b4615580565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a5a81840187615771565b90508281036040840152615a6e8186615771565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615771565b5f60018201615ad757615ad7615580565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2957601f19868403018952615b17838351615808565b98840198925090830190600101615afb565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6f610100840182614c8f565b9050606084015160808401526080840151601f19808584030160a0860152615b978383615ade565b925060a08601519150808584030160c0860152615bb48383615808565b925060c08601519150808584030160e0860152506153028282615808565b5f82601f830112615be1575f80fd5b81516020615bf1614f4f83614ed4565b8083825260208201915060208460051b870101935086841115615c12575f80fd5b602086015b84811015614f9a5780518352918301918301615c17565b5f8060408385031215615c3f575f80fd5b825167ffffffffffffffff80821115615c56575f80fd5b818501915085601f830112615c69575f80fd5b81516020615c79614f4f83614ed4565b82815260059290921b84018101918181019089841115615c97575f80fd5b948201945b83861015615cb557855182529482019490820190615c9c565b91880151919650909350505080821115615ccd575f80fd5b50615cda85828601615bd2565b9150509250929050565b828152604060208201525f61052d6040830184615808565b6001600160a01b0383168152604060208201525f61052d6040830184615ade565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4b57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8f565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da257634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad615580565b600181815b80851115615e0857815f1904821115615dee57615dee615580565b80851615615dfb57918102915b93841c9390800290615dd3565b509250929050565b5f82615e1e575060016102b4565b81615e2a57505f6102b4565b8160018114615e405760028114615e4a57615e66565b60019150506102b4565b60ff841115615e5b57615e5b615580565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e89575081810a6102b4565b615e938383615dce565b805f1904821115615ea657615ea6615580565b029392505050565b5f6103bb8383615e10565b5f8060408385031215615eca575f80fd5b825160048110615ed8575f80fd5b602084015190925060ff81168114615eee575f80fd5b809150509250929050565b5f600160ff1b82016141d8576141d861558056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; diff --git a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol index 35d4a685ee..0770cc5a62 100644 --- a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x14f012211cd8e3e0f07777b5e93f1f441a80bbeb8845b762913d7b9362ba71f6); +bytes32 constant BYTECODE_HASH = bytes32(0x9a0d64fd312dc16761f28a7e13e48a8e8ad2f0ba5995c16710514e7524f43ee2); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xA24Db2268976817aed62186AD7EF6084a66683C8); +address constant DEPLOYED_ADDRESS = address(0x1350420cbf3E9eb8F1734bbe466e0F303579eE24); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b038316731115ebc9c82f074454f6ac28f123b0684a453af7146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b0383167337fc0efec37d19f8a221aa4f8f7600c9ba2acd20146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; From 8af69fc9d4221e93acf56eb14f1117c0a851c7c4 Mon Sep 17 00:00:00 2001 From: David Meister Date: Mon, 15 Jun 2026 23:19:19 +0000 Subject: [PATCH 4/4] clear3: refresh start-block bookkeeping + pin 0.1.12 deploy constants After deploying the redeployed RaindexV6 (clear3 NegativeBounty guard hoist) and the three dependent arb/flash-borrower takers to all five chains, refresh the RaindexV6 deploy-block bookkeeping (RAINDEX_START_BLOCK_* + subgraph/networks.json + subgraph/subgraph.yaml) to the new address 0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20, and pre-pin the 0.1.12 deploy-constant suite (address + codehash for all six deployed contracts) that #2732 publishes on merge, so testAllPublishedSoldeerTagsHaveAFullConstantSuite stays green when autopublish lands 0.1.12. Co-Authored-By: Claude Opus 4.8 --- src/lib/deploy/LibRaindexDeploy.sol | 67 +++++++++++++++++++++++++++-- subgraph/networks.json | 16 +++---- subgraph/subgraph.yaml | 2 +- 3 files changed, 72 insertions(+), 13 deletions(-) diff --git a/src/lib/deploy/LibRaindexDeploy.sol b/src/lib/deploy/LibRaindexDeploy.sol index 11aff77069..b37c8c7975 100644 --- a/src/lib/deploy/LibRaindexDeploy.sol +++ b/src/lib/deploy/LibRaindexDeploy.sol @@ -142,6 +142,16 @@ library LibRaindexDeploy { bytes32 constant RAINDEX_DEPLOYED_CODEHASH_0_1_11 = 0xb9aa0944893a2aa695250428cee0d2e839f3794aebbc229e2070f064598c4b31; + /// The deployed address of the `RaindexV6` contract at the published `0.1.12` + /// tag. (Changed in 0.1.12 — clear3 NegativeBounty guard hoisted ahead of any + /// vault settlement.) + address constant RAINDEX_DEPLOYED_ADDRESS_0_1_12 = 0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20; + + /// The runtime code hash of the `RaindexV6` contract at the published `0.1.12` + /// tag. + bytes32 constant RAINDEX_DEPLOYED_CODEHASH_0_1_12 = + 0x6dccd7018126439bb9bceec4cd37f5bcfdd5319979fbf70f9faf41450da10b6f; + /// The address of the `RaindexV6SubParser` contract when deployed with /// the rain standard zoltu deployer. address constant SUB_PARSER_DEPLOYED_ADDRESS = SUB_PARSER_ADDR; @@ -249,6 +259,15 @@ library LibRaindexDeploy { bytes32 constant SUB_PARSER_DEPLOYED_CODEHASH_0_1_11 = 0x704aadc1ed56f63ff918ab219e6681a5d2851d774e2ee136bbe7904ea3b2fdcd; + /// The deployed address of the `RaindexV6SubParser` contract at the published + /// `0.1.12` tag. (Unchanged since 0.1.11.) + address constant SUB_PARSER_DEPLOYED_ADDRESS_0_1_12 = 0x09Bc7AF266012F44fb41D8Bd682da931666605e1; + + /// The runtime code hash of the `RaindexV6SubParser` contract at the + /// published `0.1.12` tag. + bytes32 constant SUB_PARSER_DEPLOYED_CODEHASH_0_1_12 = + 0x704aadc1ed56f63ff918ab219e6681a5d2851d774e2ee136bbe7904ea3b2fdcd; + /// The address of the `RouteProcessor4` contract when deployed with the /// rain standard zoltu deployer. address constant ROUTE_PROCESSOR_DEPLOYED_ADDRESS = ROUTE_PROCESSOR_ADDR; @@ -356,6 +375,15 @@ library LibRaindexDeploy { bytes32 constant ROUTE_PROCESSOR_DEPLOYED_CODEHASH_0_1_11 = 0xeb3745a79c6ba48e8767b9c355b8e7b79f9d6edeca004e4bb91be4de515a7eeb; + /// The deployed address of the `RouteProcessor4` contract at the published + /// `0.1.12` tag. (Unchanged since 0.1.11.) + address constant ROUTE_PROCESSOR_DEPLOYED_ADDRESS_0_1_12 = 0x6E2d0e71d900474b262E545Bc4C98b71ab368d21; + + /// The runtime code hash of the `RouteProcessor4` contract at the published + /// `0.1.12` tag. + bytes32 constant ROUTE_PROCESSOR_DEPLOYED_CODEHASH_0_1_12 = + 0xeb3745a79c6ba48e8767b9c355b8e7b79f9d6edeca004e4bb91be4de515a7eeb; + /// The address of the `GenericPoolRaindexV6ArbOrderTaker` contract when /// deployed with the rain standard zoltu deployer. address constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_ADDRESS = GENERIC_POOL_ARB_OT_ADDR; @@ -468,6 +496,16 @@ library LibRaindexDeploy { bytes32 constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_11 = 0x04b0da6d34aaa9b7df623ea46c7849a9e13bcff32dbb02e781b94acaab02bacf; + /// The deployed address of the `GenericPoolRaindexV6ArbOrderTaker` contract + /// at the published `0.1.12` tag. (Changed in 0.1.12 — embeds the redeployed + /// RaindexV6.) + address constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_ADDRESS_0_1_12 = 0xE84c106B0A89A164d2D65205B9EBAE37c15Fd84a; + + /// The runtime code hash of the `GenericPoolRaindexV6ArbOrderTaker` contract + /// at the published `0.1.12` tag. + bytes32 constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_12 = + 0x02b17ab238a36ebcedee19fa5a374d6122865be8fff61bf45ad15822c8482030; + /// The address of the `RouteProcessorRaindexV6ArbOrderTaker` contract /// when deployed with the rain standard zoltu deployer. address constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_ADDRESS = RP_ARB_OT_ADDR; @@ -591,6 +629,17 @@ library LibRaindexDeploy { bytes32 constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_11 = 0x14f012211cd8e3e0f07777b5e93f1f441a80bbeb8845b762913d7b9362ba71f6; + /// The deployed address of the `RouteProcessorRaindexV6ArbOrderTaker` + /// contract at the published `0.1.12` tag. (Changed in 0.1.12 — embeds the + /// redeployed RaindexV6.) + address constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_ADDRESS_0_1_12 = + 0x1350420cbf3E9eb8F1734bbe466e0F303579eE24; + + /// The runtime code hash of the `RouteProcessorRaindexV6ArbOrderTaker` + /// contract at the published `0.1.12` tag. + bytes32 constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_12 = + 0x9a0d64fd312dc16761f28a7e13e48a8e8ad2f0ba5995c16710514e7524f43ee2; + /// The address of the `GenericPoolRaindexV6FlashBorrower` contract when /// deployed with the rain standard zoltu deployer. address constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_ADDRESS = GENERIC_POOL_FB_ADDR; @@ -703,8 +752,18 @@ library LibRaindexDeploy { bytes32 constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_CODEHASH_0_1_11 = 0x09617589f55317f6e41e1a1fba10d0d77996af310e5ce4d2705249fcaf3cb029; - uint256 constant RAINDEX_START_BLOCK_ARBITRUM = 473877912; - uint256 constant RAINDEX_START_BLOCK_BASE = 47384882; - uint256 constant RAINDEX_START_BLOCK_FLARE = 63007250; - uint256 constant RAINDEX_START_BLOCK_POLYGON = 88569424; + /// The deployed address of the `GenericPoolRaindexV6FlashBorrower` contract + /// at the published `0.1.12` tag. (Changed in 0.1.12 — embeds the redeployed + /// RaindexV6.) + address constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_ADDRESS_0_1_12 = 0x032d9D94A79909F3b337ECFE6f73f4e86bA79c7E; + + /// The runtime code hash of the `GenericPoolRaindexV6FlashBorrower` contract + /// at the published `0.1.12` tag. + bytes32 constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_CODEHASH_0_1_12 = + 0x03cde49152f7b5e29826ea8c561481b747b86be1f5cb4136fa064be6e4ac1c0d; + + uint256 constant RAINDEX_START_BLOCK_ARBITRUM = 473899359; + uint256 constant RAINDEX_START_BLOCK_BASE = 47387582; + uint256 constant RAINDEX_START_BLOCK_FLARE = 63011168; + uint256 constant RAINDEX_START_BLOCK_POLYGON = 88573024; } diff --git a/subgraph/networks.json b/subgraph/networks.json index b88b243c85..51553a6bcc 100644 --- a/subgraph/networks.json +++ b/subgraph/networks.json @@ -1,26 +1,26 @@ { "arbitrum-one": { "Raindex": { - "address": "0x1115EBC9C82F074454F6AC28f123B0684A453aF7", - "startBlock": 473877912 + "address": "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20", + "startBlock": 473899359 } }, "matic": { "Raindex": { - "address": "0x1115EBC9C82F074454F6AC28f123B0684A453aF7", - "startBlock": 88569424 + "address": "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20", + "startBlock": 88573024 } }, "base": { "Raindex": { - "address": "0x1115EBC9C82F074454F6AC28f123B0684A453aF7", - "startBlock": 47384882 + "address": "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20", + "startBlock": 47387582 } }, "flare": { "Raindex": { - "address": "0x1115EBC9C82F074454F6AC28f123B0684A453aF7", - "startBlock": 63007250 + "address": "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20", + "startBlock": 63011168 } } } diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index f2b26cd257..bf693a6366 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -6,7 +6,7 @@ dataSources: name: Raindex network: sepolia source: - address: "0x1115EBC9C82F074454F6AC28f123B0684A453aF7" + address: "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20" abi: Raindex startBlock: 0 mapping: