[ { "inputs": [ { "internalType": "contract GeneralDistributionAgreementV1", "name": "gda", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "OUT_OF_GAS", "type": "error" }, { "inputs": [], "name": "SUPERFLUID_POOL_INVALID_TIME", "type": "error" }, { "inputs": [], "name": "SUPERFLUID_POOL_NOT_GDA", "type": "error" }, { "inputs": [], "name": "SUPERFLUID_POOL_NOT_POOL_ADMIN_OR_GDA", "type": "error" }, { "inputs": [], "name": "SUPERFLUID_POOL_NO_POOL_MEMBERS", "type": "error" }, { "inputs": [], "name": "SUPERFLUID_POOL_NO_ZERO_ADDRESS", "type": "error" }, { "inputs": [], "name": "SUPERFLUID_POOL_TRANSFER_UNITS_NOT_ALLOWED", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract ISuperfluidToken", "name": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "member", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "claimedAmount", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "totalClaimed", "type": "int256" } ], "name": "DistributionClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract ISuperfluidToken", "name": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "member", "type": "address" }, { "indexed": false, "internalType": "uint128", "name": "oldUnits", "type": "uint128" }, { "indexed": false, "internalType": "uint128", "name": "newUnits", "type": "uint128" } ], "name": "MemberUnitsUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "GDA", "outputs": [ { "internalType": "contract GeneralDistributionAgreementV1", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "admin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "castrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "memberAddr", "type": "address" } ], "name": "claimAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "distributionFromAnyAddress", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "memberAddr", "type": "address" }, { "internalType": "uint32", "name": "time", "type": "uint32" } ], "name": "getClaimable", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "memberAddr", "type": "address" } ], "name": "getClaimableNow", "outputs": [ { "internalType": "int256", "name": "claimableBalance", "type": "int256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "time", "type": "uint32" } ], "name": "getDisconnectedBalance", "outputs": [ { "internalType": "int256", "name": "balance", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "memberAddr", "type": "address" } ], "name": "getMemberFlowRate", "outputs": [ { "internalType": "int96", "name": "", "type": "int96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "memberAddr", "type": "address" } ], "name": "getTotalAmountReceivedByMember", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalConnectedFlowRate", "outputs": [ { "internalType": "int96", "name": "", "type": "int96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalConnectedUnits", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalDisconnectedFlowRate", "outputs": [ { "internalType": "int96", "name": "flowRate", "type": "int96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalDisconnectedUnits", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalFlowRate", "outputs": [ { "internalType": "int96", "name": "", "type": "int96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalUnits", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "memberAddr", "type": "address" } ], "name": "getUnits", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin_", "type": "address" }, { "internalType": "contract ISuperfluidToken", "name": "superToken_", "type": "address" }, { "internalType": "bool", "name": "transferabilityForUnitsOwner_", "type": "bool" }, { "internalType": "bool", "name": "distributionFromAnyAddress_", "type": "bool" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "memberAddr", "type": "address" }, { "internalType": "bool", "name": "doConnect", "type": "bool" }, { "internalType": "uint32", "name": "time", "type": "uint32" } ], "name": "operatorConnectMember", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "Unit", "name": "total_units", "type": "int128" }, { "components": [ { "internalType": "Time", "name": "_settled_at", "type": "uint32" }, { "internalType": "FlowRate", "name": "_flow_rate", "type": "int128" }, { "internalType": "Value", "name": "_settled_value", "type": "int256" } ], "internalType": "struct BasicParticle", "name": "_wrapped_particle", "type": "tuple" } ], "internalType": "struct PDPoolIndex", "name": "index", "type": "tuple" } ], "name": "operatorSetIndex", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "poolOperatorGetIndex", "outputs": [ { "components": [ { "internalType": "uint128", "name": "totalUnits", "type": "uint128" }, { "internalType": "uint32", "name": "wrappedSettledAt", "type": "uint32" }, { "internalType": "int96", "name": "wrappedFlowRate", "type": "int96" }, { "internalType": "int256", "name": "wrappedSettledValue", "type": "int256" } ], "internalType": "struct SuperfluidPool.PoolIndexData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "superToken", "outputs": [ { "internalType": "contract ISuperfluidToken", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "transferabilityForUnitsOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "memberAddr", "type": "address" }, { "internalType": "uint128", "name": "newUnits", "type": "uint128" } ], "name": "updateMemberUnits", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60a06040523480156200001157600080fd5b506040516200309338038062003093833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b608051612fc7620000cc6000396000818161055b015281816106090152818161080701528181610a5101528181610f96015281816111e50152818161148f015281816116ae0152611b5c0152612fc76000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806389287e0a1161011a578063d1058e59116100ad578063de7b54d91161007c578063de7b54d91461048f578063df9ad93114610543578063f0ca93a214610556578063f851a4401461057d578063fdbd40f41461059057600080fd5b8063d1058e5914610433578063d4f0d6441461043b578063d877ec8714610443578063dd62ed3e1461045657600080fd5b8063a9059cbb116100e9578063a9059cbb146103fe578063a94ff34014610411578063b3b3f1cc14610419578063cb8599f01461042157600080fd5b806389287e0a146103c65780639903ad38146103db578063a457c2d7146103e3578063a754a702146103f657600080fd5b80634a0d91011161019d57806370a082311161016c57806370a082311461037857806377329f351461038b578063785e734c1461039e5780637d6c008d146103a65780637e80bd5e146103b957600080fd5b80634a0d91011461030657806352d1902d14610319578063539e8c1c1461033f5780636c0c582a1461036557600080fd5b806321dd5777116101d957806321dd57771461028757806323b872dd146102af5780632b4116f7146102c257806339509351146102f357600080fd5b8063095ea7b31461020b5780630fefbc091461023357806318160ddd1461025e5780631b16777714610274575b600080fd5b61021e610219366004612896565b6105a1565b60405190151581526020015b60405180910390f35b6102466102413660046128c2565b6105b8565b6040516001600160801b03909116815260200161022a565b6102666105c3565b60405190815260200161022a565b61021e6102823660046128f4565b6105e5565b61029a6102953660046128c2565b61065e565b6040805192835260208301919091520161022a565b61021e6102bd36600461292d565b61074c565b6000546102db906201000090046001600160a01b031681565b6040516001600160a01b03909116815260200161022a565b61021e610301366004612896565b6107be565b61021e61031436600461296e565b6107fa565b7fca2aacef54bd44c838311f7274fc12b435395ce38673a3458ccdb318c9e1115f610266565b61035261034d3660046128c2565b6108c7565b604051600b9190910b815260200161022a565b610266610373366004612998565b610927565b6102666103863660046128c2565b610a0d565b61021e6103993660046128c2565b610a27565b610352610bb8565b6102666103b43660046129b5565b610bd9565b600a5461021e9060ff1681565b6103d96103d43660046129f1565b610d05565b005b6103d9610e31565b61021e6103f1366004612896565b610ef3565b610246610f2a565b61021e61040c366004612896565b610f3e565b610352610f4b565b610246610f55565b600a5461021e90610100900460ff1681565b61021e610f74565b610352610f7f565b61021e610451366004612a4d565b610f89565b610266610464366004612a98565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6104fe60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b91810191909152600354606082015290565b60405161022a919081516001600160801b0316815260208083015163ffffffff1690820152604080830151600b0b908201526060918201519181019190915260800190565b6102666105513660046128c2565b61103e565b6102db7f000000000000000000000000000000000000000000000000000000000000000081565b6001546102db906001600160a01b031681565b6005546001600160801b0316610246565b60006105ae33848461112e565b5060015b92915050565b60006105b28261118f565b60006105d76002546001600160801b031690565b6001600160801b0316905090565b6001546000906001600160a01b0316331480159061062c5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b1561064a57604051631c5fbdcb60e01b815260040160405180910390fd5b61065483836111b3565b5060019392505050565b600080600060029054906101000a90046001600160a01b03166001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d89190612ac6565b6001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190612ae3565b90506107458382610bd9565b9150915091565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001981146107a8576107838382612b12565b6001600160a01b03861660009081526009602090815260408083203384529091529020555b6107b385858561179e565b506001949350505050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916105ae9185906107f5908690612b25565b61112e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461084557604051637e5f1fcf60e11b815260040160405180910390fd5b61085c61085736849003840184612b7e565b611864565b805160028054602084015160408501516001600160601b0316600160a01b026001600160a01b0363ffffffff909216600160801b026001600160a01b03199093166001600160801b03909516949094179190911716919091179055606001516003555060015b919050565b6000806108d38361118f565b9050806001600160801b03166000036108ef5750600092915050565b610920610904826001600160801b03166118fa565b60025461091b9190600160a01b9004600b0b612c2b565b611968565b9392505050565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b9181019190915260035460608201526000908190610979906119cb565b6040805160c0810182526005546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b918101919091526006546060820152600754608082015260085460a08201529091506000906109dc90611a3d565b9050610a0584604051806040016040528085815260200184815250611aac90919063ffffffff16565b949350505050565b6000610a188261118f565b6001600160801b031692915050565b6040516331e0bae760e21b81523060048201526001600160a01b03828116602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c782eb9c90604401602060405180830381865afa158015610a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abc9190612c5b565b905060008060029054906101000a90046001600160a01b03166001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190612ac6565b6001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b979190612ae3565b90506000610ba58583611b16565b9050826107b3576107b360008284611c6f565b6000610bc2611e0b565b610bca611ee6565b610bd49190612c78565b905090565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b91810191909152600354606082015260009082908290610c2d906119cb565b6001600160a01b0386166000908152600460209081526040808320815160c08101835281546001600160801b038116825263ffffffff600160801b82041694820194909452600160a01b909304600b0b9183019190915260018101546060830152600281015460808301526003015460a082015291925090610cae90611a3d565b9050610cfb610cda84604051806040016040528086815260200185815250611aac90919063ffffffff16565b6001600160a01b038816600090815260046020526040902060030154611f02565b9695505050505050565b600054610100900460ff1615808015610d255750600054600160ff909116105b80610d3f5750303b158015610d3f575060005460ff166001145b610d645760405162461bcd60e51b8152600401610d5b90612caf565b60405180910390fd5b6000805460ff191660011790558015610d87576000805461ff0019166101001790555b600180546001600160a01b0319166001600160a01b03878116919091179091556000805462010000600160b01b0319166201000092871692909202919091179055600a805461ffff191684151561ff00191617610100841515021790558015610e2a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600054610100900460ff1615808015610e515750600054600160ff909116105b80610e6b5750303b158015610e6b575060005460ff166001145b610e875760405162461bcd60e51b8152600401610d5b90612caf565b6000805460ff191660011790558015610eaa576000805461ff0019166101001790555b8015610ef0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916105ae9185906107f5908690612b12565b6000610bd46002546001600160801b031690565b60006105ae33848461179e565b6000610bd4611e0b565b600554600254600091610bd4916001600160801b039182169116612cfd565b6000610bd433610a27565b6000610bd4611ee6565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fd457604051637e5f1fcf60e11b815260040160405180910390fd5b6000610fe08584611b16565b90506000611006611001610ff38861118f565b6001600160801b03166118fa565b611f0e565b905084156110265761102161101a82612d24565b8386611c6f565b611032565b61103281600086611c6f565b50600195945050505050565b6001600160a01b0381166000908152600460209081526040808320815160c0808201845282546001600160801b038082168452600160801b80830463ffffffff90811698860198909852600160a01b92839004600b90810b8689015260018701546060808801919091526002808901546080808a01919091526003998a015460a0808b01919091528b519889018c5291549586169a88019a8b52938504909a16908601529290910490910b9082015291549382019390935261111e914291908190611108906119cb565b815260200161111685611a3d565b905290611f32565b6020015160200151915050919050565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03166000908152600460205260409020546001600160801b031690565b60008054604051633d96606d60e11b8152620100009091046001600160a01b03908116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001690637b2cc0da90604401602060405180830381865afa15801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190612c5b565b1561126e57604051637087a02d60e11b815260040160405180910390fd5b6001600160a01b03831661129557604051632a75b77360e11b815260040160405180910390fd5b60008060029054906101000a90046001600160a01b03166001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d9190612ac6565b6001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136e9190612ae3565b905080600061137c85611f82565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b9181019190915260035460608201529091506000906113cf906119cb565b6001600160a01b0388166000908152600460209081526040808320815160c08101835281546001600160801b038116825263ffffffff600160801b82041694820194909452600160a01b909304600b0b9183019190915260018101546060830152600281015460808301526003015460a082015291925061144f82611a3d565b82516040805180820182528681526020810184905290516331e0bae760e21b81523060048201526001600160a01b038d81166024830152939450919290917f00000000000000000000000000000000000000000000000000000000000000009091169063c782eb9c90604401602060405180830381865afa1580156114d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fc9190612c5b565b61151d5761151d61151587836020015160000151611f99565b600089611c6f565b60408051606081018252600080825260208201819052918101919091526115468282898b611fa5565b9197509450905061155686611864565b8051600280546020808501516040808701516001600160601b0316600160a01b026001600160a01b0363ffffffff909316600160801b026001600160a01b03199095166001600160801b0390971696909617939093178116949094179092556060909301516003908155918f16600090815260049091529190912001546115dd85826120c6565b6001600160a01b038e811660009081526004602081815260408084208651815488850151898501516001600160601b0316600160a01b0263ffffffff918216600160801b026001600160a01b03199093166001600160801b0390941693909317919091178816919091178255606088015160018301556080880151600283015560a0909701516003909101559254835163fa48736d60e01b815262010000909104851692810192909252865185166024830152860151600f0b6044820152908501516064820152918b1660848301527f0000000000000000000000000000000000000000000000000000000000000000169063fa48736d9060a4016020604051808303816000875af11580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190612c5b565b61172757611727612d4a565b5050600054604080516001600160801b0380861682528d1660208201526001600160a01b038e81169362010000900416917f58b452da1f241e47a4cf34c1a770df2202ae3743eb13aa99f14cc8c7b5c133ba910160405180910390a361178d8b8b612175565b5060019a9950505050505050505050565b600a5460ff166117c157604051631142f7dd60e11b815260040160405180910390fd5b60006117cc8461118f565b905060006117d98461118f565b90506117f7856117e885612443565b6117f29085612cfd565b6111b3565b5061180f8461180585612443565b6117f29084612d60565b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161185591815260200190565b60405180910390a35050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052806118ab6118a68560000151600f0b61246c565b612443565b6001600160801b031681526020016118c2846124be565b63ffffffff1681526020016118e16118d9856124cc565b600f0b611968565b600b0b8152602093840151604001519301929092525090565b60006001600160ff1b038211156119645760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610d5b565b5090565b80600b81900b81146108c25760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610d5b565b6119d36127f1565b60405180604001604052806119eb8460000151611f82565b600f0b815260408051606080820183526000808352602080840182905292840152825180820184528783015163ffffffff16815287840151600b0b818401529601519186019190915201929092525090565b611a4561282e565b6040518060600160405280611a5d8460000151611f82565b600f0b8152602001836080015181526020016040518060600160405280856020015163ffffffff1681526020018560400151600b0b600f0b815260200185606001518152508152509050919050565b6000610920836020015160200151611b11856020015160000151611b0b611ae4878960000151602001516124dd90919063ffffffff16565b611b06611af78a60200151604001515190565b60208b015160400151906124dd565b611f02565b9061250b565b61251b565b6000611b228383610bd9565b600054604051634543b74560e01b81526001600160a01b0362010000909204821660048201528582166024820152604481018390529192507f00000000000000000000000000000000000000000000000000000000000000001690634543b745906064016020604051808303816000875af1158015611ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc99190612c5b565b611bd557611bd5612d4a565b6001600160a01b03831660009081526004602052604081206003018054839290611c00908490612d80565b9091555050600080546001600160a01b038581168084526004602090815260409485902060030154855187815291820152909362010000909304909116917f9464bfc300bfd9af903ee21453d885a40d7f96864a3eecc0b8b0faf4ae685fa1910160405180910390a392915050565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b918101919091526003546060820152600090611cbf906119cb565b6040805160c0810182526005546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b918101919091526006546060820152600754608082015260085460a0820152909150600090611d2290611a3d565b6040805180820190915283815260208101829052909150611d438185611f32565b9050611d5781602001516000015187612527565b60208083018051600f9390930b90925290510151611d759086611f02565b81602001516020018181525050611d91816020015160006120c6565b805160058054602084015160408501516001600160601b0316600160a01b026001600160a01b0363ffffffff909216600160801b026001600160a01b03199093166001600160801b039095169490941791909117169190911790556060810151600655608081015160075560a00151600855505050505050565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b9181019190915260035460608201526000908190611e5d906119cb565b6040805160c0810182526005546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b918101919091526006546060820152600754608082015260085460a0820152909150600090611ec090611a3d565b9050611edf6118d98260000151611ed6856124cc565b600f0b90612533565b9250505090565b600254600090610bd490610904906001600160801b03166118fa565b60006109208284612da8565b80600f81900b81146108c25760405162461bcd60e51b8152600401610d5b90612dc8565b611f3a612861565b8251611f46908361253f565b81526020830151611f569061256d565b6020820152611f658383611aac565b602080830180518201929092528251015190516040015292915050565b60006105b2611001836001600160801b03166118fa565b60006109208284612e0f565b611fad6127f1565b611fb561282e565b60408051606081018252600080825260208201819052918101919091528651516000611fef611fe48389612527565b60208b015151611f99565b90506000611ffd8a88611f32565b805160209081015101519091506000600f84900b1561202f57612025600f83900b868661259e565b9092509050612044565b61203d600f83900b86612533565b9050600091505b82516020015161205490836125c8565b83516020908101919091528351600f86900b90528b0151612089906120799083612527565b6120838d8c6125ff565b906125c8565b8351602080860151600f8e900b8152865190910151919a5098509096506120af90612645565b876040018190525050505050509450945094915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052806121138560000151600f0b612443565b6001600160801b0316815260200184604001516000015163ffffffff168152602001612149856040015160200151600f0b611968565b600b0b815260200184604001516040015181526020018460200151815260200183815250905092915050565b60008054612191906201000090046001600160a01b0316612680565b90506001600160a01b0381161561243e57604051635ca1c2af60e11b81523060048201526001600160a01b0384811660248301526000919083169063b943855e90604401602060405180830381865afa1580156121f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122169190612ae3565b90506000836001600160801b031660000361231b57604051630ef6816560e21b8152600481018390526000906001600160a01b03851690633bda059490602401606060405180830381865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122979190612e3c565b602001516001600160a01b031614612316575a604051635b159b2360e11b81523060048201526001600160a01b0387811660248301529192509084169063b62b3646906044015b600060405180830381600087803b1580156122f857600080fd5b505af1925050508015612309575060015b612316576123168161272c565b610e2a565b604051630ef6816560e21b8152600481018390526000906001600160a01b03851690633bda059490602401606060405180830381865afa158015612363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123879190612e3c565b602001516001600160a01b0316036123d2575a60405163f1391f7360e01b81523060048201526001600160a01b0387811660248301529192509084169063f1391f73906044016122de565b5a604051630447a2cd60e01b81523060048201526001600160a01b03878116602483015291925090841690630447a2cd90604401600060405180830381600087803b15801561242057600080fd5b505af1925050508015612431575060015b610e2a576123168161272c565b505050565b60006001600160801b038211156119645760405162461bcd60e51b8152600401610d5b90612dc8565b6000808212156119645760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610d5b565b60006105b282602001515190565b60006105b282602001516020015190565b60006109206125016124f3848660000151612753565b6020860151600f0b9061275f565b846040015161251b565b6000610920600f83900b84612c2b565b60006109208284612d80565b60006109208284612e90565b60006109208284612ebd565b6125476127f1565b61255083612775565b602081015190915061256290836125ff565b602082015292915050565b61257561282e565b8151600f0b815260208083015190820152604082015161259490612645565b6040820152919050565b6000806125bc836125b3600f88900b87612533565b600f0b9061279c565b91509150935093915050565b60408051606081018252600080825260208201819052918101919091526125ee83612645565b600f9290920b602083015250919050565b604080516060810182526000808252602082018190529181019190915261262583612645565b905061263183836124dd565b604082015263ffffffff9091168152919050565b6040805160608101825260008082526020808301828152838501928352855163ffffffff16845290850151600f0b9052929091015190915290565b60408051600481526024810182526020810180516001600160e01b031663f5a8b4dd60e01b1790529051600091829182916001600160a01b038616916126c69190612edd565b600060405180830381855afa9150503d8060008114612701576040519150601f19603f3d011682016040523d82523d6000602084013e612706565b606091505b509150915081156127255780806020019051810190610a059190612ac6565b5050919050565b612735816127cf565b15610ef0576040516320afada560e01b815260040160405180910390fd5b60006109208284612f0c565b600061092063ffffffff8316600f85900b612c2b565b61277d6127f1565b8151600f0b8152602082015161279290612645565b6020820152919050565b6000806127ad600f85900b846127e5565b91506127c6846127c1600f85900b86612533565b611f99565b90509250929050565b60006127dc604083612f3f565b5a111592915050565b60006109208284612f53565b60405180604001604052806000600f0b8152602001612829604080516060810182526000808252602082018190529181019190915290565b905290565b60408051606080820183526000808352602080840182905284519283018552818352820181905281840152909182015290565b60405180604001604052806128746127f1565b815260200161282961282e565b6001600160a01b0381168114610ef057600080fd5b600080604083850312156128a957600080fd5b82356128b481612881565b946020939093013593505050565b6000602082840312156128d457600080fd5b813561092081612881565b6001600160801b0381168114610ef057600080fd5b6000806040838503121561290757600080fd5b823561291281612881565b91506020830135612922816128df565b809150509250929050565b60008060006060848603121561294257600080fd5b833561294d81612881565b9250602084013561295d81612881565b929592945050506040919091013590565b60006080828403121561298057600080fd5b50919050565b63ffffffff81168114610ef057600080fd5b6000602082840312156129aa57600080fd5b813561092081612986565b600080604083850312156129c857600080fd5b82356129d381612881565b9150602083013561292281612986565b8015158114610ef057600080fd5b60008060008060808587031215612a0757600080fd5b8435612a1281612881565b93506020850135612a2281612881565b92506040850135612a32816129e3565b91506060850135612a42816129e3565b939692955090935050565b600080600060608486031215612a6257600080fd5b8335612a6d81612881565b92506020840135612a7d816129e3565b91506040840135612a8d81612986565b809150509250925092565b60008060408385031215612aab57600080fd5b8235612ab681612881565b9150602083013561292281612881565b600060208284031215612ad857600080fd5b815161092081612881565b600060208284031215612af557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b2576105b2612afc565b808201808211156105b2576105b2612afc565b6040516060810167ffffffffffffffff81118282101715612b6957634e487b7160e01b600052604160045260246000fd5b60405290565b80600f0b8114610ef057600080fd5b60008183036080811215612b9157600080fd5b6040516040810181811067ffffffffffffffff82111715612bc257634e487b7160e01b600052604160045260246000fd5b6040528335612bd081612b6f565b81526060601f1983011215612be457600080fd5b612bec612b38565b91506020840135612bfc81612986565b82526040840135612c0c81612b6f565b6020838101919091526060949094013560408301529283015250919050565b80820260008212600160ff1b84141615612c4757612c47612afc565b81810583148215176105b2576105b2612afc565b600060208284031215612c6d57600080fd5b8151610920816129e3565b600b82810b9082900b036b7fffffffffffffffffffffff1981126b7fffffffffffffffffffffff821317156105b2576105b2612afc565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160801b03828116828216039080821115612d1d57612d1d612afc565b5092915050565b600081600f0b60016001607f1b03198103612d4157612d41612afc565b60000392915050565b634e487b7160e01b600052600160045260246000fd5b6001600160801b03818116838216019080821115612d1d57612d1d612afc565b8082018281126000831280158216821582161715612da057612da0612afc565b505092915050565b8181036000831280158383131683831282161715612d1d57612d1d612afc565b60208082526027908201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316040820152663238206269747360c81b606082015260800190565b600f82810b9082900b0360016001607f1b0319811260016001607f1b03821317156105b2576105b2612afc565b600060608284031215612e4e57600080fd5b612e56612b38565b8251612e6181612881565b81526020830151612e7181612881565b60208201526040830151612e84816128df565b60408201529392505050565b600f81810b9083900b0160016001607f1b03811360016001607f1b0319821217156105b2576105b2612afc565b600082600f0b82600f0b0280600f0b9150808214612d1d57612d1d612afc565b6000825160005b81811015612efe5760208186018101518583015201612ee4565b506000920191825250919050565b63ffffffff828116828216039080821115612d1d57612d1d612afc565b634e487b7160e01b600052601260045260246000fd5b600082612f4e57612f4e612f29565b500490565b600081600f0b83600f0b80612f6a57612f6a612f29565b60016001607f1b0319821460001982141615612f8857612f88612afc565b9005939250505056fea2646970667358221220a707c14d497da2caec7fb0156676ccdeb56aea02756d245a8e9bbe8bc53bdcd064736f6c6343000817003300000000000000000000000051f571d934c59185f13d17301a36c07a2268b814