[ { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "BelowMinimumSupply", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "ExceedsHardCap", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "provided", "type": "uint256" }, { "internalType": "uint256", "name": "minimum", "type": "uint256" } ], "name": "InsufficientPepecoin", "type": "error" }, { "inputs": [], "name": "InvalidAmount", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "MaxMintExceeded", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "attempted", "type": "uint256" }, { "internalType": "uint256", "name": "maximum", "type": "uint256" } ], "name": "MaxSupplyReached", "type": "error" }, { "inputs": [], "name": "NoPepecoin", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "x", "type": "uint256" }, { "internalType": "uint256", "name": "y", "type": "uint256" } ], "name": "PRBMath_MulDiv18_Overflow", "type": "error" }, { "inputs": [ { "internalType": "SD59x18", "name": "x", "type": "int256" } ], "name": "PRBMath_SD59x18_IntoUint256_Underflow", "type": "error" }, { "inputs": [], "name": "PRBMath_SD59x18_Mul_InputTooSmall", "type": "error" }, { "inputs": [ { "internalType": "SD59x18", "name": "x", "type": "int256" }, { "internalType": "SD59x18", "name": "y", "type": "int256" } ], "name": "PRBMath_SD59x18_Mul_Overflow", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "attempted", "type": "uint256" }, { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "RateLimitExceeded", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "received", "type": "uint256" }, { "internalType": "uint256", "name": "minimum", "type": "uint256" } ], "name": "SlippageExceeded", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "inputs": [], "name": "Unauthorized", "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": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "pepecoinBurned", "type": "uint256" }, { "indexed": false, "internalType": "SD59x18", "name": "rate", "type": "int256" } ], "name": "BrainCreditsMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "PepecoinBurned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "SD59x18", "name": "newRate", "type": "int256" } ], "name": "RateUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newAdjuster", "type": "address" } ], "name": "TotalSupplyAdjusterChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newSupply", "type": "uint256" } ], "name": "TotalSupplyDecreased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newSupply", "type": "uint256" } ], "name": "TotalSupplyIncreased", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "MIN_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PEPECOIN", "outputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SUPPLY_HARD_CAP", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SUPPLY_INCREMENT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "value", "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": "burnCollectedPepecoin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentCreditsPerPepecoin", "outputs": [ { "internalType": "SD59x18", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decreaseTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getCurrentRate", "outputs": [ { "internalType": "SD59x18", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMintedInCurrentBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPepecoinBurnedSinceLastUpdate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalSupplyAdjuster", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "increaseTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastMintBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxMintPerBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxMintPerTx", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minPepecoinAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "pepecoinAmount", "type": "uint256" }, { "internalType": "uint256", "name": "minCreditsExpected", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "mintedInCurrentBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pepecoinBurnedSinceLastUpdate", "outputs": [ { "internalType": "SD59x18", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pepecoinPerRateUpdate", "outputs": [ { "internalType": "SD59x18", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rateDecreaseFactor", "outputs": [ { "internalType": "SD59x18", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_adjuster", "type": "address" } ], "name": "setTotalSupplyAdjuster", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBurned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupplyAdjuster", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "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": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60a0604052306080523480156012575f5ffd5b506080516124bb6100395f395f81816112460152818161126f01526113ae01526124bb5ff3fe60806040526004361061026a575f3560e01c806380ddcc621161014a578063c160f6c0116100be578063dd62ed3e11610078578063dd62ed3e146106c5578063de0f2be1146106e4578063de7fcb1d146106f8578063e004cf401461070d578063f2fde38b14610721578063f7fb07b014610740575f5ffd5b8063c160f6c014610636578063c50497ae1461065d578063cdb59ed114610672578063d1335b5f14610687578063d3859f211461069c578063d89135cd146106b0575f5ffd5b8063928907dd1161010f578063928907dd1461059457806395d89b41146105a95780639cf5c3f5146105bd578063a3ce2d1c146105d2578063a9059cbb146105e7578063ad3cb1cc14610606575f5ffd5b806380ddcc62146104ff5780638129fc1c1461051c5780638456cb59146105305780638da5cb5b1461054457806390578ae114610580575f5ffd5b806345af1dd3116101e15780635c975abb116101a65780635c975abb146104575780636c9c2faf1461046e5780636d1f28b41461048257806370a0823114610497578063715018a6146104d757806379fdd525146104eb575f5ffd5b806345af1dd3146103f4578063468676cb146103c45780634f1ef2861461041357806352d1902d1461042657806356975e9a1461043a575f5ffd5b806323b872dd1161023257806323b872dd1461033e57806326fcfced1461035d578063313ce567146103945780633457db6e146103af57806335917c64146103c45780633f4ba83a146103e0575f5ffd5b806306fdde031461026e578063095ea7b3146102985780630cb91cda146102c757806318160ddd146102ea5780631b2ef1ca1461031d575b5f5ffd5b348015610279575f5ffd5b50610282610754565b60405161028f9190612047565b60405180910390f35b3480156102a3575f5ffd5b506102b76102b2366004612097565b610814565b604051901515815260200161028f565b3480156102d2575f5ffd5b506102dc606f5481565b60405190815260200161028f565b3480156102f5575f5ffd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546102dc565b348015610328575f5ffd5b5061033c6103373660046120bf565b61082d565b005b348015610349575f5ffd5b506102b76103583660046120df565b6108b2565b348015610368575f5ffd5b5060655461037c906001600160a01b031681565b6040516001600160a01b03909116815260200161028f565b34801561039f575f5ffd5b506040516012815260200161028f565b3480156103ba575f5ffd5b506102dc606a5481565b3480156103cf575f5ffd5b506102dc683635c9adc5dea0000081565b3480156103eb575f5ffd5b5061033c6108d7565b3480156103ff575f5ffd5b5061033c61040e366004612119565b6108e9565b61033c610421366004612146565b610946565b348015610431575f5ffd5b506102dc610961565b348015610445575f5ffd5b506065546001600160a01b031661037c565b348015610462575f5ffd5b5060325460ff166102b7565b348015610479575f5ffd5b506064546102dc565b34801561048d575f5ffd5b506102dc60695481565b3480156104a2575f5ffd5b506102dc6104b1366004612119565b6001600160a01b03165f9081525f5160206124465f395f51905f52602052604090205490565b3480156104e2575f5ffd5b5061033c61097c565b3480156104f6575f5ffd5b506102dc61098d565b34801561050a575f5ffd5b506102dc69d8d726b7177a8000000081565b348015610527575f5ffd5b5061033c61099e565b34801561053b575f5ffd5b5061033c610b66565b34801561054f575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661037c565b34801561058b575f5ffd5b5061033c610b76565b34801561059f575f5ffd5b506102dc60685481565b3480156105b4575f5ffd5b50610282610c2c565b3480156105c8575f5ffd5b506102dc606e5481565b3480156105dd575f5ffd5b506102dc606d5481565b3480156105f2575f5ffd5b506102b7610601366004612097565b610c6a565b348015610611575f5ffd5b50610282604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610641575f5ffd5b5061037c7370ef99792cbda43be3d528a2d5bcfe6e959f3a0981565b348015610668575f5ffd5b506102dc60645481565b34801561067d575f5ffd5b506102dc60665481565b348015610692575f5ffd5b506102dc606b5481565b3480156106a7575f5ffd5b50606f546102dc565b3480156106bb575f5ffd5b506102dc606c5481565b3480156106d0575f5ffd5b506102dc6106df36600461220a565b610c77565b3480156106ef575f5ffd5b5061033c610cc0565b348015610703575f5ffd5b506102dc60675481565b348015610718575f5ffd5b5061033c610d7d565b34801561072c575f5ffd5b5061033c61073b366004612119565b610e69565b34801561074b575f5ffd5b506069546102dc565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f5160206124465f395f51905f52916107929061223b565b80601f01602080910402602001604051908101604052809291908181526020018280546107be9061223b565b80156108095780601f106107e057610100808354040283529160200191610809565b820191905f5260205f20905b8154815290600101906020018083116107ec57829003601f168201915b505050505091505090565b5f33610821818585610ea6565b60019150505b92915050565b610835610eb8565b61083d610f0f565b606654821015610877576066546040516315fec9a760e11b815261086e918491600401918252602082015260400190565b60405180910390fd5b60675482111561089a57604051633ce95f8560e11b815260040160405180910390fd5b6108a5338383610f55565b6108ae60015f55565b5050565b5f336108bf8582856110d3565b6108ca858585611136565b60019150505b9392505050565b6108df611193565b6108e76111ee565b565b6108f1611193565b606580546001600160a01b0319166001600160a01b0383169081179091556040519081527f4bf95ba2c31dde5c0ae66780389b91c59fe5e64a74593aea7691c81d63e1b361906020015b60405180910390a150565b61094e61123b565b610957826112df565b6108ae82826112e7565b5f61096a6113a3565b505f5160206124665f395f51905f5290565b610984611193565b6108e75f6113ec565b5f610999606d5461145c565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156109e35750825b90505f8267ffffffffffffffff1660011480156109ff5750303b155b905081158015610a0d575080155b15610a2b5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a5557845460ff60401b1916600160401b1785555b610aa46040518060400160405280600c81526020016b55555053204372656469747360a01b8152506040518060400160405280600981526020016815555414d090d4915160ba1b815250611482565b610aad33611494565b610ab56114a5565b610abd6114ad565b610ac56114bd565b69d8d726b7177a80000000606455683635c9adc5dea00000606681905569021e19e0c9bab2400000606755690a968163f0a57b400000606855670de0b6b3a7640000606955670dd99bb65dd70000606a55606b558315610b5f57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b610b6e611193565b6108e76114cd565b6065546001600160a01b03163314610ba0576040516282b42960e81b815260040160405180910390fd5b610bb3683635c9adc5dea0000080612287565b60645411610bd457604051630999570960e11b815260040160405180910390fd5b683635c9adc5dea0000060645f828254610bee919061229a565b90915550506064546040519081527f7cecaeb2d7d2005c8b5d3f72dc76c9434d9313d1f01bf63e3cf95f6f61fd9742906020015b60405180910390a1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f5160206124465f395f51905f52916107929061223b565b5f33610821818585611136565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6065546001600160a01b03163314610cea576040516282b42960e81b815260040160405180910390fd5b69d8d726b7177a80000000683635c9adc5dea00000606454610d0c9190612287565b1115610d2b57604051634593993960e01b815260040160405180910390fd5b683635c9adc5dea0000060645f828254610d459190612287565b90915550506064546040519081527f3ed9f2ae524f56b7b1960ca403bfc34fc142aac14d5f298a2267871212ed009690602001610c22565b610d85611193565b6040516370a0823160e01b81523060048201525f907370ef99792cbda43be3d528a2d5bcfe6e959f3a09906370a0823190602401602060405180830381865afa158015610dd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df891906122ad565b9050805f03610e1a5760405163f931e5ef60e01b815260040160405180910390fd5b610e397370ef99792cbda43be3d528a2d5bcfe6e959f3a095f8361150a565b6040518181527f9f4cdf6df58636b54036c6c21ce393a42904991a48198207b7c477693050e1be9060200161093b565b610e71611193565b6001600160a01b038116610e9a57604051631e4fbdf760e01b81525f600482015260240161086e565b610ea3816113ec565b50565b610eb3838383600161156d565b505050565b60025f5403610f095760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161086e565b60025f55565b60325460ff16156108e75760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161086e565b610f5e82611650565b5f80610f69846116b2565b915091505f610f778361145c565b905060645481610fa57f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b610faf9190612287565b111561100d5780610fde7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b606454610feb919061229a565b604051635e4e36a960e11b81526004810192909252602482015260440161086e565b83811015611038576040516371c4efed60e01b8152600481018290526024810185905260440161086e565b6110587370ef99792cbda43be3d528a2d5bcfe6e959f3a09873088611784565b84606c5f8282546110699190612287565b90915550611079905086826117bc565b60408051828152602081018790529081018390526001600160a01b038716907f45cb326a64c28f67e4ecc387d9a8f6122f0383ae38f740f331f7d0c57f58065f9060600160405180910390a2505050505050565b60015f55565b5f6110de8484610c77565b90505f198114611130578181101561112257604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161086e565b61113084848484035f61156d565b50505050565b6001600160a01b03831661115f57604051634b637e8f60e11b81525f600482015260240161086e565b6001600160a01b0382166111885760405163ec442f0560e01b81525f600482015260240161086e565b610eb38383836117ec565b336111c57f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e75760405163118cdaa760e01b815233600482015260240161086e565b6111f6611925565b6032805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610c22565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112c157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112b55f5160206124665f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156108e75760405163703e46dd60e11b815260040160405180910390fd5b610ea3611193565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611341575060408051601f3d908101601f1916820190925261133e918101906122ad565b60015b61136957604051634c9c8ce360e01b81526001600160a01b038316600482015260240161086e565b5f5160206124665f395f51905f52811461139957604051632a87526960e21b81526004810182905260240161086e565b610eb3838361196e565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e75760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f818181121561082757604051632463f3d560e01b81526004810184905260240161086e565b61148a6119c3565b6108ae8282611a0c565b61149c6119c3565b610ea381611a5c565b6108e76119c3565b6114b56119c3565b6108e7611a64565b6114c56119c3565b6108e7611a6c565b6114d5610f0f565b6032805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112233390565b6040516001600160a01b038316602482015260448101829052610eb390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a80565b5f5160206124465f395f51905f526001600160a01b0385166115a45760405163e602df0560e01b81525f600482015260240161086e565b6001600160a01b0384166115cd57604051634a1406b160e11b81525f600482015260240161086e565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610b5f57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161164191815260200190565b60405180910390a35050505050565b606e54439081111561166657606e8190555f606f555b5f82606f546116759190612287565b90506068548111156116a857606854604051632fb89ac360e11b815261086e918391600401918252602082015260400190565b606f555050565b90565b606954606d545f919083905b6116c7825f1290565b15611740575f6116ea6116e583606b54611b5390919063ffffffff16565b841290565b61170057606b546116fb9083611b53565b611702565b825b90505f61170f8286611b61565b905061171b8682611c23565b9550611728828685611c31565b90955092506117378483611b53565b935050506116be565b6069839055606d8190556040518381527f303bf7e1a8d4362d2202f23153c23a12d65e9f576ba71086b9cb10bef2297a049060200160405180910390a15050915091565b6040516001600160a01b03808516602483015283166044820152606481018290526111309085906323b872dd60e01b90608401611536565b6001600160a01b0382166117e55760405163ec442f0560e01b81525f600482015260240161086e565b6108ae5f83835b5f5160206124465f395f51905f526001600160a01b0384166118265781816002015f82825461181b9190612287565b909155506118969050565b6001600160a01b0384165f90815260208290526040902054828110156118785760405163391434e360e21b81526001600160a01b0386166004820152602481018290526044810184905260640161086e565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b0383166118b45760028101805483900390556118d2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161191791815260200190565b60405180910390a350505050565b60325460ff166108e75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161086e565b61197782611c91565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156119bb57610eb38282611cf4565b6108ae611d66565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e757604051631afcd79f60e31b815260040160405180910390fd5b611a146119c3565b5f5160206124465f395f51905f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03611a4d8482612308565b50600481016111308382612308565b610e716119c3565b6110cd6119c3565b611a746119c3565b6032805460ff19169055565b5f611ad4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d859092919063ffffffff16565b905080515f1480611af4575080806020019051810190611af491906123c3565b610eb35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161086e565b5f6108d06116af83856123e2565b5f8282600160ff1b821480611b795750600160ff1b81145b15611b975760405163a6070c2560e01b815260040160405180910390fd5b5f5f5f8412611ba65783611baa565b835f035b91505f8312611bb95782611bbd565b825f035b90505f611bca8383611d9b565b90506001600160ff1b03811115611bfe5760405163120b5b4360e01b8152600481018990526024810188905260440161086e565b5f1985851813611c1681611c1257825f0390565b8290565b9998505050505050505050565b5f6108d06116af8385612408565b5f80611c3d8386611c23565b9050611c54606b5482611e4d90919063ffffffff16565b15611c8557606a54611c67908590611b61565b9150611c7e606b5482611b5390919063ffffffff16565b9050611c89565b8391505b935093915050565b806001600160a01b03163b5f03611cc657604051634c9c8ce360e01b81526001600160a01b038216600482015260240161086e565b5f5160206124665f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051611d10919061242f565b5f60405180830381855af49150503d805f8114611d48576040519150601f19603f3d011682016040523d82523d5f602084013e611d4d565b606091505b5091509150611d5d858383611e52565b95945050505050565b34156108e75760405163b398979f60e01b815260040160405180910390fd5b6060611d9384845f85611eae565b949350505050565b5f80805f19848609848602925082811083820303915050805f03611dcc5750670de0b6b3a764000090049050610827565b670de0b6b3a76400008110611dfe57604051635173648d60e01b8152600481018690526024810185905260440161086e565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b131590565b606082611e6757611e6282611f85565b6108d0565b8151158015611e7e57506001600160a01b0384163b155b15611ea757604051639996b31560e01b81526001600160a01b038516600482015260240161086e565b50806108d0565b606082471015611f0f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161086e565b5f5f866001600160a01b03168587604051611f2a919061242f565b5f6040518083038185875af1925050503d805f8114611f64576040519150601f19603f3d011682016040523d82523d5f602084013e611f69565b606091505b5091509150611f7a87838387611fae565b979650505050505050565b805115611f955780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6060831561201c5782515f03612015576001600160a01b0385163b6120155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161086e565b5081611d93565b611d9383838151156120315781518083602001fd5b8060405162461bcd60e51b815260040161086e91905b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114612092575f5ffd5b919050565b5f5f604083850312156120a8575f5ffd5b6120b18361207c565b946020939093013593505050565b5f5f604083850312156120d0575f5ffd5b50508035926020909101359150565b5f5f5f606084860312156120f1575f5ffd5b6120fa8461207c565b92506121086020850161207c565b929592945050506040919091013590565b5f60208284031215612129575f5ffd5b6108d08261207c565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215612157575f5ffd5b6121608361207c565b9150602083013567ffffffffffffffff81111561217b575f5ffd5b8301601f8101851361218b575f5ffd5b803567ffffffffffffffff8111156121a5576121a5612132565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156121d4576121d4612132565b6040528181528282016020018710156121eb575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f6040838503121561221b575f5ffd5b6122248361207c565b91506122326020840161207c565b90509250929050565b600181811c9082168061224f57607f821691505b60208210810361226d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561082757610827612273565b8181038181111561082757610827612273565b5f602082840312156122bd575f5ffd5b5051919050565b601f821115610eb357805f5260205f20601f840160051c810160208510156122e95750805b601f840160051c820191505b81811015610b5f575f81556001016122f5565b815167ffffffffffffffff81111561232257612322612132565b61233681612330845461223b565b846122c4565b6020601f821160018114612368575f83156123515750848201515b5f19600385901b1c1916600184901b178455610b5f565b5f84815260208120601f198516915b828110156123975787850151825560209485019460019092019101612377565b50848210156123b457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082840312156123d3575f5ffd5b815180151581146108d0575f5ffd5b8181035f83128015838313168383128216171561240157612401612273565b5092915050565b8082018281125f83128015821682158216171561242757612427612273565b505092915050565b5f82518060208501845e5f92019182525091905056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220d12b040e7bff61462bd9ed204c274f238ea111690e5db1b85ee6ca2b163fdf5064736f6c634300081b0033