UNPKG

@q-dev/gdk-sdk

Version:

Typescript Library to interact with GDK Contracts

1,053 lines 103 kB
{ "_format": "hh-sol-artifact-1", "contractName": "DAOVault", "sourceName": "contracts/DAO/DAOVault.sol", "abi": [ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "enum ParameterType", "name": "expected", "type": "uint8" }, { "internalType": "enum ParameterType", "name": "actual", "type": "uint8" } ], "name": "InvalidParameterType", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AuthenticatedBySBT", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AuthorizedBySBT", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "ConstitutionSigned", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NFTDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "unlockTime", "type": "uint256" } ], "name": "NFTLocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NFTWithdrew", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "SBTAuthorizationRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokensDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "unlockTime", "type": "uint256" } ], "name": "TokensLocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokensWithdrew", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "CONNECTED_DAO_REGISTRY", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "CONSTITUTION_SIGN_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_LOCKED_TIME", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "authorizeBySBT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" }, { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "depositERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" }, { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "depositNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositNative", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "signer_", "type": "address" } ], "name": "getConstitutionSignHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getInjector", "outputs": [ { "internalType": "address", "name": "injector_", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress_", "type": "address" }, { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "getTimeLockInfo", "outputs": [ { "components": [ { "internalType": "uint256", "name": "withdrawalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "lockedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "unlockTime", "type": "uint256" } ], "internalType": "struct IDAOVault.TomeLockInfo", "name": "info_", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "getTokenSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress_", "type": "address" } ], "name": "getUserConstitutionData", "outputs": [ { "components": [ { "internalType": "bool", "name": "isSigned", "type": "bool" }, { "internalType": "uint128", "name": "signedAt", "type": "uint128" } ], "internalType": "struct IDAOVault.ConstitutionDataInfo", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress_", "type": "address" }, { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "getUserNFTs", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress_", "type": "address" } ], "name": "getUserTokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress_", "type": "address" }, { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "getUserVotingPower", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender_", "type": "address" }, { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "isAuthorizedBySBT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "isSupportedNFT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "isSupportedSBT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender_", "type": "address" }, { "internalType": "address", "name": "tokenAddress_", "type": "address" }, { "internalType": "uint256", "name": "amount_", "type": "uint256" }, { "internalType": "uint256", "name": "timeToLock_", "type": "uint256" } ], "name": "lock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress_", "type": "address" }, { "internalType": "address", "name": "tokenAddress_", "type": "address" }, { "internalType": "uint256", "name": "timeToLock_", "type": "uint256" } ], "name": "lockAndGetUserVotingPower", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "lockedTokens", "outputs": [ { "components": [ { "internalType": "bytes32[]", "name": "_values", "type": "bytes32[]" }, { "internalType": "uint256[]", "name": "_priorities", "type": "uint256[]" } ], "internalType": "struct PriorityQueue.Queue", "name": "_queue", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "permissionManager", "outputs": [ { "internalType": "contract PermissionManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" } ], "name": "revokeSBTAuthorization", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "registryAddress_", "type": "address" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "setDependencies", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "injector_", "type": "address" } ], "name": "setInjector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "signer_", "type": "address" }, { "internalType": "bytes", "name": "signature_", "type": "bytes" } ], "name": "signConstitution", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "signer_", "type": "address" }, { "internalType": "bytes", "name": "signature_", "type": "bytes" } ], "name": "signEIP712Constitution", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "tokenBalance", "outputs": [ { "internalType": "uint256", "name": "amountInVault", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "userTokenBalance", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" }, { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "withdrawERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress_", "type": "address" }, { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "withdrawNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "withdrawNative", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x60a080604052346100315730608052614ea3908161003782396080518181816107bb01528181610bb90152610d0f0152f35b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021612cd0565b005b60003560e01c80630774e003146102735780630b81da291461026e578063155ad9da146102695780631a056203146102645780631b465d851461025f5780631b9568011461025a5780633291bc00146102555780633659cfe614610250578063369e7ed51461024b5780633e3b5b19146102465780634b86c225146102415780634f1ef2861461023c578063519dc8d21461023757806352d1902d146102325780635c60da1b1461022d5780635f10bb5a146102285780636088e93a1461022357806365ed36191461021e578063691304511461021957806384276d811461021457806384b0196e1461020f5780638a729d571461020a5780638c9b2f19146102055780638cb941cc1461020057806397feb926146101fb5780639b5b9b18146101f6578063a1db9782146101f1578063b47064c8146101ec578063b8e72278146101e7578063bad8febd146101e2578063c615f5ff146101dd578063cc7a2049146101d8578063d62f0f05146101d3578063db6b5246146101ce578063eedc966a146101c9578063f2866c78146101c45763f785a1b50361000e57611f2b565b611f04565b611ec7565b611eb3565b611e8c565b611e63565b611d83565b611d5c565b611d21565b611cdc565b611b6f565b6119f5565b61184f565b611818565b6117e8565b61151c565b61144b565b6111ea565b611094565b610f94565b610e18565b610df7565b610dc1565b610cfc565b610c7f565b610ba2565b610a4a565b610a14565b6108dd565b61078f565b6106d3565b6106b4565b610686565b6105fb565b61059e565b61055f565b610449565b6001600160a01b0381160361028957565b600080fd5b6040906003190112610289576004356102a681610278565b906024356102b381610278565b90565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176102e757604052565b6102b6565b606081019081106001600160401b038211176102e757604052565b6001600160401b0381116102e757604052565b602081019081106001600160401b038211176102e757604052565b60a081019081106001600160401b038211176102e757604052565b90601f801991011681019081106001600160401b038211176102e757604052565b90604051918281549182825260209260208301916000526020600020936000905b8282106103aa575050506103a892500383610350565b565b855484526001958601958895509381019390910190610392565b90604051918281549182825260209260208301916000526020600020936000905b8282106103fb575050506103a892500383610350565b8554845260019586019588955093810193909101906103e5565b90815180825260208080930193019160005b828110610435575050505090565b835185529381019392810192600101610427565b34610289576104573661028e565b6001600160a01b03918216600090815260046020908152604080832094909316825292835220906040519161048b836102cc565b61049481610371565b83526104a360018092016103c4565b92828101938452604051938492848452606084019251926040868601528351809152856080860194019560005b8281106104f45786806104f0888851601f19848303016040850152610415565b0390f35b87518652968101968896509481019483016104d0565b60406003198201126102895760043561052281610278565b916024356001600160401b039283821161028957806023830112156102895781600401359384116102895760248483010111610289576024019190565b346102895761002161058d6105996105946105793661050a565b91949061058586612b13565b923691610b22565b9084612ec8565b611fdd565b612f96565b34610289576104f06105e76105e26105b53661028e565b9060018060a01b0316600052600760205260406000209060018060a01b0316600052602052604060002090565b610371565b604051918291602083526020830190610415565b346102895760203660031901126102895760043561061881610278565b60006020604051610628816102cc565b828152015260018060a01b031660005260086020526040806000206020825191610651836102cc565b5460ff81161515928381526fffffffffffffffffffffffffffffffff928391019160081c168152835192835251166020820152f35b3461028957602061069f6106993661028e565b90612043565b6040519015158152f35b600091031261028957565b346102895760003660031901126102895760206040516301e133808152f35b34610289576106e13661028e565b9060408051916106f0836102ec565b600093848452610763602085019186835261075e8587019488865260018060a01b03169182895260036020528661073b82828c209060018060a01b0316600052602052604060002090565b54998a9481526004602052209060018060a01b0316600052602052604060002090565b6130e6565b90808652860395861161078a57606095825282528251935184525160208401525190820152f35b6120ef565b3461028957602080600319360112610289576004356107ad81610278565b6001600160a01b03916108007f000000000000000000000000000000000000000000000000000000000000000084166107e830821415612112565b84600080516020614e57833981519152541614612173565b6002546004908290610822906001600160a01b03165b6001600160a01b031690565b604051631082599b60e31b815292839182905afa9081156108bb57849183916000916108c0575b50600460405180978193633441847f60e21b8352165afa80156108bb57610021946108809360009261088e575b5050163314613195565b6108886121d4565b9061329f565b6108ad9250803d106108b4575b6108a58183610350565b8101906125db565b3880610876565b503d61089b565b612037565b6108d79150823d84116108b4576108a58183610350565b38610849565b346102895760031960603682011261028957600435906108fc82610278565b60243561090881610278565b6001600160a01b03838116600090815260036020908152604080832085851684528252909120919491549460405190610940826102cc565b600682526555504441544560d01b838301526002541661098f61096161299f565b61099e60405198899586948594633ca8e36d60e11b86523360048701526060602487015260648601906113c6565b918483030160448501526113c6565b03915afa80156108bb576104f0946109c56109d0926109d5966000916109e5575b50613443565b6044359084846121ec565b6123b6565b6040519081529081906020820190565b610a07915060203d602011610a0d575b6109ff8183610350565b81019061342b565b386109bf565b503d6109f5565b3461028957600036600319011261028957600080516020614df7833981519152546040516001600160a01b039091168152602090f35b346102895760031960803682011261028957600435610a6881610278565b60243590610a7582610278565b6020604051610a83816102cc565b600681526555504441544560d01b828201526002546001600160a01b031661098f610aac61299f565b610ada60405198899586948594633ca8e36d60e11b86523360048701526060602487015260648601906113c6565b03915afa9283156108bb5761002193610afa916000916109e55750613443565b60643591604435916121ec565b6001600160401b0381116102e757601f01601f191660200190565b929192610b2e82610b07565b91610b3c6040519384610350565b829481845281830111610289578281602093846000960137010152565b90604060031983011261028957600435610b7281610278565b91602435906001600160401b0382116102895780602383011215610289578160246102b393600401359101610b22565b610bab36610b59565b6001600160a01b0391610be67f000000000000000000000000000000000000000000000000000000000000000084166107e830821415612112565b600254610bfb906001600160a01b0316610816565b6040518091631082599b60e31b825281600460209485935afa9081156108bb5785918391600091610c62575b50600460405180988193633441847f60e21b8352165afa80156108bb5761002195610c5d9360009261088e575050163314613195565b613367565b610c799150823d84116108b4576108a58183610350565b38610c27565b34610289576020806003193601126102895760043590610c9e82610278565b6001600160a01b0391821660009081526006825260409020610cbf90610371565b604051918083018184528251809152816040850193019160005b828110610ce65785850386f35b8351871685529381019392810192600101610cd9565b34610289576000366003190112610289577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610d5657604051600080516020614e578339815191528152602090f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b3461028957600036600319011261028957600080516020614e57833981519152546040516001600160a01b039091168152602090f35b34610289576020610e10610e0a3661028e565b906123b6565b604051908152f35b3461028957604036600319011261028957600435610e3581610278565b60243590610e81610e7c83610e7784610e603360018060a01b03166000526004602052604060002090565b9060018060a01b0316600052602052604060002090565b61394b565b612487565b336000908152600760205260409020610ea490610e9f908390610e60565b61432e565b90610ece82610ec983610e603360018060a01b03166000526007602052604060002090565b614434565b50336000908152600760205260409020610ee9908290610e60565b5415610f86575b6001600160a01b031690813b15610289576040516323b872dd60e01b8152306004820152336024820152604481019190915260008160648183865af180156108bb57610f6d575b5060405191825233917fc617bea150d0faba989138893645e26986fe9575047f0976d166a8d368a68acf9080602081015b0390a3005b80610f7a610f8092610307565b806106a9565b38610f37565b610f8f81613a17565b610ef0565b3461028957602036600319011261028957600435610fb181610278565b610fba336134cb565b610fcc610fc78233612043565b6124e8565b336000908152600660205260409020610feb908290613a66565b613a66565b50600254611001906001600160a01b0316610816565b9061101261100d6115a0565b613a79565b823b156102895761103f604051809481809463a4fc6c2360e01b8252600097889586923360048401612568565b03925af180156108bb57611081575b5033906001600160a01b03167f7ab50fbe6badc8cf1b546b0ac8273949b92081d7ac314cff86422dd35676a5908380a380f35b80610f7a61108e92610307565b3861104e565b34610289576110a236610b59565b506110ab613b0e565b6040516309a06df560e41b81526001600160a01b0391821691602082600481865afa80156108bb57611103926000916111cb575b501660018060a01b03166bffffffffffffffffffffffff60a01b6002541617600255565b604051633e4beca160e01b815290600082600481845afa9182156108bb57600492611136916000916111b0575b506127e4565b600061114861114361299f565b6129cd565b916040519384809263054fd4d560e41b82525afa9081156108bb576111759260009261118b575b50614575565b61002133600080516020614df783398151915255565b6111a99192503d806000833e6111a18183610350565b81019061263f565b903861116f565b6111c591503d806000833e6111a18183610350565b38611130565b6111e4915060203d6020116108b4576108a58183610350565b386110df565b346102895760203660031901126102895733600081815260046020818152604080842073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee80865290835281852095855260039092529092209035926112779161127291859161126b905b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600052602052604060002090565b54906146d7565b613b88565b33600090815260036020526040902061129d90839061129590611248565b541015613bef565b3360009081526003602052604090206112c19083906112bb90611248565b54612105565b15611396575b3360009081526003602052604090206112df90611248565b6112ea838254612105565b905573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60005260056020527fa1829a9003092132f585b6ccdd167c19fe9774dbdea4260287e8a8e8ca8185d7611335838254612105565b90553360009081526004602052604090206113589061135390611248565b614298565b61136282336147a2565b60405191825233917ffd3c769270d445b58006501ec3c836a667c58d0b51d98cbb007d4d040a93c09e908060208101610f68565b61139e61398d565b6112c7565b60005b8381106113b65750506000910152565b81810151838201526020016113a6565b906020916113df815180928185528580860191016113a3565b601f01601f1916010190565b91611420906114126102b397959693600f60f81b865260e0602087015260e08601906113c6565b9084820360408601526113c6565b60608301949094526001600160a01b03166080820152600060a082015280830360c090910152610415565b34610289576000366003190112610289577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005415806114f3575b156114b657611492611652565b61149a611728565b906104f06114a66121d4565b60405193849330914691866113eb565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415611485565b3461028957602036600319011261028957602060043561153b81610278565b61154481612bfd565b9081611556575b506040519015158152f35b6115609150613c50565b3861154b565b90600182811c92168015611596575b602083101461158057565b634e487b7160e01b600052602260045260246000fd5b91607f1691611575565b604051906000826001916001546115b681611566565b808452936020916001811690811561162e57506001146115df575b50506103a892500383610350565b9150926001600052600080516020614e77833981519152936000925b82841061161657506103a894505050810160200138806115d1565b855488850183015294850194879450928101926115fb565b915050602092506103a894915060ff191682840152151560051b82010138806115d1565b60405190600082600080516020614e178339815191529182549261167584611566565b8084529360209160019182811690811561170257506001146116a1575b5050506103a892500383610350565b60009081527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9590935091905b8284106116ea57506103a8945050508101602001388080611692565b855488850183015294850194879450928101926116ce565b92505050602092506103a894915060ff191682840152151560051b820101388080611692565b60405190600082600080516020614e378339815191529182549261174b84611566565b808452936020916001918281169081156117025750600114611776575050506103a892500383610350565b60009081527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759590935091905b8284106117bf57506103a8945050508101602001388080611692565b855488850183015294850194879450928101926117a3565b9060206102b39281815201906113c6565b34610289576000366003190112610289576104f06118046115a0565b6040519182916020835260208301906113c6565b346102895760203660031901126102895760043561183581610278565b61183d613b0e565b600080516020614df783398151915255005b346102895760403660031901126102895760043561186c81610278565b6040516323b872dd60e01b6020820152336024828101919091523060448301523560648201819052916001600160a01b038116916118c1906118bb81608481015b03601f198101835282610350565b836148ec565b6118ca336134cb565b3360009081526006602052604090206118e4908290613a66565b503360009081526003602052604090206118ff908290610e60565b61190a848254612201565b90556001600160a01b038116600090815260056020526040902061192f848254612201565b9055600254611946906001600160a01b0316610816565b9061195261100d6115a0565b91803b156102895760405163a4fc6c2360e01b8152926000918491829084908290611981903360048401612568565b03925af19081156108bb576119ae92611353926119e2575b50336000908152600460205260409020610e60565b60405191825233917fcbc4a4091b012bb1329c38bbbb15455f5cac5aa3673da0a7f38cd61a4f495517908060208101610f68565b80610f7a6119ef92610307565b38611999565b3461028957604036600319011261028957600435611a1281610278565b602435611a1e336134cb565b611a2f611a2a83612bfd565b612ab3565b6001600160a01b038216803b15610289576040516323b872dd60e01b81523360048201523060248201526044810183905260009390848160648183875af180156108bb57611ab7928592611ab292611b5c575b50336000908152600660205260409020611a9d908290613a66565b50336000908152600760205260409020610e60565b614537565b506002548390611acf906001600160a01b0316610816565b611ada61100d6115a0565b813b15611b58578291611b049160405194858094819363a4fc6c2360e01b83523360048401612568565b03925af180156108bb57611b45575b5060405191825233917f2214288c094665e4969e2968c71e56e0ab3c69646a5c773ec8c2a7ca3bf1880890602090a380f35b80610f7a611b5292610307565b38611b13565b8280fd5b80610f7a611b6992610307565b38611a82565b3461028957604036600319011261028957600435611b8c81610278565b602435611bd061127282611bb685610e603360018060a01b03166000526004602052604060002090565b33600090815260036020526040902061126b908790610e60565b336000908152600360205260409020611bf0908290611295908590610e60565b336000908152600360205260409020611c0a908390610e60565b54808281031161078a578114611cce575b336000908152600360205260409020611c35908390610e60565b611c40828254612105565b90556001600160a01b0382166000908152600560205260409020611c65828254612105565b9055336000908152600460205260409020611c8590611353908490610e60565b611c90813384614810565b60405190815233916001600160a01b0316907ffd3c769270d445b58006501ec3c836a667c58d0b51d98cbb007d4d040a93c09e908060208101610f68565b611cd782613a17565b611c1b565b34610289576020611d18611cef3661028e565b6001600160a01b0391821660009081526003855260408082209290931681526020919091522090565b54604051908152f35b346102895760003660031901126102895760206040517f117622d42dc9008d3ba5628968753018e444c00cc07a685ded682c0f051ea8398152f35b34610289576020366003190112610289576020610e10600435611d7e81610278565b612b13565b3461028957602036600319011261028957600435611da081610278565b611daa8133612043565b15611dea57611db881613a17565b33906001600160a01b03167f6a6868ce3517ae462252ae560c23849f8e855d8d526b13f928c896f534b6afb4600080a3005b60405162461bcd60e51b815260206004820152604560248201527f5b5147444b2d3030373030355d2d5468652075736572206973206e6f7420617560448201527f74686f72697a6564206f7220746f6b656e20646f6573206e6f7420737570706f606482015264393a32b21760d91b608482015260a490fd5b34610289576000366003190112610289576002546040516001600160a01b039091168152602090f35b3461028957602036600319011261028957602061069f600435611eae81610278565b612bfd565b600036600319011261028957610021612cd0565b3461028957602036600319011261028957600435611ee481610278565b60018060a01b031660005260056020526020604060002054604051908152f35b34610289576020366003190112610289576020610e10600435611f2681610278565b612e3a565b3461028957611f393661050a565b600254604051631082599b60e31b81529193929190602090829060049082906001600160a01b03165afa9384156108bb5761058d61059993611f8a6100219761059495600091611fbe575b50613df2565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c600020923691610b22565b611fd7915060203d6020116108b4576108a58183610350565b38611f84565b15611fe457565b606460405162461bcd60e51b815260206004820152602060248201527f5b5147444b2d3030373031325d2d496e76616c6964207369676e61747572652e6044820152fd5b90816020910312610289575190565b6040513d6000823e3d90fd5b9061204d81612bfd565b91826120de575b8261206a575b505061206557600090565b600190565b6040516370a0823160e01b81526001600160a01b039182166004820152925060209183916024918391165afa9081156108bb576000916120af575b501515388061205a565b6120d1915060203d6020116120d7575b6120c98183610350565b810190612028565b386120a5565b503d6120bf565b91506120e981613c50565b91612054565b634e487b7160e01b600052601160045260246000fd5b9190820391821161078a57565b1561211957565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b1561217a57565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b6040516121e08161031a565b60008152906000368137565b906103a89392916121fc816134cb565b612280565b9190820180921161078a57565b1561221557565b60405162461bcd60e51b815260206004820152603760248201527f5b5147444b2d3030373030335d2d54686520616d6f756e7420746f206c6f636b60448201527f2073686f756c64206265206d6f7265207468616e20302e0000000000000000006064820152608490fd5b9290926301e1338042810180911161078a578211612361576122a184612a96565b612320576122ae84612bfd565b61231457907fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9916122e084151561220e565b6122ec82858784613794565b6040805194855260208501929092526001600160a01b0390811694169290819081015b0390a3565b6103a89391925061368f565b91505061232d8282613546565b6001600160a01b0390811691167febd9c0ebdf8165fc5da27059cc612a2a9a554570ae02eaffebd5927e0b42ba03600080a3565b60405162461bcd60e51b815260206004820152602760248201527f5b5147444b2d3030373030325d2d546865206c6f636b2074696d65206973207460448201526637b7903134b39760c91b6064820152608490fd5b906123c081612a96565b612423576123cd81612bfd565b6123f457610e606123f09260018060a01b03166000526003602052604060002090565b5490565b610e606124139260018060a01b03166000526007602052604060002090565b541561241e57600190565b600090565b6040516370a0823160e01b81526001600160a01b0392831660048201529160209183916024918391165afa9081156108bb57600091612468575b501561241e57600190565b612481915060203d6020116120d7576120c98183610350565b3861245d565b1561248e57565b60405162461bcd60e51b815260206004820152602c60248201527f5b5147444b2d3030373030345d2d547279696e6720746f20776974686472617760448201526b103637b1b5b2b21027232a1760a11b6064820152608490fd5b156124ef57565b60405162461bcd60e51b815260206004820152604560248201527f5b5147444b2d3030373030315d2d5468652075736572206973206e6f7420617560448201527f74686f72697a6564206f7220746f6b656e20646f6573206e6f7420737570706f606482015264393a32b21760d91b608482015260a490fd5b90604082019060018060a01b0316825260206040602084015283518092526060830192602060608460051b8301019501936000915b8483106125ad5750505050505090565b90919293949584806125cb600193605f198682030187528a516113c6565b980193019301919493929061259d565b9081602091031261028957516102b381610278565b909291926125fd81610b07565b9161260b6040519384610350565b8294828452828201116102895760206103a89301906113a3565b9080601f830112156102895781516102b3926020016125f0565b906020828203126102895781516001600160401b038111610289576102b39201612625565b9161267e9183549060031b91821b91600019901b19161790565b9055565b601f811161268e575050565b600090600080516020614e178339815191526000527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d906020601f850160051c830194106126f7575b601f0160051c01915b8281106126ec57505050565b8181556001016126e0565b90925082906126d7565b90601f821161270e575050565b6001916000906001600052600080516020614e77833981519152906020601f850160051c8301941061275b575b601f0160051c01915b8281106127515750505050565b8181558301612744565b909250829061273b565b601f8111612771575050565b600090600080516020614e378339815191526000527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75906020601f850160051c830194106127da575b601f0160051c01915b8281106127cf57505050565b8181556001016127c3565b90925082906127ba565b9081516001600160401b0381116102e75760019061280b816128068454611566565b612701565b602080601f831160011461284a5750819061267e93949560009261283f575b50508160011b916000199060031b1c19161790565b01519050388061282a565b90601f1983169561286b6001600052600080516020614e7783398151915290565b926000905b8882106128a6575050838596971061288d575b505050811b019055565b015160001960f88460031b161c19169055388080612883565b808785968294968601518155019501930190612870565b9081516001600160401b0381116102e757600080516020614e37833981519152906128f1816128ec8454611566565b612765565b602080601f83116001146129245750819061267e93949560009261283f5750508160011b916000199060031b1c19161790565b90601f19831695612964600080516020614e378339815191526000527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b7590565b926000905b8882106129875750508360019596971061288d57505050811b019055565b80600185968294968601518155019501930190612969565b604051906129ac826102cc565b601282527144414f5f5641554c545f5245534f5552434560701b6020830152565b9060405191826020916129e8815180928580860191016113a3565b8101600090600190600154916129fd83611566565b9260018116908115612a745750600114612a28575b5050506103a8925003601f198101845283610350565b9492506001600052600080516020614e77833981519152946000905b838210612a5c5750506103a894500101388080612a12565b86548284018601529586019588955090840190612a44565b9150506103a895935060ff929192191683830152801515020101388080612a12565b612a9f81612bfd565b9081612aa9575090565b6102b39150613c50565b15612aba57565b60405162461bcd60e51b815260206004820152602b60248201527f5b5147444b2d3030373030305d2d54686520746f6b656e20646f6573206e6f7460448201526a1039bab83837b93a32b21760a91b6064820152608490fd5b600254604051631082599b60e31b8152916001600160a01b03916020908490600490829086165afa9182156108bb576102b393600093612bac575b50612b5883613df2565b91604051928260208501957f117622d42dc9008d3ba5628968753018e444c00cc07a685ded682c0f051ea8398752166040850152606084015216608082015260808152612ba481610335565b519020613ed0565b612bc691935060203d6020116108b4576108a58183610350565b9138612b4e565b3d15612bf8573d90612bde82610b07565b91612bec6040519384610350565b82523d6000602084013e565b606090565b60008060405160208101906318160ddd60e01b825260048152612c1f816102cc565b5190845afa50612c2d612bcd565b612c3682614893565b9182612cbe575b82612c56575b5081612c4d575090565b60209150511490565b6020919250600090604051838101906301ffc9a760e01b82526380ac58cd60e01b602482015260248152612c89816102ec565b5191617530fa6000513d82612cb2575b5081612ca8575b509038612c43565b9050151538612ca0565b60201115915038612c99565b9150612cc9826148bc565b1591612c3d565b612cd9336134cb565b336000908152600660205260409020612cf1906144c1565b50336000908152600360205260409020612d0a90611248565b612d15348254612201565b905573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60005260056020527fa1829a9003092132f585b6ccdd167c19fe9774dbdea4260287e8a8e8ca8185d7612d60348254612201565b9055600254612d77906001600160a01b0316610816565b612d8261100d6115a0565b90803b156102895760405163a4fc6c2360e01b8152916000918391829084908290612db1903360048401612568565b03925af180156108bb57612e27575b50336000908152600460205260409020612ddd9061135390611248565b604051348152339073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee907fcbc4a4091b012bb1329c38bbbb15455f5cac5aa3673da0a7f38cd61a4f49551790806020810161230f565b80610f7a612e3492610307565b38612dc0565b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8114612ea1576020600491604051928380926318160ddd60e01b82525afa9081156108bb57600091612e88575090565b6102b3915060203d6020116120d7576120c98183610350565b600052600560205260406000205490565b634e487b7160e01b600052602160045260246000fd5b612ed28383613f5f565b6005819592951015612f9157159384612f7b575b508315612ef4575b50505090565b6000929350908291604051612f2d816118ad6020820194630b135d3f60e11b998a875260248401526040604484015260648301906113c6565b51915afa90612f3a612bcd565b82612f6d575b82612f50575b5050388080612eee565b612f6591925060208082518301019101612028565b143880612f46565b915060208251101591612f40565b6001600160a01b03838116911614935038612ee6565b612eb2565b612f9f81613f97565b613024576001600160a01b0381166000908152600860208190526040909120805470ffffffffffffffffffffffffffffffffff19164290921b70ffffffffffffffffffffffffffffffff00169190911760011790556001600160a01b03167fb90fb482735d7b26a1b044c13f1cf3ab5cb3a7a07c2b79e764c34e3f027e1e36600080a2565b60405162461bcd60e51b815260206004820152605260248201527f5b5147444b2d3030373031335d2d546865207573657220616c7265616479206860448201527f61732074686520726967687420746f20706172746963697061746520696e20746064820152713432902220a79033b7bb32b93730b731b29760711b608482015260a490fd5b634e487b7160e01b600052603260045260246000fd5b8051156130cd5760200190565b6130aa565b80518210156130cd5760209160051b010190565b916130f260009361401b565b919060009160005b8251811015613174574261310e82856130d2565b511061316c578661311f82856130d2565b5111613159575b8361313182876130d2565b5111613142575b6001905b016130fa565b9250600161315084866130d2565b51939050613138565b955061316586836130d2565b5195613126565b60019061313c565b509392505081811061318857505060009190565b61319191612105565b9190565b1561319c57565b60405162461bcd60e51b815260206004820152602860248201527f5b5147444b2d3030363030355d2d4e6f7420617574686f72697a656420746f206044820152673ab833b930b2329760c11b6064820152608490fd5b156131f957565b60405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b60809060208152602e60208201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201526d6f6e206973206e6f74205555505360901b60608201520190565b906132cb7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1690565b156132da57506103a89061413d565b6040516352d1902d60e01b8152916020836004816001600160a01b0385165afa60009381613346575b506133255760405162461bcd60e51b81528061332160048201613250565b0390fd5b613341600080516020614e578339815191526103a894146131f2565b614031565b61336091945060203d6020116120d7576120c98183610350565b9238613303565b906133937f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1690565b156133a257506103a89061413d565b6040516352d1902d60e01b8152916020836004816001600160a01b0385165afa6000938161340a575b506133e95760405162461bcd60e51b81528061332160048201613250565b613405600080516020614e578339815191526103a894146131f2565b6140ea565b61342491945060203d6020116120d7576120c98183610350565b92386133cb565b90816020910312610289575180151581036102895790565b1561344a57565b60405162461bcd60e51b815260206004820152604d60248201527f5b5147444b2d3030373031315d2d5468652073656e646572206973206e6f742060448201527f616c6c6f77656420746f20706572666f726d2074686520616374696f6e2c206160648201526c31b1b2b9b9903232b734b2b21760991b608482015260a490fd5b6134d490613f97565b156134db57565b60405162461bcd60e51b815260206004820152603760248201527f5b5147444b2d3030373031345d2d546865207573657220686173206e6f74207360448201527f69676e65642074686520636f6e737469747574696f6e2e000000000000000000606482015260