0 txs
202 calls
constructor
constructor(address admin, address TERMMAX_MARKET_IMPLEMENTATION_)
functions
getVersion
purefunction getVersion() pure returns (string)
gtImplements
viewfunction gtImplements(bytes32) view returns (address)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
predictMarketAddress
viewfunction predictMarketAddress(address deployer, address collateral, address debtToken, uint64 maturity, uint256 salt) view returns (address market)
TERMMAX_MARKET_IMPLEMENTATION
viewfunction TERMMAX_MARKET_IMPLEMENTATION() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
createMarket
nonpayablefunction createMarket(bytes32 gtKey, tuple params, uint256 salt) returns (address market)
renounceOwnership
nonpayablefunction renounceOwnership()
setGtImplement
nonpayablefunction setGtImplement(string gtImplementName, address gtImplement)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
MarketCreated
event MarketCreated(address indexed market, address indexed collateral, address indexed debtToken, (address collateral, address debtToken, address admin, address gtImplementation, (address treasurer, uint64 maturity, (uint32 lendTakerFeeRatio, uint32 lendMakerFeeRatio, uint32 borrowTakerFeeRatio, uint32 borrowMakerFeeRatio, uint32 mintGtFeeRatio, uint32 mintGtFeeRef) feeConfig) marketConfig, (address oracle, uint32 liquidationLtv, uint32 maxLtv, bool liquidatable) loanConfig, bytes gtInitalParams, string tokenName, string tokenSymbol) params)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PriceFeedCreated
event PriceFeedCreated(address indexed priceFeed)
SetGtImplement
event SetGtImplement(bytes32 key, address gtImplement)
StableERC4626For4626Created
event StableERC4626For4626Created(address indexed caller, address indexed stableERC4626For4626)
StableERC4626ForAaveCreated
event StableERC4626ForAaveCreated(address indexed caller, address indexed stableERC4626ForAave)
TermMax4626FactoryInitialized
event TermMax4626FactoryInitialized(address indexed aavePool, uint16 aaveReferralCode, address stableERC4626For4626Implementation, address stableERC4626ForAaveImplementation, address variableERC4626ForAaveImplementation)
VariableERC4626ForAaveCreated
event VariableERC4626ForAaveCreated(address indexed caller, address indexed variableERC4626ForAave)
VaultCreated
event VaultCreated(address indexed vault, address indexed creator, (address admin, address curator, address guardian, uint256 timelock, address asset, address pool, uint256 maxCapacity, string name, string symbol, uint64 performanceFeeRate, uint64 minApy) initialParams)
errors
CantNotFindGtImplementation
error CantNotFindGtImplementation()
FailedDeployment
error FailedDeployment()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidImplementation
error InvalidImplementation()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
creation bytecode
0x60a0346101bc57601f6168fa38819003918201601f19168301916001600160401b038311848410176101865780849260409485528339810103126101bc57610052602061004b836101c0565b92016101c0565b6001600160a01b039091169081156101a957600180546001600160a01b03199081169091555f80549182168417815560405193916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b0381161561019a57608052615b3c8181016001600160401b03811183821017610186578291610dbe833903905ff0801561017b577fd9eb2aaa5f19c272f06ea2b4c8449687a8c2ac90aa2cfba9b3c9de0dca6ca6955f5260026020527f11ff1f6996f937ef043603a68e45da45c67eb2052b600397c1845850ee983a8e80546001600160a01b0319166001600160a01b03909216919091179055604051610be990816101d58239608051818181610502015281816107c001526108a30152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b63340aafcd60e11b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b51906001600160a01b03821682036101bc5756fe60806040526004361015610011575f80fd5b5f5f3560e01c80630d8e6e2c14610906578063396bcc2d146107ef5780633cb1091d146107ab578063715018a61461074857806379ba5097146106c35780638da5cb5b1461069c5780639ac2b5231461022d578063ac4a424c146101fa578063e30c3978146101d1578063f05afa5d146101025763f2fde38b14610093575f80fd5b346100ff5760203660031901126100ff576100ac610975565b6100b4610ba0565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b50346100ff5760403660031901126100ff576004356001600160401b0381116101cd5760406101567fb19e4f91ef00ae8ec9cf36739c22f533be9ccfe844165a04cc39d0a31d8f69b0923690600401610a2c565b61015e61098b565b90610167610ba0565b82516101926020828180820195805191829101875e810189838201520301601f1981018352826109b5565b5190208085526002602090815283862080546001600160a01b0319166001600160a01b0390941693841790558351918252810191909152a180f35b5080fd5b50346100ff57806003193601126100ff576001546040516001600160a01b039091168152602090f35b50346100ff5760203660031901126100ff57602090600435815260028252604060018060a01b0391205416604051908152f35b34610666576060366003190112610666576024356001600160401b03811161066657803603610260600319820112610666576040519061012082018281106001600160401b0382111761068857604052610289836004016109a1565b82526024830135926001600160a01b038416840361066657602083019384526102b4604482016109a1565b60408401526102c5606482016109a1565b60608401908152906101006083198401126106665760405192606084018481106001600160401b0382111761068857604052610303608483016109a1565b845260a48201356001600160401b038116810361066657602085015260c060c319820112610666576040519060c08201918083106001600160401b038411176106885760809260405261035860c485016109d6565b815261036660e485016109d6565b602082015261037861010485016109d6565b604082015261038a61012485016109d6565b606082015261039c61014485016109d6565b838201526103ad61016485016109d6565b60a0820152604086015285820194855261018319011261066657604051608081018181106001600160401b03821117610688576040526101848201356001600160a01b03811681036106665781526104086101a483016109d6565b602082015261041a6101c483016109d6565b60408201526101e4820135801515810361066657606082015260a08501526102048101356001600160401b038111610666578101366023820112156106665761046d9036906024600482013591016109e7565b60c08501526102248101356001600160401b038111610666576104969060043691840101610a2c565b60e0850152610244810135906001600160401b0382116106665760046104bf9236920101610a2c565b6101008401526104cd610ba0565b6004355f908152600260205260409020546001600160a01b03169081905215610679576e5af43d82803e903d91602b57fd5bf37f00000000000000000000000000000000000000000000000000000000000000009160018060a01b03845116906001600160401b03602060018060a01b03885116925101511660405191602083019333855260408401526060830152608082015260443560a082015260a0815261057860c0826109b5565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b1760205260018060a01b0390603760095ff51690811561066a57813b1561066657604051632442841760e21b8152925f84806105e28560048301610a4a565b038183875af193841561065b5760209461064b575b50815190516040516001600160a01b0391821693929091169184917f3f544a0e66146e1c515b04e3d00d07fabc299aa08db26f13ae0a2e37975032869181906106409082610a4a565b0390a4604051908152f35b5f610655916109b5565b5f6105f7565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b63cd54ea9760e01b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b34610666575f366003190112610666575f546040516001600160a01b039091168152602090f35b34610666575f36600319011261066657600154336001600160a01b039091160361073557600180546001600160a01b03199081169091555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b34610666575f36600319011261066657610760610ba0565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610666575f366003190112610666576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346106665760a036600319011261066657610808610975565b61081061098b565b6044356001600160a01b038116929190839003610666576064356001600160401b03811680910361066657602093604051928584019460018060a01b0316855260018060a01b031660408401526060830152608082015260843560a082015260a0815261087e60c0826109b5565b519020604051903060388301526f5af43d82803e903d91602b57fd5bf3ff60248301527f00000000000000000000000000000000000000000000000000000000000000006014830152733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c82012060788201526055604360018060a01b0392012016604051908152f35b34610666575f3660031901126106665761094d6040516109276040826109b5565b60058152640322e302e360dc1b6020820152604051918291602083526020830190610951565b0390f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361066657565b602435906001600160a01b038216820361066657565b35906001600160a01b038216820361066657565b90601f801991011681019081106001600160401b0382111761068857604052565b359063ffffffff8216820361066657565b9291926001600160401b0382116106885760405191610a10601f8201601f1916602001846109b5565b829481845281830111610666578281602093845f960137010152565b9080601f8301121561066657816020610a47933591016109e7565b90565b90610a47916020815260018060a01b03825116602082015260018060a01b03602083015116604082015260018060a01b03604083015116606082015260018060a01b03606083015116608082015263ffffffff60a060406080850151600180841b03815116838601526001600160401b0360208201511660c086015201518281511660e085015282602082015116610100850152826040820151166101208501528260608201511661014085015282608082015116610160850152015116610180820152606060a083015160018060a01b038151166101a084015263ffffffff6020820151166101c084015263ffffffff6040820151166101e084015201511515610200820152610100610b8a610b7360c0850151610260610220860152610280850190610951565b60e0850151848203601f1901610240860152610951565b92015190610260601f1982850301910152610951565b5f546001600160a01b031633036107355756fea26469706673582212203427162eac22553e8d32553f8df70fe035938245cdb5e70029cf9103ecefd4b664736f6c634300081d00336080806040523460aa575f516020615b1c5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b604051615a6d90816100af8239f35b6001600160401b0319166001600160401b039081175f516020615b1c5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146139a25750806306fdde03146138e5578063081812fc1461389c578063095ea7b3146137b05780630d8e6e2c14613795578063173ba946146136f457806318160ddd146136cb5780631b2b5fad1461368057806321e439ef1461343e57806323b872dd1461342757806324f39cfc1461290a5780632dd06c62146126c35780632f745c5914612645578063358090341461203c5780633644e515146120225780633c568b9814611f8657806342842e0e14611f575780634a994eef14611f0d5780634f6ccce714611eb357806350ef5c3514611e2957806352b17446146118c85780635fec5d0b146118725780636352211e14611842578063671d6429146117ff57806370a08231146117dc578063715018a61461177557806377efba601461150f5780637da39d5b146114f05780637ecebe00146114ad5780638349d6be1461143857806384b0196e146113195780638cc6acce146112af5780638da5cb5b1461127b57806395d89b4114611185578063a22cb465146110e7578063a91a53b3146110c2578063b88d4fde14611066578063c87b56dd14611011578063cefa74cc14610fdc578063d8fe817514610ca6578063de62d8421461092b578063df2cbf3e14610697578063e172864514610679578063e985e9c51461062c578063eef5777c14610541578063f2fde38b14610514578063f3bfc738146104d9578063fc74a13a1461046e5763fe8fd7d914610239575f80fd5b3461046b5761024736613c16565b61024f614358565b6001600160401b0360045460a01c1642101561045c576001809183855260086020526102e06102db60408720926102b06040519461028c86613ae1565b6001600160801b0381541686526102a96040518099819301613cb3565b0387613afc565b602084019586526102c2813033614a78565b6102d56102cf8751615393565b91615393565b9061420e565b614f63565b835283855260086020526001600160801b03604086209151166001600160801b03198254161781550181518051906001600160401b038211610448576103308261032a8554613c7b565b856141a4565b602090601f83116001146103c057827f7f37e862f2ec2cbe9b0823e61188ca52475f1f16f43051e4b812dbf3089f550f959361039e9593610386938a926103b5575b50508160011b915f199060031b1c19161790565b90555b51604051918291602083526020830190613a27565b0390a260015f5160206159b85f395f51905f525580f35b015190505f80610372565b8387528187209190601f198416885b81811061043057509260019285927f7f37e862f2ec2cbe9b0823e61188ca52475f1f16f43051e4b812dbf3089f550f989661039e989610610418575b505050811b019055610389565b01515f1960f88460031b161c191690555f808061040b565b929360206001819287860151815501950193016103cf565b634e487b7160e01b86526041600452602486fd5b632fa243d760e11b8352600483fd5b80fd5b503461046b57604036600319011261046b576104d561048b613a61565b610493614358565b61049b6148d6565b6104b06104a9600435614f1f565b8092614c25565b60015f5160206159b85f395f51905f5255604051918291602083526020830190613a27565b0390f35b503461046b578060031936011261046b5760206040517f38d47287497526556d35736679d5577a53750afee9e16b22ce0be2e0d0169bcb8152f35b503461046b57602036600319011261046b5761053e610531613a4b565b6105396148d6565b6142b8565b80f35b503461046b578060031936011261046b5760a060405161056081613aab565b8281528260208201528260408201528260608201528260808201526040519261058884613ac6565b808452806020850152806040850152606084015201526101206105a9613d57565b6040805182516001600160a01b039081168252602080850151821681840152848401518216838501526060858101518316848201526080808701516001600160401b03169085015260a09586015180519093169584019590955281015163ffffffff90811660c08401529281015190921660e08201529101511515610100820152f35b503461046b57604036600319011261046b57610646613a4b565b610657610651613a61565b91613df1565b9060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b503461046b578060031936011261046b576020600954604051908152f35b503461046b576106a636613be3565b906106af614358565b6106b7613d57565b906001600160401b0360808301511642101561091c576106d790846152ad565b93918193915f146107d35791606093916107217f7f8b6086f5224d289706802feb6dc42b31f9343e8f211075a41e76bb80e0bac2969460206107188a614329565b91015190614c25565b61072a87614c4e565b811561079857602001515f5160206159185f395f51905f5254610766916001600160801b038616916001600160a01b0390811691339116614b9c565b6001600160801b03604051931683521515602083015215156040820152a260015f5160206159b85f395f51905f525580f35b604001515f5160206159185f395f51905f52546107ce916001600160801b038616916001600160a01b0390811691339116614b9c565b610766565b858752600860205260206001604089206001600160801b038451166001600160801b0319825416178155019101518051906001600160401b038211610908576108208261032a8554613c7b565b602090601f831160011461087e578260609795937f7f8b6086f5224d289706802feb6dc42b31f9343e8f211075a41e76bb80e0bac299979593610877938d926103b55750508160011b915f199060031b1c19161790565b905561072a565b838a52818a209190601f1984168b5b8181106108f0575092600192859260609a98967f7f8b6086f5224d289706802feb6dc42b31f9343e8f211075a41e76bb80e0bac29c9a9896106108d8575b505050811b01905561072a565b01515f1960f88460031b161c191690555f80806108cb565b9293602060018192878601518155019501930161088d565b634e487b7160e01b89526041600452602489fd5b632fa243d760e11b8552600485fd5b503461046b57602036600319011261046b576004356001600160401b038111610ca25736602382011215610ca2578060040135906001600160401b038211610c8e578160051b9060208201926109846040519485613afc565b8352602083016024819383010191368311610c8a57602401905b828210610c7a575050506109b0614358565b815115610c6b576001600160401b0360806109c9613d57565b01511642101561045c57815115610b13578060019150519283815260086020526040812090610a22604051926109fe84613ae1565b6001600160801b038154168452610a1b6040518096819301613cb3565b0384613afc565b60208201928352805b8451811015610b27578451811015610b135760208160051b86010151610a513382614390565b81610a60575b50600101610a2b565b868114610b015790610afb8260019385526008602052610adc846001600160801b03610ac98160408a20610ab760405191610a9a83613ae1565b838154168352610ab06040518098819301613cb3565b0386613afc565b602081019485525116828b511661416e565b1688526102d56102cf8a51925192615393565b60405190602082015260208152610af4604082613afc565b8752614c4e565b90610a57565b63420aa54960e11b8352600452602482fd5b634e487b7160e01b5f52603260045260245ffd5b50926001859283865260086020526001600160801b03604087209151166001600160801b0319825416178155019251928351936001600160401b0385116104485794602095610b7a8661032a8554613c7b565b8691601f8711600114610c095795610ba9928192879892610bfe5750508160011b915f199060031b1c19161790565b90555b7f520c32c169c6a8ba85bff03027f1a2b9ce9488b6d7de8911e3de32797fffa24760405185815280610be2339488830190613c48565b0390a360015f5160206159b85f395f51905f5255604051908152f35b015190508880610372565b9190601f198716848452828420935b818110610c54575091600193918888999410610c3c575b505050811b019055610bac565b01515f1960f88460031b161c19169055878080610c2f565b929389600181928786015181550195019301610c18565b632e31ed5560e21b8352600483fd5b813581526020918201910161099e565b8580fd5b634e487b7160e01b5f52604160045260245ffd5b5080fd5b503461046b5760a036600319011261046b57600435610cc3613a77565b90610ccc613a8d565b606435929091906001600160a01b0384168403610fd8576084356001600160401b038111610c8a57610d02903690600401613b38565b610d0a614358565b610d143384614390565b610d1c613d57565b916001600160401b03608084015116421015610fc957610d4590610d3e61426a565b50846152ad565b9391969060016020890191610d6f6102db610d608551615393565b610d6989615393565b90614c18565b8352159889610f84575b878b5260086020526001600160801b0360408c209151166001600160801b03198254161781550190518051906001600160401b038211610f7057610dc18261032a8554613c7b565b602090601f8311600114610ed95795610e85948194610e288560409f96610e2f966001600160801b039c7fa8dae02700945d57b05d5ecedd16815619be453c4e95d2bf64cd4d93c33ff9d69e9c99926103b55750508160011b915f199060031b1c19161790565b9055614c25565b8715610ea657602001515f5160206159185f395f51905f5254610e6491858716916001600160a01b0390811691339116614b9c565b88519384931696878452151560208401526060898401526060830190613a27565b0390a260015f5160206159b85f395f51905f52558251911582526020820152f35b8901515f5160206159185f395f51905f5254610ed491858716916001600160a01b0390811691339116614b9c565b610e64565b601f198316848d52828d209c5b818110610f58575094879460018560409f610e2f966001600160801b039c967fa8dae02700945d57b05d5ecedd16815619be453c4e95d2bf64cd4d93c33ff9d69e9c99610e859c10610f40575b505050811b019055614c25565b01515f1960f88460031b161c191690555f8080610f33565b828401518e556001909d019c60209384019301610ee6565b634e487b7160e01b8b52604160045260248bfd5b610fc4610f99610f94838861496a565b614a3d565b63ffffffff604060a08901510151166001600160801b03821611158a610fbe81614329565b91614283565b610d79565b632fa243d760e11b8752600487fd5b5f80fd5b503461046b578060031936011261046b575f5160206159185f395f51905f52546040516001600160a01b039091168152602090f35b34610fd8576020366003190112610fd85761102d600435614329565b505f60405161103d602082613afc565b526104d560405161104f602082613afc565b5f8152604051918291602083526020830190613a27565b34610fd8576080366003190112610fd85761107f613a4b565b611087613a61565b90604435606435926001600160401b038411610fd8576110ae6110c0943690600401613b38565b926110ba838383613e6f565b3361516b565b005b34610fd8575f366003190112610fd857602060ff60055460e01c166040519015158152f35b34610fd8576040366003190112610fd857611100613a4b565b611108613a9c565b6001600160a01b039091169081156111725761112333613df1565b825f526020526111428160405f209060ff801983541691151516179055565b60405190151581527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b50630b61174360e31b5f5260045260245ffd5b34610fd8575f366003190112610fd8576040515f5f516020615a185f395f51905f52546111b181613c7b565b808452906001811690811561125757506001146111ed575b6104d5836111d981850382613afc565b604051918291602083526020830190613a27565b5f516020615a185f395f51905f525f9081527ff4bad0a69248f59680a4f2b3000328cec71a413447c96781cfe5996daa8c456e939250905b80821061123d575090915081016020016111d96111c9565b919260018160209254838588010152019101909291611225565b60ff191660208086019190915291151560051b840190910191506111d990506111c9565b34610fd8575f366003190112610fd8575f5160206159185f395f51905f52546040516001600160a01b039091168152602090f35b34610fd8576020366003190112610fd8576004356001600160401b038111610fd8576113146113037fcafde91d88758783031589e338ee24417cd167f8c9d14e7d6bedc99fea47be76923690600401613b38565b61130b6148d6565b6111d981615125565b0390a1005b34610fd8575f366003190112610fd8577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061140f575b156113d2576113a4611362614faf565b6104d561136d61507a565b6113b26040519161137f602084613afc565b5f83525f368137604051958695600f60f81b875260e0602088015260e0870190613a27565b908582036040870152613a27565b904660608501523060808501525f60a085015283820360c0850152613c48565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415611352565b34610fd8576020366003190112610fd857600160043561145781614329565b905f5260086020526104d56001600160801b0360405f2061147e60405191610a9a83613ae1565b84602082015251169260405193849360018060a01b031684526020840152606060408401526060830190613a27565b34610fd8576020366003190112610fd85760206114e86114cb613a4b565b6001600160a01b03165f9081526020819052604090206001015490565b604051908152f35b34610fd8576020366003190112610fd8576104d56111d9600435614f1f565b34610fd85761151d36613c16565b611525614358565b61152f3383614390565b611537613d57565b906001600160401b0360808301511642101561176657600191835f52600860205260405f20906115916040519261156d84613ae1565b6001600160801b03815416845261158a6040518097819301613cb3565b0385613afc565b6115b06102db6115a76020850196808852615393565b610d6986615393565b84526001600160801b0382511661171e575b50600190845f5260086020526001600160801b0360405f209151166001600160801b03198254161781550182518051906001600160401b038211610c8e5761160e8261032a8554613c7b565b602090601f83116001146116915792611667836103899461167097947f3e7ef85cf4525ca474d34f21240567dc9e13acae18755ad3a51851dfa7b8340799975f926116865750508160011b915f199060031b1c19161790565b90555b33614c25565b0390a260015f5160206159b85f395f51905f5255005b015190508a80610372565b90601f19831691845f52815f20925f5b81811061170657509361167096937f3e7ef85cf4525ca474d34f21240567dc9e13acae18755ad3a51851dfa7b834079896936001938361038998106116ee575b505050811b01905561166a565b01515f1960f88460031b161c191690558980806116e1565b929360206001819287860151815501950193016116a1565b6001600160801b0363ffffffff604060a061173c610f94878761496a565b9401510151169116908111156115c2578463733a8cc360e01b5f526004523360245260445260645ffd5b632fa243d760e11b5f5260045ffd5b34610fd8575f366003190112610fd85761178d6148d6565b5f5160206159185f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610fd8576020366003190112610fd85760206114e86117fa613a4b565b61423b565b34610fd8576020366003190112610fd857611818613a4b565b6118206148d6565b600480546001600160a01b0319166001600160a01b0392909216919091179055005b34610fd8576020366003190112610fd8576020611860600435614329565b6040516001600160a01b039091168152f35b34610fd8576040366003190112610fd85761188b613a4b565b611893613a61565b9060018060a01b03165f525f60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610fd85760016118d836613be3565b6118e3929192614358565b82825f52600860205260405f209361191e6040519561190187613ae1565b6001600160801b0381541687526102a96040518099819301613cb3565b6020850195865261192d613d57565b91606060a0840151015115611e1a576119468387614aa3565b939192905015611dba576001600160801b03808316911611611db0575b506119ee9192845f14611d745760208101515f5160206159185f395f51905f52546119a7916001600160801b038716916001600160a01b0390811691339116614b9c565b6119b18851615393565b5f925f5f90875f936001600160801b038d5116611cb0575b5050916119dd6119fe92611a03959461420e565b808710818818021896878097614c18565b8180821091180218958692614c18565b614c18565b9660405192602084015260208352611a1c604084613afc565b60405193602085015260208452611a34604085613afc565b60405197602089015260208852611a4c604089613afc565b80516001600160801b03868116969116868103611b455750505086975091611adb611ae992611af8947fa3b4d99443718f9cc809489498e6683e7bb1655c04319d479c6e594f3a018ca5989951611b2e575b611aa78a614c4e565b838051611b0e575b5050611abb8133614c25565b60405196879687521515602087015260a0604087015260a0860190613a27565b908482036060860152613a27565b82810360808401523396613a27565b0390a360015f5160206159b85f395f51905f5255005b606090910151611b2791906001600160a01b0316614c25565b8a83611aaf565b611b408b611b3b8c614329565b614c25565b611a9e565b611b5a600193926001600160801b039261421b565b168152888a52875f5260086020526001600160801b0360405f209151166001600160801b03198254161781550197519788516001600160401b038111610c8e57611bae81611ba88454613c7b565b846141a4565b6020601f8211600114611c1e5792611adb92611c0c83611ae99794611af899977fa3b4d99443718f9cc809489498e6683e7bb1655c04319d479c6e594f3a018ca59d9e9f5f92611c135750508160011b915f199060031b1c19161790565b9055611aa7565b015190508f80610372565b601f1982169a835f52815f209b5f5b818110611c985750837fa3b4d99443718f9cc809489498e6683e7bb1655c04319d479c6e594f3a018ca59b9c9d611af8999794611adb9794611ae99a9760019510611c80575b505050811b019055611aa7565b01515f1960f88460031b161c191690558e8080611c73565b838301518e556001909d019c60209384019301611c2d565b611d0b9750611a039594506119fe9350611d5d92506119dd9181611d1a6001600160801b036060611d11611cf460a0611d20980151602080825183010191016147b7565b91949097169e8f6040880151608089015191615605565b966147d2565b930151906147d2565b91615605565b968c611d2b896153c2565b9384926001600160801b03611d538c611d4e611d46826153c2565b998a9261420e565b61420e565b9351169088615605565b9081808210911802189792949550928991506119c9565b60408101515f5160206159185f395f51905f5254611dab916001600160801b038716916001600160a01b0390811691339116614b9c565b6119a7565b91506119ee611963565b866001600160401b03608087015116611c208101809111611e065780421015611df0575063376be90360e21b5f5260045260245ffd5b906335cbd54160e11b5f5260045260245260445ffd5b634e487b7160e01b5f52601160045260245ffd5b633ac524a960e11b5f5260045ffd5b34610fd8576020366003190112610fd8576004355f52600860205260606001600160801b0380611e9860405f206001611e8560405192611e6884613ae1565b858154168452611e7e6040518094819301613cb3565b0382613afc565b6020820152611e92613d57565b90614aa3565b50604094919294519415158552166020840152166040820152f35b34610fd8576020366003190112610fd8576004355f5160206159785f395f51905f5254811015611ef757611ee86020916141de565b90549060031b1c604051908152f35b63295f44f760e21b5f525f60045260245260445ffd5b34610fd8576040366003190112610fd857611f26613a4b565b611f2e613a9c565b336001600160a01b03831614611f48576110c0913361482a565b633be64e5b60e21b5f5260045ffd5b34610fd8576110c0611f6836613ba9565b9060405192611f78602085613afc565b5f84526110ba838383613e6f565b34610fd8576060366003190112610fd857600435611fa2613a9c565b604435916001600160401b038311610fd8576001611fc761200e943690600401613b7c565b939092611fd2614358565b611fdc3382614390565b805f5260086020526001600160801b0360405f2061200060405191610a9a83613ae1565b8460208201525116906143f8565b5060015f5160206159b85f395f51905f5255005b34610fd8575f366003190112610fd85760206114e86156cd565b34610fd8576080366003190112610fd857612055613a4b565b61205d613a61565b6044356001600160801b038116809103610fd8576064356001600160401b038111610fd857612090903690600401613b38565b92612099614358565b6120a16148d6565b6001546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa801561263a575f90612606575b6120e891506102d586615393565b600954106125f757836120fc913090614a78565b612104613d57565b6040519161211183613ae1565b8252602082019384526001600160801b0363ffffffff604060a0612138610f94878761496a565b94015101511691169081116125d557506001612155600654613e61565b9182600655825f5260086020526001600160801b0360405f209151166001600160801b03198254161781550192519283516001600160401b038111610c8e576121a281611ba88454613c7b565b602094601f8211600114612574576121d39293949582915f926125695750508160011b915f199060031b1c19161790565b90555b6020906040516121e68382613afc565b5f81526001600160a01b0384169384156125565761220383615344565b6001600160a01b03811680158015929190889084612538575b61222586613e29565b60018154019055875f525f5160206159985f395f51905f52895260405f20826001600160601b0360a01b8254161790558782847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a41561249157505f5160206159785f395f51905f525490865f525f5160206159385f395f51905f5288528160405f2055600160401b821015610c8e576122f0876122d88460018d96015f5160206159785f395f51905f52556141de565b90919082549060031b91821b915f19901b1916179055565b0361243e575b5061242b573b61231b575b5060015f5160206159b85f395f51905f5255604051908152f35b826123549160405180938192630a85bd0160e11b83523360048401525f6024840152866044840152608060648401526084830190613a27565b03815f885af15f91816123eb575b506123b55750503d156123ae573d61237981613b1d565b906123876040519283613afc565b81523d5f8383013e5b805191826123ab5783633250574960e11b5f5260045260245ffd5b01fd5b6060612390565b919290916001600160e01b03191663757a42ff60e11b016123d95750819083612301565b633250574960e11b5f5260045260245ffd5b9091508381813d8311612424575b6124038183613afc565b81010312610fd857516001600160e01b031981168103610fd8579085612362565b503d6123f9565b6339e3563760e11b5f525f60045260245ffd5b6124478361423b565b5f198101908111611e0657875f525f5160206158b85f395f51905f52875260405f20815f5287528560405f2055855f525f5160206158985f395f51905f52875260405f20556122f6565b908082146122f0576124a28361423b565b875f525f5160206158985f395f51905f52895260405f205490825f525f5160206158b85f395f51905f528a5260405f2091818103612504575b50885f525f5160206158985f395f51905f528a525f60408120555f5288525f60408120556122f0565b815f52828b5260405f2054815f52838c528060405f20555f525f5160206158985f395f51905f528b5260405f20558b6124db565b6125418861536a565b61254a84613e29565b80545f1901905561221c565b633250574960e11b5f525f60045260245ffd5b015190508680610372565b601f19821695835f52805f20915f5b8881106125bd575083600195969798106125a5575b505050811b0190556121d6565b01515f1960f88460031b161c19169055858080612598565b91926020600181928685015181550194019201612583565b8263733a8cc360e01b5f525f60045260018060a01b031660245260445260645ffd5b63350c14eb60e01b5f5260045ffd5b506020813d602011612632575b8161262060209383613afc565b81010312610fd8576120e890516120da565b3d9150612613565b6040513d5f823e3d90fd5b34610fd8576040366003190112610fd85761265e613a4b565b6024359061266b8161423b565b8210156126a65760018060a01b03165f525f5160206158b85f395f51905f5260205260405f20905f52602052602060405f2054604051908152f35b63295f44f760e21b5f5260018060a01b031660045260245260445ffd5b34610fd8576060366003190112610fd8576126dc613a4b565b6024356126fc604435926126ee614358565b6126f66148d6565b82614390565b612704613d57565b916001600160401b0360808401511642101561176657600192825f52600860205260405f20906127576040519261273a84613ae1565b6001600160801b038154168452610ab06040518098819301613cb3565b602082019485526001600160801b0361277b61277285614909565b8285511661416e565b1682526001600160801b0363ffffffff604060a061279c610f94878761496a565b94015101511691169081116128f05750600190835f5260086020526001600160801b0360405f209151166001600160801b03198254161781550192519283516001600160401b038111610c8e576127f781611ba88454613c7b565b6020601f82116001146128685781602094939261284b927fbdb91ebbf04ee9fbaf2041f44efbcb58933e0eaeb646c35c026829422ea8eefe97985f92610bfe5750508160011b915f199060031b1c19161790565b90555b604051908152a260015f5160206159b85f395f51905f5255005b601f19821695835f52815f20965f5b8181106128d8575096600192849260209796957fbdb91ebbf04ee9fbaf2041f44efbcb58933e0eaeb646c35c026829422ea8eefe999a106128c0575b505050811b01905561284e565b01515f1960f88460031b161c191690558780806128b3565b83830151895560019098019760209384019301612877565b8363733a8cc360e01b5f526004523360245260445260645ffd5b34610fd857610180366003190112610fd8576004356001600160401b038111610fd85761293b903690600401613b38565b6024356001600160401b038111610fd85761295a903690600401613b38565b90610120366043190112610fd8576040519161297583613aab565b6044356001600160a01b0381168103610fd8578352606435916001600160a01b0383168303610fd857602084019283526084356001600160a01b0381168103610fd8576040850190815260a4356001600160a01b0381168103610fd8576060860190815260c435906001600160401b0382168203610fd85760808781019283523660e3190112610fd85760405192612a0c84613ac6565b60e4356001600160a01b0381168103610fd85784526101043563ffffffff81168103610fd85760208501526101243563ffffffff81168103610fd8576040850152610144358015158103610fd857606085015260a08801938452610164356001600160401b038111610fd857612a86903690600401613b38565b965f5160206159f85f395f51905f52549860ff8a60401c1615996001600160401b0381168015908161341f575b6001149081613415575b15908161340c575b506133fd5767ffffffffffffffff1981166001175f5160206159f85f395f51905f52558a6133d1575b50612af76156a2565b855163ffffffff6040816020840151169201511610156133c2576305f5e10063ffffffff60208851015116116133b357612b2f6156a2565b86516001600160401b038111610c8e57612b565f5160206158d85f395f51905f5254613c7b565b601f8111613359575b506020601f82116001146132bf579080612b8d925f916132b4575b508160011b915f199060031b1c19161790565b5f5160206158d85f395f51905f52555b87516001600160401b038111610c8e57612bc45f516020615a185f395f51905f5254613c7b565b601f811161325a575b506020601f82116001146131de579080612bfa925f916131d357508160011b915f199060031b1c19161790565b5f516020615a185f395f51905f52555b612c12613d34565b612c1a6156a2565b87516001600160401b038111610c8e57612c415f5160206158f85f395f51905f5254613c7b565b601f8111613179575b506020601f82116001146130fd579080612c77925f916130f257508160011b915f199060031b1c19161790565b5f5160206158f85f395f51905f52555b8051906001600160401b038211610c8e57612caf5f5160206159585f395f51905f5254613c7b565b601f811161308d575b50602090601f831160011461301057612ce792915f91836130055750508160011b915f199060031b1c19161790565b5f5160206159585f395f51905f52555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155612d456156a2565b612d4e336142b8565b51600180546001600160a01b03199081166001600160a01b0393841617909155915160028054841691831691821790559251600380549093169082161790915591516004805494516001600160e01b03199095169184169190911760a094851b67ffffffffffffffff60a01b1617815593518051600580546020808501516040808701516060909701516001600160e81b031990941695909816949094179390971b63ffffffff60a01b169290921760c09390931b63ffffffff60c01b169290921790151560e01b60ff60e01b16179055905163313ce56760e01b815292839182905afa801561263a575f90612fca575b612e4991506146ff565b600755612e546156a2565b612e5d83615125565b60015460405163313ce56760e01b815290602090829060049082906001600160a01b03165afa90811561263a575f91612f5b575b5090612efb612eec7fa641307d9f32d587ba689ec221e043f942c00c1af322d3d7ef590574528155d894612ec7612ede956146ff565b600a55604051948594606086526060860190613a27565b908482036020860152613a27565b82810360408401523395613a27565b0390a2612f0457005b68ff0000000000000000195f5160206159f85f395f51905f5254165f5160206159f85f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b9190506020823d602011612fc2575b81612f7760209383613afc565b81010312610fd857612efb612eec7fa641307d9f32d587ba689ec221e043f942c00c1af322d3d7ef590574528155d894612ec7612fb6612ede966146d7565b94955050945050612e91565b3d9150612f6a565b506020813d602011612ffd575b81612fe460209383613afc565b81010312610fd857612ff8612e49916146d7565b612e3f565b3d9150612fd7565b015190508d80610372565b90601f198316915f5160206159585f395f51905f525f52815f20925f5b818110613075575090846001959493921061305d575b505050811b015f5160206159585f395f51905f5255612cf7565b01515f1960f88460031b161c191690558c8080613043565b9293602060018192878601518155019501930161302d565b5f5160206159585f395f51905f525f526130e2907f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f850160051c810191602086106130e8575b601f0160051c019061418e565b8c612cb8565b90915081906130d5565b90508a01518e612b7a565b601f198216905f5160206158f85f395f51905f525f52805f20915f5b8c8282106131615750509083600194939210613149575b5050811b015f5160206158f85f395f51905f5255612c87565b8b01515f1960f88460031b161c191690558d80613130565b60018495602093958493015181550194019201613119565b5f5160206158f85f395f51905f525f526131cd907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f840160051c810191602085106130e857601f0160051c019061418e565b8c612c4a565b90508a01518d612b7a565b601f198216905f516020615a185f395f51905f525f52805f20915f5b8c828210613242575050908360019493921061322a575b5050811b015f516020615a185f395f51905f5255612c0a565b8b01515f1960f88460031b161c191690558c80613211565b600184956020939584930151815501940192016131fa565b5f516020615a185f395f51905f525f526132ae907ff4bad0a69248f59680a4f2b3000328cec71a413447c96781cfe5996daa8c456e601f840160051c810191602085106130e857601f0160051c019061418e565b8b612bcd565b90508901518d612b7a565b601f198216905f5160206158d85f395f51905f525f527f37c58c799b6609234b945e882912ee9ad34948a1dfaa20a97485e1a7752bbf81915f5b8b8282106133415750509083600194939210613329575b5050811b015f5160206158d85f395f51905f5255612b9d565b8a01515f1960f88460031b161c191690558c80613310565b600184956020939584930151815501940192016132f9565b5f5160206158d85f395f51905f525f526133ad907f37c58c799b6609234b945e882912ee9ad34948a1dfaa20a97485e1a7752bbf81601f840160051c810191602085106130e857601f0160051c019061418e565b8b612b5f565b6381c718e960e01b5f5260045ffd5b63045fe17160e51b5f5260045ffd5b68ffffffffffffffffff191668010000000000000001175f5160206159f85f395f51905f52558a612aee565b63f92ee8a960e01b5f5260045ffd5b9050158c612ac5565b303b159150612abd565b8c9150612ab3565b34610fd8576110c061343836613ba9565b91613e6f565b34610fd85736600319016101008112610fd85760a013610fd85760405160a081018181106001600160401b03821117610c8e5760405261347c613a4b565b8152613486613a61565b60208201908152613495613a8d565b6040830190815260608301606435815260808401906084358252606060a319360112610fd85760405191606083018381106001600160401b03821117610c8e5760405260a43560ff81168103610fd8578352602083019260c4358452604081019360e43585528251421161365c57835188516001600160a01b03165f908152602081905260409020600101540361365c5760209460ff6080945f966135386156cd565b9160018060a01b038d51169160018060a01b038d5116918c5115159151905191604051938d8501957f38d47287497526556d35736679d5577a53750afee9e16b22ce0be2e0d0169bcb8752604086015260608501528a84015260a083015260c082015260c081526135aa60e082613afc565b519020604051908982019261190160f01b845260228301526042820152604281526135d6606282613afc565b5190209351169151905191604051938452868401526040830152606082015282805260015afa1561263a575f516001600160a01b0316801590811561366b575b5061365c576110c09260018060a01b038151165f525f602052600160405f20016136408154613e61565b905551915190511515916001600160a01b03918216911661482a565b638baa579f60e01b5f5260045ffd5b84516001600160a01b03161415905084613616565b34610fd8576020366003190112610fd8576004356001600160401b038111610fd8576114e86136b56020923690600401613b38565b6136c56136c0613d57565b614710565b906147e5565b34610fd8575f366003190112610fd85760205f5160206159785f395f51905f5254604051908152f35b34610fd85760a0366003190112610fd857600435613710613a77565b90613719613a8d565b916064356001600160401b038111610fd857613739903690600401613b38565b91608435926001600160401b038411610fd85760209461376061377a953690600401613b7c565b94909361376b614358565b6137753382614390565b6143f8565b60015f5160206159b85f395f51905f52556040519015158152f35b34610fd8575f366003190112610fd8576104d56111d9613d34565b34610fd8576040366003190112610fd8576137c9613a4b565b6024356137d581614329565b33151580613889575b80613866575b6138535781906001600160a01b0384811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a45f9081525f5160206159d85f395f51905f526020526040902080546001600160a01b0319166001600160a01b03909216919091179055005b63a9fbf51f60e01b5f523360045260245ffd5b5061387081613df1565b335f908152602091909152604090205460ff16156137e4565b506001600160a01b0381163314156137de565b34610fd8576020366003190112610fd85760206118606004356138be81614329565b505f9081525f5160206159d85f395f51905f5260205260409020546001600160a01b031690565b34610fd8575f366003190112610fd8576040515f5f5160206158d85f395f51905f525461391181613c7b565b80845290600181169081156112575750600114613938576104d5836111d981850382613afc565b5f5160206158d85f395f51905f525f9081527f37c58c799b6609234b945e882912ee9ad34948a1dfaa20a97485e1a7752bbf81939250905b808210613988575090915081016020016111d96111c9565b919260018160209254838588010152019101909291613970565b34610fd8576020366003190112610fd8576004359063ffffffff60e01b8216809203610fd85760209163780e9d6360e01b81149081156139e4575b5015158152f35b6380ac58cd60e01b811491508115613a16575b8115613a05575b50836139dd565b6301ffc9a760e01b149050836139fe565b635b5e139f60e01b811491506139f7565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b0382168203610fd857565b602435906001600160a01b0382168203610fd857565b602435906001600160801b0382168203610fd857565b604435908115158203610fd857565b602435908115158203610fd857565b60c081019081106001600160401b03821117610c8e57604052565b608081019081106001600160401b03821117610c8e57604052565b604081019081106001600160401b03821117610c8e57604052565b90601f801991011681019081106001600160401b03821117610c8e57604052565b6001600160401b038111610c8e57601f01601f191660200190565b81601f82011215610fd857602081359101613b5282613b1d565b92613b606040519485613afc565b82845282820111610fd857815f92602092838601378301015290565b9181601f84011215610fd8578235916001600160401b038311610fd85760208381860195010111610fd857565b6060906003190112610fd8576004356001600160a01b0381168103610fd857906024356001600160a01b0381168103610fd8579060443590565b6060906003190112610fd857600435906024356001600160801b0381168103610fd857906044358015158103610fd85790565b906040600319830112610fd85760043591602435906001600160401b038211610fd857613c4591600401613b38565b90565b90602080835192838152019201905f5b818110613c655750505090565b8251845260209384019390920191600101613c58565b90600182811c92168015613ca9575b6020831014613c9557565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613c8a565b5f9291815491613cc283613c7b565b8083529260018116908115613d175750600114613cde57505050565b5f9081526020812093945091925b838310613cfd575060209250010190565b600181602092949394548385870101520191019190613cec565b915050602093945060ff929192191683830152151560051b010190565b60405190613d43604083613afc565b60058252640322e302e360dc1b6020830152565b60405190613d6482613aab565b6001546001600160a01b039081168352600254811660208401526003548116604080850191909152600454918216606085015260a091821c6001600160401b03166080850152519083613db683613ac6565b60ff600554600180851b038116855263ffffffff81851c16602086015263ffffffff8160c01c16604086015260e01c16151560608401520152565b6001600160a01b03165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020526040902090565b6001600160a01b03165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793036020526040902090565b5f198114611e065760010190565b9091906001600160a01b038316801561255657613e8b83615344565b90331515806140c0575b506001600160a01b03821694851580156140a2575b613eb382613e29565b60018154019055855f525f5160206159985f395f51905f5260205260405f20836001600160601b0360a01b8254161790558583887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a415613ff5575f5160206159785f395f51905f5254855f525f5160206159385f395f51905f526020528060405f2055600160401b811015610c8e57856122d8826001613f6594015f5160206159785f395f51905f52556141de565b818603613f9d575b5050506001600160a01b0316808303613f8557505050565b6364283d7b60e01b5f5260045260245260445260645ffd5b613fa69061423b565b5f19810191908211611e06575f525f5160206158b85f395f51905f5260205260405f20815f526020528360405f2055835f525f5160206158985f395f51905f5260205260405f20555f80613f6d565b858214613f65576140058361423b565b855f525f5160206158985f395f51905f5260205260405f205490875f525f5160206158b85f395f51905f5260205260405f209181810361406b575b50865f525f5160206158985f395f51905f526020525f60408120555f526020525f6040812055613f65565b815f528260205260405f2054815f52836020528060405f20555f525f5160206158985f395f51905f5260205260405f20555f614040565b6140ab8661536a565b6140b484613e29565b80545f19019055613eaa565b80614108575b156140d1575f613e95565b836001600160a01b0383166140f257637e27328960e01b5f5260045260245ffd5b63177e802f60e01b5f523360045260245260445ffd5b506001600160a01b0382163314801561414c575b806140c657505f8481525f5160206159d85f395f51905f5260205260409020546001600160a01b031633146140c6565b5061415682613df1565b335f908152602091909152604090205460ff1661411c565b906001600160801b03809116911601906001600160801b038211611e0657565b818110614199575050565b5f815560010161418e565b9190601f81116141b357505050565b6141dc925f5260205f20906020601f840160051c830193106130e857601f0160051c019061418e565b565b5f5160206159785f395f51905f5254811015610b13575f5160206159785f395f51905f525f5260205f2001905f90565b91908201809211611e0657565b906001600160801b03809116911603906001600160801b038211611e0657565b6001600160a01b038116156142575761425390613e29565b5490565b6322718ad960e21b5f525f60045260245ffd5b6040519061427782613ae1565b60606020835f81520152565b1561428d57505050565b6001600160801b03935063733a8cc360e01b5f5260045260018060a01b03166024521660445260645ffd5b6001600160a01b03168015614316575f5160206159185f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b61433281615344565b906001600160a01b03821615614346575090565b637e27328960e01b5f5260045260245ffd5b60025f5160206159b85f395f51905f5254146143815760025f5160206159b85f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b6001600160a01b036143a182614329565b6001600160a01b0390931692168281141590816143d7575b506143c2575050565b63e9f7336760e01b5f5260045260245260445ffd5b90505f525f60205260405f20825f5260205260ff60405f205416155f6143b9565b92949091614404613d57565b9260808401516001600160401b0342911611156117665761442590856152ad565b93919097885f1461459e575060209061443d87614c4e565b0151955b61444b8733614c25565b821561458a5760208501516001600160a01b0316945b516001600160a01b031693333b15610fd857604051631df1692d60e31b81526001600160a01b03871660048201526001600160801b039190911660248201819052604482019590955260a06064820152915f9183916020918391806144c960a485018e613a27565b84810360031901608486015281815292858401378181018401869052601f01601f19160103018183335af1801561263a577f3d6f104fcd5742ab685852140e00ce8de27c4bff19d1b233c905aceee89bc9f59461454892859261457a575b505f5160206159185f395f51905f52546001600160a01b0316903390614b9c565b604051918252151560208201528415156040820152608060608201528061457433956080830190613a27565b0390a390565b5f61458491613afc565b5f614527565b60408501516001600160a01b031694614461565b9690600160208201916145c06102db6145b78551615393565b610d698d615393565b83526145f76145d2610f94838b61496a565b63ffffffff604060a08c01510151166001600160801b03821611158b610fbe81614329565b885f5260086020526001600160801b0360405f209151166001600160801b03198254161781550190518051906001600160401b038211610c8e5761463f8261032a8554613c7b565b602090601f83116001146146745761466d92915f91836103b55750508160011b915f199060031b1c19161790565b9055614441565b90601f19831691845f52815f20925f5b8181106146bf57509084600195949392106146a7575b505050811b019055614441565b01515f1960f88460031b161c191690555f808061469a565b92936020600181928786015181550195019301614684565b519060ff82168203610fd857565b9190826040910312610fd857613c456020835193016146d7565b60ff16604d8111611e0657600a0a90565b60a0810151519051604080516341976e0960e01b81526001600160a01b03928316600482015292909183916024918391165afa801561263a575f915f91614782575b5061475c906146ff565b600a54906040519260208401526040830152606082015260608152613c45608082613afc565b61475c92506147a9915060403d6040116147b0575b6147a18183613afc565b8101906146e5565b9091614752565b503d614797565b90816060910312610fd8578051916040602083015192015190565b81810292918115918404141715611e0657565b6147f161480191615393565b91602080825183010191016147b7565b9291906305f5e1008202918083046305f5e1001490151715611e0657613c4593611d1a916147d2565b919060207f4be69b58eeb45ab544475f2106149030062b633ed76279df1a900c710e5ca52491831593845f1461489c57506001600160a01b038581165f9081528084526040808220928416825291845220805460ff191690555b604051931584526001600160a01b03908116941692a3565b6001600160a01b038681165f9081528085526040808220928516825291855220805491151560ff1660ff1992909216919091179055614884565b5f5160206159185f395f51905f52546001600160a01b031633036148f657565b63118cdaa760e01b5f523360045260245ffd5b6001600160801b038111614923576001600160801b031690565b6306dfcc6560e41b5f52608060045260245260445ffd5b6040519061494782613aab565b606060a0835f81525f60208201525f60408201525f838201525f60808201520152565b91909161497561493a565b9261499261498283614710565b8060a087015260208301516147e5565b845260a082015151602090920151604080516341976e0960e01b81526001600160a01b03928316600482015293909184916024918391165afa91821561263a57614a11925f915f91614a18575b506149f090604087019283526146ff565b60608601526001600160801b03600754928360808801525116905190615605565b6020830152565b6149f09250614a36915060403d6040116147b0576147a18183613afc565b90916149df565b80518015614a6b5781614a60614a669260606020613c45960151930151906147d2565b90615450565b614909565b50506001600160801b0390565b91614a8290615393565b9081614a8d57505050565b6001546141dc93906001600160a01b0316614b9c565b91905f925f92614ab161493a565b50614abc828461496a565b91614ac683614a3d565b9360a0810190606082510151614adb57505050565b60809097929397016001600160401b03815116611c208101809111611e06574210614b0857505050505f93565b5192969591926001600160401b03164210614b30575050506001600160801b03600194511692565b5160200151919590949163ffffffff166001600160801b0385161015614b535750565b9450925060019364e8d4a51000614b708351606085015190615501565b1015614b8357516001600160801b031692565b5160011c6f7fffffffffffffffffffffffffffffff1692565b9092915f198314614c09576001600160a01b039081169316918284148015614c01575b614bfb576141dc93604051936323b872dd60e01b602086015260248501526044840152606483015260648252614bf6608483613afc565b61583f565b50505050565b508015614bbf565b630d550c3b60e11b5f5260045ffd5b91908203918211611e0657565b90614c2f90615393565b80614c38575050565b6001546141dc92906001600160a01b0316615734565b614c5781615344565b6001600160a01b03811680159190821580614f01575b5f8581525f5160206159985f395f51905f526020526040812080546001600160a01b03191690558590837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a48315614e505750505f5160206159785f395f51905f5254835f525f5160206159385f395f51905f526020528060405f2055600160401b811015610c8e57836122d8826001614d1894015f5160206159785f395f51905f52556141de565b5f5160206159785f395f51905f52545f198101908111611e0657835f525f5160206159385f395f51905f52602052614d5460405f2054916141de565b90549060031b1c614d68816122d8846141de565b5f525f5160206159385f395f51905f5260205260405f2055825f525f5160206159385f395f51905f526020525f60408120555f5160206159785f395f51905f52548015614e3c575f1901614dbb816141de565b8154905f199060031b1b191690555f5160206159785f395f51905f525550614346575f526008602052600160405f205f815501614df88154613c7b565b9081614e02575050565b81601f5f9311600114614e13575055565b81835260208320614e2f91601f0160051c81019060010161418e565b8082528160208120915555565b634e487b7160e01b5f52603160045260245ffd5b614e5b575b50614d18565b614e648261423b565b845f525f5160206158985f395f51905f5260205260405f2054915f525f5160206158b85f395f51905f5260205260405f2091818103614eca575b50845f525f5160206158985f395f51905f526020525f60408120555f526020525f60408120555f614e55565b815f528260205260405f2054815f52836020528060405f20555f525f5160206158985f395f51905f5260205260405f20555f614e9e565b614f0a8561536a565b614f1383613e29565b80545f19019055614c6d565b6001546040516370a0823160e01b81523060048201529190602090839060249082906001600160a01b03165afa801561263a575f90614f7b575b614f639250615585565b60405190602082015260208152613c45604082613afc565b506020823d602011614fa7575b81614f9560209383613afc565b81010312610fd857614f639151614f59565b3d9150614f88565b6040515f5160206158f85f395f51905f5254815f614fcc83613c7b565b808352926001811690811561505b5750600114614ff0575b613c4592500382613afc565b505f5160206158f85f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061503f575050906020613c4592820101614fe4565b6020919350806001915483858801015201910190918392615027565b60209250613c4594915060ff191682840152151560051b820101614fe4565b6040515f5160206159585f395f51905f5254815f61509783613c7b565b808352926001811690811561505b57506001146150ba57613c4592500382613afc565b505f5160206159585f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310615109575050906020613c4592820101614fe4565b60209193508060019154838588010152019101909183926150f1565b60208151918180820193849201010312610fd85760207fb9b9678eb655dc35e53e0dd8d16d8ab6470cf94d444f41f83b0ca53ed9c57916915180600955604051908152a1565b823b615179575b5050505050565b604051630a85bd0160e11b81526001600160a01b0391821660048201529181166024830152604482019390935260806064820152911691602090829081906151c5906084830190613a27565b03815f865af15f918161524a575b5061522857503d15615221573d6151e981613b1d565b906151f76040519283613afc565b81523d5f602083013e5b8051908161521c5782633250574960e11b5f5260045260245ffd5b602001fd5b6060615201565b6001600160e01b03191663757a42ff60e11b016123d957505f80808080615172565b9091506020813d602011615287575b8161526660209383613afc565b81010312610fd857516001600160e01b031981168103610fd857905f6151d3565b3d9150615259565b8115615299570490565b634e487b7160e01b5f52601260045260245ffd5b90916152b761426a565b505f915f52600860205260405f209060016152f5604051936152d885613ae1565b6001600160801b038154168552611e7e6040518094819301613cb3565b602083015281936001600160801b03835116806001600160801b0383161161533c575b61532a826001600160801b039261421b565b16809352911561533657565b60019250565b905080615318565b5f9081525f5160206159985f395f51905f5260205260409020546001600160a01b031690565b5f525f5160206159d85f395f51905f5260205260405f206001600160601b0360a01b8154169055565b60208151918180820193849201010312610fd85751905f1982146153b357565b63709bfb8160e11b5f5260045ffd5b905f624c4b408302905f19624c4b4085099082808310920391808303921461544357816305f5e100111561543157506305f5e100624c4b407facbe0e98f503f8881186e60dbb7f727bf36b7213ee9f5a78c767074b22e90e2194950990828211900360f81b910360081c170290565b634e487b71905260116020526024601cfd5b50506305f5e10090049150565b90662386f26fc100008202905f19662386f26fc100008409928280851094039380850394146154f557838211156154dd57662386f26fc10000829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b5090613c45925061528f565b906305f5e1008202905f196305f5e1008409928280851094039380850394146154f557838211156154dd576305f5e100829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b9190915f838202915f19858209918380841093039280840393146155f35782662386f26fc10000111561543157507fdfd55a2ef7fed2da00d3bd6d84eb0053f60b3275305c1066e4a4d1417cd9a0419394662386f26fc10000910990828211900360f01b910360101c170290565b505050662386f26fc100009192500490565b91818302915f1981850993838086109503948086039514615695578483111561567d5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b505090613c45925061528f565b60ff5f5160206159f85f395f51905f525460401c16156156be57565b631afcd79f60e31b5f5260045ffd5b6156d5615790565b6156dd6157fa565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261572e60c082613afc565b51902090565b905f198314614c09576001600160a01b0316903082148015615788575b615783576141dc926040519263a9059cbb60e01b60208501526024840152604483015260448252614bf6606483613afc565b505050565b508215615751565b615798614faf565b80519081156157a8576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156157d55790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b61580261507a565b8051908115615812576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156157d55790565b905f602091828151910182855af11561263a575f513d61588e57506001600160a01b0381163b155b61586e5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b6001141561586756fe645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed01645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0080bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1029016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed03a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0280bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793029b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079301a26469706673582212206fbcc7d9d1ac5caf6f85ef5ad6e23819f03454f0a94c4d398bbcf70d2190b50664736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a000000000000000000000000009498764f0c62257b83a04e2a757de30908ec793d0000000000000000000000006279a34e2fe75e536a94de1d896022ba12f48751