[ { "inputs": [ { "internalType": "contract IERC20", "name": "_stakingToken", "type": "address" }, { "internalType": "contract IPoolPositionAndRewardFactorySlim", "name": "_rewardFactory", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "name": "DurationOutOfBounds", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "rewardTokenAddress", "type": "address" } ], "name": "NotValidRewardToken", "type": "error" }, { "inputs": [], "name": "OnlyFactoryOwner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "minimumAmount", "type": "uint256" } ], "name": "RewardAmountBelowThreshold", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "rewardTokenIndex", "type": "uint8" } ], "name": "RewardStillActive", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "rewardTokenIndex", "type": "uint8" } ], "name": "StaleToken", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "rewardTokenIndex", "type": "uint8" } ], "name": "TokenNotStale", "type": "error" }, { "inputs": [], "name": "TooManyRewardTokens", "type": "error" }, { "inputs": [], "name": "ZeroAmount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardTokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint8", "name": "rewardTokenIndex", "type": "uint8" } ], "name": "AddRewardToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint8", "name": "rewardTokenIndex", "type": "uint8" }, { "indexed": false, "internalType": "address", "name": "rewardTokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardPaid", "type": "uint256" } ], "name": "GetReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "rewardTokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "duration", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardRate", "type": "uint256" } ], "name": "NotifyRewardAmount", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardTokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint8", "name": "rewardTokenIndex", "type": "uint8" } ], "name": "RemoveRewardToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "supplier", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "userBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "Stake", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "userBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "UnStake", "type": "event" }, { "inputs": [], "name": "MAX_REWARD_TOKENS", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "earned", "outputs": [ { "components": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "earned", "type": "uint256" }, { "internalType": "contract IERC20", "name": "rewardToken", "type": "address" } ], "internalType": "struct IReward.EarnedInfo[]", "name": "earnedInfo", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "rewardTokenAddress", "type": "address" } ], "name": "earned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint8[]", "name": "rewardTokenIndices", "type": "uint8[]" } ], "name": "getReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint8", "name": "rewardTokenIndex", "type": "uint8" } ], "name": "getReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "globalActive", "outputs": [ { "internalType": "uint256", "name": "_data", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rewardTokenAddress", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "name": "notifyAndTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "rewardTokenIndex", "type": "uint8" } ], "name": "removeStaleToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "rewardData", "outputs": [ { "internalType": "uint256", "name": "finishAt", "type": "uint256" }, { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, { "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "internalType": "uint256", "name": "rewardPerTokenStored", "type": "uint256" }, { "internalType": "uint256", "name": "escrowedReward", "type": "uint256" }, { "internalType": "uint256", "name": "globalResetCount", "type": "uint256" }, { "internalType": "contract IERC20", "name": "rewardToken", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardFactory", "outputs": [ { "internalType": "contract IPoolPositionAndRewardFactorySlim", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardInfo", "outputs": [ { "components": [ { "internalType": "uint256", "name": "finishAt", "type": "uint256" }, { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, { "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "internalType": "uint256", "name": "rewardPerTokenStored", "type": "uint256" }, { "internalType": "contract IERC20", "name": "rewardToken", "type": "address" } ], "internalType": "struct IReward.RewardInfo[]", "name": "info", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakingToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tokenIndex", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unstakeAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60c06040526001805460ff191660101790553480156200001e57600080fd5b5060405162002a5c38038062002a5c833981016040819052620000419162000086565b600160008181556001600160a01b0393841660a0529190921660805260048054909201825552620000c5565b6001600160a01b03811681146200008357600080fd5b50565b600080604083850312156200009a57600080fd5b8251620000a7816200006d565b6020840151909250620000ba816200006d565b809150509250929050565b60805160a05161295562000107600039600081816102fe0152818161119201526113c10152600081816101cc015281816105f1015261189001526129556000f3fe608060405234801561001057600080fd5b50600436106101505760003560e01c80635d0cde97116100cd5780638381e18211610081578063ac9650d811610066578063ac9650d814610359578063c9f6707214610379578063d2cadaf31461038e57600080fd5b80638381e18214610333578063a0d6ff9a1461034657600080fd5b806370a08231116100b257806370a08231146102d957806372f702f3146102f95780637acb77571461032057600080fd5b80635d0cde97146102b9578063664366db146102c657600080fd5b8063211dc32d116101245780633e3cc239116101095780633e3cc23914610213578063427f91a61461027157806349d3b6e2146102a657600080fd5b8063211dc32d146101b4578063245e4bf0146101c757600080fd5b80628cc262146101555780630e7cacf91461017e57806318160ddd146101935780631f671765146101aa575b600080fd5b61016861016336600461228a565b6103a1565b60405161017591906122a5565b60405180910390f35b61019161018c366004612318565b6104f3565b005b61019c60025481565b604051908152602001610175565b60065461019c9081565b61019c6101c236600461234b565b61071e565b6101ee7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b61022661022136600461237e565b6107d2565b604080519788526020880196909652948601939093526060850191909152608084015260a083015273ffffffffffffffffffffffffffffffffffffffff1660c082015260e001610175565b61029461027f36600461228a565b60056020526000908152604090205460ff1681565b60405160ff9091168152602001610175565b6101916102b43660046123a8565b610837565b6001546102949060ff1681565b6101916102d436600461240f565b6108b9565b61019c6102e736600461228a565b60036020526000908152604090205481565b6101ee7f000000000000000000000000000000000000000000000000000000000000000081565b61019161032e366004612462565b6108fc565b610191610341366004612462565b61090b565b61019161035436600461228a565b610916565b61036c610367366004612485565b610923565b6040516101759190612535565b610381610a18565b60405161017591906125b5565b61019c61039c36600461262c565b610b93565b6004546060908067ffffffffffffffff8111156103c0576103c0612656565b60405190808252806020026020018201604052801561042957816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816103de5790505b50915060015b818160ff1610156104ec57600060048260ff168154811061045257610452612685565b90600052602060002090600a0201905060405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020016104938784610ba7565b8152600983015473ffffffffffffffffffffffffffffffffffffffff166020909101528451859060ff85169081106104cd576104cd612685565b60200260200101819052505080806104e4906126e3565b91505061042f565b5050919050565b600260005403610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000556203f4808110156105a9576040517f91aaaf240000000000000000000000000000000000000000000000000000000081526004810182905260240161055b565b6040517f0975acad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690630975acad90602401602060405180830381865afa15801561063a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065e9190612702565b9050808310156106a4576040517f1eecc570000000000000000000000000000000000000000000000000000000008152600481018490526024810182905260440161055b565b6106af848484610c59565b915062278d008211156106f1576040517f91aaaf240000000000000000000000000000000000000000000000000000000081526004810183905260240161055b565b61071373ffffffffffffffffffffffffffffffffffffffff8516333086610e16565b505060016000555050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205460ff16808203610798576040517fe63bc0be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161055b565b6000600482815481106107ad576107ad612685565b90600052602060002090600a020190506107c78582610ba7565b925050505b92915050565b600481815481106107e257600080fd5b60009182526020909120600a90910201805460018201546002830154600384015460078501546008860154600990960154949650929491939092919073ffffffffffffffffffffffffffffffffffffffff1687565b6002600054036108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161055b565b60026000556108b181610ef8565b506001600055565b6108f7338484848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061106f92505050565b505050565b6109073383836110c0565b5050565b61090733838361129b565b6109203382611464565b50565b60608167ffffffffffffffff81111561093e5761093e612656565b60405190808252806020026020018201604052801561097157816020015b606081526020019060019003908161095c5790505b50905060005b82811015610a11576109e13085858481811061099557610995612685565b90506020028101906109a7919061271b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061149692505050565b8282815181106109f3576109f3612685565b60200260200101819052508080610a0990612780565b915050610977565b5092915050565b6004546060908067ffffffffffffffff811115610a3757610a37612656565b604051908082528060200260200182016040528015610ab057816020015b610a9d6040518060a0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b815260200190600190039081610a555790505b50915060015b818160ff161015610b8e57600060048260ff1681548110610ad957610ad9612685565b90600052602060002090600a020190506040518060a00160405280826000015481526020018260010154815260200182600201548152602001826003015481526020018260090160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250848360ff1681518110610b6f57610b6f612685565b6020026020010181905250508080610b86906126e3565b915050610ab6565b505090565b6000610ba03384846114bb565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812054610c2790610c19610bdd856116bf565b8560030154610bec91906127b8565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600487016020526040902054611729565b670de0b6b3a764000061174a565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600584016020526040902054610ba091906127b8565b600080610c6585611817565b9050600060048260ff1681548110610c7f57610c7f612685565b90600052602060002090600a02019050610c9a600082611b2e565b60098101546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091610d3f9173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190612702565b8360070154611729565b905080861180610d5157506002820154155b15610d755784610d6182886127b8565b610d6b91906127fa565b6002830155610d91565b6002820154610d8482886127b8565b610d8e91906127fa565b94505b610d9b85426127b8565b825542600183015560028201546040805133815273ffffffffffffffffffffffffffffffffffffffff8a166020820152808201899052606081018890526080810192909252517ffcb9ca03b70a876a8d62dc2ef18aa125118fd02dae56cfffc36a627e7b1c48119181900360a00190a1509295945050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610ef29085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611cac565b50505050565b600060048260ff1681548110610f1057610f10612685565b90600052602060002090600a02019050806000015462278d00610f3391906127b8565b421015610f71576040517ff062126c00000000000000000000000000000000000000000000000000000000815260ff8316600482015260240161055b565b60098101546040805173ffffffffffffffffffffffffffffffffffffffff909216825260ff841660208301527f353ebfaea553ae85160f3da125ac0ded25dcae43d4ef924530be7a0f9a919dac910160405180910390a160068054600160ff85161b1916905560098101805473ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905581547fffffffffffffffffffffffff00000000000000000000000000000000000000001690915560078201819055600382018190556002820181905580825560019091015550565b805160005b818160ff1610156110b9576110a68585858460ff168151811061109957611099612685565b60200260200101516114bb565b50806110b1816126e3565b915050611074565b5050505050565b60026000540361112c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161055b565b6002600081905550818060000361116f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61117882611db8565b6111ba73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016853086610e16565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548592906111ef9084906127b8565b92505081905550826002600082825461120891906127b8565b909155505073ffffffffffffffffffffffffffffffffffffffff828116600081815260036020908152604091829020546002548351338152958a16928601929092529184018790526060840192909252608083015260a08201527f085d03d4e08946d168a8e39b4d6fb3dac61848912dae1a052fbe35f51e790e309060c0015b60405180910390a1505060016000555050565b600260005403611307576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161055b565b6002600081905550818060000361134a576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61135384611db8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208054859290611388908490612835565b9250508190555082600260008282546113a19190612835565b909155506113e8905073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168385611e1f565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260036020908152604091829020546002548351338152928301949094529181018790529285166060840152608083015260a08201527f624749dcbc3e908a465e807a4005f6ff77637b2f4fb4bafc79e36dc67c43f9569060c001611288565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020546109079083908361129b565b6060610ba083836040518060600160405280602781526020016128f960279139611e75565b6000600260005403611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161055b565b6002600055600654600160ff84161b16611574576040517fadcabdeb00000000000000000000000000000000000000000000000000000000815260ff8316600482015260240161055b565b600060048360ff168154811061158c5761158c612685565b90600052602060002090600a020190506115a68582611b2e565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005820160205260409020549150811561163f5773ffffffffffffffffffffffffffffffffffffffff851660009081526005820160205260408120819055600782018054849290611614908490612835565b9091555050600981015461163f9073ffffffffffffffffffffffffffffffffffffffff168584611e1f565b60098101546040805133815273ffffffffffffffffffffffffffffffffffffffff88811660208301528781168284015260ff87166060830152909216608083015260a08201849052517f668db5c1eca9fc9d61c658150ed33ea6dd7ccf0c809339169c4262c12cf53fd39181900360c00190a15060016000559392505050565b6000806116dc6116d28460000154611f9d565b8460010154611729565b90508015806116eb5750600254155b806116f857506002830154155b156117065750600092915050565b6002830154610ba090611721670de0b6b3a764000084612848565b60025461174a565b60008183106117415761173c8284612835565b610ba0565b50600092915050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050806000036117a257838281611798576117986127cb565b0492505050610ba0565b8084116117ae57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090205460ff16801561184b57919050565b6040517f7095bffc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637095bffc90602401602060405180830381865afa1580156118d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fb919061285f565b611949576040517fe63bc0be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161055b565b60015b6001805461195f9160ff90911690612881565b60ff168160ff16101561199557600654600160ff83161b1661198357809150611995565b8061198d816126e3565b91505061194c565b508060ff166000036119d3576040517f0d1470a400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045460ff8216036119ec576004805460010181556000525b600060048260ff1681548110611a0457611a04612685565b600091825260208220600a91909102016009810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87161790556008810180549193509091611a6a83612780565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8416179055611ad76006838154600160ff9092169190911b179055565b6040805173ffffffffffffffffffffffffffffffffffffffff8516815260ff841660208201527f8b19e0126c38fb29a20d80185dfa44abf853d0d22e1c9d4f9db32dc269f0bc4b910160405180910390a150919050565b6000611b39826116bf565b90508015611b8c5780826003016000828254611b5591906127b8565b9091555050600254611b73908290670de0b6b3a76400006001611fa9565b826007016000828254611b8691906127b8565b90915550505b8154611b9790611f9d565b600183015573ffffffffffffffffffffffffffffffffffffffff8316156108f757600882015473ffffffffffffffffffffffffffffffffffffffff8416600090815260068401602052604090205414611c345773ffffffffffffffffffffffffffffffffffffffff831660009081526004830160209081526040808320839055600585018252808320839055600885015460068601909252909120555b611c3e8383612006565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260058401602052604081208054909190611c759084906127b8565b9091555050600382015473ffffffffffffffffffffffffffffffffffffffff84166000908152600484016020526040902055505050565b6000611d0e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661204b9092919063ffffffff16565b8051909150156108f75780806020019051810190611d2c919061285f565b6108f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161055b565b60045460015b818160ff1610156108f757600654600160ff83161b1615611e0d57600060048260ff1681548110611df157611df1612685565b90600052602060002090600a02019050611e0b8482611b2e565b505b80611e17816126e3565b915050611dbe565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526108f79084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610e70565b606073ffffffffffffffffffffffffffffffffffffffff84163b611f1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161055b565b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f4391906128c9565b600060405180830381855af49150503d8060008114611f7e576040519150601f19603f3d011682016040523d82523d6000602084013e611f83565b606091505b5091509150611f93828286612062565b9695505050505050565b60006107cc82426120b5565b600080611fb786868661174a565b90506001836002811115611fcd57611fcd61289a565b148015611fea575060008480611fe557611fe56127cb565b868809115b15611ffd57611ffa6001826127b8565b90505b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360208181526040808420549285015460048601909252832054610ba09291610c1991611729565b606061205a84846000856120cb565b949350505050565b60608315612071575081610ba0565b8251156120815782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055b91906128e5565b60008183106120c45781610ba0565b5090919050565b60608247101561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff85163b6121db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161055b565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161220491906128c9565b60006040518083038185875af1925050503d8060008114612241576040519150601f19603f3d011682016040523d82523d6000602084013e612246565b606091505b5091509150612256828286612062565b979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461228557600080fd5b919050565b60006020828403121561229c57600080fd5b610ba082612261565b602080825282518282018190526000919060409081850190868401855b8281101561230b578151805173ffffffffffffffffffffffffffffffffffffffff90811686528782015188870152908601511685850152606090930192908501906001016122c2565b5091979650505050505050565b60008060006060848603121561232d57600080fd5b61233684612261565b95602085013595506040909401359392505050565b6000806040838503121561235e57600080fd5b61236783612261565b915061237560208401612261565b90509250929050565b60006020828403121561239057600080fd5b5035919050565b803560ff8116811461228557600080fd5b6000602082840312156123ba57600080fd5b610ba082612397565b60008083601f8401126123d557600080fd5b50813567ffffffffffffffff8111156123ed57600080fd5b6020830191508360208260051b850101111561240857600080fd5b9250929050565b60008060006040848603121561242457600080fd5b61242d84612261565b9250602084013567ffffffffffffffff81111561244957600080fd5b612455868287016123c3565b9497909650939450505050565b6000806040838503121561247557600080fd5b8235915061237560208401612261565b6000806020838503121561249857600080fd5b823567ffffffffffffffff8111156124af57600080fd5b6124bb858286016123c3565b90969095509350505050565b60005b838110156124e25781810151838201526020016124ca565b50506000910152565b600081518084526125038160208601602086016124c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156125a8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526125968583516124eb565b9450928501929085019060010161255c565b5092979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561230b57815180518552868101518786015285810151868601526060808201519086015260809081015173ffffffffffffffffffffffffffffffffffffffff169085015260a090930192908501906001016125d2565b6000806040838503121561263f57600080fd5b61264883612261565b915061237560208401612397565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff81036126f9576126f96126b4565b60010192915050565b60006020828403121561271457600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261275057600080fd5b83018035915067ffffffffffffffff82111561276b57600080fd5b60200191503681900382131561240857600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127b1576127b16126b4565b5060010190565b808201808211156107cc576107cc6126b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612830577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156107cc576107cc6126b4565b80820281158282048414176107cc576107cc6126b4565b60006020828403121561287157600080fd5b81518015158114610ba057600080fd5b60ff81811683821601908111156107cc576107cc6126b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082516128db8184602087016124c7565b9190910192915050565b602081526000610ba060208301846124eb56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bf76dd457f868e41da97d28d929ba52f9df04cba340ba50fdad8d643bab866a564736f6c63430008110033000000000000000000000000de03584a5f10c5109acffffb5b82ccc23108b07b0000000000000000000000004f24d73773fcce560f4fd641125c23a2b93fcb05