[ { "inputs": [ { "internalType": "contract GeneralDistributionAgreementV1", "name": "gda", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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_SELF_TRANSFER_NOT_ALLOWED", "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" } ]
60a0604052348015600f57600080fd5b5060405161304a38038061304a833981016040819052602c91603c565b6001600160a01b0316608052606a565b600060208284031215604d57600080fd5b81516001600160a01b0381168114606357600080fd5b9392505050565b608051612f8d6100bd6000396000818161055b015281816106090152818161080701528181610a5101528181610f96015281816111e50152818161148f015281816116ae0152611b8e0152612f8d6000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806389287e0a1161011a578063d1058e59116100ad578063de7b54d91161007c578063de7b54d91461048f578063df9ad93114610543578063f0ca93a214610556578063f851a4401461057d578063fdbd40f41461059057600080fd5b8063d1058e5914610433578063d4f0d6441461043b578063d877ec8714610443578063dd62ed3e1461045657600080fd5b8063a9059cbb116100e9578063a9059cbb146103fe578063a94ff34014610411578063b3b3f1cc14610419578063cb8599f01461042157600080fd5b806389287e0a146103c65780639903ad38146103db578063a457c2d7146103e3578063a754a702146103f657600080fd5b80634a0d91011161019d57806370a082311161016c57806370a082311461037857806377329f351461038b578063785e734c1461039e5780637d6c008d146103a65780637e80bd5e146103b957600080fd5b80634a0d91011461030657806352d1902d14610319578063539e8c1c1461033f5780636c0c582a1461036557600080fd5b806321dd5777116101d957806321dd57771461028757806323b872dd146102af5780632b4116f7146102c257806339509351146102f357600080fd5b8063095ea7b31461020b5780630fefbc091461023357806318160ddd1461025e5780631b16777714610274575b600080fd5b61021e610219366004612872565b6105a1565b60405190151581526020015b60405180910390f35b61024661024136600461289e565b6105b8565b6040516001600160801b03909116815260200161022a565b6102666105c3565b60405190815260200161022a565b61021e6102823660046128d0565b6105e5565b61029a61029536600461289e565b61065e565b6040805192835260208301919091520161022a565b61021e6102bd366004612909565b61074c565b6000546102db906201000090046001600160a01b031681565b6040516001600160a01b03909116815260200161022a565b61021e610301366004612872565b6107be565b61021e61031436600461294a565b6107fa565b7fca2aacef54bd44c838311f7274fc12b435395ce38673a3458ccdb318c9e1115f610266565b61035261034d36600461289e565b6108c7565b604051600b9190910b815260200161022a565b610266610373366004612977565b610927565b61026661038636600461289e565b610a0d565b61021e61039936600461289e565b610a27565b610352610bb8565b6102666103b4366004612994565b610bd9565b600a5461021e9060ff1681565b6103d96103d43660046129d0565b610d05565b005b6103d9610e31565b61021e6103f1366004612872565b610ef3565b610246610f2a565b61021e61040c366004612872565b610f3e565b610352610f4b565b610246610f55565b600a5461021e90610100900460ff1681565b61021e610f74565b610352610f7f565b61021e610451366004612a2c565b610f89565b610266610464366004612a77565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6104fe60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b91810191909152600354606082015290565b60405161022a919081516001600160801b0316815260208083015163ffffffff1690820152604080830151600b0b908201526060918201519181019190915260800190565b61026661055136600461289e565b61103e565b6102db7f000000000000000000000000000000000000000000000000000000000000000081565b6001546102db906001600160a01b031681565b6005546001600160801b0316610246565b60006105ae33848461112e565b5060015b92915050565b60006105b28261118f565b60006105d76002546001600160801b031690565b6001600160801b0316905090565b6001546000906001600160a01b0316331480159061062c5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b1561064a57604051631c5fbdcb60e01b815260040160405180910390fd5b61065483836111b3565b5060019392505050565b600080600060029054906101000a90046001600160a01b03166001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d89190612aa5565b6001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190612ac2565b90506107458382610bd9565b9150915091565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001981146107a8576107838382612af1565b6001600160a01b03861660009081526009602090815260408083203384529091529020555b6107b385858561179e565b506001949350505050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916105ae9185906107f5908690612b04565b61112e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461084557604051637e5f1fcf60e11b815260040160405180910390fd5b61085c61085736849003840184612b5d565b611896565b805160028054602084015160408501516001600160601b0316600160a01b026001600160a01b0363ffffffff909216600160801b026001600160a01b03199093166001600160801b03909516949094179190911716919091179055606001516003555060015b919050565b6000806108d38361118f565b9050806001600160801b03166000036108ef5750600092915050565b610920610904826001600160801b031661192c565b60025461091b9190600160a01b9004600b0b612c0e565b61199a565b9392505050565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b9181019190915260035460608201526000908190610979906119fd565b6040805160c0810182526005546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b918101919091526006546060820152600754608082015260085460a08201529091506000906109dc90611a6f565b9050610a0584604051806040016040528085815260200184815250611ade90919063ffffffff16565b949350505050565b6000610a188261118f565b6001600160801b031692915050565b6040516331e0bae760e21b81523060048201526001600160a01b03828116602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c782eb9c90604401602060405180830381865afa158015610a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abc9190612c3e565b905060008060029054906101000a90046001600160a01b03166001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190612aa5565b6001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b979190612ac2565b90506000610ba58583611b48565b9050826107b3576107b360008284611ca1565b6000610bc2611e3d565b610bca611f18565b610bd49190612c5b565b905090565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b91810191909152600354606082015260009082908290610c2d906119fd565b6001600160a01b0386166000908152600460209081526040808320815160c08101835281546001600160801b038116825263ffffffff600160801b82041694820194909452600160a01b909304600b0b9183019190915260018101546060830152600281015460808301526003015460a082015291925090610cae90611a6f565b9050610cfb610cda84604051806040016040528086815260200185815250611ade90919063ffffffff16565b6001600160a01b038816600090815260046020526040902060030154611f34565b9695505050505050565b600054610100900460ff1615808015610d255750600054600160ff909116105b80610d3f5750303b158015610d3f575060005460ff166001145b610d645760405162461bcd60e51b8152600401610d5b90612c92565b60405180910390fd5b6000805460ff191660011790558015610d87576000805461ff0019166101001790555b600180546001600160a01b0319166001600160a01b03878116919091179091556000805462010000600160b01b0319166201000092871692909202919091179055600a805461ffff191684151561ff00191617610100841515021790558015610e2a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600054610100900460ff1615808015610e515750600054600160ff909116105b80610e6b5750303b158015610e6b575060005460ff166001145b610e875760405162461bcd60e51b8152600401610d5b90612c92565b6000805460ff191660011790558015610eaa576000805461ff0019166101001790555b8015610ef0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916105ae9185906107f5908690612af1565b6000610bd46002546001600160801b031690565b60006105ae33848461179e565b6000610bd4611e3d565b600554600254600091610bd4916001600160801b039182169116612ce0565b6000610bd433610a27565b6000610bd4611f18565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fd457604051637e5f1fcf60e11b815260040160405180910390fd5b6000610fe08584611b48565b90506000611006611001610ff38861118f565b6001600160801b031661192c565b611f40565b905084156110265761102161101a82612cff565b8386611ca1565b611032565b61103281600086611ca1565b50600195945050505050565b6001600160a01b0381166000908152600460209081526040808320815160c0808201845282546001600160801b038082168452600160801b80830463ffffffff90811698860198909852600160a01b92839004600b90810b8689015260018701546060808801919091526002808901546080808a01919091526003998a015460a0808b01919091528b519889018c5291549586169a88019a8b52938504909a16908601529290910490910b9082015291549382019390935261111e914291908190611108906119fd565b815260200161111685611a6f565b905290611f64565b6020015160200151915050919050565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03166000908152600460205260409020546001600160801b031690565b60008054604051633d96606d60e11b8152620100009091046001600160a01b03908116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001690637b2cc0da90604401602060405180830381865afa15801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190612c3e565b1561126e57604051637087a02d60e11b815260040160405180910390fd5b6001600160a01b03831661129557604051632a75b77360e11b815260040160405180910390fd5b60008060029054906101000a90046001600160a01b03166001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d9190612aa5565b6001600160a01b031663bbe4fd506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136e9190612ac2565b905080600061137c85611fb4565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b9181019190915260035460608201529091506000906113cf906119fd565b6001600160a01b0388166000908152600460209081526040808320815160c08101835281546001600160801b038116825263ffffffff600160801b82041694820194909452600160a01b909304600b0b9183019190915260018101546060830152600281015460808301526003015460a082015291925061144f82611a6f565b82516040805180820182528681526020810184905290516331e0bae760e21b81523060048201526001600160a01b038d81166024830152939450919290917f00000000000000000000000000000000000000000000000000000000000000009091169063c782eb9c90604401602060405180830381865afa1580156114d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fc9190612c3e565b61151d5761151d61151587836020015160000151611fcb565b600089611ca1565b60408051606081018252600080825260208201819052918101919091526115468282898b611fd7565b9197509450905061155686611896565b8051600280546020808501516040808701516001600160601b0316600160a01b026001600160a01b0363ffffffff909316600160801b026001600160a01b03199095166001600160801b0390971696909617939093178116949094179092556060909301516003908155918f16600090815260049091529190912001546115dd85826120f8565b6001600160a01b038e811660009081526004602081815260408084208651815488850151898501516001600160601b0316600160a01b0263ffffffff918216600160801b026001600160a01b03199093166001600160801b0390941693909317919091178816919091178255606088015160018301556080880151600283015560a0909701516003909101559254835163fa48736d60e01b815262010000909104851692810192909252865185166024830152860151600f0b6044820152908501516064820152918b1660848301527f0000000000000000000000000000000000000000000000000000000000000000169063fa48736d9060a4016020604051808303816000875af11580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190612c3e565b61172757611727612d25565b5050600054604080516001600160801b0380861682528d1660208201526001600160a01b038e81169362010000900416917f58b452da1f241e47a4cf34c1a770df2202ae3743eb13aa99f14cc8c7b5c133ba910160405180910390a361178d8b8b6121a7565b5060019a9950505050505050505050565b816001600160a01b0316836001600160a01b0316036117d05760405163676ee05f60e11b815260040160405180910390fd5b600a5460ff166117f357604051631142f7dd60e11b815260040160405180910390fd5b60006117fe8461118f565b9050600061180b8461118f565b90506118298561181a8561245c565b6118249085612ce0565b6111b3565b50611841846118378561245c565b6118249084612d3b565b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161188791815260200190565b60405180910390a35050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052806118dd6118d88560000151600f0b612485565b61245c565b6001600160801b031681526020016118f4846124d7565b63ffffffff16815260200161191361190b856124e5565b600f0b61199a565b600b0b8152602093840151604001519301929092525090565b60006001600160ff1b038211156119965760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610d5b565b5090565b80600b81900b81146108c25760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610d5b565b611a056127cd565b6040518060400160405280611a1d8460000151611fb4565b600f0b815260408051606080820183526000808352602080840182905292840152825180820184528783015163ffffffff16815287840151600b0b818401529601519186019190915201929092525090565b611a7761280a565b6040518060600160405280611a8f8460000151611fb4565b600f0b8152602001836080015181526020016040518060600160405280856020015163ffffffff1681526020018560400151600b0b600f0b815260200185606001518152508152509050919050565b6000610920836020015160200151611b43856020015160000151611b3d611b16878960000151602001516124f690919063ffffffff16565b611b38611b298a60200151604001515190565b60208b015160400151906124f6565b611f34565b90612524565b612534565b6000611b548383610bd9565b600054604051634543b74560e01b81526001600160a01b0362010000909204821660048201528582166024820152604481018390529192507f00000000000000000000000000000000000000000000000000000000000000001690634543b745906064016020604051808303816000875af1158015611bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfb9190612c3e565b611c0757611c07612d25565b6001600160a01b03831660009081526004602052604081206003018054839290611c32908490612d5a565b9091555050600080546001600160a01b038581168084526004602090815260409485902060030154855187815291820152909362010000909304909116917f9464bfc300bfd9af903ee21453d885a40d7f96864a3eecc0b8b0faf4ae685fa1910160405180910390a392915050565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b918101919091526003546060820152600090611cf1906119fd565b6040805160c0810182526005546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b918101919091526006546060820152600754608082015260085460a0820152909150600090611d5490611a6f565b6040805180820190915283815260208101829052909150611d758185611f64565b9050611d8981602001516000015187612540565b60208083018051600f9390930b90925290510151611da79086611f34565b81602001516020018181525050611dc3816020015160006120f8565b805160058054602084015160408501516001600160601b0316600160a01b026001600160a01b0363ffffffff909216600160801b026001600160a01b03199093166001600160801b039095169490941791909117169190911790556060810151600655608081015160075560a00151600855505050505050565b604080516080810182526002546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b9181019190915260035460608201526000908190611e8f906119fd565b6040805160c0810182526005546001600160801b038116825263ffffffff600160801b8204166020830152600160a01b9004600b0b918101919091526006546060820152600754608082015260085460a0820152909150600090611ef290611a6f565b9050611f1161190b8260000151611f08856124e5565b600f0b9061254c565b9250505090565b600254600090610bd490610904906001600160801b031661192c565b60006109208284612d82565b80600f81900b81146108c25760405162461bcd60e51b8152600401610d5b90612da9565b611f6c61283d565b8251611f789083612558565b81526020830151611f8890612586565b6020820152611f978383611ade565b602080830180518201929092528251015190516040015292915050565b60006105b2611001836001600160801b031661192c565b60006109208284612df0565b611fdf6127cd565b611fe761280a565b604080516060810182526000808252602082018190529181019190915286515160006120216120168389612540565b60208b015151611fcb565b9050600061202f8a88611f64565b805160209081015101519091506000600f84900b1561206157612057600f83900b86866125b7565b9092509050612076565b61206f600f83900b8661254c565b9050600091505b82516020015161208690836125e1565b83516020908101919091528351600f86900b90528b01516120bb906120ab9083612540565b6120b58d8c612618565b906125e1565b8351602080860151600f8e900b8152865190910151919a5098509096506120e19061265e565b876040018190525050505050509450945094915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052806121458560000151600f0b61245c565b6001600160801b0316815260200184604001516000015163ffffffff16815260200161217b856040015160200151600f0b61199a565b600b0b815260200184604001516040015181526020018460200151815260200183815250905092915050565b600080546121c3906201000090046001600160a01b0316612699565b90506001600160a01b0381161561245757604051635ca1c2af60e11b81523060048201526001600160a01b0384811660248301526000919083169063b943855e90604401602060405180830381865afa158015612224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122489190612ac2565b9050826001600160801b031660000361234157604051630ef6816560e21b8152600481018290526000906001600160a01b03841690633bda059490602401606060405180830381865afa1580156122a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c79190612e1d565b602001516001600160a01b03161461233c57604051635b159b2360e11b81523060048201526001600160a01b03858116602483015283169063b62b3646906044015b600060405180830381600087803b15801561232357600080fd5b505af1158015612337573d6000803e3d6000fd5b505050505b612455565b604051630ef6816560e21b8152600481018290526000906001600160a01b03841690633bda059490602401606060405180830381865afa158015612389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ad9190612e1d565b602001516001600160a01b0316036123f35760405163f1391f7360e01b81523060048201526001600160a01b03858116602483015283169063f1391f7390604401612309565b604051630447a2cd60e01b81523060048201526001600160a01b038581166024830152831690630447a2cd90604401600060405180830381600087803b15801561243c57600080fd5b505af1158015612450573d6000803e3d6000fd5b505050505b505b505050565b60006001600160801b038211156119965760405162461bcd60e51b8152600401610d5b90612da9565b6000808212156119965760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610d5b565b60006105b282602001515190565b60006105b282602001516020015190565b600061092061251a61250c848660000151612745565b6020860151600f0b90612751565b8460400151612534565b6000610920600f83900b84612c0e565b60006109208284612d5a565b60006109208284612e73565b60006109208284612ea0565b6125606127cd565b61256983612767565b602081015190915061257b9083612618565b602082015292915050565b61258e61280a565b8151600f0b81526020808301519082015260408201516125ad9061265e565b6040820152919050565b6000806125d5836125cc600f88900b8761254c565b600f0b9061278e565b91509150935093915050565b60408051606081018252600080825260208201819052918101919091526126078361265e565b600f9290920b602083015250919050565b604080516060810182526000808252602082018190529181019190915261263e8361265e565b905061264a83836124f6565b604082015263ffffffff9091168152919050565b6040805160608101825260008082526020808301828152838501928352855163ffffffff16845290850151600f0b9052929091015190915290565b60408051600481526024810182526020810180516001600160e01b031663f5a8b4dd60e01b1790529051600091829182916001600160a01b038616916126df9190612ec0565b600060405180830381855afa9150503d806000811461271a576040519150601f19603f3d011682016040523d82523d6000602084013e61271f565b606091505b5091509150811561273e5780806020019051810190610a059190612aa5565b5050919050565b60006109208284612eef565b600061092063ffffffff8316600f85900b612c0e565b61276f6127cd565b8151600f0b815260208201516127849061265e565b6020820152919050565b60008061279f600f85900b846127c1565b91506127b8846127b3600f85900b8661254c565b611fcb565b90509250929050565b60006109208284612f0b565b60405180604001604052806000600f0b8152602001612805604080516060810182526000808252602082018190529181019190915290565b905290565b60408051606080820183526000808352602080840182905284519283018552818352820181905281840152909182015290565b60405180604001604052806128506127cd565b815260200161280561280a565b6001600160a01b0381168114610ef057600080fd5b6000806040838503121561288557600080fd5b82356128908161285d565b946020939093013593505050565b6000602082840312156128b057600080fd5b81356109208161285d565b6001600160801b0381168114610ef057600080fd5b600080604083850312156128e357600080fd5b82356128ee8161285d565b915060208301356128fe816128bb565b809150509250929050565b60008060006060848603121561291e57600080fd5b83356129298161285d565b925060208401356129398161285d565b929592945050506040919091013590565b6000608082840312801561295d57600080fd5b509092915050565b63ffffffff81168114610ef057600080fd5b60006020828403121561298957600080fd5b813561092081612965565b600080604083850312156129a757600080fd5b82356129b28161285d565b915060208301356128fe81612965565b8015158114610ef057600080fd5b600080600080608085870312156129e657600080fd5b84356129f18161285d565b93506020850135612a018161285d565b92506040850135612a11816129c2565b91506060850135612a21816129c2565b939692955090935050565b600080600060608486031215612a4157600080fd5b8335612a4c8161285d565b92506020840135612a5c816129c2565b91506040840135612a6c81612965565b809150509250925092565b60008060408385031215612a8a57600080fd5b8235612a958161285d565b915060208301356128fe8161285d565b600060208284031215612ab757600080fd5b81516109208161285d565b600060208284031215612ad457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b2576105b2612adb565b808201808211156105b2576105b2612adb565b6040516060810167ffffffffffffffff81118282101715612b4857634e487b7160e01b600052604160045260246000fd5b60405290565b80600f0b8114610ef057600080fd5b6000818303608081128015612b7157600080fd5b5060408051600091810167ffffffffffffffff81118282101715612ba357634e487b7160e01b83526041600452602483fd5b6040528435612bb181612b4e565b81526060601f1984011215612bc4578182fd5b612bcc612b17565b925060208501359150612bde82612965565b908252604084013590612bf082612b4e565b60208381019290925260609490940135604083015283015250919050565b80820260008212600160ff1b84141615612c2a57612c2a612adb565b81810583148215176105b2576105b2612adb565b600060208284031215612c5057600080fd5b8151610920816129c2565b600b82810b9082900b036b7fffffffffffffffffffffff1981126b7fffffffffffffffffffffff821317156105b2576105b2612adb565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160801b0382811682821603908111156105b2576105b2612adb565b600081600f0b60016001607f1b03198103612d1c57612d1c612adb565b60000392915050565b634e487b7160e01b600052600160045260246000fd5b6001600160801b0381811683821601908111156105b2576105b2612adb565b8082018281126000831280158216821582161715612d7a57612d7a612adb565b505092915050565b8181036000831280158383131683831282161715612da257612da2612adb565b5092915050565b60208082526027908201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316040820152663238206269747360c81b606082015260800190565b600f82810b9082900b0360016001607f1b0319811260016001607f1b03821317156105b2576105b2612adb565b60006060828403128015612e3057600080fd5b50612e39612b17565b8251612e448161285d565b81526020830151612e548161285d565b60208201526040830151612e67816128bb565b60408201529392505050565b600f81810b9083900b0160016001607f1b03811360016001607f1b0319821217156105b2576105b2612adb565b600082600f0b82600f0b0280600f0b9150808214612da257612da2612adb565b6000825160005b81811015612ee15760208186018101518583015201612ec7565b506000920191825250919050565b63ffffffff82811682821603908111156105b2576105b2612adb565b600081600f0b83600f0b80612f3057634e487b7160e01b600052601260045260246000fd5b60016001607f1b0319821460001982141615612f4e57612f4e612adb565b9005939250505056fea2646970667358221220923ef66e7916794a634d725ef0b61597195b703688e718577fc47df421b1008f64736f6c634300081a0033000000000000000000000000d453d38a001b47271488886532f1cceabf0c7ef3