diff --git a/crates/node/assets/zone-dev-genesis.json b/crates/node/assets/zone-dev-genesis.json index 81afd1970..87f8cc777 100644 --- a/crates/node/assets/zone-dev-genesis.json +++ b/crates/node/assets/zone-dev-genesis.json @@ -20,17 +20,17 @@ }, "0x1c00000000000000000000000000000000000001": { "balance": "0x0", - "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80631fbb25ad146100945780632d4884821461008f57806379502c551461008a57806382648c3b14610085578063857e85f81461008057806386516ec01461007b578063a21de6d9146100765763bffa55d514610071575f80fd5b610356565b610312565b610252565b61018a565b610150565b61010c565b6100e6565b346100d8575f3660031901126100d8577f0000000000000000000000001c000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b5f9103126100d857565b346100d8575f3660031901126100d85760206001600160401b0360015416604051908152f35b346100d8575f3660031901126100d8576040517f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03168152602090f35b346100d8575f3660031901126100d85760205f54604051908152f35b6001600160a01b038116036100d857565b35906101888261016c565b565b346100d85760403660031901126100d85760206001600160801b036101e86004356101b48161016c565b602435906101c18261016c565b60018060a01b03165f526002845260405f209060018060a01b03165f5260205260405f2090565b5416604051908152f35b9181601f840112156100d8578235916001600160401b0383116100d8576020808501948460051b0101116100d857565b9181601f840112156100d8578235916001600160401b0383116100d8576020808501948460071b0101116100d857565b346100d85760803660031901126100d8576004356001600160401b0381116100d857366023820112156100d8578060040135906001600160401b0382116100d85736602483830101116100d8576024356001600160401b0381116100d8576102be9036906004016101f2565b6044929192356001600160401b0381116100d8576102e0903690600401610222565b91606435946001600160401b0386116100d8576103109661030760249736906004016101f2565b97909601610c10565b005b346100d8575f3660031901126100d8576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100d85760203660031901126100d8576004356103738161016c565b6001600160a01b0381165f8181526002602081815260408084203380865281845291852054959094529190526001600160801b0390921692916103db916103cb91905b9060018060a01b03165f5260205260405f2090565b80546001600160801b0319169055565b6001600160a01b031690813b156100d8576040516340c10f1960e01b8152915f838061040b853360048401610aad565b038183855af19283156104915761047393610477575b506040516001600160801b038316815233907fffd3bbab073ab4b2d0792c270104924c14c285a153b9acddabae166395d2eb5c90602090a36040516001600160801b0390911681529081906020820190565b0390f35b806104855f61048b936104e5565b806100dc565b5f610421565b61051e565b634e487b7160e01b5f52604160045260245ffd5b60a081019081106001600160401b038211176104c557604052565b610496565b60c081019081106001600160401b038211176104c557604052565b90601f801991011681019081106001600160401b038211176104c557604052565b908160209103126100d8575161051b8161016c565b90565b6040513d5f823e3d90fd5b908060209392818452848401375f828201840152601f01601f1916010190565b91602061051b938181520191610529565b634e487b7160e01b5f52603260045260245ffd5b91908110156105905760051b81013590607e19813603018212156100d8570190565b61055a565b3561051b8161016c565b903590601e19813603018212156100d857018035906001600160401b0382116100d8576020019181360383136100d857565b9593916105fd9061060b9461051b99979360018060a01b03168952608060208a01526080890191610529565b918683036040880152610529565b926060818503910152610529565b9492909361063761051b979561064594606089526060890191610529565b918683036020880152610529565b926040818503910152610529565b91908110156105905760051b81013590605e19813603018212156100d8570190565b6002111561067f57565b634e487b7160e01b5f52602160045260245ffd5b3560028110156100d85790565b35906001600160801b03821682036100d857565b60ff8116036100d857565b6001600160401b0381116104c557601f01601f191660200190565b35906001600160a01b0319821682036100d857565b35906001600160801b0319821682036100d857565b919060a0838203126100d8576040519061071d826104aa565b8193803583526020810135610731816106b4565b602084015260408101356001600160401b0381116100d857810182601f820112156100d857803591610762836106bf565b9361077060405195866104e5565b838552602084840101116100d8576080935f6020856107b19682899701838601378301015260408601526107a6606082016106da565b6060860152016106ef565b910152565b6020818303126100d8578035906001600160401b0382116100d8570160c0818303126100d857604051916107e9836104ca565b81356107f48161016c565b83526108026020830161017d565b6020840152610813604083016106a0565b60408401526108246060830161017d565b60608401526080820135608084015260a08201356001600160401b0381116100d8576108509201610704565b60a082015290565b90600282101561067f5752565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b92919060a060409161089c866001610858565b60606020870152600180831b038151166060870152600180831b0360208201511660808701526001600160801b03838201511682870152600180831b0360608201511660c0870152608081015160e0870152015160c0610100860152805161012086015260ff6020820151166101408601526109288282015160a06101608801526101c0870190610865565b60608201516001600160a01b0319166101808701526080909101516001600160801b0319166101a0860152930152565b801515036100d857565b3561051b81610958565b634e487b7160e01b5f52601160045260245ffd5b5f19811461098e5760010190565b61096c565b91908110156105905760071b0190565b3561051b816106b4565b908160209103126100d8575161051b81610958565b604051906109d16040836104e5565b600d82526c65636965732d6165732d6b657960981b6020830152565b91906040838203126100d85782516001600160401b0381116100d85783019080601f830112156100d8578151610a22816106bf565b91610a3060405193846104e5565b818352602082850101116100d8576020815f92828096018386015e8301015292015161051b81610958565b92610a919060809360209397969786526bffffffffffffffffffffffff60a01b168386015260a0604086015260a0850190610865565b83810360608501525f815201936001600160801b031916910152565b6001600160a01b0390911681526001600160801b03909116602082015260400190565b908160c09103126100d85760a060405191610aea836104ca565b8035610af58161016c565b83526020810135610b058161016c565b60208401526040810135610b188161016c565b6040840152610b29606082016106a0565b60608401526080810135610b3c8161016c565b6080840152013560a082015290565b60e0909392919360a0610100820195610b64835f610858565b600180831b038151166020840152600180831b036020820151166040840152600180831b0360408201511660608401526001600160801b036060820151166080840152600180831b0360808201511682840152015160c08201520152565b908160209103126100d8575190565b906001600160401b03809116911601906001600160401b03821161098e57565b908160209103126100d857516001600160401b03811681036100d85790565b959194939296903315158061172b575b61171c577f0000000000000000000000001c000000000000000000000000000000000000006001600160a01b031696873b156100d85760405163fe77009960e01b8152915f9183918291610c78919060048401610549565b0381838b5af1801561049157611708575b505f9492945b8181106115ed575050505f54925f915f915b878310610e9f5750505003610e90576040516381e3da6b60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600482015260056024820152602081604481865afa801561049157610e73575b50805f55610d4e610d326001600160401b038516610d2d6001546001600160401b031690565b610bd1565b6001600160401b03166001600160401b03196001541617600155565b604051631014997960e31b815291602083600481845afa928315610491575f93610e3e575b50602060049160405192838092631d04645f60e01b82525afa8015610491577fd2d2bf1e295f62cd08f0f0ab45818efeaba78b58310526f7b7e9686b8aeded1a926001600160401b03925f92610e09575b50610e0490610ddb6001546001600160401b031690565b6040805198895260208901929092526001600160401b0316908701529116939081906060820190565b0390a3565b610e04919250610e309060203d602011610e37575b610e2881836104e5565b810190610bf1565b9190610dc4565b503d610e1e565b6004919350610e64602091823d8411610e6c575b610e5c81836104e5565b810190610bc2565b939150610d73565b503d610e52565b610e8b9060203d602011610e6c57610e5c81836104e5565b610d07565b6361aba18160e11b5f5260045ffd5b909194610ead868985610653565b95610eb787610693565b610ec081610675565b6111c957610edc610ed4602089018961059f565b810190610ad0565b91604051610f0181610ef360208201948786610b4b565b03601f1981018352826104e5565b51902060808301805191989091610f28906001600160a01b03165b6001600160a01b031690565b610f41575050610f39600192611bd0565b019190610ca1565b6040610f4d9101610962565b15610fa35760208301518351600194610f9e936001600160a01b03938416939092610f9791610f8991606091169301516001600160801b031690565b92516001600160a01b031690565b928b611828565b610f39565b8251610fb990610f1c906001600160a01b031681565b604084018051909291906001600160a01b0316946060810192610fe384516001600160801b031690565b92803b156100d8575f8d946110129260019a836040518096819582946340c10f1960e01b845260048401610aad565b03925af190816111b5575b506111135781517f3c1af70310b8c9d43b0a7207217f398e4a3114f1728987c40addb451399ac87c9290611070906001600160a01b031686516001600160801b031684516001600160a01b031691611b45565b61110b6110ca6110bc6110ae6110a0611092602087015160018060a01b031690565b9a516001600160a01b031690565b94516001600160a01b031690565b97516001600160801b031690565b93516001600160a01b031690565b604080516001600160a01b0398891681526001600160801b03909516602086015296169583019590955260a088901b88900390811695169381906060820190565b0390a4610f39565b5060208101517fd5277bc9597c7da3fab9cdbba4de6005f48b9eb7389cf2389c4ea9eea3172c219190611157906001600160a01b031695516001600160a01b031690565b815161110b9060a090611172906001600160a01b03166110ae565b930151604080516001600160a01b0390981688526001600160801b0390941660208801529286019290925260a088901b8890039081169516939081906060820190565b806104855f6111c3936104e5565b5f61101d565b61120660406111e66111de60208b018b61059f565b8101906107b6565b9381516111fc81610ef360208201948986610889565b5190209801610962565b61159b578585101561158c5761122661121e86610980565b958785610993565b6080830161123481516118a2565b92906020604060a08801936112b9855161125385825192015160ff1690565b988335966112628786016109a3565b8651635f8a996960e01b8152600481019490945260ff9b8c166024850152604484018990528b166064840152608483015290981660a48901529101803560c48801526020013560e487015285908190610104820190565b0381731c000000000000000000000000000000000001005afa938415610491575f9461155c575b508392606094611444575b505050158015611438575b61142b5761130390611b12565b835191939161131c90610f1c906001600160a01b031681565b604083019161133283516001600160801b031690565b95823b156100d8575f806113618e9560019a6040519485809481936340c10f1960e01b83528960048401610aad565b03925af19081611417575b5061137e575050610f9e929150611a8e565b60208501517ffc236d1b4402e76c2b0a882db36ad3a6fb0f5b6b7edc8ae317d993f10434c43692919061110b906113d8906113ca906001600160a01b031698516001600160a01b031690565b96516001600160801b031690565b604080516001600160a01b0390981688526001600160801b03909116602088015286019290925260a088901b8890039081169516939081906060820190565b806104855f611425936104e5565b5f61136c565b50610f9e60019288611a8e565b506040815114156112f6565b518251516040516bffffffffffffffffffffffff197f000000000000000000000000000000000000000000000000000000000000000060601b166020820152603481019290925260548083019190915281525f93506114ce916114bb91906114ad6074836104e5565b6114b56109c2565b90611a22565b9151938401516001600160a01b03191690565b906115076114ec608060408701519601516001600160801b03191690565b60405163f4a7eb1360e01b8152958694859460048601610a5b565b0381731c000000000000000000000000000000000001015afa8015610491575f915f91611538575b505f80806112eb565b905061155691503d805f833e61154e81836104e5565b8101906109ed565b5f61152f565b61157e91945060203d8111611585575b61157681836104e5565b8101906109ad565b925f6112e0565b503d61156c565b6351de8c1f60e01b5f5260045ffd5b6020820151600192610f9e916001600160a01b031681519091906001600160a01b03166115e660606115d760408501516001600160801b031690565b9301516001600160a01b031690565b928b6117ba565b6115fb81838598969861056e565b9061160582610595565b916020810190611615828261059f565b90926040830193611626858561059f565b91909760608601986116388a8861059f565b9061083f60921b3b156100d8575f9561166693604051998a9788976374ae5b3760e11b8952600489016105d1565b03818361083f60921b5af18015610491576001967f4ac4dcc08b0c26c3fb6b58c64c1392b7934b1ce6b0382a5986ea5c3de795e053946116c9946116e8936116f4575b506116d16116c06116b983610595565b958361059f565b9690988361059f565b93909261059f565b9290916040519687968c8060a01b03169987610619565b0390a201949294610c8f565b806104855f611702936104e5565b5f6116a9565b806104855f611716936104e5565b5f610c89565b63bb62587160e01b5f5260045ffd5b50604051630b83774760e31b81526020816004817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa908115610491575f9161178b575b506001600160a01b0316331415610c20565b6117ad915060203d6020116117b3575b6117a581836104e5565b810190610506565b5f611779565b503d61179b565b92907f4620415fad9c416306a56ca0ee640b3418628a5f2e45ddde3ddf7452a7a654fb92946001600160801b036080936117f583828a611b45565b60405197611804896001610858565b6001600160a01b0390811660208a01529116604088015290811660608701521693a3565b92907f4620415fad9c416306a56ca0ee640b3418628a5f2e45ddde3ddf7452a7a654fb92946001600160801b0360809361186383828a611b45565b60405197611804895f610858565b908160011b918083046002149015171561098e57565b906001820180921161098e57565b9190820180921161098e57565b6118d3906118cd60405160208101906118c481610ef384906007602083019252565b51902091611871565b90611895565b9061195c6118e083611887565b6040516381e3da6b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000818116600484015260248301969096527f0000000000000000000000001c0000000000000000000000000000000000000016949092909190602090849081906044820190565b0381885afa928315610491575f936119ef575b5082156119e0576040516381e3da6b60e01b81526001600160a01b03929092166004830152602482015292602090849060449082905afa928315610491575f936119bc575b509160ff1690565b60ff9193506119d99060203d602011610e6c57610e5c81836104e5565b92906119b4565b63fb1f4a4960e01b5f5260045ffd5b611a0991935060203d602011610e6c57610e5c81836104e5565b915f61196f565b805191908290602001825e015f815290565b91611a766001611a5061051b95611a619560405191602083015260208252611a4b6040836104e5565b611e00565b926040519485916020830190611a10565b8260f81b815203601e198101855201836104e5565b60405190602082015260208152611a4b6040826104e5565b815160408301805160608501517f95705d99ac13cf82894fd274cd871942e6f301c98c186271337e8fedbbb9d7ea93611adf926001600160a01b03928316926001600160801b039091169116611b45565b6020840151935190516040516001600160a01b039586169590928392610e04926001600160801b03909116911683610aad565b90815160408103611b2e57506034602083015160601c92015190565b633fbbeba160e21b5f52600452604060245260445ffd5b9060026007609a1b013b156100d8576040516338b8fb9760e21b81526001600160a01b0392831660048201526001600160801b03919091166024820152911660448201525f816064818360026007609a1b015af1801561049157611ba65750565b5f610188916104e5565b906001600160801b03809116911601906001600160801b03821161098e57565b6040810151611c289190602090611bff90611bf3906001600160a01b0316610f1c565b6001600160401b031690565b60405163a3a124c360e01b81526001600160401b03909116600482015292839081906024820190565b03815f60026007609a1b015af1918215610491575f92611dc9575b508051611c5a90610f1c906001600160a01b031681565b916060820192611c7184516001600160801b031690565b90803b156100d8576040516340c10f1960e01b8152915f918391829084908290611c9f908960048401610aad565b03925af19081611db5575b50611d7e57611d5e611d507f92d91a50ae3561d4edd8eadad5f27f09116faaa4f733bd37682c49b4cbc20e3993611d43611ceb87516001600160801b031690565b82516001600160a01b03165f908152600260205260409020611d2990611d129088906103b6565b91611d2483546001600160801b031690565b611bb0565b6001600160801b03166001600160801b0319825416179055565b516001600160a01b031690565b93516001600160801b031690565b6040516001600160a01b03909216938291611d799183610aad565b0390a2565b90517fbc1cf3ff6e619587619408b396a13775509216474757afb9d29bda1a96f590f09190611d5e906001600160a01b0316611d50565b806104855f611dc3936104e5565b5f611caa565b611de391925060203d6020116117b3576117a581836104e5565b905f611c43565b61051b9392604092825260208201520190611a10565b5f908051604081115f14611f0c57505f611e2260209260405191828092611a10565b039060025afa156104915760205f611e9d610ef3611e918351965b6040519283917f363636363636363636363636363636363636363636363636363636363636363689187f36363636363636363636363636363636363636363636363636363636363636368b18898501611dea565b60405191828092611a10565b039060025afa1561049157611efc7f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c611e915f93610ef36020968651908560405196879518911889850191606093918352602083015260408201520190565b039060025afa15610491575f5190565b6020808301519490821193509160018414611f7b57505f925b60208210611f65575b6040821016611f4b575b505f611e9d610ef3611e91602094611e3d565b600160409190910360031b1b5f190119909116905f611f38565b935f1960018360200360031b1b01191693611f2e565b6040015192611f2556fea26469706673582212205b68507f3077a8996d1334365c031587ef9cc06931828bf8527cfde98c15015764736f6c63430008230033", + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80631fbb25ad146100945780632d4884821461008f57806379502c551461008a57806382648c3b14610085578063857e85f81461008057806386516ec01461007b578063a21de6d9146100765763bffa55d514610071575f80fd5b610356565b610312565b610252565b61018a565b610150565b61010c565b6100e6565b346100d8575f3660031901126100d8577f0000000000000000000000001c000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b5f9103126100d857565b346100d8575f3660031901126100d85760206001600160401b0360015416604051908152f35b346100d8575f3660031901126100d8576040517f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03168152602090f35b346100d8575f3660031901126100d85760205f54604051908152f35b6001600160a01b038116036100d857565b35906101888261016c565b565b346100d85760403660031901126100d85760206001600160801b036101e86004356101b48161016c565b602435906101c18261016c565b60018060a01b03165f526002845260405f209060018060a01b03165f5260205260405f2090565b5416604051908152f35b9181601f840112156100d8578235916001600160401b0383116100d8576020808501948460051b0101116100d857565b9181601f840112156100d8578235916001600160401b0383116100d8576020808501948460071b0101116100d857565b346100d85760803660031901126100d8576004356001600160401b0381116100d857366023820112156100d8578060040135906001600160401b0382116100d85736602483830101116100d8576024356001600160401b0381116100d8576102be9036906004016101f2565b6044929192356001600160401b0381116100d8576102e0903690600401610222565b91606435946001600160401b0386116100d8576103109661030760249736906004016101f2565b97909601610c10565b005b346100d8575f3660031901126100d8576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100d85760203660031901126100d8576004356103738161016c565b6001600160a01b0381165f8181526002602081815260408084203380865281845291852054959094529190526001600160801b0390921692916103db916103cb91905b9060018060a01b03165f5260205260405f2090565b80546001600160801b0319169055565b6001600160a01b031690813b156100d8576040516340c10f1960e01b8152915f838061040b853360048401610aad565b038183855af19283156104915761047393610477575b506040516001600160801b038316815233907fffd3bbab073ab4b2d0792c270104924c14c285a153b9acddabae166395d2eb5c90602090a36040516001600160801b0390911681529081906020820190565b0390f35b806104855f61048b936104e5565b806100dc565b5f610421565b61051e565b634e487b7160e01b5f52604160045260245ffd5b60a081019081106001600160401b038211176104c557604052565b610496565b60c081019081106001600160401b038211176104c557604052565b90601f801991011681019081106001600160401b038211176104c557604052565b908160209103126100d8575161051b8161016c565b90565b6040513d5f823e3d90fd5b908060209392818452848401375f828201840152601f01601f1916010190565b91602061051b938181520191610529565b634e487b7160e01b5f52603260045260245ffd5b91908110156105905760051b81013590607e19813603018212156100d8570190565b61055a565b3561051b8161016c565b903590601e19813603018212156100d857018035906001600160401b0382116100d8576020019181360383136100d857565b9593916105fd9061060b9461051b99979360018060a01b03168952608060208a01526080890191610529565b918683036040880152610529565b926060818503910152610529565b9492909361063761051b979561064594606089526060890191610529565b918683036020880152610529565b926040818503910152610529565b91908110156105905760051b81013590605e19813603018212156100d8570190565b6002111561067f57565b634e487b7160e01b5f52602160045260245ffd5b3560028110156100d85790565b35906001600160801b03821682036100d857565b60ff8116036100d857565b6001600160401b0381116104c557601f01601f191660200190565b35906001600160a01b0319821682036100d857565b35906001600160801b0319821682036100d857565b919060a0838203126100d8576040519061071d826104aa565b8193803583526020810135610731816106b4565b602084015260408101356001600160401b0381116100d857810182601f820112156100d857803591610762836106bf565b9361077060405195866104e5565b838552602084840101116100d8576080935f6020856107b19682899701838601378301015260408601526107a6606082016106da565b6060860152016106ef565b910152565b6020818303126100d8578035906001600160401b0382116100d8570160c0818303126100d857604051916107e9836104ca565b81356107f48161016c565b83526108026020830161017d565b6020840152610813604083016106a0565b60408401526108246060830161017d565b60608401526080820135608084015260a08201356001600160401b0381116100d8576108509201610704565b60a082015290565b90600282101561067f5752565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b92919060a060409161089c866001610858565b60606020870152600180831b038151166060870152600180831b0360208201511660808701526001600160801b03838201511682870152600180831b0360608201511660c0870152608081015160e0870152015160c0610100860152805161012086015260ff6020820151166101408601526109288282015160a06101608801526101c0870190610865565b60608201516001600160a01b0319166101808701526080909101516001600160801b0319166101a0860152930152565b801515036100d857565b3561051b81610958565b634e487b7160e01b5f52601160045260245ffd5b5f19811461098e5760010190565b61096c565b91908110156105905760071b0190565b3561051b816106b4565b908160209103126100d8575161051b81610958565b604051906109d16040836104e5565b600d82526c65636965732d6165732d6b657960981b6020830152565b91906040838203126100d85782516001600160401b0381116100d85783019080601f830112156100d8578151610a22816106bf565b91610a3060405193846104e5565b818352602082850101116100d8576020815f92828096018386015e8301015292015161051b81610958565b92610a919060809360209397969786526bffffffffffffffffffffffff60a01b168386015260a0604086015260a0850190610865565b83810360608501525f815201936001600160801b031916910152565b6001600160a01b0390911681526001600160801b03909116602082015260400190565b908160c09103126100d85760a060405191610aea836104ca565b8035610af58161016c565b83526020810135610b058161016c565b60208401526040810135610b188161016c565b6040840152610b29606082016106a0565b60608401526080810135610b3c8161016c565b6080840152013560a082015290565b60e0909392919360a0610100820195610b64835f610858565b600180831b038151166020840152600180831b036020820151166040840152600180831b0360408201511660608401526001600160801b036060820151166080840152600180831b0360808201511682840152015160c08201520152565b908160209103126100d8575190565b906001600160401b03809116911601906001600160401b03821161098e57565b908160209103126100d857516001600160401b03811681036100d85790565b959194939296903315158061172b575b61171c577f0000000000000000000000001c000000000000000000000000000000000000006001600160a01b031696873b156100d85760405163fe77009960e01b8152915f9183918291610c78919060048401610549565b0381838b5af1801561049157611708575b505f9492945b8181106115ed575050505f54925f915f915b878310610e9f5750505003610e90576040516381e3da6b60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600482015260056024820152602081604481865afa801561049157610e73575b50805f55610d4e610d326001600160401b038516610d2d6001546001600160401b031690565b610bd1565b6001600160401b03166001600160401b03196001541617600155565b604051631014997960e31b815291602083600481845afa928315610491575f93610e3e575b50602060049160405192838092631d04645f60e01b82525afa8015610491577fd2d2bf1e295f62cd08f0f0ab45818efeaba78b58310526f7b7e9686b8aeded1a926001600160401b03925f92610e09575b50610e0490610ddb6001546001600160401b031690565b6040805198895260208901929092526001600160401b0316908701529116939081906060820190565b0390a3565b610e04919250610e309060203d602011610e37575b610e2881836104e5565b810190610bf1565b9190610dc4565b503d610e1e565b6004919350610e64602091823d8411610e6c575b610e5c81836104e5565b810190610bc2565b939150610d73565b503d610e52565b610e8b9060203d602011610e6c57610e5c81836104e5565b610d07565b6361aba18160e11b5f5260045ffd5b909194610ead868985610653565b95610eb787610693565b610ec081610675565b6111c957610edc610ed4602089018961059f565b810190610ad0565b91604051610f0181610ef360208201948786610b4b565b03601f1981018352826104e5565b51902060808301805191989091610f28906001600160a01b03165b6001600160a01b031690565b610f41575050610f39600192611bd0565b019190610ca1565b6040610f4d9101610962565b15610fa35760208301518351600194610f9e936001600160a01b03938416939092610f9791610f8991606091169301516001600160801b031690565b92516001600160a01b031690565b928b611828565b610f39565b8251610fb990610f1c906001600160a01b031681565b604084018051909291906001600160a01b0316946060810192610fe384516001600160801b031690565b92803b156100d8575f8d946110129260019a836040518096819582946340c10f1960e01b845260048401610aad565b03925af190816111b5575b506111135781517f3c1af70310b8c9d43b0a7207217f398e4a3114f1728987c40addb451399ac87c9290611070906001600160a01b031686516001600160801b031684516001600160a01b031691611b45565b61110b6110ca6110bc6110ae6110a0611092602087015160018060a01b031690565b9a516001600160a01b031690565b94516001600160a01b031690565b97516001600160801b031690565b93516001600160a01b031690565b604080516001600160a01b0398891681526001600160801b03909516602086015296169583019590955260a088901b88900390811695169381906060820190565b0390a4610f39565b5060208101517fd5277bc9597c7da3fab9cdbba4de6005f48b9eb7389cf2389c4ea9eea3172c219190611157906001600160a01b031695516001600160a01b031690565b815161110b9060a090611172906001600160a01b03166110ae565b930151604080516001600160a01b0390981688526001600160801b0390941660208801529286019290925260a088901b8890039081169516939081906060820190565b806104855f6111c3936104e5565b5f61101d565b61120660406111e66111de60208b018b61059f565b8101906107b6565b9381516111fc81610ef360208201948986610889565b5190209801610962565b61159b578585101561158c5761122661121e86610980565b958785610993565b6080830161123481516118a2565b92906020604060a08801936112b9855161125385825192015160ff1690565b988335966112628786016109a3565b8651635f8a996960e01b8152600481019490945260ff9b8c166024850152604484018990528b166064840152608483015290981660a48901529101803560c48801526020013560e487015285908190610104820190565b0381731c000000000000000000000000000000000001005afa938415610491575f9461155c575b508392606094611444575b505050158015611438575b61142b5761130390611b12565b835191939161131c90610f1c906001600160a01b031681565b604083019161133283516001600160801b031690565b95823b156100d8575f806113618e9560019a6040519485809481936340c10f1960e01b83528960048401610aad565b03925af19081611417575b5061137e575050610f9e929150611a8e565b60208501517ffc236d1b4402e76c2b0a882db36ad3a6fb0f5b6b7edc8ae317d993f10434c43692919061110b906113d8906113ca906001600160a01b031698516001600160a01b031690565b96516001600160801b031690565b604080516001600160a01b0390981688526001600160801b03909116602088015286019290925260a088901b8890039081169516939081906060820190565b806104855f611425936104e5565b5f61136c565b50610f9e60019288611a8e565b506040815114156112f6565b518251516040516bffffffffffffffffffffffff197f000000000000000000000000000000000000000000000000000000000000000060601b166020820152603481019290925260548083019190915281525f93506114ce916114bb91906114ad6074836104e5565b6114b56109c2565b90611a22565b9151938401516001600160a01b03191690565b906115076114ec608060408701519601516001600160801b03191690565b60405163f4a7eb1360e01b8152958694859460048601610a5b565b0381731c000000000000000000000000000000000001015afa8015610491575f915f91611538575b505f80806112eb565b905061155691503d805f833e61154e81836104e5565b8101906109ed565b5f61152f565b61157e91945060203d8111611585575b61157681836104e5565b8101906109ad565b925f6112e0565b503d61156c565b6351de8c1f60e01b5f5260045ffd5b6020820151600192610f9e916001600160a01b031681519091906001600160a01b03166115e660606115d760408501516001600160801b031690565b9301516001600160a01b031690565b928b6117ba565b6115fb81838598969861056e565b9061160582610595565b916020810190611615828261059f565b90926040830193611626858561059f565b91909760608601986116388a8861059f565b9061083f60921b3b156100d8575f9561166693604051998a9788976374ae5b3760e11b8952600489016105d1565b03818361083f60921b5af18015610491576001967f4ac4dcc08b0c26c3fb6b58c64c1392b7934b1ce6b0382a5986ea5c3de795e053946116c9946116e8936116f4575b506116d16116c06116b983610595565b958361059f565b9690988361059f565b93909261059f565b9290916040519687968c8060a01b03169987610619565b0390a201949294610c8f565b806104855f611702936104e5565b5f6116a9565b806104855f611716936104e5565b5f610c89565b63bb62587160e01b5f5260045ffd5b50604051630b83774760e31b81526020816004817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa908115610491575f9161178b575b506001600160a01b0316331415610c20565b6117ad915060203d6020116117b3575b6117a581836104e5565b810190610506565b5f611779565b503d61179b565b92907f4620415fad9c416306a56ca0ee640b3418628a5f2e45ddde3ddf7452a7a654fb92946001600160801b036080936117f583828a611b45565b60405197611804896001610858565b6001600160a01b0390811660208a01529116604088015290811660608701521693a3565b92907f4620415fad9c416306a56ca0ee640b3418628a5f2e45ddde3ddf7452a7a654fb92946001600160801b0360809361186383828a611b45565b60405197611804895f610858565b908160011b918083046002149015171561098e57565b906001820180921161098e57565b9190820180921161098e57565b6118d3906118cd60405160208101906118c481610ef384906007602083019252565b51902091611871565b90611895565b9061195c6118e083611887565b6040516381e3da6b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000818116600484015260248301969096527f0000000000000000000000001c0000000000000000000000000000000000000016949092909190602090849081906044820190565b0381885afa928315610491575f936119ef575b5082156119e0576040516381e3da6b60e01b81526001600160a01b03929092166004830152602482015292602090849060449082905afa928315610491575f936119bc575b509160ff1690565b60ff9193506119d99060203d602011610e6c57610e5c81836104e5565b92906119b4565b63fb1f4a4960e01b5f5260045ffd5b611a0991935060203d602011610e6c57610e5c81836104e5565b915f61196f565b805191908290602001825e015f815290565b91611a766001611a5061051b95611a619560405191602083015260208252611a4b6040836104e5565b611e00565b926040519485916020830190611a10565b8260f81b815203601e198101855201836104e5565b60405190602082015260208152611a4b6040826104e5565b815160408301805160608501517f95705d99ac13cf82894fd274cd871942e6f301c98c186271337e8fedbbb9d7ea93611adf926001600160a01b03928316926001600160801b039091169116611b45565b6020840151935190516040516001600160a01b039586169590928392610e04926001600160801b03909116911683610aad565b90815160408103611b2e57506034602083015160601c92015190565b633fbbeba160e21b5f52600452604060245260445ffd5b9060026007609a1b013b156100d8576040516338b8fb9760e21b81526001600160a01b0392831660048201526001600160801b03919091166024820152911660448201525f816064818360026007609a1b015af1801561049157611ba65750565b5f610188916104e5565b906001600160801b03809116911601906001600160801b03821161098e57565b6040810151611c289190602090611bff90611bf3906001600160a01b0316610f1c565b6001600160401b031690565b60405163a3a124c360e01b81526001600160401b03909116600482015292839081906024820190565b03815f60026007609a1b015af1918215610491575f92611dc9575b508051611c5a90610f1c906001600160a01b031681565b916060820192611c7184516001600160801b031690565b90803b156100d8576040516340c10f1960e01b8152915f918391829084908290611c9f908960048401610aad565b03925af19081611db5575b50611d7e57611d5e611d507f92d91a50ae3561d4edd8eadad5f27f09116faaa4f733bd37682c49b4cbc20e3993611d43611ceb87516001600160801b031690565b82516001600160a01b03165f908152600260205260409020611d2990611d129088906103b6565b91611d2483546001600160801b031690565b611bb0565b6001600160801b03166001600160801b0319825416179055565b516001600160a01b031690565b93516001600160801b031690565b6040516001600160a01b03909216938291611d799183610aad565b0390a2565b90517fbc1cf3ff6e619587619408b396a13775509216474757afb9d29bda1a96f590f09190611d5e906001600160a01b0316611d50565b806104855f611dc3936104e5565b5f611caa565b611de391925060203d6020116117b3576117a581836104e5565b905f611c43565b61051b9392604092825260208201520190611a10565b5f908051604081115f14611f0c57505f611e2260209260405191828092611a10565b039060025afa156104915760205f611e9d610ef3611e918351965b6040519283917f363636363636363636363636363636363636363636363636363636363636363689187f36363636363636363636363636363636363636363636363636363636363636368b18898501611dea565b60405191828092611a10565b039060025afa1561049157611efc7f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c611e915f93610ef36020968651908560405196879518911889850191606093918352602083015260408201520190565b039060025afa15610491575f5190565b6020808301519490821193509160018414611f7b57505f925b60208210611f65575b6040821016611f4b575b505f611e9d610ef3611e91602094611e3d565b600160409190910360031b1b5f190119909116905f611f38565b935f1960018360200360031b1b01191693611f2e565b6040015192611f2556fea264697066735822122073ee60f15726a1fa3d9ceb69f62960070416da2ee4c4a81d0bc5e60d50f5dd5c64736f6c63430008230033", "nonce": "0x1" }, "0x1c00000000000000000000000000000000000002": { "balance": "0x0", - "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80633406527214610184578063378fa8fa1461017f5780633d1c5a931461017a578063413e9cde1461017557806343c3cb831461017057806348aa41081461016b57806353a8d73914610166578063545525f11461016157806379502c551461015c57806379fa3289146101575780637b9c9aa41461015257806386f47e551461014d578063a3a124c314610148578063a94cd93114610143578063b3b200aa1461013e578063b9d1fd6814610139578063bba9282e14610134578063c37fc8a81461012f578063c9b6ca9b1461012a578063ce7025e914610125578063d93af1d214610120578063e2e3ee5c1461011b5763f490ca9614610116575f80fd5b610d33565b610b8c565b610b6f565b610aea565b610ace565b6109e3565b61086c565b61075e565b6106c6565b610634565b610546565b610529565b6104ec565b610358565b6102d2565b6102ac565b610290565b610238565b61021d565b6101fd565b6101d7565b6101bc565b610197565b5f91031261019357565b5f80fd5b34610193575f3660031901126101935760206001600160801b035f5416604051908152f35b34610193575f36600319011261019357602060405160218152f35b34610193575f3660031901126101935760206001600160401b0360045416604051908152f35b34610193575f36600319011261019357602060025460c01c604051908152f35b34610193575f36600319011261019357602060405160718152f35b34610193575f366003190112610193575f602060405161025781610d69565b828152015260406001546001600160401b0380600254166020845161027b81610d69565b84815201908152835192835251166020820152f35b34610193575f3660031901126101935760206040516104008152f35b34610193575f36600319011261019357602063ffffffff60025460401c16604051908152f35b34610193575f366003190112610193576040517f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03168152602090f35b600435906001600160801b038216820361019357565b604435906001600160801b038216820361019357565b602435906001600160801b038216820361019357565b3461019357602036600319011261019357610371610316565b33151580610416575b61040757670de0b6b3a76400006001600160801b038216116103f8576103f3816103d97f6f864cce5237e12ffc9a99fc6c59af17222c2bbb3457690cc8753ab16b5d715e936001600160801b03166001600160801b03195f5416175f55565b6040516001600160801b0390911681529081906020820190565b0390a1005b630d62f21160e11b5f5260045ffd5b63bb62587160e01b5f5260045ffd5b50604051630b83774760e31b81526020816004817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa9081156104a5575f91610476575b506001600160a01b031633141561037a565b610498915060203d60201161049e575b6104908183610da5565b810190610de8565b5f610464565b503d610486565b610e00565b600435906001600160401b038216820361019357565b608435906001600160401b038216820361019357565b602435906001600160401b038216820361019357565b3461019357602036600319011261019357602061051861050a6104aa565b61051381611490565b6114d2565b6001600160801b0360405191168152f35b34610193575f366003190112610193576020604051629896808152f35b346101935760203660031901126101935761055f6104aa565b6007609a1b1933016105e7576001600160401b03165f818152600560205260409020546001600160a01b031680156105d8576105d4915f5260056020526105ba60405f206bffffffffffffffffffffffff60a01b8154169055565b6040516001600160a01b0390911681529081906020820190565b0390f35b63c29f0c7160e01b5f5260045ffd5b6303300c7360e31b5f5260045ffd5b6001600160a01b0381160361019357565b9181601f84011215610193578235916001600160401b038311610193576020838186019501011161019357565b346101935760e036600319011261019357600435610651816105f6565b6024359061065e826105f6565b61066661032c565b916064356106726104c0565b60a4359161067f836105f6565b60c435956001600160401b038711610193576106ac6106a56106c4983690600401610607565b3691610e26565b94604051966106bc602089610da5565b5f88526115ea565b005b3461019357610100366003190112610193576004356106e4816105f6565b6024356106f0816105f6565b6106f861032c565b916064356107046104c0565b9060a435610711816105f6565b60c4356001600160401b03811161019357610730903690600401610607565b93909260e435976001600160401b038911610193576107566106c4993690600401610607565b989097610e70565b346101935760203660031901126101935760043563ffffffff8116810361019357331515806107ed575b610407576103f3816107d67f5340f6cf6e1274bffd0c7188c75f885ed6c90cd6b0879a646290a92f84a6dce39363ffffffff60401b6002549160401b169063ffffffff60401b191617600255565b60405163ffffffff90911681529081906020820190565b50604051630b83774760e31b81526020816004817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa9081156104a5575f9161084d575b506001600160a01b0316331415610788565b610866915060203d60201161049e576104908183610da5565b5f61083b565b34610193575f3660031901126101935760206001600160401b035f5460801c16604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b602081016020825282518091526040820191602060408360051b8301019401925f915b8383106108ea57505050505090565b90919293946020806109d4600193603f1986820301875289519061091681835160018060a01b03169052565b818401516001600160a01b031681850152604082810151908201526060808301516001600160a01b0316908201526080828101516001600160801b03169082015260a0828101516001600160801b03169082015260c082015160c082015261098e60e083015160e08301906001600160401b03169052565b610100828101516001600160401b0316908201526101406109c2610120840151610160610120850152610160840190610894565b92015190610140818403910152610894565b970193019301919392906108db565b34610193575f366003190112610193576003546109ff81610e97565b90610a0d6040519283610da5565b808252601f19610a1c82610e97565b015f5b818110610a705750505f5b818110610a3f57604051806105d485826108b8565b80610a54610a4e600193610ec2565b50610fe6565b610a5e8286610efc565b52610a698185610efc565b5001610a2a565b602090604051610a7f81610d89565b5f81525f838201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201526060610120820152606061014082015282828701015201610a1f565b34610193575f36600319011261019357602060405161c3508152f35b3461019357606036600319011261019357610b036104d6565b604435906001600160401b0382116101935736602383011215610193578160040135906001600160401b038211610193573660248360051b8501011161019357610b56610b5f9260246105d495016110ee565b90600435611c82565b6040519081529081906020820190565b34610193575f366003190112610193576020600354604051908152f35b3461019357606036600319011261019357600435610ba9816105f6565b610bb1610342565b90604435610bbe816105f6565b6007609a1b1933016105e7576001600160401b037f34ca953f3eed14157d2f660c7e92a5bd9c05be0d61a188830f3bf1cb7d094f9691610d2e5f95610c76610c04610dc6565b6001600160a01b038816815260208101899052604081018990526001600160a01b03851660608201526001600160801b03831660808201528860a08201528860c08201528860e082015288610100820152610c5d610e5c565b610120820152610c6b610e5c565b6101408201526112ae565b865460801c6001600160401b031692610cbd610c918561146e565b5f805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b16919091179055565b604080516001600160a01b0398891681529790911660208801526001600160801b03909116908601525f606086018190526080860181905260a0860181905260c0860181905261012060e0870181905286018190526101406101008701819052860152911692908190610160820190565b0390a3005b34610193575f366003190112610193576020604051670de0b6b3a76400008152f35b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b03821117610d8457604052565b610d55565b61016081019081106001600160401b03821117610d8457604052565b90601f801991011681019081106001600160401b03821117610d8457604052565b60405190610dd661016083610da5565b565b60405190610dd661014083610da5565b908160209103126101935751610dfd816105f6565b90565b6040513d5f823e3d90fd5b6001600160401b038111610d8457601f01601f191660200190565b929192610e3282610e0b565b91610e406040519384610da5565b829481845281830111610193578281602093845f960137010152565b60405190610e6b602083610da5565b5f8252565b97610e89610e91929394959697610dd69b993691610e26565b973691610e26565b966115ea565b6001600160401b038111610d845760051b60200190565b634e487b7160e01b5f52603260045260245ffd5b600354811015610ede5760035f52600960205f20910201905f90565b610eae565b8054821015610ede575f52600960205f20910201905f90565b8051821015610ede5760209160051b010190565b90600182811c92168015610f3e575b6020831014610f2a57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610f1f565b9060405191825f825492610f5b84610f10565b8084529360018116908115610fc45750600114610f80575b50610dd692500383610da5565b90505f9291925260205f20905f915b818310610fa8575050906020610dd6928201015f610f73565b6020919350806001915483858901015201910190918492610f8f565b905060209250610dd694915060ff191682840152151560051b8201015f610f73565b906110e66008610ff4610dc6565b84546001600160a01b031681529360018101546001600160a01b031660208601526002810154604086015260038101546001600160a01b031660608601526110766110666004830154611060611050826001600160801b031690565b6001600160801b031660808a0152565b60801c90565b6001600160801b031660a0870152565b600581015460c08601526110ce6110bd60068301546110ae61109e826001600160401b031690565b6001600160401b031660e08a0152565b60401c6001600160401b031690565b6001600160401b0316610100870152565b6110da60078201610f48565b61012086015201610f48565b610140830152565b906110f881610e97565b916111066040519384610da5565b818352602083019160051b8101903682116101935780925b82841061112c575050505090565b83356001600160401b03811161019357820136601f820112156101935760209161115d839236908481359101610e26565b81520193019261111e565b634e487b7160e01b5f525f60045260245ffd5b5f5b82811061118957505050565b5f8282015560010161117d565b91601f82116111a457505050565b8082116111b057505050565b610dd6925f5260205f20916020601f830160051c92106111db575b601f82910160051c03910161117b565b5f91506111cb565b91909182516001600160401b038111610d845761120a816112048454610f10565b84611196565b6020601f821160011461124957819061123a9394955f9261123e575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611226565b601f1982169061125c845f5260205f2090565b915f5b8181106112965750958360019596971061127e575b505050811b019055565b01515f1960f88460031b161c191690555f8080611274565b9192602060018192868b01518155019401920161125f565b60035468010000000000000000811015610d84578060016112d492016003556003610ee3565b61145557815181546001600160a01b0319166001600160a01b03909116178155610dd6916008906101409060208101516001850180546001600160a01b0319166001600160a01b039092169190911790556040810151600285015560608101516003850180546001600160a01b0319166001600160a01b039092169190911790556113bd6004850161138f61137360808501516001600160801b031690565b82546001600160801b0319166001600160801b03909116178255565b60a08301516001600160801b031681546001600160801b031660809190911b6001600160801b031916179055565b60c0810151600585015561143a600685016114026113e560e08501516001600160401b031690565b825467ffffffffffffffff19166001600160401b03909116178255565b61010083015181546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff000000000000000016179055565b61144c610120820151600786016111e3565b015191016111e3565b611168565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03166001600160401b03811461148b5760010190565b61145a565b6001600160401b03629896809116116114a557565b637d2e4eb560e01b5f5260045ffd5b6001600160401b036001911601906001600160401b03821161148b57565b6001600160401b031661c350016001600160401b03811161148b576001600160401b036001600160801b035f54169116026001600160801b03811690810361148b5790565b90816020910312610193575180151581036101935790565b63ffffffff1663ffffffff811461148b5760010190565b906001600160801b03809116911601906001600160801b03821161148b57565b90816020910312610193575190565b6001600160a01b039182168152911660208201526001600160801b0391821660408201529116606082015260808101919091526001600160401b0391821660a0820152911660c082015261012060e08201819052610dfd9391926115db91840190610894565b91610100818403910152610894565b95969092949693919360018060a01b038816156105d85760405163037d635760e31b81526001600160a01b0388166004820152602081806024810103817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa9081156104a5575f91611a70575b5015611a615761167083611490565b610400815111611a525761168382611ff7565b600254604081901c63ffffffff16611969575b506116a0836114d2565b976116ab8987611546565b60405163868a2e9d60e01b8152979094906020896004815f60056007609a1b015af19889156104a5575f99611938575b508815611929576040516323b872dd60e01b81523360048201523060248201526001600160801b03871660448201526001600160a01b038b16906020816064815f865af19081156104a5575f916118fa575b50156118eb57803b1561019357604051630852cd8d60e31b81526001600160801b039790971660048801525f908790602490829084905af180156104a5577f34ca953f3eed14157d2f660c7e92a5bd9c05be0d61a188830f3bf1cb7d094f96996118cc97611899926118d1575b506118136117b86117b36004546001600160401b031690565b61146e565b956117d9876001600160401b03166001600160401b03196004541617600455565b6117f4876001600160401b03165f52600560205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b61181b610dc6565b6001600160a01b038d1681529033602083015260408201526001600160a01b03891660608201526001600160801b038a1660808201526001600160801b038d1660a082015260c081018390526001600160401b03841660e08201526001600160401b03851661010082015285610120820152866101408201526112ae565b5f5460801c6001600160401b03169a6118b4610c918d61146e565b6040519889986001600160401b03339e169c8a611575565b0390a3565b806118df5f6118e593610da5565b80610189565b5f61179a565b6312171d8360e31b5f5260045ffd5b61191c915060203d602011611922575b6119148183610da5565b810190611517565b5f61172d565b503d61190a565b632968ee7f60e21b5f5260045ffd5b61195b91995060203d602011611962575b6119538183610da5565b810190611566565b975f6116db565b503d611949565b61199661198a6001600160401b034316926001600160401b039060801c1690565b6001600160401b031690565b8103611a1b575b506002546119c86119bf606083901c63ffffffff169260401c63ffffffff1690565b63ffffffff1690565b63ffffffff82161015611a0c576119e1611a069161152f565b6002805463ffffffff60601b191660609290921b63ffffffff60601b16919091179055565b5f611696565b63124ab48560e11b5f5260045ffd5b6002805460809290921b67ffffffffffffffff60801b166bffffffffffffffffffffffff60601b199092169190911790555f61199d565b634b8a874d60e11b5f5260045ffd5b631fcf8c4760e11b5f5260045ffd5b611a89915060203d602011611922576119148183610da5565b5f611661565b5f1981019190821161148b57565b604080825282516001600160a01b031690820152929190602090611b629080830151606087015260408101516001600160a01b0316608087015260608101516001600160801b031660a087015260808101516001600160801b031660c087015260a081015160e087015260c08101516001600160401b031661010087015260e08101516001600160401b0316610120870152610120611b4d610100830151610140808a0152610180890190610894565b910151868203603f1901610160880152610894565b930152565b611b718154610f10565b9081611b7b575050565b81601f5f9311600114611b8c575055565b81835260208320611ba991601f0160051c8419019060010161117b565b808252602082209081548360011b9084198560031b1c191617905555565b90611455576008815f610dd693555f60018201555f60028201555f60038201555f60048201555f60058201555f6006820155611c0560078201611b67565b01611b67565b6003545f60035580611c1a5750565b8060090290600982040361148b5760035f5260205f205f5b828110611c3e57505050565b80611c7c600860099385015f81555f60018201555f60028201555f60038201555f60048201555f60058201555f6006820155611c0560078201611b67565b01611c32565b9092915f9333151580611f78575b610407576001600160401b03804316911603611f6957600354808303611f5257508051828103611f3b575081611d79575b5050611cfc611ce0611cdb6002546001600160401b031690565b6114b4565b6001600160401b03166001600160401b03196002541617600255565b817fec4aff46c65f485f4b15e3c2edadda1d57d002995f5aa262a27c76b9a680ec16611d74611d336002546001600160401b031690565b611d3c84600155565b600280546001600160c01b03164260c01b6001600160c01b0319161790556040516001600160401b0390911681529081906020820190565b0390a2565b5f19935090805b611d95575050611d8e611c0b565b5f80611cc1565b611d9e81611a8f565b93611da885610ec2565b50611db290610fe6565b611dbc8685610efc565b518061014083015190611dce91612053565b8151602080840151604080860151905160609290921b6bffffffffffffffffffffffff191692820192835260348083019190915281526001600160a01b039092169391611e1c605482610da5565b51902060608201519091906001600160a01b031660808201516001600160801b031660a08301516001600160801b031660c08401519160e0850151611e67906001600160401b031690565b93610100860151611e7e906001600160401b031690565b95610120015196611e8d610dd8565b6001600160a01b03909a168a5260208a01526001600160a01b031660408901526001600160801b031660608801526001600160801b0316608087015260a08601526001600160401b031660c08501526001600160401b031660e084015261010083015261012082015260405180916020820193611f0a9185611a9d565b03601f1981018252611f1c9082610da5565b51902093611f2990610ec2565b611f3291611bc7565b5f190180611d80565b630db2128560e11b5f52600452602482905260445ffd5b6324a839db60e11b5f52600483905260245260445ffd5b631391e11b60e21b5f5260045ffd5b50604051630b83774760e31b81526020816004817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa9081156104a5575f91611fd8575b506001600160a01b0316331415611c90565b611ff1915060203d60201161049e576104908183610da5565b5f611fc6565b8051801561204f5760210361204057805115610ede576020810151612026906120229060f81c612084565b1590565b61204057612022602161203a9201516120ef565b61204057565b6361d0136b60e11b5f5260045ffd5b5050565b5161207c575f905b51818103612067575050565b63521a2d4d60e11b5f5260045260245260445ffd5b60719061205b565b60ff1660028114908115612096575090565b600391501490565b3d156120c8573d906120af82610e0b565b916120bd6040519384610da5565b82523d5f602084013e565b606090565b6020815191015190602081106120e1575090565b5f199060200360031b1b1690565b8015801561219b575b61218a575f9081906401000003d0199060079082908181800909086040805160208082018181529282018190526060820152608081019290925263800001e9600160ff1b0360a08301526401000003d01960c08084019190915282529061216060e082610da5565b519060055afa61216e61209e565b9015801561218f575b61218a576121866001916120cd565b1490565b505f90565b50602081511415612177565b506401000003d0198110156120f856fea2646970667358221220a44608fefd2dc3bacd7bbf453e39f69d3da2f0f4d2de02769f9242bd32eec7bc64736f6c63430008230033", + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80633406527214610184578063378fa8fa1461017f5780633d1c5a931461017a578063413e9cde1461017557806343c3cb831461017057806348aa41081461016b57806353a8d73914610166578063545525f11461016157806379502c551461015c57806379fa3289146101575780637b9c9aa41461015257806386f47e551461014d578063a3a124c314610148578063a94cd93114610143578063b3b200aa1461013e578063b9d1fd6814610139578063bba9282e14610134578063c37fc8a81461012f578063c9b6ca9b1461012a578063ce7025e914610125578063d93af1d214610120578063e2e3ee5c1461011b5763f490ca9614610116575f80fd5b610d33565b610b8c565b610b6f565b610aea565b610ace565b6109e3565b61086c565b61075e565b6106c6565b610634565b610546565b610529565b6104ec565b610358565b6102d2565b6102ac565b610290565b610238565b61021d565b6101fd565b6101d7565b6101bc565b610197565b5f91031261019357565b5f80fd5b34610193575f3660031901126101935760206001600160801b035f5416604051908152f35b34610193575f36600319011261019357602060405160218152f35b34610193575f3660031901126101935760206001600160401b0360045416604051908152f35b34610193575f36600319011261019357602060025460c01c604051908152f35b34610193575f36600319011261019357602060405160718152f35b34610193575f366003190112610193575f602060405161025781610d69565b828152015260406001546001600160401b0380600254166020845161027b81610d69565b84815201908152835192835251166020820152f35b34610193575f3660031901126101935760206040516104008152f35b34610193575f36600319011261019357602063ffffffff60025460401c16604051908152f35b34610193575f366003190112610193576040517f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03168152602090f35b600435906001600160801b038216820361019357565b604435906001600160801b038216820361019357565b602435906001600160801b038216820361019357565b3461019357602036600319011261019357610371610316565b33151580610416575b61040757670de0b6b3a76400006001600160801b038216116103f8576103f3816103d97f6f864cce5237e12ffc9a99fc6c59af17222c2bbb3457690cc8753ab16b5d715e936001600160801b03166001600160801b03195f5416175f55565b6040516001600160801b0390911681529081906020820190565b0390a1005b630d62f21160e11b5f5260045ffd5b63bb62587160e01b5f5260045ffd5b50604051630b83774760e31b81526020816004817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa9081156104a5575f91610476575b506001600160a01b031633141561037a565b610498915060203d60201161049e575b6104908183610da5565b810190610de8565b5f610464565b503d610486565b610e00565b600435906001600160401b038216820361019357565b608435906001600160401b038216820361019357565b602435906001600160401b038216820361019357565b3461019357602036600319011261019357602061051861050a6104aa565b61051381611490565b6114d2565b6001600160801b0360405191168152f35b34610193575f366003190112610193576020604051629896808152f35b346101935760203660031901126101935761055f6104aa565b6007609a1b1933016105e7576001600160401b03165f818152600560205260409020546001600160a01b031680156105d8576105d4915f5260056020526105ba60405f206bffffffffffffffffffffffff60a01b8154169055565b6040516001600160a01b0390911681529081906020820190565b0390f35b63c29f0c7160e01b5f5260045ffd5b6303300c7360e31b5f5260045ffd5b6001600160a01b0381160361019357565b9181601f84011215610193578235916001600160401b038311610193576020838186019501011161019357565b346101935760e036600319011261019357600435610651816105f6565b6024359061065e826105f6565b61066661032c565b916064356106726104c0565b60a4359161067f836105f6565b60c435956001600160401b038711610193576106ac6106a56106c4983690600401610607565b3691610e26565b94604051966106bc602089610da5565b5f88526115ea565b005b3461019357610100366003190112610193576004356106e4816105f6565b6024356106f0816105f6565b6106f861032c565b916064356107046104c0565b9060a435610711816105f6565b60c4356001600160401b03811161019357610730903690600401610607565b93909260e435976001600160401b038911610193576107566106c4993690600401610607565b989097610e70565b346101935760203660031901126101935760043563ffffffff8116810361019357331515806107ed575b610407576103f3816107d67f5340f6cf6e1274bffd0c7188c75f885ed6c90cd6b0879a646290a92f84a6dce39363ffffffff60401b6002549160401b169063ffffffff60401b191617600255565b60405163ffffffff90911681529081906020820190565b50604051630b83774760e31b81526020816004817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa9081156104a5575f9161084d575b506001600160a01b0316331415610788565b610866915060203d60201161049e576104908183610da5565b5f61083b565b34610193575f3660031901126101935760206001600160401b035f5460801c16604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b602081016020825282518091526040820191602060408360051b8301019401925f915b8383106108ea57505050505090565b90919293946020806109d4600193603f1986820301875289519061091681835160018060a01b03169052565b818401516001600160a01b031681850152604082810151908201526060808301516001600160a01b0316908201526080828101516001600160801b03169082015260a0828101516001600160801b03169082015260c082015160c082015261098e60e083015160e08301906001600160401b03169052565b610100828101516001600160401b0316908201526101406109c2610120840151610160610120850152610160840190610894565b92015190610140818403910152610894565b970193019301919392906108db565b34610193575f366003190112610193576003546109ff81610e97565b90610a0d6040519283610da5565b808252601f19610a1c82610e97565b015f5b818110610a705750505f5b818110610a3f57604051806105d485826108b8565b80610a54610a4e600193610ec2565b50610fe6565b610a5e8286610efc565b52610a698185610efc565b5001610a2a565b602090604051610a7f81610d89565b5f81525f838201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201526060610120820152606061014082015282828701015201610a1f565b34610193575f36600319011261019357602060405161c3508152f35b3461019357606036600319011261019357610b036104d6565b604435906001600160401b0382116101935736602383011215610193578160040135906001600160401b038211610193573660248360051b8501011161019357610b56610b5f9260246105d495016110ee565b90600435611c82565b6040519081529081906020820190565b34610193575f366003190112610193576020600354604051908152f35b3461019357606036600319011261019357600435610ba9816105f6565b610bb1610342565b90604435610bbe816105f6565b6007609a1b1933016105e7576001600160401b037f34ca953f3eed14157d2f660c7e92a5bd9c05be0d61a188830f3bf1cb7d094f9691610d2e5f95610c76610c04610dc6565b6001600160a01b038816815260208101899052604081018990526001600160a01b03851660608201526001600160801b03831660808201528860a08201528860c08201528860e082015288610100820152610c5d610e5c565b610120820152610c6b610e5c565b6101408201526112ae565b865460801c6001600160401b031692610cbd610c918561146e565b5f805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b16919091179055565b604080516001600160a01b0398891681529790911660208801526001600160801b03909116908601525f606086018190526080860181905260a0860181905260c0860181905261012060e0870181905286018190526101406101008701819052860152911692908190610160820190565b0390a3005b34610193575f366003190112610193576020604051670de0b6b3a76400008152f35b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b03821117610d8457604052565b610d55565b61016081019081106001600160401b03821117610d8457604052565b90601f801991011681019081106001600160401b03821117610d8457604052565b60405190610dd661016083610da5565b565b60405190610dd661014083610da5565b908160209103126101935751610dfd816105f6565b90565b6040513d5f823e3d90fd5b6001600160401b038111610d8457601f01601f191660200190565b929192610e3282610e0b565b91610e406040519384610da5565b829481845281830111610193578281602093845f960137010152565b60405190610e6b602083610da5565b5f8252565b97610e89610e91929394959697610dd69b993691610e26565b973691610e26565b966115ea565b6001600160401b038111610d845760051b60200190565b634e487b7160e01b5f52603260045260245ffd5b600354811015610ede5760035f52600960205f20910201905f90565b610eae565b8054821015610ede575f52600960205f20910201905f90565b8051821015610ede5760209160051b010190565b90600182811c92168015610f3e575b6020831014610f2a57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610f1f565b9060405191825f825492610f5b84610f10565b8084529360018116908115610fc45750600114610f80575b50610dd692500383610da5565b90505f9291925260205f20905f915b818310610fa8575050906020610dd6928201015f610f73565b6020919350806001915483858901015201910190918492610f8f565b905060209250610dd694915060ff191682840152151560051b8201015f610f73565b906110e66008610ff4610dc6565b84546001600160a01b031681529360018101546001600160a01b031660208601526002810154604086015260038101546001600160a01b031660608601526110766110666004830154611060611050826001600160801b031690565b6001600160801b031660808a0152565b60801c90565b6001600160801b031660a0870152565b600581015460c08601526110ce6110bd60068301546110ae61109e826001600160401b031690565b6001600160401b031660e08a0152565b60401c6001600160401b031690565b6001600160401b0316610100870152565b6110da60078201610f48565b61012086015201610f48565b610140830152565b906110f881610e97565b916111066040519384610da5565b818352602083019160051b8101903682116101935780925b82841061112c575050505090565b83356001600160401b03811161019357820136601f820112156101935760209161115d839236908481359101610e26565b81520193019261111e565b634e487b7160e01b5f525f60045260245ffd5b5f5b82811061118957505050565b5f8282015560010161117d565b91601f82116111a457505050565b8082116111b057505050565b610dd6925f5260205f20916020601f830160051c92106111db575b601f82910160051c03910161117b565b5f91506111cb565b91909182516001600160401b038111610d845761120a816112048454610f10565b84611196565b6020601f821160011461124957819061123a9394955f9261123e575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611226565b601f1982169061125c845f5260205f2090565b915f5b8181106112965750958360019596971061127e575b505050811b019055565b01515f1960f88460031b161c191690555f8080611274565b9192602060018192868b01518155019401920161125f565b60035468010000000000000000811015610d84578060016112d492016003556003610ee3565b61145557815181546001600160a01b0319166001600160a01b03909116178155610dd6916008906101409060208101516001850180546001600160a01b0319166001600160a01b039092169190911790556040810151600285015560608101516003850180546001600160a01b0319166001600160a01b039092169190911790556113bd6004850161138f61137360808501516001600160801b031690565b82546001600160801b0319166001600160801b03909116178255565b60a08301516001600160801b031681546001600160801b031660809190911b6001600160801b031916179055565b60c0810151600585015561143a600685016114026113e560e08501516001600160401b031690565b825467ffffffffffffffff19166001600160401b03909116178255565b61010083015181546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff000000000000000016179055565b61144c610120820151600786016111e3565b015191016111e3565b611168565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03166001600160401b03811461148b5760010190565b61145a565b6001600160401b03629896809116116114a557565b637d2e4eb560e01b5f5260045ffd5b6001600160401b036001911601906001600160401b03821161148b57565b6001600160401b031661c350016001600160401b03811161148b576001600160401b036001600160801b035f54169116026001600160801b03811690810361148b5790565b90816020910312610193575180151581036101935790565b63ffffffff1663ffffffff811461148b5760010190565b906001600160801b03809116911601906001600160801b03821161148b57565b90816020910312610193575190565b6001600160a01b039182168152911660208201526001600160801b0391821660408201529116606082015260808101919091526001600160401b0391821660a0820152911660c082015261012060e08201819052610dfd9391926115db91840190610894565b91610100818403910152610894565b95969092949693919360018060a01b038816156105d85760405163037d635760e31b81526001600160a01b0388166004820152602081806024810103817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa9081156104a5575f91611a70575b5015611a615761167083611490565b610400815111611a525761168382611ff7565b600254604081901c63ffffffff16611969575b506116a0836114d2565b976116ab8987611546565b60405163868a2e9d60e01b8152979094906020896004815f60056007609a1b015af19889156104a5575f99611938575b508815611929576040516323b872dd60e01b81523360048201523060248201526001600160801b03871660448201526001600160a01b038b16906020816064815f865af19081156104a5575f916118fa575b50156118eb57803b1561019357604051630852cd8d60e31b81526001600160801b039790971660048801525f908790602490829084905af180156104a5577f34ca953f3eed14157d2f660c7e92a5bd9c05be0d61a188830f3bf1cb7d094f96996118cc97611899926118d1575b506118136117b86117b36004546001600160401b031690565b61146e565b956117d9876001600160401b03166001600160401b03196004541617600455565b6117f4876001600160401b03165f52600560205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b61181b610dc6565b6001600160a01b038d1681529033602083015260408201526001600160a01b03891660608201526001600160801b038a1660808201526001600160801b038d1660a082015260c081018390526001600160401b03841660e08201526001600160401b03851661010082015285610120820152866101408201526112ae565b5f5460801c6001600160401b03169a6118b4610c918d61146e565b6040519889986001600160401b03339e169c8a611575565b0390a3565b806118df5f6118e593610da5565b80610189565b5f61179a565b6312171d8360e31b5f5260045ffd5b61191c915060203d602011611922575b6119148183610da5565b810190611517565b5f61172d565b503d61190a565b632968ee7f60e21b5f5260045ffd5b61195b91995060203d602011611962575b6119538183610da5565b810190611566565b975f6116db565b503d611949565b61199661198a6001600160401b034316926001600160401b039060801c1690565b6001600160401b031690565b8103611a1b575b506002546119c86119bf606083901c63ffffffff169260401c63ffffffff1690565b63ffffffff1690565b63ffffffff82161015611a0c576119e1611a069161152f565b6002805463ffffffff60601b191660609290921b63ffffffff60601b16919091179055565b5f611696565b63124ab48560e11b5f5260045ffd5b6002805460809290921b67ffffffffffffffff60801b166bffffffffffffffffffffffff60601b199092169190911790555f61199d565b634b8a874d60e11b5f5260045ffd5b631fcf8c4760e11b5f5260045ffd5b611a89915060203d602011611922576119148183610da5565b5f611661565b5f1981019190821161148b57565b604080825282516001600160a01b031690820152929190602090611b629080830151606087015260408101516001600160a01b0316608087015260608101516001600160801b031660a087015260808101516001600160801b031660c087015260a081015160e087015260c08101516001600160401b031661010087015260e08101516001600160401b0316610120870152610120611b4d610100830151610140808a0152610180890190610894565b910151868203603f1901610160880152610894565b930152565b611b718154610f10565b9081611b7b575050565b81601f5f9311600114611b8c575055565b81835260208320611ba991601f0160051c8419019060010161117b565b808252602082209081548360011b9084198560031b1c191617905555565b90611455576008815f610dd693555f60018201555f60028201555f60038201555f60048201555f60058201555f6006820155611c0560078201611b67565b01611b67565b6003545f60035580611c1a5750565b8060090290600982040361148b5760035f5260205f205f5b828110611c3e57505050565b80611c7c600860099385015f81555f60018201555f60028201555f60038201555f60048201555f60058201555f6006820155611c0560078201611b67565b01611c32565b9092915f9333151580611f78575b610407576001600160401b03804316911603611f6957600354808303611f5257508051828103611f3b575081611d79575b5050611cfc611ce0611cdb6002546001600160401b031690565b6114b4565b6001600160401b03166001600160401b03196002541617600255565b817fec4aff46c65f485f4b15e3c2edadda1d57d002995f5aa262a27c76b9a680ec16611d74611d336002546001600160401b031690565b611d3c84600155565b600280546001600160c01b03164260c01b6001600160c01b0319161790556040516001600160401b0390911681529081906020820190565b0390a2565b5f19935090805b611d95575050611d8e611c0b565b5f80611cc1565b611d9e81611a8f565b93611da885610ec2565b50611db290610fe6565b611dbc8685610efc565b518061014083015190611dce91612053565b8151602080840151604080860151905160609290921b6bffffffffffffffffffffffff191692820192835260348083019190915281526001600160a01b039092169391611e1c605482610da5565b51902060608201519091906001600160a01b031660808201516001600160801b031660a08301516001600160801b031660c08401519160e0850151611e67906001600160401b031690565b93610100860151611e7e906001600160401b031690565b95610120015196611e8d610dd8565b6001600160a01b03909a168a5260208a01526001600160a01b031660408901526001600160801b031660608801526001600160801b0316608087015260a08601526001600160401b031660c08501526001600160401b031660e084015261010083015261012082015260405180916020820193611f0a9185611a9d565b03601f1981018252611f1c9082610da5565b51902093611f2990610ec2565b611f3291611bc7565b5f190180611d80565b630db2128560e11b5f52600452602482905260445ffd5b6324a839db60e11b5f52600483905260245260445ffd5b631391e11b60e21b5f5260045ffd5b50604051630b83774760e31b81526020816004817f0000000000000000000000001c000000000000000000000000000000000000036001600160a01b03165afa9081156104a5575f91611fd8575b506001600160a01b0316331415611c90565b611ff1915060203d60201161049e576104908183610da5565b5f611fc6565b8051801561204f5760210361204057805115610ede576020810151612026906120229060f81c612084565b1590565b61204057612022602161203a9201516120ef565b61204057565b6361d0136b60e11b5f5260045ffd5b5050565b5161207c575f905b51818103612067575050565b63521a2d4d60e11b5f5260045260245260445ffd5b60719061205b565b60ff1660028114908115612096575090565b600391501490565b3d156120c8573d906120af82610e0b565b916120bd6040519384610da5565b82523d5f602084013e565b606090565b6020815191015190602081106120e1575090565b5f199060200360031b1b1690565b8015801561219b575b61218a575f9081906401000003d0199060079082908181800909086040805160208082018181529282018190526060820152608081019290925263800001e9600160ff1b0360a08301526401000003d01960c08084019190915282529061216060e082610da5565b519060055afa61216e61209e565b9015801561218f575b61218a576121866001916120cd565b1490565b505f90565b50602081511415612177565b506401000003d0198110156120f856fea2646970667358221220366d95b879ab03311070fbd79cb93bc63cad865319974c04a4a72ee850008cc264736f6c63430008230033", "nonce": "0x1" }, "0x1c00000000000000000000000000000000000003": { "balance": "0x0", - "code": "0x6080806040526004361015610012575f80fd5b5f3560e01c9081631beb1ab814610561575080631fbb25ad1461051d5780633488ce0d146102dd5780635c1bba381461023b5780636d46e98714610193578063a21de6d91461014f5763e202d99514610069575f80fd5b34610138575f366003190112610138576040516381e3da6b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260026024830152602090829060449082907f0000000000000000000000001c00000000000000000000000000000000000000165afa8015610144575f9061010d575b6040516001600160a01b039091168152602090f35b506020813d60201161013c575b816101276020938361067c565b8101031261013857602090516100f8565b5f80fd5b3d915061011a565b6040513d5f823e3d90fd5b34610138575f366003190112610138576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610138576020366003190112610138576004356001600160a01b0381169081900361013857604051630b83774760e31b8152602081600481305afa908115610144575f916101f6575b506040516001600160a01b039091169091148152602090f35b90506020813d602011610233575b816102116020938361067c565b810103126101385751906001600160a01b0382168203610138579060206101dd565b3d9150610204565b34610138575f366003190112610138576040516381e3da6b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f6024830152602090829060449082907f0000000000000000000000001c00000000000000000000000000000000000000165afa8015610144575f9061010d576040516001600160a01b039091168152602090f35b34610138575f366003190112610138576040516381e3da6b60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038181166004840152600760248401527f0000000000000000000000001c00000000000000000000000000000000000000169190602082604481865afa918215610144575f926104e9575b5081156104da576040516020810190600782526020815261038f60408261067c565b519020915f1981019081116104c6578060011b90808204600214901517156104c65782018092116104c65760018201908183116104c6576040516381e3da6b60e01b81526001600160a01b03821660048201526024810193909352602083604481875afa928315610144575f9361048e575b506040516381e3da6b60e01b81526001600160a01b03909116600482015260248101919091529160209083908180604481015b03915afa918215610144575f92610459575b5060ff6040928351928352166020820152f35b91506020823d602011610486575b816104746020938361067c565b810103126101385790519060ff610446565b3d9150610467565b919092506020823d6020116104be575b816104ab6020938361067c565b8101031261013857905191610434610401565b3d915061049e565b634e487b7160e01b5f52601160045260245ffd5b630c322fb560e31b5f5260045ffd5b9091506020813d602011610515575b816105056020938361067c565b810103126101385751908361036d565b3d91506104f8565b34610138575f366003190112610138576040517f0000000000000000000000001c000000000000000000000000000000000000006001600160a01b03168152602090f35b34610138576020366003190112610138576004356001600160a01b0381169190829003610138576105fe9181602080930191825260086040820152604081526105ab60608261067c565b5190206040516381e3da6b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602481019190915291829081906044820190565b03817f0000000000000000000000001c000000000000000000000000000000000000006001600160a01b03165afa8015610144575f90610649575b60209060ff604051911615158152f35b506020813d602011610674575b816106636020938361067c565b810103126101385760209051610639565b3d9150610656565b90601f8019910116810190811067ffffffffffffffff82111761069e57604052565b634e487b7160e01b5f52604160045260245ffdfea26469706673582212203429d776cda058be2d19a4198c33fa6c2b89f0e67020df0330b8fbe4c1307cf964736f6c63430008230033", + "code": "0x6080806040526004361015610012575f80fd5b5f3560e01c9081631beb1ab814610561575080631fbb25ad1461051d5780633488ce0d146102dd5780635c1bba381461023b5780636d46e98714610193578063a21de6d91461014f5763e202d99514610069575f80fd5b34610138575f366003190112610138576040516381e3da6b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260026024830152602090829060449082907f0000000000000000000000001c00000000000000000000000000000000000000165afa8015610144575f9061010d575b6040516001600160a01b039091168152602090f35b506020813d60201161013c575b816101276020938361067c565b8101031261013857602090516100f8565b5f80fd5b3d915061011a565b6040513d5f823e3d90fd5b34610138575f366003190112610138576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610138576020366003190112610138576004356001600160a01b0381169081900361013857604051630b83774760e31b8152602081600481305afa908115610144575f916101f6575b506040516001600160a01b039091169091148152602090f35b90506020813d602011610233575b816102116020938361067c565b810103126101385751906001600160a01b0382168203610138579060206101dd565b3d9150610204565b34610138575f366003190112610138576040516381e3da6b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f6024830152602090829060449082907f0000000000000000000000001c00000000000000000000000000000000000000165afa8015610144575f9061010d576040516001600160a01b039091168152602090f35b34610138575f366003190112610138576040516381e3da6b60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038181166004840152600760248401527f0000000000000000000000001c00000000000000000000000000000000000000169190602082604481865afa918215610144575f926104e9575b5081156104da576040516020810190600782526020815261038f60408261067c565b519020915f1981019081116104c6578060011b90808204600214901517156104c65782018092116104c65760018201908183116104c6576040516381e3da6b60e01b81526001600160a01b03821660048201526024810193909352602083604481875afa928315610144575f9361048e575b506040516381e3da6b60e01b81526001600160a01b03909116600482015260248101919091529160209083908180604481015b03915afa918215610144575f92610459575b5060ff6040928351928352166020820152f35b91506020823d602011610486575b816104746020938361067c565b810103126101385790519060ff610446565b3d9150610467565b919092506020823d6020116104be575b816104ab6020938361067c565b8101031261013857905191610434610401565b3d915061049e565b634e487b7160e01b5f52601160045260245ffd5b630c322fb560e31b5f5260045ffd5b9091506020813d602011610515575b816105056020938361067c565b810103126101385751908361036d565b3d91506104f8565b34610138575f366003190112610138576040517f0000000000000000000000001c000000000000000000000000000000000000006001600160a01b03168152602090f35b34610138576020366003190112610138576004356001600160a01b0381169190829003610138576105fe9181602080930191825260086040820152604081526105ab60608261067c565b5190206040516381e3da6b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602481019190915291829081906044820190565b03817f0000000000000000000000001c000000000000000000000000000000000000006001600160a01b03165afa8015610144575f90610649575b60209060ff604051911615158152f35b506020813d602011610674575b816106636020938361067c565b810103126101385760209051610639565b3d9150610656565b90601f8019910116810190811067ffffffffffffffff82111761069e57604052565b634e487b7160e01b5f52604160045260245ffdfea2646970667358221220f19f511f5fcae8d8b6b604b414272ee65e4c018a339290392e75c3d996f2b66064736f6c63430008230033", "nonce": "0x1" }, "0x20c0000000000000000000000000000000000000": { @@ -138,5 +138,5 @@ "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x42", "timestamp": "0x0", - "zoneFactoryBytecode": "0x60808060405234610138575f805463ffffffff191660011781556003600755600680546001600160a01b03191633908117909155907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36101a28181016001600160401b03811183821017610124578291614c96833903905ff08015610119576001600160a01b03165f8181526003602052604090819020805460ff19166001179055600480546001600160a01b031916909217909155516105a2808201906001600160401b03821183831017610124576020918391614e3883393081520301905ff0801561011957600580546001600160a01b0319166001600160a01b0392909216919091179055604051614b59908161013d8239f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301b290d314610edc575080632b7ac3f314610eb45780632d45796a146104815780633cb747bf1461045857806374134d371461043a57806376628f83146103f85780638da5cb5b146103cf57806390b7f6fd14610174578063eee83499146101275763f2fde38b1461008c575f80fd5b34610124576020366003190112610124576004356001600160a01b03811690819003610122576006546001600160a01b0381169033829003610113578215610104576001600160a01b03191682176006557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6349e27cff60e01b8452600484fd5b6330cd747160e01b8452600484fd5b505b80fd5b50346101245780600319360112610124575f1963ffffffff825416019063ffffffff82116101605760208263ffffffff60405191168152f35b634e487b7160e01b81526011600452602490fd5b50346101245760203660031901126101245760043563ffffffff81168091036101225760606101206040516101a881610f2e565b84815284602082015284604082015284838201528460808201528460a08201528460c08201528460e0820152846101008201520152815260016020526040812090604051906101f682610f2e565b825463ffffffff811683526001600160a01b03602091821c811691840191825260018501548116604080860191825260028701548316606087019081526003880154841660808801908152600489015490941660a08801908152600589015460c0890190815260068a015460e08a0190815260078b01546001600160401b03166101008b0190815294516008909b018054989b989597919692959394919391929189918b91906102a582610fb1565b80855291600181169081156103b15750600114610377575b5050036102ca9089610f4a565b6101208a81019889526040805160208082529c5163ffffffff168d8201529c516001600160a01b03908116918e01919091529151821660608d01529151811660808c01529151821660a08b015291511660c0890152905160e0880152905161010087015290516001600160401b031690850152516101408085015280516101608501819052849390929183910161018085015e8183016101800152601f1990601f01168101036101800190f35b8c5260208c208c92505b81831061039657505081016020015f806102bd565b80602092948385600194549201015201910190918a92610381565b9150506020925060ff191682840152151560051b8201015f806102bd565b50346101245780600319360112610124576006546040516001600160a01b039091168152602090f35b5034610124576020366003190112610124576004356001600160a01b038116908190036101225760408260ff9260209452600384522054166040519015158152f35b5034610124578060031936011261012457602060405162e4e1c08152f35b50346101245780600319360112610124576005546040516001600160a01b039091168152602090f35b5034610c3c576020366003190112610c3c576001600160401b0360043511610c3c5761010060043536036003190112610c3c576006546001600160a01b03163303610ea5576104d4600435600401610f1a565b6040516335ec42c960e01b81526001600160a01b03909116600482015260208160248161083f60921b5afa908115610c31575f91610e6a575b5015610e5b576001600160a01b03610529600435602401610f1a565b1615610e4c576001600160a01b03610545600435604401610f1a565b1615610e3d576001600160a01b03610561600435606401610f1a565b165f52600360205260ff60405f20541615610e2e5762e4e1c05a10610e1f575f5463ffffffff80821614610e1057600163ffffffff82160163ffffffff8111610dfc5763ffffffff1663ffffffff198216175f5560075460018101808211610dfc57600755606081610c54575050604051606b60f91b6020820152602560fa1b60218201523060601b6022820152600160ff1b603682015260178152610608603782610f4a565b60018060a01b03906020815191012016604051613b3a8082018281106001600160401b03821117610c40578291610fea833903905ff0908115610c3157610653600435600401610f1a565b6005546001600160a01b031661066d600435602401610f1a565b61067b604460043501610f1a565b610689606460043501610f1a565b9061069860c460043501610f6b565b926106ad60e460043501600435600401610f7f565b91906001600160a01b038a163b15610c3c576001600160401b0363ffffffff96610144968d9686955f9b6040519d8e9c8d9b633fd2490760e01b8d521660048c015260018060a01b031660248b015260448a015260018060a01b0316606489015260018060a01b0316608488015260018060a01b031660a48701526084600435013560c48701521660e485015261012061010485015281610124850152848401378181018301859052601f01601f19168101030181836001600160a01b0388165af18015610c3157610c1c575b506001600160a01b03821603610bc057610798600435600401610f1a565b6107a6602460043501610f1a565b6107b4604460043501610f1a565b906001600160401b036107cb606460043501610f1a565b6107d960c460043501610f6b565b906107ee60e460043501600435600401610f7f565b959094604051976107fe89610f2e565b63ffffffff8b1689526001600160a01b038a811660208b015290811660408a0152908116606089015290811660808801521660a0860152600435608481013560c087015260a4013560e0860152166101008401526001600160401b038211610ba85785906040519261087a6020601f19601f8401160185610f4a565b8084523681830111610bbc57806020928386013783010152610120820190815263ffffffff848116865260016020818152604080892086518154848901516001600160c01b031990911691909616179490921b640100000000600160c01b03169390931781559184015190820180546001600160a01b03199081166001600160a01b0393841617909155606085015160028401805483169184169190911790556080850151600384018054831691841691909117905560a0850151600484018054909216921691909117905560c0830151600582015560e083015160068201556101009092015160078301805467ffffffffffffffff19166001600160401b0392831617905590518051918211610ba8576109986008840154610fb1565b601f8111610b53575b50602090601f8311600114610ae257828793604098936008938a979592610ad7575b50508160011b915f199060031b1c1916179101555b6001600160a01b0383168152600260205220805460ff19166001179055610a026004803501610f1a565b6001600160401b03610a18602460043501610f1a565b610a26604460043501610f1a565b610a34606460043501610f1a565b90610a4360c460043501610f6b565b88516001600160a01b03968716815293861660208501529085168389015290841660608301526004356084810135608084015260a4013560a08301529190911660c08201529082169063ffffffff8416907fa0d8b561b80ba334b8b367f1fd53ab8d8719fa1c348a8de4bbfd8bbffa90b3379060e090a3825163ffffffff9290921682526001600160a01b03166020820152f35b015190505f806109c3565b9060088401875280872091875b601f1985168110610b3b57508360409894936008936001938b9896601f19811610610b23575b505050811b019101556109d8565b01515f1960f88460031b161c191690555f8080610b15565b91926020600181928685015181550194019201610aef565b828111156109a15760088401875260208720601f840160051c9060208510610ba0575b81601f9101920160051c0390875b828110610b925750506109a1565b808960019284015501610b84565b889150610b76565b634e487b7160e01b86526041600452602486fd5b8280fd5b60405162461bcd60e51b815260206004820152602e60248201527f506f7274616c2061646472657373206d69736d61746368202d206e6f6e63652060448201526d3a3930b1b5b4b7339032b93937b960911b6064820152608490fd5b610c299194505f90610f4a565b5f925f61077a565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b607f8211610ca65750604051606b60f91b6020820152602560fa1b60218201523060601b602282015260f89190911b6001600160f81b031916603682015260178152610ca1603782610f4a565b610608565b60ff8211610cfd575060405160d760f81b6020820152602560fa1b60218201523060601b6022820152608160f81b603682015260f89190911b6001600160f81b031916603782015260188152610ca1603882610f4a565b61ffff8211610d555750604051601b60fb1b6020820152602560fa1b60218201523060601b6022820152604160f91b603682015260f09190911b6001600160f01b031916603782015260198152610ca1603982610f4a565b62ffffff8211610dae575060405160d960f81b6020820152602560fa1b60218201523060601b6022820152608360f81b603682015260e89190911b6001600160e81b0319166037820152601a8152610ca1603a82610f4a565b604051606d60f91b6020820152602560fa1b60218201523090911b6022820152602160fa1b603682015260e09190911b6001600160e01b0319166037820152601b8152610ca1603b82610f4a565b634e487b7160e01b5f52601160045260245ffd5b63e558bfa360e01b5f5260045ffd5b6307099c5360e21b5f5260045ffd5b63baa3de5f60e01b5f5260045ffd5b633c9f858360e21b5f5260045ffd5b630b5eba9f60e41b5f5260045ffd5b63c1ab6dc160e01b5f5260045ffd5b90506020813d602011610e9d575b81610e8560209383610f4a565b81010312610c3c57518015158103610c3c575f61050d565b3d9150610e78565b6330cd747160e01b5f5260045ffd5b34610c3c575f366003190112610c3c576004546040516001600160a01b039091168152602090f35b34610c3c576020366003190112610c3c576004356001600160a01b0381169190829003610c3c576020915f526002825260ff60405f20541615158152f35b356001600160a01b0381168103610c3c5790565b61014081019081106001600160401b03821117610c4057604052565b90601f801991011681019081106001600160401b03821117610c4057604052565b356001600160401b0381168103610c3c5790565b903590601e1981360301821215610c3c57018035906001600160401b038211610c3c57602001918136038313610c3c57565b90600182811c92168015610fdf575b6020831014610fcb57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610fc056fe60808060405234601557613b20908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c9081625d97ef146126af57508062ebfdb41461262557806309a0a234146123575780630d0c743e14611f235780630e18b68114611e945780630e86bbdc14611dff5780632678224714611dd657806327c71b5014611d505780632b7ac3f314611d275780632c37826e14611cfd5780632dfdf0b514611cd65780633488ce0d14611c6b57806337f981d814611c1657806339dc015d14611aad5780633cb747bf14611a845780633fd24907146117d05780634256ce38146117b257806345c5d2fb14611794578063580bbcfc1461176a5780635c1bba3814611743578063652ef10b14611568578063748538d91461152957806375829def146114a45780638081a8b21461148657806383a146b31461146b578063857e85f81461140f57806386f47e55146113f15780638976248d146113c557806394ce88b0146113a7578063959f47c3146112d35780639a97784b146112305780639ecd4cc0146111f8578063b01f22e414610bed578063b02690f214610bb5578063be2a63ee14610b8b578063bf8e244014610b07578063bffa55d514610a48578063c13a2d4b146109cf578063c690908a146108db578063cfaabb4d146108b1578063d179978a1461088d578063e09eae10146107fb578063e202d995146107d2578063e4643e8514610745578063e471784914610727578063e84abe69146106fd578063ecf79a4e146106d6578063ef10b1871461038e578063f22a195e14610370578063f490ca961461034d578063f706cfbf1461032f578063f851a44014610306578063fb2f1206146102e55763fe136c4e1461026e575f80fd5b346102e25760203660031901126102e2576040809161028b612855565b8160208451610299816129c4565b82815201526001600160a01b031681526008602052208151906102bb826129c4565b5460ff6020818316151593848152019160081c161515815282519182525115156020820152f35b80fd5b50346102e257806003193601126102e257602060065460c01c604051908152f35b50346102e257806003193601126102e2576001546040516001600160a01b039091168152602090f35b50346102e257806003193601126102e2576020604051620186a08152f35b50346102e257806003193601126102e2576020604051670de0b6b3a76400008152f35b50346102e257806003193601126102e2576020600454604051908152f35b50346102e25760a03660031901126102e25760043560243560ff8116908181036106d2576044359060ff82168092036106ce5784546001600160a01b031633036106bf576103db90613856565b156106b0576103e983613892565b156106b057836080602092604051848101903082528760408201528660608201526060815261041884826129df565b51902090604051918252848201526064356040820152608435606082015282805260015afa156106a557825183806401000003d019600781878181800909086040516020810191602083526020604083015260206060830152608082015263400000f4600160fe1b0360a08201526401000003d01960c082015260c081526104a160e0826129df565b519060055afa6104af61354b565b908061069a575b15610665576104c490613870565b6002831460018216150361063b575b6040519060208201908582526040830152604082526104f36060836129df565b905190206001600160a01b03918216801592909116908215610630575b5050610621576001600160401b0343169060405161052d816129a9565b83815260208101908282526040810190848252600754600160401b81101561060d5780600161055f9201600755612acd565b9190916105f95760ff916001915181550192511668ffffffffffffffff008354925160081b169168ffffffffffffffffff191617179055600754905f1982019182116105e557917f82b5f4090f18a082bc8156b956154bfe0319307f5e5a7e903ef33f14ad2cb17e9391608093604051938452602084015260408301526060820152a180f35b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b88526004889052602488fd5b634e487b7160e01b88526041600452602488fd5b6392536faf60e01b8352600483fd5b141590505f80610510565b6401000003d019036401000003d0198111156104d357634e487b7160e01b85526011600452602485fd5b60405162461bcd60e51b815260206004820152600d60248201526c1b5bd9195e1c0819985a5b1959609a1b6044820152606490fd5b5060208151146104b6565b6040513d84823e3d90fd5b632f0be49b60e11b8452600484fd5b6314f8a09f60e21b8552600485fd5b8480fd5b8380fd5b50346102e257806003193601126102e25760206001600160801b0360035416604051908152f35b50346102e257806003193601126102e25760206001600160401b0360065460401c16604051908152f35b50346102e257806003193601126102e2576020600954604051908152f35b50346102e257806003193601126102e2576002546001600160a01b03811690811580156107c8575b6107b95782546001600160a01b0319808216841785559091166002556001600160a01b03167f9945af900637995146537e5ea7a7be455dfd08bbb46fdd79e9c3a2bad0c4eef88380a380f35b63d71402d960e01b8352600483fd5b508133141561076d565b50346102e257806003193601126102e2576002546040516001600160a01b039091168152602090f35b50346102e25760203660031901126102e2576108156128d5565b81546001600160a01b0316330361087e57600680546001600160c01b031660c083901b6001600160c01b0319161790556040516001600160401b0390911681527f66bcd750662bb66118e25a8e421ae73974634d9af2d44fb9e600d250917fe69090602090a180f35b6314f8a09f60e21b8252600482fd5b50346102e257806003193601126102e257602063ffffffff60115416604051908152f35b50346102e25760203660031901126102e25760406020916004358152600d83522054604051908152f35b50346102e25760203660031901126102e2576108f5612855565b6001546001600160a01b031633036109c0576001600160a01b0381168083526008602052604083205460ff166109b1576040516335ec42c960e01b8152600481019190915260208160248161083f60921b5afa9081156109a6578391610977575b5015610968576109659061369e565b80f35b631fcf8c4760e11b8252600482fd5b610999915060203d60201161099f575b61099181836129df565b810190612a24565b5f610956565b503d610987565b6040513d85823e3d90fd5b632909298f60e11b8352600483fd5b637bfa4b9f60e01b8252600482fd5b50346102e25760403660031901126102e2576004356001600160401b038111610a44576101406003198236030112610a445781546001600160a01b0316330361087e57601054610a3557610a2e90600160105560243590600401612c9a565b8060105580f35b630b5c738160e01b8252600482fd5b5080fd5b50346102e25760203660031901126102e257610a62612855565b6001600160a01b038116808352600a60208181526040808620335f818152918452828220548689529484528288208183529093522080546001600160801b03191690556001600160801b0390911692610abc91849161394b565b15610af857602092506040518281527fffd3bbab073ab4b2d0792c270104924c14c285a153b9acddabae166395d2eb5c843392a3604051908152f35b63be51ced360e01b8352600483fd5b50346102e25760203660031901126102e257610b21612855565b81546001600160a01b03169033829003610b7c57600280546001600160a01b0319166001600160a01b03929092169182179055907f12cf9e4d760566fb6a3e0193406f2295fc4b53f2b60817145a61f29e470cf7d68380a380f35b6314f8a09f60e21b8352600483fd5b50346102e257806003193601126102e25760206001600160401b0360065460801c16604051908152f35b50346102e25760203660031901126102e2576020610bd4600435612c5a565b905460405160039290921b1c6001600160a01b03168152f35b50346102e25760a03660031901126102e257610c07612855565b906024356001600160801b0381168103610a44576001600160401b0360643511610a445760a060643536036003190112610a4457610c43612881565b906001600160a01b038216156111e957610c5c846132dc565b604051639c4bad2960e01b81526020816004816001600160a01b0389165afa9081156111b15783610ccb9260209287916111bc575b506040516337de09eb60e11b81526001600160401b0390911660048201526001600160a01b03909116602482015291829081906044820190565b038161100f60921b5afa9081156111b1578491611192575b501561118357610cff610cfa602460643501612bff565b613856565b1561117457610d1360643560040135613892565b15611174576040610d2e604460643501606435600401612c0d565b90500361114957610d40604435612b6b565b50156110b757610d509084613367565b9060405192610d5e8461297a565b6001600160a01b0386811685523360208601526001600160801b03841660408087019190915290821660608601526044356080860152519360a085016001600160401b038111868210176110a3576040526064356004013585526024606435013560ff8116810361109f5760208601526001600160401b03604460643501351161109b5736606435604481013501602301121561109b57610e0a60643560448101350160040135612c3f565b610e1760405191826129df565b606435604481013501600481013580835236602491909201011161109f5760643560448101350160048101359060240160208301376064803560448101358101600401358301602001899052604088019290925201356001600160a01b03198116900361109b57606480350135606086015260846064350135946001600160801b03198616958681036110975792611054886080610fcb6001600160401b03968660209e99847f4debdbd2891da07eb466d2025028a25aab636034cf3c941afd1025a0c590a07a9c99015260a082019081526005549060405194602093869485019750600188526060604086015260018060a01b038151168286015260018060a01b0360208201511660a08601526001600160801b0360408201511660c086015260018060a01b0360608201511660e08601520151610100840152519060c061012084015281516101408401528f60ff9083015116610160840152610f8d604083015160a06101808601526101e0850190612a00565b6060808401516001600160a01b0319166101a08601526080909301516001600160801b0319166101c08501529183015203601f1981018352826129df565b51902098899760ff610fdc8a613515565b956001600160801b03610ff3602460643501612bff565b9181611009604460643501606435600401612c0d565b969097506040519c60018060a01b03168d521660208c01521660408a015260443560608a01526064356004013560808a01521660a088015261016060c0880152610160870191612a3c565b6064803501356001600160a01b03191660e08601526101008501979097526001600160a01b031661012084015216610140820152339381900390a3604051908152f35b8780fd5b8580fd5b8680fd5b634e487b7160e01b87526041600452602487fd5b826007546044351015611134576110cf604435612acd565b5090600160443501918260443511611120576001600160401b03600181816110f8606497612acd565b5094015460081c1692015460081c169063034dff0f60e01b8352604435600452602452604452fd5b634e487b7160e01b82526011600452602482fd5b637f455d3760e11b8152604435600452602490fd5b60448361115f8260643501606435600401612c0d565b632331a96360e11b8352600452506040602452fd5b632f0be49b60e11b8352600483fd5b6354cfe65960e01b8352600483fd5b6111ab915060203d60201161099f5761099181836129df565b5f610ce3565b6040513d86823e3d90fd5b6111dc9150833d85116111e2575b6111d481836129df565b810190612be0565b5f610c91565b503d6111ca565b638dc30b3960e01b8352600483fd5b50346102e25760203660031901126102e25760406001600160401b0361121f600435612b6b565b835191151582529091166020820152f35b50346102e25760203660031901126102e257600435908060408051611254816129a9565b82815282602082015201526007548210156112c157606061127483612acd565b506001600160401b03604051611289816129a9565b60ff600184549485845201549183604060208301928486168452019360081c1683526040519485525116602084015251166040820152f35b602491637f455d3760e11b8252600452fd5b50346102e257806003193601126102e2576040519080600e54906112f682612942565b80855291600181169081156113805750600114611336575b6113328461131e818603826129df565b604051918291602083526020830190612a00565b0390f35b600e81525f516020613aab5f395f51905f52939250905b8082106113665750909150810160200161131e8261130e565b91926001816020925483858801015201910190929161134d565b60ff191660208087019190915292151560051b8501909201925061131e915083905061130e565b50346102e257806003193601126102e2576020600b54604051908152f35b50346102e257806003193601126102e25760206113e0612b46565b6001600160801b0360405191168152f35b50346102e257806003193601126102e2576020604051629896808152f35b50346102e25760403660031901126102e257604061142b612855565b9161143461286b565b9260018060a01b03168152600a602052209060018060a01b03165f5260205260206001600160801b0360405f205416604051908152f35b50346102e257806003193601126102e25760206113e0612afd565b50346102e257806003193601126102e2576020600c54604051908152f35b50346102e25760203660031901126102e2576114be612855565b6001546001600160a01b0316903382900361151a57600f80546001600160a01b0319166001600160a01b03929092169182179055907fe5cd1c804f1c9cc6d7009e4c0fb532f0e2d8863524c3323a6b3790c3f80bf25c8380a380f35b637bfa4b9f60e01b8352600483fd5b50346102e25760203660031901126102e25760209060ff906040906001600160a01b03611554612855565b168152600884522054166040519015158152f35b50346102e25760203660031901126102e2576004356001600160401b038111610a4457611599903690600401612915565b8254909291906001600160a01b0316330361087e576001600160401b03831161172f576115c7600e54612942565b601f81116116d3575b508192601f8111600114611645578083947ff4e00967b25e707df96d88676243b33be84847ef27615af8ef91290b52294fc6949161163a575b508160011b905f198360031b1c191617600e555b611634604051928392602084526020840191612a3c565b0390a180f35b90508201355f611609565b600e8352601f198116935f516020613aab5f395f51905f5290845b8681106116bb5750827ff4e00967b25e707df96d88676243b33be84847ef27615af8ef91290b52294fc69596106116a2575b5050600181811b01600e5561161d565b8301355f19600384901b60f8161c191690555f80611692565b90916020600181928588013581550193019101611660565b838111156115d057600e8352601f840160051c9060208510611727575b601f82910160051c0390835b82811061170a5750506115d0565b80855f516020613aab5f395f51905f5260019385010155016116fc565b8391506116f0565b634e487b7160e01b82526041600452602482fd5b50346102e257806003193601126102e257546040516001600160a01b039091168152602090f35b50346102e257806003193601126102e25760206001600160401b0360125460a01c16604051908152f35b50346102e257806003193601126102e2576020600554604051908152f35b50346102e257806003193601126102e2576020600754604051908152f35b50346102e2576101203660031901126102e25760043563ffffffff8116809103610a44576117fc61286b565b906044356001600160a01b03811681036106d2576064356001600160a01b03811692908390036106ce5761182e612881565b60a4356001600160a01b038116919082900361109f5761184c6128eb565b90610104356001600160401b038111611a805761186d903690600401612915565b969095735af1ffffffffffffffffffffffffffffffffffff193301611a71576012549560ff8760e01c16611a6357601180546001600160c01b0319169190911760209290921b640100000000600160c01b0316919091179055600180546001600160a01b03199081169290921790558854166001600160a01b039190911617875560c4356004556001600160e81b03199092161760a09190911b67ffffffffffffffff60a01b1617600160e01b176012556001600160401b038211611a4f57611937600e54612942565b601f81116119f3575b508390601f831160011461198057610965939291859183611975575b50508160011b915f199060031b1c191617600e5561369e565b013590505f8061195c565b600e85525f516020613aab5f395f51905f5291601f198416865b8181106119db5750916001939185610965979694106119c2575b505050811b01600e5561369e565b01355f19600384901b60f8161c191690555f80806119b4565b9193602060018192878701358155019501920161199a565b8281111561194057600e8552601f830160051c9060208410611a47575b601f82910160051c0390855b828110611a2a575050611940565b80875f516020613aab5f395f51905f526001938501015501611a1c565b859150611a10565b634e487b7160e01b84526041600452602484fd5b62dc149f60e41b8b5260048bfd5b631966391b60e11b8a5260048afd5b8880fd5b50346102e257806003193601126102e257601154604051602091821c6001600160a01b03168152f35b50346102e25760203660031901126102e257611ac76128d5565b906007549081158015611bbc575b611ba05780915f19810190811161112057836001600160401b0384929116925b818310611b2657606083611b0881612acd565b509060ff600183549301541660405192835260208301526040820152f35b9091828101808211611b8c5760018101809111611b8c5760011c90846001600160401b036001611b5585612acd565b50015460081c1611611b6a5750915b90611af5565b92505f19810190811115611b6457634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526011600452602483fd5b63302c66ab60e21b81526001600160401b038316600452602490fd5b5060075415611c0257600781527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6895460081c6001600160401b0390811690841610611ad5565b634e487b7160e01b81526032600452602490fd5b50346102e25760203660031901126102e2576020906040906001600160a01b03611c3e612855565b16815260088352205460ff81169081611c5d575b506040519015158152f35b60ff915060081c165f611c52565b50346102e257806003193601126102e257600754908115611cc7575f198201918211611cb3576040611c9c83612acd565b5060ff600182549201541682519182526020820152f35b634e487b7160e01b81526011600452602490fd5b630c322fb560e31b8152600490fd5b50346102e257806003193601126102e25760206001600160401b0360065416604051908152f35b50346102e257806003193601126102e25760206001600160401b0360035460801c16604051908152f35b50346102e257806003193601126102e2576012546040516001600160a01b039091168152602090f35b50346102e25760203660031901126102e257611d6a612855565b6001546001600160a01b031633036109c0576001600160a01b03168082526008602052604082205460ff161561096857808252600860205260408220805461ff00191690557feb225a736fbfee3f85ccb72bdf84ff0396ab358b7970e2cc351ab3e3fd92358d8280a280f35b50346102e257806003193601126102e257600f546040516001600160a01b039091168152602090f35b50346102e25760203660031901126102e2576004356001600160801b038116809103610a445781546001600160a01b0316330361087e57670de0b6b3a76400008111611e85576020817fc62141e607d6fcbf7d11fd2b6d8e18e5ebef6d3fff8136ca98822801abbaea38926001600160801b03196003541617600355604051908152a180f35b630d62f21160e11b8252600482fd5b50346102e257806003193601126102e257600f546001600160a01b0381169081158015611f19575b611f0a57600180546001600160a01b031980821685179092559116600f556001600160a01b03167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec68380a380f35b63058d9a1b60e01b8352600483fd5b5081331415611ebc565b50346102e2576101603660031901126102e257611f3e6128d5565b6024356001600160401b038116918282036106d25760403660431901126106d25760803660831901126106d2576101043591610124356001600160401b03811161109b57611f90903690600401612915565b9094610144356001600160401b03811161109757611fb2903690600401612915565b88546001600160a01b03169190338390036123485760443593600454850361233957601254906001600160401b038916976001600160401b038360a01c1689106122fa578161231857505087944388116123095761200f8861357a565b945b85156122fa5761201f612a5c565b98600654996001600160401b03808c60401c169116148015906122d7575b80156122bb575b6122ac57908d96959493929163ffffffff6011541696600354996001600160401b038b60801c16995060018a01926001600160401b038411612295576001600160401b0393929184916040519b632d8a30cd60e21b8d5260048d015260248c01521660448a0152606489015216608487015260a486015260c4850152606435968760e486015260843561010486015260a4359b8c61012487015260c435916001600160401b03831680930361229157602095879561213d8f946121509489979688976101448901526001600160401b0361211c6128eb565b166101648901526101848801526101e06101a48801526101e4870191612a3c565b848103600319016101c486015291612a3c565b03916001600160a01b03165afa908115612286578991612267575b50156122585767ffffffffffffffff60801b9061218790612a9c565b60801b16906001600160401b0360801b1916176003556004556fffffffffffffffff00000000000000006121b9612a72565b60401b16916001600160401b0360801b9060801b169077ffffffffffffffffffffffffffffffff0000000000000000191617176006557f5a66941dc92cb865480c966eff640c02b1d00d544b74332fd67c6f1cbfccdf39608061221b836135e8565b936001600160401b03600354831c1693600454906001600160401b0360065460401c1691604051938452602084015260408301526060820152a380f35b6309bde33960e01b8852600488fd5b612280915060203d60201161099f5761099181836129df565b5f61216b565b6040513d8b823e3d90fd5b8e80fd5b50505060248f634e487b7160e01b81526011600452fd5b633d9dffbd60e01b8e5260048efd5b506122c4612a72565b6001600160401b03808c16911611612044565b506122e0612a72565b6001600160401b03806122f1612a5c565b1691161061203d565b632705871360e01b8d5260048dfd5b632705871360e01b8c5260048cfd5b8882979211156122fa574387116122fa57612333909661357a565b94612011565b6309bde33960e01b8b5260048bfd5b6314f8a09f60e21b8a5260048afd5b50346102e25760a03660031901126102e257612371612855565b61237961286b565b906123826128ab565b6064359061238e612881565b6001600160a01b038116959093908615612616576123ab826132dc565b604051639c4bad2960e01b81526001600160a01b03831695906020816004818a5afa9081156109a65783916125f7575b506040516337de09eb60e11b81526001600160401b03821660048201526001600160a01b038916602482015260208160448161100f60921b5afa9081156111b15784916125d8575b50156111835760405163b389e30560e01b81526001600160401b03821660048201526001600160a01b038916602482015260208160448161100f60921b5afa9081156111b15784916125b9575b5015611183576040516337de09eb60e11b81526001600160401b039190911660048201526001600160a01b0391909116602482015260208160448161100f60921b5afa9081156106a557829161259a575b501561258b5750946001600160401b03926124e66001600160801b0393602098613367565b939061252c82604051996124f98b61297a565b898b52338c8c015260018060a01b0316968760408c015216988960608201528560808201528460a0820152600554613490565b9761253689613515565b956040519889528a8901526040880152166060860152608085015260a08401521660c0820152817ffee50869847a4d073bfd83ec655472febff62beb46febf4ec48752f0686affd160e03393a3604051908152f35b6354cfe65960e01b8152600490fd5b6125b3915060203d60201161099f5761099181836129df565b5f6124c1565b6125d2915060203d60201161099f5761099181836129df565b5f612470565b6125f1915060203d60201161099f5761099181836129df565b5f612423565b612610915060203d6020116111e2576111d481836129df565b5f6123db565b638dc30b3960e01b8152600490fd5b50346102e25760203660031901126102e25761263f612855565b6001546001600160a01b031633036109c0576001600160a01b03168082526008602052604082205460ff161561096857808252600860205260408220805461ff0019166101001790557f22ab73af03f04a21e91c7923327f99279b7f5d07d9551762c39bccdf051f1fe98280a280f35b9050346128145760c0366003190112612814576126ca612855565b6126d261286b565b916126db6128ab565b6084356001600160401b0381168091036128145760a4356001600160401b0381116128145761270e903690600401612915565b9190943033036128465760115463a9059cbb60e01b86526001600160a01b03602091821c811660048801526001600160801b0386166024880152919091169490816044815f895af1908115612809575f91612827575b501561281857601154602081901c6001600160a01b031693843b15612814575f9663ffffffff9488946001600160801b036127e9946040519c8d9b8c9a8b996311da526160e01b8b521660048a01526024890152606435604489015260018060a01b0316606488015216608486015260a485015260e060c485015260e4840191612a3c565b03925af18015612809576127fb575080f35b61280791505f906129df565b005b6040513d5f823e3d90fd5b5f80fd5b6312171d8360e31b5f5260045ffd5b612840915060203d60201161099f5761099181836129df565b5f612764565b6314e1dbf760e11b5f5260045ffd5b600435906001600160a01b038216820361281457565b602435906001600160a01b038216820361281457565b608435906001600160a01b038216820361281457565b35906001600160a01b038216820361281457565b604435906001600160801b038216820361281457565b35906001600160801b038216820361281457565b600435906001600160401b038216820361281457565b60e435906001600160401b038216820361281457565b35906001600160401b038216820361281457565b9181601f84011215612814578235916001600160401b038311612814576020838186019501011161281457565b90600182811c92168015612970575b602083101461295c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612951565b60c081019081106001600160401b0382111761299557604052565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b0382111761299557604052565b604081019081106001600160401b0382111761299557604052565b90601f801991011681019081106001600160401b0382111761299557604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90816020910312612814575180151581036128145790565b908060209392818452848401375f828201840152601f01601f1916010190565b60c4356001600160401b03811681036128145790565b60e4356001600160401b03811681036128145790565b356001600160401b03811681036128145790565b6001600160401b03166001600160401b038114612ab95760010190565b634e487b7160e01b5f52601160045260245ffd5b600754811015612ae95760075f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b60065460c01c48810290808204481490151715612ab95764e8d4a51000810190818111612ab95764e8d4a50fff01908111612ab95764e8d4a510006001600160801b0391041690565b6001600160801b0360035416620186a0026001600160801b038116908103612ab95790565b60075480821015612bd8575f198101908111612ab9578114612bd05760018101809111612ab9576001600160401b036001612ba96201518093612acd565b50015460081c1601906001600160401b038211612ab9576001600160401b03821643109190565b506001905f90565b50505f905f90565b9081602091031261281457516001600160401b03811681036128145790565b3560ff811681036128145790565b903590601e198136030182121561281457018035906001600160401b0382116128145760200191813603831361281457565b6001600160401b03811161299557601f01601f191660200190565b600954811015612ae95760095f5260205f2001905f90565b356001600160a01b03811681036128145790565b356001600160801b03811681036128145790565b600b545f91600c5482146132cd576064820693845f52600d60205260405f2054905f19821480156132c3575b6132ae5780159384156132bc575f19935b60408051602081019182529590926001600160a01b03612cf684612897565b1660608801526020830135608088018190529960408401956001600160a01b03612d1f88612897565b1660a08a01526060850199612d338b6128c1565b6001600160801b031660c08b01526080860198612d4f8a6128c1565b6001600160801b031660e08c015260a08701356101008c015260c0870197612d7689612901565b6001600160401b03166101208d015260e088019b612d938d612901565b6001600160401b0316610140820152806101008a0198612db38a8c6139be565b610160840161014090526101a0840190612dcc92612a3c565b612dda6101208d018d6139be565b848303605f1901610180860152612df19291612a3c565b90604083015203601f1981018252612e0990826129df565b519020036132ae571561329b57505f52600d6020525f1960405f205560018101809111612ab957600b555b612e3d82612c72565b946001600160401b03612e4f88612a88565b16156130eb576001600160801b03612e6682612c86565b166130c6575b50629896806001600160401b03612e8285612a88565b1611613059576001600160401b03612e9984612a88565b16612f3e57505050916001600160801b035f516020613acb5f395f51905f529492612ef3612eed86612edf612ecf606099612c72565b612ed889612c86565b908661394b565b159586612f1b575b50612c72565b94612c86565b90604051975060018060a01b0316875216602086015215604085015260018060a01b031692a3565b612f3890612f31612f2b8a612c86565b91612a88565b90866139ef565b5f612ee7565b612f63612f4a85612c72565b91612f5d612f578a612c86565b95612a88565b93612c0d565b9092303b1561281457604051625d97ef60e01b81526001600160a01b03808916600483015290931660248401526001600160801b03949094166044830152606482018a90526001600160401b0393909316608482015260c060a4820152915f9183918291612fd59160c4840191612a3c565b038183305af1908161301a575b505f516020613acb5f395f51905f529492612ef3612eed606096946001600160801b0394155f146130135789612edf565b6001612edf565b6001600160801b0391965092612ef3612eed606096946130495f5f516020613acb5f395f51905f529a986129df565b5f99945094965050509294612fe2565b505050839194506130a161309b6001600160801b039261309660609661308f612f2b5f516020613acb5f395f51905f529a612c86565b908a6139ef565b612c72565b92612c86565b604080516001600160a01b0397881681529290911660208301525f90820152931692a3565b6130e4906130dd60018060a01b035f541691612c86565b908761394b565b505f612e6c565b50509350509350506130fe919350612c72565b613106612afd565b926001600160801b0361311882612c86565b166001600160801b03851611613280575b8361313661313b92612c86565b613347565b906001600160801b038416613263575b61315e8261315885612c72565b8361394b565b156131d4577f0f7ef08806234f85aaee43d3ba4589c3bc6d5ac3fc8edd56fc3d91cc7553bdcb926131cf906001600160a01b039061319b90612c72565b1694604051938493849160409194936001600160801b038092606086019760018060a01b0316865216602085015216910152565b0390a2565b6001600160a01b0381165f908152600a602052604090207f5fea28d0adb7d877ae3259768f41ad6741aa1784c4475746dd931364f62e68a1936131cf9161321a82612c72565b60018060a01b03165f5260205260405f206001600160801b036132408682845416613327565b82546001600160801b03191691161790556001600160a01b039061319b90612c72565b5f5461327a9085906001600160a01b03168361394b565b5061314b565b61313693508061329261313b92612c86565b94509050613129565b91505f52600d60205260405f2055612e34565b626aee3160e51b5f5260045ffd5b8193612cd7565b505f198114612cc6565b63d7fa91d160e01b5f5260045ffd5b6001600160a01b03165f9081526008602052604090205460ff8116156133185760081c60ff161561330957565b63dec712ef60e01b5f5260045ffd5b631fcf8c4760e11b5f5260045ffd5b906001600160801b03809116911601906001600160801b038211612ab957565b906001600160801b03809116911603906001600160801b038211612ab957565b9091613371612b46565b926001600160801b0361338b613385612afd565b86613327565b16906001600160801b03811691821061348157846133a891613347565b6040516323b872dd60e01b81523360048201523060248201526044810192909252926001600160a01b03166020826064815f855af1918215612809578592613464575b506001600160801b0382166133fe575050565b5f805460405163a9059cbb60e01b81526001600160a01b0390911660048201526001600160801b0393909316602484015260209183916044918391905af18015612809576134495750565b6134619060203d60201161099f5761099181836129df565b50565b61347c9060203d60201161099f5761099181836129df565b6133eb565b636ba4a1c760e01b5f5260045ffd5b6040519060a060208301935f8552600180831b038151166040850152600180831b036020820151166060850152600180831b0360408201511660808501526001600160801b0360608201511682850152600180831b0360808201511660c0850152015160e0830152610100820152610100815261350f610120826129df565b51902090565b60055560065461352d6001600160401b038216612a9c565b67ffffffffffffffff199091166001600160401b0382161760065590565b3d15613575573d9061355c82612c3f565b9161356a60405193846129df565b82523d5f602084013e565b606090565b905f80809360405160208101918252602081526135986040826129df565b519071f90827f1c53a10cb7a02335b1753200029355afa6135b761354b565b90806135dc575b6135c55750565b909150602081805181010312612814576020015190565b506020815110156135be565b801561363657600c5490600b548203828111612ab9576064111561362757606482065f52600d60205260405f205560018101808211612ab957600c5590565b632764e20b60e01b5f5260045ffd5b505f1990565b602081830312612814578051906001600160401b038211612814570181601f820112156128145780519061366f82612c3f565b9261367d60405194856129df565b8284526020838301011161281457815f9260208093018386015e8301015290565b6040516136aa816129c4565b600180825260208083019182526001600160a01b039093165f8181526008948590526040902092518354925161ffff1990931660ff911515919091161791151590931b61ff0016179055600954600160401b811015612995578060016137139201600955612c5a565b81546001600160a01b0360039290921b91821b19169083901b1790556040516306fdde0360e01b81525f81600481855afa908115612809575f9161383c575b506040516395d89b4160e01b81525f81600481865afa908115612809575f91613822575b5060405163e5a6b10f60e01b8152915f83600481875afa928315612809577f4ac4dcc08b0c26c3fb6b58c64c1392b7934b1ce6b0382a5986ea5c3de795e053936137de936131cf925f926137fa575b506137ec90604051958695606087526060870190612a00565b908582036020870152612a00565b908382036040850152612a00565b6137ec91925061381b903d805f833e61381381836129df565b81019061363c565b91906137c5565b61383691503d805f833e61381381836129df565b5f613776565b61385091503d805f833e61381381836129df565b5f613752565b60ff1660028114908115613868575090565b600391501490565b602081519101519060208110613884575090565b5f199060200360031b1b1690565b8015801561393b575b61392a575f9081906401000003d0199060079082908181800909086040516020810191602083526020604083015260206060830152608082015263800001e9600160ff1b0360a08201526401000003d01960c082015260c0815261390060e0826129df565b519060055afa61390e61354b565b9015801561392f575b61392a57613926600191613870565b1490565b505f90565b50602081511415613917565b506401000003d01981101561389b565b60405163a9059cbb60e01b81526001600160a01b0392831660048201526001600160801b03939093166024840152602091839160449183915f91165af15f918161399d575b5061399a57505f90565b90565b6139b791925060203d60201161099f5761099181836129df565b905f613990565b9035601e19823603018112156128145701602081359101916001600160401b03821161281457813603831361281457565b909160606001600160401b037fadf6f2901dd7af2f28a594f47a925894a08d4de10609dff591a80642648775c5921693613a6a6001600160801b0360405195613a378761297a565b60018060a01b031692838752306020880152876040880152169485848201525f60808201525f60a0820152600554613490565b9384600555600654906001600160401b03613a86818416612a9c565b1680926001600160401b0319161760065560405192835260208301526040820152a356febb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd65042ea6dad60c26f055e80ec401b3437c854ed586a0704d305bb4e9ea4518cfa26469706673582212200d1d9cdc2a22dec315788ec45fde1a3fb24f9de00620586048e6932aa1f3424364736f6c63430008230033a26469706673582212200e343618458bd48c93c94672f94ead1fdcba35eb5174779cd030df148009e60064736f6c6343000823003360808060405234601557610188908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63b628c33414610025575f80fd5b346100db576101e03660031901126100db5760043563ffffffff8116036100db5761004e6100df565b506100576100f6565b5061006061010d565b5060a4356001600160a01b038116036100db5760403660c31901126100db576080366101031901126100db576101a43567ffffffffffffffff81116100db576100ad903690600401610124565b50506101c4359067ffffffffffffffff82116100db576100d36020923690600401610124565b505060018152f35b5f80fd5b6024359067ffffffffffffffff821682036100db57565b6044359067ffffffffffffffff821682036100db57565b6084359067ffffffffffffffff821682036100db57565b9181601f840112156100db5782359167ffffffffffffffff83116100db57602083818601950101116100db5756fea26469706673582212205ddab8535399d9aa9aa9f26c3a78a7a22d61a341d88ba8d664c1a5bec1e5f1a464736f6c6343000823003360a034606e57601f6105a238819003918201601f19168301916001600160401b03831184841017607257808492602094604052833981010312606e57516001600160a01b03811690819003606e5760805260405161051b908161008782396080518181816047015261015e0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816311da52611461007a5750637b9a730114610032575f80fd5b34610076575f366003190112610076576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b346100765760e0366003190112610076576004359063ffffffff8216809203610076576024356001600160a01b03811690819003610076576064356001600160a01b038116939084900361007657608435916fffffffffffffffffffffffffffffffff83168093036100765760a4359167ffffffffffffffff83168093036100765760c4359567ffffffffffffffff871161007657366023880112156100765786600401359567ffffffffffffffff871161007657366024888a010111610076575f546104a05760015f9081556390b7f6fd60e01b825260048201849052816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102bf575f91610323575b50602001516001600160a01b031633036103145760405163a9059cbb60e01b81528160048201528560248201526020816044815f885af19081156102bf575f916102d9575b50156102ca5760e45f928760209860246040519b8c9a8b998a96630a137ff560e01b88526004880152338488015260443560448801526064870152608486015260c060a48601528260c486015201848401378181018301859052601f01601f19168101030193f19081156102bf575f9161027c575b506001600160e01b03191663f5ec800b60e01b0161026d575f8055005b63be51ced360e01b5f5260045ffd5b90506020813d6020116102b7575b81610297602093836104af565b8101031261007657516001600160e01b0319811681036100765781610250565b3d915061028a565b6040513d5f823e3d90fd5b6312171d8360e31b5f5260045ffd5b90506020813d60201161030c575b816102f4602093836104af565b810103126100765751801515810361007657886101db565b3d91506102e7565b63efc26b5760e01b5f5260045ffd5b90503d805f833e61033481836104af565b8101906020818303126100765780519067ffffffffffffffff8211610076570190610140828203126100765760405191610140830183811067ffffffffffffffff82111761048c57604052805163ffffffff8116810361007657835261039c602082016104d1565b60208401526103ad604082016104d1565b60408401526103be606082016104d1565b60608401526103cf608082016104d1565b60808401526103e060a082016104d1565b60a084015260c081015160c084015260e081015160e084015261010081015167ffffffffffffffff81168103610076576101008401526101208101519067ffffffffffffffff8211610076570181601f820112156100765780519067ffffffffffffffff821161048c5760405192610462601f8401601f1916602001856104af565b8284526020838301011161007657815f9260208093018386015e8301015261012082015288610196565b634e487b7160e01b5f52604160045260245ffd5b6336a4d21b60e11b5f5260045ffd5b90601f8019910116810190811067ffffffffffffffff82111761048c57604052565b51906001600160a01b03821682036100765756fea2646970667358221220da86638e3c15856c8c0aeecb2ec313f9e0d1c7f258a0a340fc904a96f58e55a064736f6c63430008230033" + "zoneFactoryBytecode": "0x60808060405234610138575f805463ffffffff191660011781556003600755600680546001600160a01b03191633908117909155907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36101a28181016001600160401b03811183821017610124578291614bcb833903905ff08015610119576001600160a01b03165f8181526003602052604090819020805460ff19166001179055600480546001600160a01b0319169092179091555161051a808201906001600160401b03821183831017610124576020918391614d6d83393081520301905ff0801561011957600580546001600160a01b0319166001600160a01b0392909216919091179055604051614a8e908161013d8239f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301b290d314610e2a575080632b7ac3f314610e025780632d45796a146103a05780633cb747bf1461037757806374134d371461035957806376628f83146103175780638da5cb5b146102ee57806390b7f6fd14610174578063eee83499146101275763f2fde38b1461008c575f80fd5b34610124576020366003190112610124576004356001600160a01b03811690819003610122576006546001600160a01b0381169033829003610113578215610104576001600160a01b03191682176006557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6349e27cff60e01b8452600484fd5b6330cd747160e01b8452600484fd5b505b80fd5b50346101245780600319360112610124575f1963ffffffff825416019063ffffffff82116101605760208263ffffffff60405191168152f35b634e487b7160e01b81526011600452602490fd5b50346101245760203660031901126101245760043563ffffffff8116809103610122578152600160205260408120805460018060a01b036001830154169160018060a01b036002820154169360018060a01b036003830154166005830154926006810154600867ffffffffffffffff6007840154169201946040519385998754976101fe89610ee6565b9081885260208801996001811690815f146102d15750600114610297575b505061022e866101409b9c0387610e7c565b6040519a8963ffffffff8d9b168b5260018060a01b039060201c1660208b015260408a01526060890152608088015260a087015260c086015260e0850152610120610100850152518092816101208601528585015e828201840152601f01601f19168101030190f35b909b5087526020872087905b8c82106102bb575086016020019a5061022e8661021c565b6001816020925483858c010152019101906102a3565b60ff19168b525050151560051b86016020019a5061022e8661021c565b50346101245780600319360112610124576006546040516001600160a01b039091168152602090f35b5034610124576020366003190112610124576004356001600160a01b038116908190036101225760408260ff9260209452600384522054166040519015158152f35b5034610124578060031936011261012457602060405162e4e1c08152f35b50346101245780600319360112610124576005546040516001600160a01b039091168152602090f35b5034610b8a576020366003190112610b8a5767ffffffffffffffff60043511610b8a5761010060043536036003190112610b8a576006546001600160a01b03163303610df3576103f4600435600401610e68565b6040516335ec42c960e01b81526001600160a01b03909116600482015260208160248161083f60921b5afa908115610b7f575f91610db8575b5015610da9576001600160a01b03610449600435602401610e68565b1615610d9a576001600160a01b03610465600435604401610e68565b1615610d8b576001600160a01b03610481600435606401610e68565b165f52600360205260ff60405f20541615610d7c5762e4e1c05a10610d6d575f5463ffffffff80821614610d5e57600163ffffffff82160163ffffffff8111610d4a5763ffffffff1663ffffffff198216175f5560075460018101808211610d4a57600755606081610ba2575050604051606b60f91b6020820152602560fa1b60218201523060601b6022820152600160ff1b603682015260178152610528603782610e7c565b60018060a01b03906020815191012016604051613b3a80820182811067ffffffffffffffff821117610b8e578291610f1f833903905ff0908115610b7f57610574600435600401610e68565b6005546001600160a01b031661058e600435602401610e68565b61059c604460043501610e68565b6105aa606460043501610e68565b906105b960c460043501610e9e565b926105ce60e460043501600435600401610eb3565b91906001600160a01b038a163b15610b8a5767ffffffffffffffff63ffffffff96610144968d9686955f9b6040519d8e9c8d9b633fd2490760e01b8d521660048c015260018060a01b031660248b015260448a015260018060a01b0316606489015260018060a01b0316608488015260018060a01b031660a48701526084600435013560c48701521660e485015261012061010485015281610124850152848401378181018301859052601f01601f19168101030181836001600160a01b0388165af18015610b7f57610b6a575b506001600160a01b03821603610b0e576106ba600435600401610e68565b6106c8602460043501610e68565b6106d6604460043501610e68565b906106e5606460043501610e68565b6106f360c460043501610e9e565b9061070860e460043501600435600401610eb3565b949093604051968761014081011067ffffffffffffffff6101408a011117610afa576101408801604090815263ffffffff8b1689526001600160a01b038a811660208b015291821690890152908116606088015290811660808701521660a0850152600435608481013560c086015260a4013560e085015267ffffffffffffffff9081166101008501528211610ae2578590604051926107b26020601f19601f8401160185610e7c565b8084523681830111610af657806020928386013783010152610120820190815263ffffffff848116865260016020818152604080892086518154848901516001600160c01b031990911691909616179490921b640100000000600160c01b03169390931781559184015190820180546001600160a01b03199081166001600160a01b0393841617909155606085015160028401805483169184169190911790556080850151600384018054831691841691909117905560a0850151600484018054909216921691909117905560c0830151600582015560e083015160068201556101009092015160078301805467ffffffffffffffff191667ffffffffffffffff92831617905590518051918211610ae2576108d16008840154610ee6565b601f8111610a8d575b50602090601f8311600114610a1c57828793604098936008938a979592610a11575b50508160011b915f199060031b1c1916179101555b6001600160a01b0383168152600260205220805460ff1916600117905561093b6004803501610e68565b67ffffffffffffffff610952602460043501610e68565b610960604460043501610e68565b61096e606460043501610e68565b9061097d60c460043501610e9e565b88516001600160a01b03968716815293861660208501529085168389015290841660608301526004356084810135608084015260a4013560a08301529190911660c08201529082169063ffffffff8416907fa0d8b561b80ba334b8b367f1fd53ab8d8719fa1c348a8de4bbfd8bbffa90b3379060e090a3825163ffffffff9290921682526001600160a01b03166020820152f35b015190505f806108fc565b9060088401875280872091875b601f1985168110610a7557508360409894936008936001938b9896601f19811610610a5d575b505050811b01910155610911565b01515f1960f88460031b161c191690555f8080610a4f565b91926020600181928685015181550194019201610a29565b828111156108da5760088401875260208720601f840160051c9060208510610ada575b81601f9101920160051c0390875b828110610acc5750506108da565b808960019284015501610abe565b889150610ab0565b634e487b7160e01b86526041600452602486fd5b8280fd5b634e487b7160e01b8b52604160045260248bfd5b60405162461bcd60e51b815260206004820152602e60248201527f506f7274616c2061646472657373206d69736d61746368202d206e6f6e63652060448201526d3a3930b1b5b4b7339032b93937b960911b6064820152608490fd5b610b779194505f90610e7c565b5f925f61069c565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b607f8211610bf45750604051606b60f91b6020820152602560fa1b60218201523060601b602282015260f89190911b6001600160f81b031916603682015260178152610bef603782610e7c565b610528565b60ff8211610c4b575060405160d760f81b6020820152602560fa1b60218201523060601b6022820152608160f81b603682015260f89190911b6001600160f81b031916603782015260188152610bef603882610e7c565b61ffff8211610ca35750604051601b60fb1b6020820152602560fa1b60218201523060601b6022820152604160f91b603682015260f09190911b6001600160f01b031916603782015260198152610bef603982610e7c565b62ffffff8211610cfc575060405160d960f81b6020820152602560fa1b60218201523060601b6022820152608360f81b603682015260e89190911b6001600160e81b0319166037820152601a8152610bef603a82610e7c565b604051606d60f91b6020820152602560fa1b60218201523090911b6022820152602160fa1b603682015260e09190911b6001600160e01b0319166037820152601b8152610bef603b82610e7c565b634e487b7160e01b5f52601160045260245ffd5b63e558bfa360e01b5f5260045ffd5b6307099c5360e21b5f5260045ffd5b63baa3de5f60e01b5f5260045ffd5b633c9f858360e21b5f5260045ffd5b630b5eba9f60e41b5f5260045ffd5b63c1ab6dc160e01b5f5260045ffd5b90506020813d602011610deb575b81610dd360209383610e7c565b81010312610b8a57518015158103610b8a575f61042d565b3d9150610dc6565b6330cd747160e01b5f5260045ffd5b34610b8a575f366003190112610b8a576004546040516001600160a01b039091168152602090f35b34610b8a576020366003190112610b8a576004356001600160a01b0381169190829003610b8a576020915f526002825260ff60405f20541615158152f35b356001600160a01b0381168103610b8a5790565b90601f8019910116810190811067ffffffffffffffff821117610b8e57604052565b3567ffffffffffffffff81168103610b8a5790565b903590601e1981360301821215610b8a570180359067ffffffffffffffff8211610b8a57602001918136038313610b8a57565b90600182811c92168015610f14575b6020831014610f0057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610ef556fe60808060405234601557613b20908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c9081625d97ef146126af57508062ebfdb41461262557806309a0a234146123575780630d0c743e14611f235780630e18b68114611e945780630e86bbdc14611dff5780632678224714611dd657806327c71b5014611d505780632b7ac3f314611d275780632c37826e14611cfd5780632dfdf0b514611cd65780633488ce0d14611c6b57806337f981d814611c1657806339dc015d14611aad5780633cb747bf14611a845780633fd24907146117d05780634256ce38146117b257806345c5d2fb14611794578063580bbcfc1461176a5780635c1bba3814611743578063652ef10b14611568578063748538d91461152957806375829def146114a45780638081a8b21461148657806383a146b31461146b578063857e85f81461140f57806386f47e55146113f15780638976248d146113c557806394ce88b0146113a7578063959f47c3146112d35780639a97784b146112305780639ecd4cc0146111f8578063b01f22e414610bed578063b02690f214610bb5578063be2a63ee14610b8b578063bf8e244014610b07578063bffa55d514610a48578063c13a2d4b146109cf578063c690908a146108db578063cfaabb4d146108b1578063d179978a1461088d578063e09eae10146107fb578063e202d995146107d2578063e4643e8514610745578063e471784914610727578063e84abe69146106fd578063ecf79a4e146106d6578063ef10b1871461038e578063f22a195e14610370578063f490ca961461034d578063f706cfbf1461032f578063f851a44014610306578063fb2f1206146102e55763fe136c4e1461026e575f80fd5b346102e25760203660031901126102e2576040809161028b612855565b8160208451610299816129c4565b82815201526001600160a01b031681526008602052208151906102bb826129c4565b5460ff6020818316151593848152019160081c161515815282519182525115156020820152f35b80fd5b50346102e257806003193601126102e257602060065460c01c604051908152f35b50346102e257806003193601126102e2576001546040516001600160a01b039091168152602090f35b50346102e257806003193601126102e2576020604051620186a08152f35b50346102e257806003193601126102e2576020604051670de0b6b3a76400008152f35b50346102e257806003193601126102e2576020600454604051908152f35b50346102e25760a03660031901126102e25760043560243560ff8116908181036106d2576044359060ff82168092036106ce5784546001600160a01b031633036106bf576103db90613856565b156106b0576103e983613892565b156106b057836080602092604051848101903082528760408201528660608201526060815261041884826129df565b51902090604051918252848201526064356040820152608435606082015282805260015afa156106a557825183806401000003d019600781878181800909086040516020810191602083526020604083015260206060830152608082015263400000f4600160fe1b0360a08201526401000003d01960c082015260c081526104a160e0826129df565b519060055afa6104af61354b565b908061069a575b15610665576104c490613870565b6002831460018216150361063b575b6040519060208201908582526040830152604082526104f36060836129df565b905190206001600160a01b03918216801592909116908215610630575b5050610621576001600160401b0343169060405161052d816129a9565b83815260208101908282526040810190848252600754600160401b81101561060d5780600161055f9201600755612acd565b9190916105f95760ff916001915181550192511668ffffffffffffffff008354925160081b169168ffffffffffffffffff191617179055600754905f1982019182116105e557917f82b5f4090f18a082bc8156b956154bfe0319307f5e5a7e903ef33f14ad2cb17e9391608093604051938452602084015260408301526060820152a180f35b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b88526004889052602488fd5b634e487b7160e01b88526041600452602488fd5b6392536faf60e01b8352600483fd5b141590505f80610510565b6401000003d019036401000003d0198111156104d357634e487b7160e01b85526011600452602485fd5b60405162461bcd60e51b815260206004820152600d60248201526c1b5bd9195e1c0819985a5b1959609a1b6044820152606490fd5b5060208151146104b6565b6040513d84823e3d90fd5b632f0be49b60e11b8452600484fd5b6314f8a09f60e21b8552600485fd5b8480fd5b8380fd5b50346102e257806003193601126102e25760206001600160801b0360035416604051908152f35b50346102e257806003193601126102e25760206001600160401b0360065460401c16604051908152f35b50346102e257806003193601126102e2576020600954604051908152f35b50346102e257806003193601126102e2576002546001600160a01b03811690811580156107c8575b6107b95782546001600160a01b0319808216841785559091166002556001600160a01b03167f9945af900637995146537e5ea7a7be455dfd08bbb46fdd79e9c3a2bad0c4eef88380a380f35b63d71402d960e01b8352600483fd5b508133141561076d565b50346102e257806003193601126102e2576002546040516001600160a01b039091168152602090f35b50346102e25760203660031901126102e2576108156128d5565b81546001600160a01b0316330361087e57600680546001600160c01b031660c083901b6001600160c01b0319161790556040516001600160401b0390911681527f66bcd750662bb66118e25a8e421ae73974634d9af2d44fb9e600d250917fe69090602090a180f35b6314f8a09f60e21b8252600482fd5b50346102e257806003193601126102e257602063ffffffff60115416604051908152f35b50346102e25760203660031901126102e25760406020916004358152600d83522054604051908152f35b50346102e25760203660031901126102e2576108f5612855565b6001546001600160a01b031633036109c0576001600160a01b0381168083526008602052604083205460ff166109b1576040516335ec42c960e01b8152600481019190915260208160248161083f60921b5afa9081156109a6578391610977575b5015610968576109659061369e565b80f35b631fcf8c4760e11b8252600482fd5b610999915060203d60201161099f575b61099181836129df565b810190612a24565b5f610956565b503d610987565b6040513d85823e3d90fd5b632909298f60e11b8352600483fd5b637bfa4b9f60e01b8252600482fd5b50346102e25760403660031901126102e2576004356001600160401b038111610a44576101406003198236030112610a445781546001600160a01b0316330361087e57601054610a3557610a2e90600160105560243590600401612c9a565b8060105580f35b630b5c738160e01b8252600482fd5b5080fd5b50346102e25760203660031901126102e257610a62612855565b6001600160a01b038116808352600a60208181526040808620335f818152918452828220548689529484528288208183529093522080546001600160801b03191690556001600160801b0390911692610abc91849161394b565b15610af857602092506040518281527fffd3bbab073ab4b2d0792c270104924c14c285a153b9acddabae166395d2eb5c843392a3604051908152f35b63be51ced360e01b8352600483fd5b50346102e25760203660031901126102e257610b21612855565b81546001600160a01b03169033829003610b7c57600280546001600160a01b0319166001600160a01b03929092169182179055907f12cf9e4d760566fb6a3e0193406f2295fc4b53f2b60817145a61f29e470cf7d68380a380f35b6314f8a09f60e21b8352600483fd5b50346102e257806003193601126102e25760206001600160401b0360065460801c16604051908152f35b50346102e25760203660031901126102e2576020610bd4600435612c5a565b905460405160039290921b1c6001600160a01b03168152f35b50346102e25760a03660031901126102e257610c07612855565b906024356001600160801b0381168103610a44576001600160401b0360643511610a445760a060643536036003190112610a4457610c43612881565b906001600160a01b038216156111e957610c5c846132dc565b604051639c4bad2960e01b81526020816004816001600160a01b0389165afa9081156111b15783610ccb9260209287916111bc575b506040516337de09eb60e11b81526001600160401b0390911660048201526001600160a01b03909116602482015291829081906044820190565b038161100f60921b5afa9081156111b1578491611192575b501561118357610cff610cfa602460643501612bff565b613856565b1561117457610d1360643560040135613892565b15611174576040610d2e604460643501606435600401612c0d565b90500361114957610d40604435612b6b565b50156110b757610d509084613367565b9060405192610d5e8461297a565b6001600160a01b0386811685523360208601526001600160801b03841660408087019190915290821660608601526044356080860152519360a085016001600160401b038111868210176110a3576040526064356004013585526024606435013560ff8116810361109f5760208601526001600160401b03604460643501351161109b5736606435604481013501602301121561109b57610e0a60643560448101350160040135612c3f565b610e1760405191826129df565b606435604481013501600481013580835236602491909201011161109f5760643560448101350160048101359060240160208301376064803560448101358101600401358301602001899052604088019290925201356001600160a01b03198116900361109b57606480350135606086015260846064350135946001600160801b03198616958681036110975792611054886080610fcb6001600160401b03968660209e99847f4debdbd2891da07eb466d2025028a25aab636034cf3c941afd1025a0c590a07a9c99015260a082019081526005549060405194602093869485019750600188526060604086015260018060a01b038151168286015260018060a01b0360208201511660a08601526001600160801b0360408201511660c086015260018060a01b0360608201511660e08601520151610100840152519060c061012084015281516101408401528f60ff9083015116610160840152610f8d604083015160a06101808601526101e0850190612a00565b6060808401516001600160a01b0319166101a08601526080909301516001600160801b0319166101c08501529183015203601f1981018352826129df565b51902098899760ff610fdc8a613515565b956001600160801b03610ff3602460643501612bff565b9181611009604460643501606435600401612c0d565b969097506040519c60018060a01b03168d521660208c01521660408a015260443560608a01526064356004013560808a01521660a088015261016060c0880152610160870191612a3c565b6064803501356001600160a01b03191660e08601526101008501979097526001600160a01b031661012084015216610140820152339381900390a3604051908152f35b8780fd5b8580fd5b8680fd5b634e487b7160e01b87526041600452602487fd5b826007546044351015611134576110cf604435612acd565b5090600160443501918260443511611120576001600160401b03600181816110f8606497612acd565b5094015460081c1692015460081c169063034dff0f60e01b8352604435600452602452604452fd5b634e487b7160e01b82526011600452602482fd5b637f455d3760e11b8152604435600452602490fd5b60448361115f8260643501606435600401612c0d565b632331a96360e11b8352600452506040602452fd5b632f0be49b60e11b8352600483fd5b6354cfe65960e01b8352600483fd5b6111ab915060203d60201161099f5761099181836129df565b5f610ce3565b6040513d86823e3d90fd5b6111dc9150833d85116111e2575b6111d481836129df565b810190612be0565b5f610c91565b503d6111ca565b638dc30b3960e01b8352600483fd5b50346102e25760203660031901126102e25760406001600160401b0361121f600435612b6b565b835191151582529091166020820152f35b50346102e25760203660031901126102e257600435908060408051611254816129a9565b82815282602082015201526007548210156112c157606061127483612acd565b506001600160401b03604051611289816129a9565b60ff600184549485845201549183604060208301928486168452019360081c1683526040519485525116602084015251166040820152f35b602491637f455d3760e11b8252600452fd5b50346102e257806003193601126102e2576040519080600e54906112f682612942565b80855291600181169081156113805750600114611336575b6113328461131e818603826129df565b604051918291602083526020830190612a00565b0390f35b600e81525f516020613aab5f395f51905f52939250905b8082106113665750909150810160200161131e8261130e565b91926001816020925483858801015201910190929161134d565b60ff191660208087019190915292151560051b8501909201925061131e915083905061130e565b50346102e257806003193601126102e2576020600b54604051908152f35b50346102e257806003193601126102e25760206113e0612b46565b6001600160801b0360405191168152f35b50346102e257806003193601126102e2576020604051629896808152f35b50346102e25760403660031901126102e257604061142b612855565b9161143461286b565b9260018060a01b03168152600a602052209060018060a01b03165f5260205260206001600160801b0360405f205416604051908152f35b50346102e257806003193601126102e25760206113e0612afd565b50346102e257806003193601126102e2576020600c54604051908152f35b50346102e25760203660031901126102e2576114be612855565b6001546001600160a01b0316903382900361151a57600f80546001600160a01b0319166001600160a01b03929092169182179055907fe5cd1c804f1c9cc6d7009e4c0fb532f0e2d8863524c3323a6b3790c3f80bf25c8380a380f35b637bfa4b9f60e01b8352600483fd5b50346102e25760203660031901126102e25760209060ff906040906001600160a01b03611554612855565b168152600884522054166040519015158152f35b50346102e25760203660031901126102e2576004356001600160401b038111610a4457611599903690600401612915565b8254909291906001600160a01b0316330361087e576001600160401b03831161172f576115c7600e54612942565b601f81116116d3575b508192601f8111600114611645578083947ff4e00967b25e707df96d88676243b33be84847ef27615af8ef91290b52294fc6949161163a575b508160011b905f198360031b1c191617600e555b611634604051928392602084526020840191612a3c565b0390a180f35b90508201355f611609565b600e8352601f198116935f516020613aab5f395f51905f5290845b8681106116bb5750827ff4e00967b25e707df96d88676243b33be84847ef27615af8ef91290b52294fc69596106116a2575b5050600181811b01600e5561161d565b8301355f19600384901b60f8161c191690555f80611692565b90916020600181928588013581550193019101611660565b838111156115d057600e8352601f840160051c9060208510611727575b601f82910160051c0390835b82811061170a5750506115d0565b80855f516020613aab5f395f51905f5260019385010155016116fc565b8391506116f0565b634e487b7160e01b82526041600452602482fd5b50346102e257806003193601126102e257546040516001600160a01b039091168152602090f35b50346102e257806003193601126102e25760206001600160401b0360125460a01c16604051908152f35b50346102e257806003193601126102e2576020600554604051908152f35b50346102e257806003193601126102e2576020600754604051908152f35b50346102e2576101203660031901126102e25760043563ffffffff8116809103610a44576117fc61286b565b906044356001600160a01b03811681036106d2576064356001600160a01b03811692908390036106ce5761182e612881565b60a4356001600160a01b038116919082900361109f5761184c6128eb565b90610104356001600160401b038111611a805761186d903690600401612915565b969095735af1ffffffffffffffffffffffffffffffffffff193301611a71576012549560ff8760e01c16611a6357601180546001600160c01b0319169190911760209290921b640100000000600160c01b0316919091179055600180546001600160a01b03199081169290921790558854166001600160a01b039190911617875560c4356004556001600160e81b03199092161760a09190911b67ffffffffffffffff60a01b1617600160e01b176012556001600160401b038211611a4f57611937600e54612942565b601f81116119f3575b508390601f831160011461198057610965939291859183611975575b50508160011b915f199060031b1c191617600e5561369e565b013590505f8061195c565b600e85525f516020613aab5f395f51905f5291601f198416865b8181106119db5750916001939185610965979694106119c2575b505050811b01600e5561369e565b01355f19600384901b60f8161c191690555f80806119b4565b9193602060018192878701358155019501920161199a565b8281111561194057600e8552601f830160051c9060208410611a47575b601f82910160051c0390855b828110611a2a575050611940565b80875f516020613aab5f395f51905f526001938501015501611a1c565b859150611a10565b634e487b7160e01b84526041600452602484fd5b62dc149f60e41b8b5260048bfd5b631966391b60e11b8a5260048afd5b8880fd5b50346102e257806003193601126102e257601154604051602091821c6001600160a01b03168152f35b50346102e25760203660031901126102e257611ac76128d5565b906007549081158015611bbc575b611ba05780915f19810190811161112057836001600160401b0384929116925b818310611b2657606083611b0881612acd565b509060ff600183549301541660405192835260208301526040820152f35b9091828101808211611b8c5760018101809111611b8c5760011c90846001600160401b036001611b5585612acd565b50015460081c1611611b6a5750915b90611af5565b92505f19810190811115611b6457634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526011600452602483fd5b63302c66ab60e21b81526001600160401b038316600452602490fd5b5060075415611c0257600781527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6895460081c6001600160401b0390811690841610611ad5565b634e487b7160e01b81526032600452602490fd5b50346102e25760203660031901126102e2576020906040906001600160a01b03611c3e612855565b16815260088352205460ff81169081611c5d575b506040519015158152f35b60ff915060081c165f611c52565b50346102e257806003193601126102e257600754908115611cc7575f198201918211611cb3576040611c9c83612acd565b5060ff600182549201541682519182526020820152f35b634e487b7160e01b81526011600452602490fd5b630c322fb560e31b8152600490fd5b50346102e257806003193601126102e25760206001600160401b0360065416604051908152f35b50346102e257806003193601126102e25760206001600160401b0360035460801c16604051908152f35b50346102e257806003193601126102e2576012546040516001600160a01b039091168152602090f35b50346102e25760203660031901126102e257611d6a612855565b6001546001600160a01b031633036109c0576001600160a01b03168082526008602052604082205460ff161561096857808252600860205260408220805461ff00191690557feb225a736fbfee3f85ccb72bdf84ff0396ab358b7970e2cc351ab3e3fd92358d8280a280f35b50346102e257806003193601126102e257600f546040516001600160a01b039091168152602090f35b50346102e25760203660031901126102e2576004356001600160801b038116809103610a445781546001600160a01b0316330361087e57670de0b6b3a76400008111611e85576020817fc62141e607d6fcbf7d11fd2b6d8e18e5ebef6d3fff8136ca98822801abbaea38926001600160801b03196003541617600355604051908152a180f35b630d62f21160e11b8252600482fd5b50346102e257806003193601126102e257600f546001600160a01b0381169081158015611f19575b611f0a57600180546001600160a01b031980821685179092559116600f556001600160a01b03167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec68380a380f35b63058d9a1b60e01b8352600483fd5b5081331415611ebc565b50346102e2576101603660031901126102e257611f3e6128d5565b6024356001600160401b038116918282036106d25760403660431901126106d25760803660831901126106d2576101043591610124356001600160401b03811161109b57611f90903690600401612915565b9094610144356001600160401b03811161109757611fb2903690600401612915565b88546001600160a01b03169190338390036123485760443593600454850361233957601254906001600160401b038916976001600160401b038360a01c1689106122fa578161231857505087944388116123095761200f8861357a565b945b85156122fa5761201f612a5c565b98600654996001600160401b03808c60401c169116148015906122d7575b80156122bb575b6122ac57908d96959493929163ffffffff6011541696600354996001600160401b038b60801c16995060018a01926001600160401b038411612295576001600160401b0393929184916040519b632d8a30cd60e21b8d5260048d015260248c01521660448a0152606489015216608487015260a486015260c4850152606435968760e486015260843561010486015260a4359b8c61012487015260c435916001600160401b03831680930361229157602095879561213d8f946121509489979688976101448901526001600160401b0361211c6128eb565b166101648901526101848801526101e06101a48801526101e4870191612a3c565b848103600319016101c486015291612a3c565b03916001600160a01b03165afa908115612286578991612267575b50156122585767ffffffffffffffff60801b9061218790612a9c565b60801b16906001600160401b0360801b1916176003556004556fffffffffffffffff00000000000000006121b9612a72565b60401b16916001600160401b0360801b9060801b169077ffffffffffffffffffffffffffffffff0000000000000000191617176006557f5a66941dc92cb865480c966eff640c02b1d00d544b74332fd67c6f1cbfccdf39608061221b836135e8565b936001600160401b03600354831c1693600454906001600160401b0360065460401c1691604051938452602084015260408301526060820152a380f35b6309bde33960e01b8852600488fd5b612280915060203d60201161099f5761099181836129df565b5f61216b565b6040513d8b823e3d90fd5b8e80fd5b50505060248f634e487b7160e01b81526011600452fd5b633d9dffbd60e01b8e5260048efd5b506122c4612a72565b6001600160401b03808c16911611612044565b506122e0612a72565b6001600160401b03806122f1612a5c565b1691161061203d565b632705871360e01b8d5260048dfd5b632705871360e01b8c5260048cfd5b8882979211156122fa574387116122fa57612333909661357a565b94612011565b6309bde33960e01b8b5260048bfd5b6314f8a09f60e21b8a5260048afd5b50346102e25760a03660031901126102e257612371612855565b61237961286b565b906123826128ab565b6064359061238e612881565b6001600160a01b038116959093908615612616576123ab826132dc565b604051639c4bad2960e01b81526001600160a01b03831695906020816004818a5afa9081156109a65783916125f7575b506040516337de09eb60e11b81526001600160401b03821660048201526001600160a01b038916602482015260208160448161100f60921b5afa9081156111b15784916125d8575b50156111835760405163b389e30560e01b81526001600160401b03821660048201526001600160a01b038916602482015260208160448161100f60921b5afa9081156111b15784916125b9575b5015611183576040516337de09eb60e11b81526001600160401b039190911660048201526001600160a01b0391909116602482015260208160448161100f60921b5afa9081156106a557829161259a575b501561258b5750946001600160401b03926124e66001600160801b0393602098613367565b939061252c82604051996124f98b61297a565b898b52338c8c015260018060a01b0316968760408c015216988960608201528560808201528460a0820152600554613490565b9761253689613515565b956040519889528a8901526040880152166060860152608085015260a08401521660c0820152817ffee50869847a4d073bfd83ec655472febff62beb46febf4ec48752f0686affd160e03393a3604051908152f35b6354cfe65960e01b8152600490fd5b6125b3915060203d60201161099f5761099181836129df565b5f6124c1565b6125d2915060203d60201161099f5761099181836129df565b5f612470565b6125f1915060203d60201161099f5761099181836129df565b5f612423565b612610915060203d6020116111e2576111d481836129df565b5f6123db565b638dc30b3960e01b8152600490fd5b50346102e25760203660031901126102e25761263f612855565b6001546001600160a01b031633036109c0576001600160a01b03168082526008602052604082205460ff161561096857808252600860205260408220805461ff0019166101001790557f22ab73af03f04a21e91c7923327f99279b7f5d07d9551762c39bccdf051f1fe98280a280f35b9050346128145760c0366003190112612814576126ca612855565b6126d261286b565b916126db6128ab565b6084356001600160401b0381168091036128145760a4356001600160401b0381116128145761270e903690600401612915565b9190943033036128465760115463a9059cbb60e01b86526001600160a01b03602091821c811660048801526001600160801b0386166024880152919091169490816044815f895af1908115612809575f91612827575b501561281857601154602081901c6001600160a01b031693843b15612814575f9663ffffffff9488946001600160801b036127e9946040519c8d9b8c9a8b996311da526160e01b8b521660048a01526024890152606435604489015260018060a01b0316606488015216608486015260a485015260e060c485015260e4840191612a3c565b03925af18015612809576127fb575080f35b61280791505f906129df565b005b6040513d5f823e3d90fd5b5f80fd5b6312171d8360e31b5f5260045ffd5b612840915060203d60201161099f5761099181836129df565b5f612764565b6314e1dbf760e11b5f5260045ffd5b600435906001600160a01b038216820361281457565b602435906001600160a01b038216820361281457565b608435906001600160a01b038216820361281457565b35906001600160a01b038216820361281457565b604435906001600160801b038216820361281457565b35906001600160801b038216820361281457565b600435906001600160401b038216820361281457565b60e435906001600160401b038216820361281457565b35906001600160401b038216820361281457565b9181601f84011215612814578235916001600160401b038311612814576020838186019501011161281457565b90600182811c92168015612970575b602083101461295c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612951565b60c081019081106001600160401b0382111761299557604052565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b0382111761299557604052565b604081019081106001600160401b0382111761299557604052565b90601f801991011681019081106001600160401b0382111761299557604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90816020910312612814575180151581036128145790565b908060209392818452848401375f828201840152601f01601f1916010190565b60c4356001600160401b03811681036128145790565b60e4356001600160401b03811681036128145790565b356001600160401b03811681036128145790565b6001600160401b03166001600160401b038114612ab95760010190565b634e487b7160e01b5f52601160045260245ffd5b600754811015612ae95760075f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b60065460c01c48810290808204481490151715612ab95764e8d4a51000810190818111612ab95764e8d4a50fff01908111612ab95764e8d4a510006001600160801b0391041690565b6001600160801b0360035416620186a0026001600160801b038116908103612ab95790565b60075480821015612bd8575f198101908111612ab9578114612bd05760018101809111612ab9576001600160401b036001612ba96201518093612acd565b50015460081c1601906001600160401b038211612ab9576001600160401b03821643109190565b506001905f90565b50505f905f90565b9081602091031261281457516001600160401b03811681036128145790565b3560ff811681036128145790565b903590601e198136030182121561281457018035906001600160401b0382116128145760200191813603831361281457565b6001600160401b03811161299557601f01601f191660200190565b600954811015612ae95760095f5260205f2001905f90565b356001600160a01b03811681036128145790565b356001600160801b03811681036128145790565b600b545f91600c5482146132cd576064820693845f52600d60205260405f2054905f19821480156132c3575b6132ae5780159384156132bc575f19935b60408051602081019182529590926001600160a01b03612cf684612897565b1660608801526020830135608088018190529960408401956001600160a01b03612d1f88612897565b1660a08a01526060850199612d338b6128c1565b6001600160801b031660c08b01526080860198612d4f8a6128c1565b6001600160801b031660e08c015260a08701356101008c015260c0870197612d7689612901565b6001600160401b03166101208d015260e088019b612d938d612901565b6001600160401b0316610140820152806101008a0198612db38a8c6139be565b610160840161014090526101a0840190612dcc92612a3c565b612dda6101208d018d6139be565b848303605f1901610180860152612df19291612a3c565b90604083015203601f1981018252612e0990826129df565b519020036132ae571561329b57505f52600d6020525f1960405f205560018101809111612ab957600b555b612e3d82612c72565b946001600160401b03612e4f88612a88565b16156130eb576001600160801b03612e6682612c86565b166130c6575b50629896806001600160401b03612e8285612a88565b1611613059576001600160401b03612e9984612a88565b16612f3e57505050916001600160801b035f516020613acb5f395f51905f529492612ef3612eed86612edf612ecf606099612c72565b612ed889612c86565b908661394b565b159586612f1b575b50612c72565b94612c86565b90604051975060018060a01b0316875216602086015215604085015260018060a01b031692a3565b612f3890612f31612f2b8a612c86565b91612a88565b90866139ef565b5f612ee7565b612f63612f4a85612c72565b91612f5d612f578a612c86565b95612a88565b93612c0d565b9092303b1561281457604051625d97ef60e01b81526001600160a01b03808916600483015290931660248401526001600160801b03949094166044830152606482018a90526001600160401b0393909316608482015260c060a4820152915f9183918291612fd59160c4840191612a3c565b038183305af1908161301a575b505f516020613acb5f395f51905f529492612ef3612eed606096946001600160801b0394155f146130135789612edf565b6001612edf565b6001600160801b0391965092612ef3612eed606096946130495f5f516020613acb5f395f51905f529a986129df565b5f99945094965050509294612fe2565b505050839194506130a161309b6001600160801b039261309660609661308f612f2b5f516020613acb5f395f51905f529a612c86565b908a6139ef565b612c72565b92612c86565b604080516001600160a01b0397881681529290911660208301525f90820152931692a3565b6130e4906130dd60018060a01b035f541691612c86565b908761394b565b505f612e6c565b50509350509350506130fe919350612c72565b613106612afd565b926001600160801b0361311882612c86565b166001600160801b03851611613280575b8361313661313b92612c86565b613347565b906001600160801b038416613263575b61315e8261315885612c72565b8361394b565b156131d4577f0f7ef08806234f85aaee43d3ba4589c3bc6d5ac3fc8edd56fc3d91cc7553bdcb926131cf906001600160a01b039061319b90612c72565b1694604051938493849160409194936001600160801b038092606086019760018060a01b0316865216602085015216910152565b0390a2565b6001600160a01b0381165f908152600a602052604090207f5fea28d0adb7d877ae3259768f41ad6741aa1784c4475746dd931364f62e68a1936131cf9161321a82612c72565b60018060a01b03165f5260205260405f206001600160801b036132408682845416613327565b82546001600160801b03191691161790556001600160a01b039061319b90612c72565b5f5461327a9085906001600160a01b03168361394b565b5061314b565b61313693508061329261313b92612c86565b94509050613129565b91505f52600d60205260405f2055612e34565b626aee3160e51b5f5260045ffd5b8193612cd7565b505f198114612cc6565b63d7fa91d160e01b5f5260045ffd5b6001600160a01b03165f9081526008602052604090205460ff8116156133185760081c60ff161561330957565b63dec712ef60e01b5f5260045ffd5b631fcf8c4760e11b5f5260045ffd5b906001600160801b03809116911601906001600160801b038211612ab957565b906001600160801b03809116911603906001600160801b038211612ab957565b9091613371612b46565b926001600160801b0361338b613385612afd565b86613327565b16906001600160801b03811691821061348157846133a891613347565b6040516323b872dd60e01b81523360048201523060248201526044810192909252926001600160a01b03166020826064815f855af1918215612809578592613464575b506001600160801b0382166133fe575050565b5f805460405163a9059cbb60e01b81526001600160a01b0390911660048201526001600160801b0393909316602484015260209183916044918391905af18015612809576134495750565b6134619060203d60201161099f5761099181836129df565b50565b61347c9060203d60201161099f5761099181836129df565b6133eb565b636ba4a1c760e01b5f5260045ffd5b6040519060a060208301935f8552600180831b038151166040850152600180831b036020820151166060850152600180831b0360408201511660808501526001600160801b0360608201511682850152600180831b0360808201511660c0850152015160e0830152610100820152610100815261350f610120826129df565b51902090565b60055560065461352d6001600160401b038216612a9c565b67ffffffffffffffff199091166001600160401b0382161760065590565b3d15613575573d9061355c82612c3f565b9161356a60405193846129df565b82523d5f602084013e565b606090565b905f80809360405160208101918252602081526135986040826129df565b519071f90827f1c53a10cb7a02335b1753200029355afa6135b761354b565b90806135dc575b6135c55750565b909150602081805181010312612814576020015190565b506020815110156135be565b801561363657600c5490600b548203828111612ab9576064111561362757606482065f52600d60205260405f205560018101808211612ab957600c5590565b632764e20b60e01b5f5260045ffd5b505f1990565b602081830312612814578051906001600160401b038211612814570181601f820112156128145780519061366f82612c3f565b9261367d60405194856129df565b8284526020838301011161281457815f9260208093018386015e8301015290565b6040516136aa816129c4565b600180825260208083019182526001600160a01b039093165f8181526008948590526040902092518354925161ffff1990931660ff911515919091161791151590931b61ff0016179055600954600160401b811015612995578060016137139201600955612c5a565b81546001600160a01b0360039290921b91821b19169083901b1790556040516306fdde0360e01b81525f81600481855afa908115612809575f9161383c575b506040516395d89b4160e01b81525f81600481865afa908115612809575f91613822575b5060405163e5a6b10f60e01b8152915f83600481875afa928315612809577f4ac4dcc08b0c26c3fb6b58c64c1392b7934b1ce6b0382a5986ea5c3de795e053936137de936131cf925f926137fa575b506137ec90604051958695606087526060870190612a00565b908582036020870152612a00565b908382036040850152612a00565b6137ec91925061381b903d805f833e61381381836129df565b81019061363c565b91906137c5565b61383691503d805f833e61381381836129df565b5f613776565b61385091503d805f833e61381381836129df565b5f613752565b60ff1660028114908115613868575090565b600391501490565b602081519101519060208110613884575090565b5f199060200360031b1b1690565b8015801561393b575b61392a575f9081906401000003d0199060079082908181800909086040516020810191602083526020604083015260206060830152608082015263800001e9600160ff1b0360a08201526401000003d01960c082015260c0815261390060e0826129df565b519060055afa61390e61354b565b9015801561392f575b61392a57613926600191613870565b1490565b505f90565b50602081511415613917565b506401000003d01981101561389b565b60405163a9059cbb60e01b81526001600160a01b0392831660048201526001600160801b03939093166024840152602091839160449183915f91165af15f918161399d575b5061399a57505f90565b90565b6139b791925060203d60201161099f5761099181836129df565b905f613990565b9035601e19823603018112156128145701602081359101916001600160401b03821161281457813603831361281457565b909160606001600160401b037fadf6f2901dd7af2f28a594f47a925894a08d4de10609dff591a80642648775c5921693613a6a6001600160801b0360405195613a378761297a565b60018060a01b031692838752306020880152876040880152169485848201525f60808201525f60a0820152600554613490565b9384600555600654906001600160401b03613a86818416612a9c565b1680926001600160401b0319161760065560405192835260208301526040820152a356febb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd65042ea6dad60c26f055e80ec401b3437c854ed586a0704d305bb4e9ea4518cfa2646970667358221220bdc5de088fc0945226e7eb3ef2ae1ff939c6cbbdb50888299688b7cb7334839a64736f6c63430008230033a26469706673582212205d88e2401bb60a2a6a25c8083bfd6ff966baec65d2628b932d524ecddcb0a25b64736f6c6343000823003360808060405234601557610188908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63b628c33414610025575f80fd5b346100db576101e03660031901126100db5760043563ffffffff8116036100db5761004e6100df565b506100576100f6565b5061006061010d565b5060a4356001600160a01b038116036100db5760403660c31901126100db576080366101031901126100db576101a43567ffffffffffffffff81116100db576100ad903690600401610124565b50506101c4359067ffffffffffffffff82116100db576100d36020923690600401610124565b505060018152f35b5f80fd5b6024359067ffffffffffffffff821682036100db57565b6044359067ffffffffffffffff821682036100db57565b6084359067ffffffffffffffff821682036100db57565b9181601f840112156100db5782359167ffffffffffffffff83116100db57602083818601950101116100db5756fea2646970667358221220dd8dec342d7a13b0117cdf905a0117bde08b02751d7550ccc8b48f4f40bc168c64736f6c6343000823003360a034606e57601f61051a38819003918201601f19168301916001600160401b03831184841017607257808492602094604052833981010312606e57516001600160a01b03811690819003606e57608052604051610493908161008782396080518181816047015261015e0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816311da52611461007a5750637b9a730114610032575f80fd5b34610076575f366003190112610076576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b346100765760e0366003190112610076576004359063ffffffff8216809203610076576024356001600160a01b03811690819003610076576064356001600160a01b038116939084900361007657608435916fffffffffffffffffffffffffffffffff83168093036100765760a4359167ffffffffffffffff83168093036100765760c4359567ffffffffffffffff871161007657366023880112156100765786600401359567ffffffffffffffff871161007657366024888a010111610076575f546104185760015f9081556390b7f6fd60e01b825260048201849052816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102bd575f91610321575b50336001600160a01b03909116036103125760405163a9059cbb60e01b81528160048201528560248201526020816044815f885af19081156102bd575f916102d7575b50156102c85760e45f928760209860246040519b8c9a8b998a96630a137ff560e01b88526004880152338488015260443560448801526064870152608486015260c060a48601528260c486015201848401378181018301859052601f01601f19168101030193f19081156102bd575f9161027a575b506001600160e01b03191663f5ec800b60e01b0161026b575f8055005b63be51ced360e01b5f5260045ffd5b90506020813d6020116102b5575b8161029560209383610427565b8101031261007657516001600160e01b031981168103610076578161024e565b3d9150610288565b6040513d5f823e3d90fd5b6312171d8360e31b5f5260045ffd5b90506020813d60201161030a575b816102f260209383610427565b810103126100765751801515810361007657886101d9565b3d91506102e5565b63efc26b5760e01b5f5260045ffd5b90503d805f833e6103328183610427565b81016101208282031261007657815163ffffffff8116036100765761035960208301610449565b9161036660408201610449565b5061037360608201610449565b5061038060808201610449565b5060e081015167ffffffffffffffff811603610076576101008101519067ffffffffffffffff8211610076570181601f8201121561007657805167ffffffffffffffff811161040457604051926103e1601f8301601f191660200185610427565b81845260208284010111610076575f928160208094018483015e01015288610196565b634e487b7160e01b5f52604160045260245ffd5b6336a4d21b60e11b5f5260045ffd5b90601f8019910116810190811067ffffffffffffffff82111761040457604052565b51906001600160a01b03821682036100765756fea264697066735822122052b0f0acf16460b121608f08451d97cb0307cb66207b054d401392d3d0a6d56164736f6c63430008230033" } diff --git a/specs/ref-impls/src/interfaces/IZone.sol b/specs/ref-impls/src/interfaces/IZone.sol index 082988f12..32e9adef7 100644 --- a/specs/ref-impls/src/interfaces/IZone.sol +++ b/specs/ref-impls/src/interfaces/IZone.sol @@ -474,9 +474,20 @@ interface IZoneFactory { function zoneCount() external view returns (uint32); /// @notice Returns the stored metadata for a zone. - /// @param zoneId The zone ID to query. - /// @return info The zone metadata recorded for `zoneId`. - function zones(uint32 zoneId) external view returns (ZoneInfo memory); + function zones(uint32 id) + external + view + returns ( + uint32 zoneId, + address portal, + address initialToken, + address admin, + address sequencer, + bytes32 genesisBlockHash, + bytes32 genesisTempoBlockHash, + uint64 genesisTempoBlockNumber, + string memory rpcUrl + ); /// @notice Returns whether an address is a portal deployed by this factory. /// @param portal The portal address to check. diff --git a/specs/ref-impls/src/tempo/SwapAndDepositRouter.sol b/specs/ref-impls/src/tempo/SwapAndDepositRouter.sol index 882ac7246..7150d589c 100644 --- a/specs/ref-impls/src/tempo/SwapAndDepositRouter.sol +++ b/specs/ref-impls/src/tempo/SwapAndDepositRouter.sol @@ -5,8 +5,7 @@ import { EncryptedDepositPayload, IWithdrawalReceiver, IZoneFactory, - IZonePortal, - ZoneInfo + IZonePortal } from "../interfaces/IZone.sol"; import { IStablecoinDEX } from "tempo-std/interfaces/IStablecoinDEX.sol"; import { ITIP20 } from "tempo-std/interfaces/ITIP20.sol"; @@ -77,8 +76,8 @@ contract SwapAndDepositRouter is IWithdrawalReceiver { revert UnauthorizedMessenger(); } - ZoneInfo memory sourceZone = zoneFactory.zones(sourceZoneId); - if (sourceZone.portal != sourcePortal) { + (, address registeredPortal,,,,,,,) = zoneFactory.zones(sourceZoneId); + if (registeredPortal != sourcePortal) { revert InvalidSourcePortal(); } diff --git a/specs/ref-impls/src/tempo/ZoneFactory.sol b/specs/ref-impls/src/tempo/ZoneFactory.sol index 9e81b69bb..7aa9e5736 100644 --- a/specs/ref-impls/src/tempo/ZoneFactory.sol +++ b/specs/ref-impls/src/tempo/ZoneFactory.sol @@ -173,8 +173,33 @@ contract ZoneFactory is IZoneFactory { return _nextZoneId - 1; } - function zones(uint32 zoneId) external view returns (ZoneInfo memory) { - return _zones[zoneId]; + function zones(uint32 id) + external + view + returns ( + uint32 zoneId, + address portal, + address initialToken, + address admin, + address sequencer, + bytes32 genesisBlockHash, + bytes32 genesisTempoBlockHash, + uint64 genesisTempoBlockNumber, + string memory rpcUrl + ) + { + ZoneInfo storage info = _zones[id]; + return ( + info.zoneId, + info.portal, + info.initialToken, + info.admin, + info.sequencer, + info.genesisBlockHash, + info.genesisTempoBlockHash, + info.genesisTempoBlockNumber, + info.rpcUrl + ); } function isZonePortal(address portal) external view returns (bool) { diff --git a/specs/ref-impls/src/tempo/ZoneMessenger.sol b/specs/ref-impls/src/tempo/ZoneMessenger.sol index 216774c9e..a75993fe2 100644 --- a/specs/ref-impls/src/tempo/ZoneMessenger.sol +++ b/specs/ref-impls/src/tempo/ZoneMessenger.sol @@ -1,12 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; -import { - IWithdrawalReceiver, - IZoneFactory, - IZoneMessenger, - ZoneInfo -} from "../interfaces/IZone.sol"; +import { IWithdrawalReceiver, IZoneFactory, IZoneMessenger } from "../interfaces/IZone.sol"; import { ITIP20 } from "tempo-std/interfaces/ITIP20.sol"; /// @title ZoneMessenger @@ -45,8 +40,8 @@ contract ZoneMessenger is IZoneMessenger { external nonReentrantRelay { - ZoneInfo memory zone = zoneFactory.zones(zoneId); - if (zone.portal != msg.sender) revert UnauthorizedPortal(); + (, address portal,,,,,,,) = zoneFactory.zones(zoneId); + if (portal != msg.sender) revert UnauthorizedPortal(); if (!ITIP20(token).transfer(target, amount)) { revert TransferFailed(); diff --git a/specs/ref-impls/test/tempo/SwapAndDepositRouter.t.sol b/specs/ref-impls/test/tempo/SwapAndDepositRouter.t.sol index 3bf0ef817..1c62f3300 100644 --- a/specs/ref-impls/test/tempo/SwapAndDepositRouter.t.sol +++ b/specs/ref-impls/test/tempo/SwapAndDepositRouter.t.sol @@ -69,8 +69,33 @@ contract MockZoneFactoryForRouter { return portalMap[portal]; } - function zones(uint32 zoneId) external view returns (ZoneInfo memory) { - return _zones[zoneId]; + function zones(uint32 id) + external + view + returns ( + uint32 zoneId, + address portal, + address initialToken, + address admin, + address sequencer, + bytes32 genesisBlockHash, + bytes32 genesisTempoBlockHash, + uint64 genesisTempoBlockNumber, + string memory rpcUrl + ) + { + ZoneInfo storage info = _zones[id]; + return ( + info.zoneId, + info.portal, + info.initialToken, + info.admin, + info.sequencer, + info.genesisBlockHash, + info.genesisTempoBlockHash, + info.genesisTempoBlockNumber, + info.rpcUrl + ); } } diff --git a/specs/ref-impls/test/tempo/ZoneBridge.t.sol b/specs/ref-impls/test/tempo/ZoneBridge.t.sol index 5870bbdfd..900fc5bf6 100644 --- a/specs/ref-impls/test/tempo/ZoneBridge.t.sol +++ b/specs/ref-impls/test/tempo/ZoneBridge.t.sol @@ -88,8 +88,33 @@ contract MockZoneFactoryForBridgeMessenger { _zones[zoneId].portal = portal; } - function zones(uint32 zoneId) external view returns (ZoneInfo memory) { - return _zones[zoneId]; + function zones(uint32 id) + external + view + returns ( + uint32 zoneId, + address portal, + address initialToken, + address admin, + address sequencer, + bytes32 genesisBlockHash, + bytes32 genesisTempoBlockHash, + uint64 genesisTempoBlockNumber, + string memory rpcUrl + ) + { + ZoneInfo storage info = _zones[id]; + return ( + info.zoneId, + info.portal, + info.initialToken, + info.admin, + info.sequencer, + info.genesisBlockHash, + info.genesisTempoBlockHash, + info.genesisTempoBlockNumber, + info.rpcUrl + ); } } diff --git a/specs/ref-impls/test/tempo/ZoneFactory.t.sol b/specs/ref-impls/test/tempo/ZoneFactory.t.sol index ae8f72d5e..ec6e681c9 100644 --- a/specs/ref-impls/test/tempo/ZoneFactory.t.sol +++ b/specs/ref-impls/test/tempo/ZoneFactory.t.sol @@ -46,7 +46,7 @@ contract ZoneFactoryTest is BaseTest { assertEq(zoneFactory.zoneCount(), 1); assertTrue(zoneFactory.isZonePortal(portal)); - ZoneInfo memory info = zoneFactory.zones(zoneId); + ZoneInfo memory info = _zoneInfo(zoneId); assertEq(info.zoneId, 1); assertEq(info.portal, portal); assertEq(info.initialToken, address(pathUSD)); @@ -118,7 +118,7 @@ contract ZoneFactoryTest is BaseTest { // Verify portal references the messenger ZonePortal portalContract = ZonePortal(portal); assertEq(portalContract.messenger(), messengerAddr); - assertEq(zoneFactory.zones(zoneId).portal, portal); + assertEq(_zoneInfo(zoneId).portal, portal); } function test_createZone_multipleZones() public { @@ -160,8 +160,8 @@ contract ZoneFactoryTest is BaseTest { assertTrue(zoneFactory.isZonePortal(portal1)); assertTrue(zoneFactory.isZonePortal(portal2)); - ZoneInfo memory info1 = zoneFactory.zones(zoneId1); - ZoneInfo memory info2 = zoneFactory.zones(zoneId2); + ZoneInfo memory info1 = _zoneInfo(zoneId1); + ZoneInfo memory info2 = _zoneInfo(zoneId2); assertEq(info1.sequencer, sequencer); assertEq(info2.sequencer, secondSequencer); assertEq(ZonePortal(portal1).messenger(), zoneFactory.messenger()); @@ -352,7 +352,7 @@ contract ZoneFactoryTest is BaseTest { } function test_zones_returnsEmptyForNonExistentZone() public view { - ZoneInfo memory info = zoneFactory.zones(999); + ZoneInfo memory info = _zoneInfo(999); assertEq(info.zoneId, 0); assertEq(info.portal, address(0)); assertEq(info.initialToken, address(0)); @@ -377,6 +377,21 @@ contract ZoneFactoryTest is BaseTest { }); } + function _zoneInfo(uint32 id) internal view returns (ZoneInfo memory info) { + ( + info.zoneId, + info.portal, + info.initialToken, + info.admin, + info.sequencer, + info.genesisBlockHash, + info.genesisTempoBlockHash, + info.genesisTempoBlockNumber, + info.rpcUrl + ) = zoneFactory.zones(id); + info.verifier = zoneFactory.verifier(); + } + /*////////////////////////////////////////////////////////////// REVERT PATHS //////////////////////////////////////////////////////////////*/ @@ -446,7 +461,7 @@ contract ZoneFactoryTest is BaseTest { ZonePortal(portal).acceptSequencer(); assertEq(ZonePortal(portal).sequencer(), nextSequencer); // portal: current - assertEq(zoneFactory.zones(id).sequencer, sequencer); // factory: snapshot at creation + assertEq(_zoneInfo(id).sequencer, sequencer); // factory: snapshot at creation } // Factory ZoneInfo.admin is likewise a snapshot; the portal admin can rotate via the @@ -459,7 +474,7 @@ contract ZoneFactoryTest is BaseTest { ZonePortal(portal).acceptAdmin(); assertEq(ZonePortal(portal).admin(), alice); // portal: current - assertEq(zoneFactory.zones(id).admin, admin); // factory: snapshot at creation + assertEq(_zoneInfo(id).admin, admin); // factory: snapshot at creation } /*////////////////////////////////////////////////////////////// @@ -499,7 +514,7 @@ contract ZoneFactoryTest is BaseTest { p.zoneParams = ZoneParams(gh, tgh, tbn); (uint32 id, address portal) = zoneFactory.createZone(p); - ZoneInfo memory info = zoneFactory.zones(id); + ZoneInfo memory info = _zoneInfo(id); assertEq(info.admin, adminAddr); assertEq(info.sequencer, seqAddr); diff --git a/specs/ref-impls/test/tempo/ZoneIntegration.t.sol b/specs/ref-impls/test/tempo/ZoneIntegration.t.sol index 14907adaf..af69c5642 100644 --- a/specs/ref-impls/test/tempo/ZoneIntegration.t.sol +++ b/specs/ref-impls/test/tempo/ZoneIntegration.t.sol @@ -63,8 +63,33 @@ contract MockZoneFactoryForIntegrationMessenger { _zones[zoneId].portal = portal; } - function zones(uint32 zoneId) external view returns (ZoneInfo memory) { - return _zones[zoneId]; + function zones(uint32 id) + external + view + returns ( + uint32 zoneId, + address portal, + address initialToken, + address admin, + address sequencer, + bytes32 genesisBlockHash, + bytes32 genesisTempoBlockHash, + uint64 genesisTempoBlockNumber, + string memory rpcUrl + ) + { + ZoneInfo storage info = _zones[id]; + return ( + info.zoneId, + info.portal, + info.initialToken, + info.admin, + info.sequencer, + info.genesisBlockHash, + info.genesisTempoBlockHash, + info.genesisTempoBlockNumber, + info.rpcUrl + ); } } diff --git a/specs/ref-impls/test/tempo/ZoneMessenger.t.sol b/specs/ref-impls/test/tempo/ZoneMessenger.t.sol index 0b47f44e9..4df996e84 100644 --- a/specs/ref-impls/test/tempo/ZoneMessenger.t.sol +++ b/specs/ref-impls/test/tempo/ZoneMessenger.t.sol @@ -9,6 +9,7 @@ import { import { ZoneMessenger } from "../../src/tempo/ZoneMessenger.sol"; import { BaseTest } from "../BaseTest.t.sol"; import { MockZoneToken } from "../mocks/MockZoneToken.sol"; +import { Test } from "forge-std/Test.sol"; import { ITIP20 } from "tempo-std/interfaces/ITIP20.sol"; contract MockZoneFactoryForMessenger { @@ -20,8 +21,33 @@ contract MockZoneFactoryForMessenger { _zones[zoneId].portal = portal; } - function zones(uint32 zoneId) external view returns (ZoneInfo memory) { - return _zones[zoneId]; + function zones(uint32 id) + external + view + returns ( + uint32 zoneId, + address portal, + address initialToken, + address admin, + address sequencer, + bytes32 genesisBlockHash, + bytes32 genesisTempoBlockHash, + uint64 genesisTempoBlockNumber, + string memory rpcUrl + ) + { + ZoneInfo storage info = _zones[id]; + return ( + info.zoneId, + info.portal, + info.initialToken, + info.admin, + info.sequencer, + info.genesisBlockHash, + info.genesisTempoBlockHash, + info.genesisTempoBlockNumber, + info.rpcUrl + ); } } @@ -76,6 +102,32 @@ contract RejectingWithdrawalReceiver is IWithdrawalReceiver { } +contract ZoneMessengerFactoryAbiTest is Test { + + function test_relayMessage_decodesFlattenedFactoryGetter() public { + uint32 zoneId = 1; + address portal = address(0x700); + address token = address(0x701); + + MockZoneFactoryForMessenger factory = new MockZoneFactoryForMessenger(); + factory.setPortal(zoneId, portal); + ZoneMessenger messenger = new ZoneMessenger(address(factory)); + AcceptingWithdrawalReceiver receiver = new AcceptingWithdrawalReceiver(); + + vm.mockCall( + token, + abi.encodeWithSelector(ITIP20.transfer.selector, address(receiver), 1), + abi.encode(true) + ); + vm.prank(portal); + messenger.relayMessage(zoneId, token, bytes32("sender"), address(receiver), 1, 500_000, ""); + + assertEq(receiver.lastZoneId(), zoneId); + assertEq(receiver.lastSourcePortal(), portal); + } + +} + contract ZoneMessengerTest is BaseTest { uint32 internal constant ZONE_ID = 1; @@ -150,7 +202,7 @@ contract ZoneMessengerTest is BaseTest { messenger.relayMessage(ZONE_ID, token, bytes32("sender"), alice, 1, 50_000, ""); } - function test_relayMessage_success() public { + function test_relayMessage_successWithFlattenedFactoryGetter() public { AcceptingWithdrawalReceiver receiver = new AcceptingWithdrawalReceiver(); bytes32 senderTag = keccak256("sender"); bytes memory data = hex"1234"; diff --git a/specs/ref-impls/test/tempo/ZonePortal.t.sol b/specs/ref-impls/test/tempo/ZonePortal.t.sol index f99b969b5..aca2b3647 100644 --- a/specs/ref-impls/test/tempo/ZonePortal.t.sol +++ b/specs/ref-impls/test/tempo/ZonePortal.t.sol @@ -386,12 +386,18 @@ contract ZonePortalTest is BaseTest { assertEq(zoneFactory.zoneCount(), 1); assertTrue(zoneFactory.isZonePortal(address(portal))); - ZoneInfo memory info = zoneFactory.zones(testZoneId); - assertEq(info.zoneId, testZoneId); - assertEq(info.portal, address(portal)); - assertEq(info.initialToken, address(pathUSD)); - assertEq(info.admin, admin); - assertEq(info.sequencer, sequencer); + ( + uint32 zoneId, + address registeredPortal, + address initialToken, + address registeredAdmin, + address registeredSequencer,,,, + ) = zoneFactory.zones(testZoneId); + assertEq(zoneId, testZoneId); + assertEq(registeredPortal, address(portal)); + assertEq(initialToken, address(pathUSD)); + assertEq(registeredAdmin, admin); + assertEq(registeredSequencer, sequencer); } function test_adminCanPauseAndResumeDeposits() public {