Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 17671844 | 482 days ago | IN | 0 ETH | 0.00537183 | ||||
Withdraw | 17671828 | 482 days ago | IN | 0 ETH | 0.00555787 | ||||
Withdraw | 17671809 | 482 days ago | IN | 0 ETH | 0.00543978 | ||||
Withdraw | 17566191 | 496 days ago | IN | 0 ETH | 0.0021692 | ||||
Deposit | 17566097 | 496 days ago | IN | 0 ETH | 0.00309782 | ||||
0x61014060 | 17249162 | 541 days ago | IN | 0 ETH | 0.1071096 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SavingsDai
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-or-later /// SavingsDai.sol -- A tokenized representation DAI in the DSR (pot) // Copyright (C) 2017, 2018, 2019 dbrock, rain, mrchico // Copyright (C) 2021-2022 Dai Foundation // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity ^0.8.17; interface IERC1271 { function isValidSignature( bytes32, bytes memory ) external view returns (bytes4); } interface VatLike { function hope(address) external; } interface PotLike { function chi() external view returns (uint256); function rho() external view returns (uint256); function dsr() external view returns (uint256); function drip() external returns (uint256); function join(uint256) external; function exit(uint256) external; } interface DaiJoinLike { function vat() external view returns (address); function dai() external view returns (address); function join(address, uint256) external; function exit(address, uint256) external; } interface DaiLike { function transferFrom(address, address, uint256) external returns (bool); function approve(address, uint256) external returns (bool); } contract SavingsDai { // --- ERC20 Data --- string public constant name = "Savings Dai"; string public constant symbol = "sDAI"; string public constant version = "1"; uint8 public constant decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; mapping (address => uint256) public nonces; // --- Data --- VatLike public immutable vat; DaiJoinLike public immutable daiJoin; DaiLike public immutable dai; PotLike public immutable pot; // --- Events --- event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares); event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares); event Referral(uint16 indexed referral, address indexed owner, uint256 assets, uint256 shares); // --- EIP712 niceties --- uint256 public immutable deploymentChainId; bytes32 private immutable _DOMAIN_SEPARATOR; bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); uint256 private constant RAY = 10 ** 27; constructor(address _daiJoin, address _pot) { daiJoin = DaiJoinLike(_daiJoin); vat = VatLike(daiJoin.vat()); dai = DaiLike(daiJoin.dai()); pot = PotLike(_pot); deploymentChainId = block.chainid; _DOMAIN_SEPARATOR = _calculateDomainSeparator(block.chainid); vat.hope(address(daiJoin)); vat.hope(address(pot)); dai.approve(address(daiJoin), type(uint256).max); } function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256(bytes(version)), chainId, address(this) ) ); } function DOMAIN_SEPARATOR() external view returns (bytes32) { return block.chainid == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid); } function _rpow(uint256 x, uint256 n) internal pure returns (uint256 z) { assembly { switch x case 0 {switch n case 0 {z := RAY} default {z := 0}} default { switch mod(n, 2) case 0 { z := RAY } default { z := x } let half := div(RAY, 2) // for rounding. for { n := div(n, 2) } n { n := div(n,2) } { let xx := mul(x, x) if iszero(eq(div(xx, x), x)) { revert(0,0) } let xxRound := add(xx, half) if lt(xxRound, xx) { revert(0,0) } x := div(xxRound, RAY) if mod(n,2) { let zx := mul(z, x) if and(iszero(iszero(x)), iszero(eq(div(zx, x), z))) { revert(0,0) } let zxRound := add(zx, half) if lt(zxRound, zx) { revert(0,0) } z := div(zxRound, RAY) } } } } } function _divup(uint256 x, uint256 y) internal pure returns (uint256 z) { unchecked { z = x != 0 ? ((x - 1) / y) + 1 : 0; } } // --- ERC20 Mutations --- function transfer(address to, uint256 value) external returns (bool) { require(to != address(0) && to != address(this), "SavingsDai/invalid-address"); uint256 balance = balanceOf[msg.sender]; require(balance >= value, "SavingsDai/insufficient-balance"); unchecked { balanceOf[msg.sender] = balance - value; balanceOf[to] += value; } emit Transfer(msg.sender, to, value); return true; } function transferFrom(address from, address to, uint256 value) external returns (bool) { require(to != address(0) && to != address(this), "SavingsDai/invalid-address"); uint256 balance = balanceOf[from]; require(balance >= value, "SavingsDai/insufficient-balance"); if (from != msg.sender) { uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) { require(allowed >= value, "SavingsDai/insufficient-allowance"); unchecked { allowance[from][msg.sender] = allowed - value; } } } unchecked { balanceOf[from] = balance - value; balanceOf[to] += value; } emit Transfer(from, to, value); return true; } function approve(address spender, uint256 value) external returns (bool) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { uint256 newValue = allowance[msg.sender][spender] + addedValue; allowance[msg.sender][spender] = newValue; emit Approval(msg.sender, spender, newValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 allowed = allowance[msg.sender][spender]; require(allowed >= subtractedValue, "SavingsDai/insufficient-allowance"); unchecked{ allowed = allowed - subtractedValue; } allowance[msg.sender][spender] = allowed; emit Approval(msg.sender, spender, allowed); return true; } // --- Mint/Burn Internal --- function _mint(uint256 assets, uint256 shares, address receiver) internal { require(receiver != address(0) && receiver != address(this), "SavingsDai/invalid-address"); dai.transferFrom(msg.sender, address(this), assets); daiJoin.join(address(this), assets); pot.join(shares); // note: we don't need an overflow check here b/c shares totalSupply will always be <= dai totalSupply unchecked { balanceOf[receiver] = balanceOf[receiver] + shares; totalSupply = totalSupply + shares; } emit Deposit(msg.sender, receiver, assets, shares); } function _burn(uint256 assets, uint256 shares, address receiver, address owner) internal { uint256 balance = balanceOf[owner]; require(balance >= shares, "SavingsDai/insufficient-balance"); if (owner != msg.sender) { uint256 allowed = allowance[owner][msg.sender]; if (allowed != type(uint256).max) { require(allowed >= shares, "SavingsDai/insufficient-allowance"); unchecked { allowance[owner][msg.sender] = allowed - shares; } } } unchecked { balanceOf[owner] = balance - shares; // note: we don't need overflow checks b/c require(balance >= value) and balance <= totalSupply totalSupply = totalSupply - shares; } pot.exit(shares); daiJoin.exit(receiver, assets); emit Withdraw(msg.sender, receiver, owner, assets, shares); } // --- ERC-4626 --- function asset() external view returns (address) { return address(dai); } function totalAssets() external view returns (uint256) { return convertToAssets(totalSupply); } function convertToShares(uint256 assets) public view returns (uint256) { uint256 rho = pot.rho(); uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi(); return assets * RAY / chi; } function convertToAssets(uint256 shares) public view returns (uint256) { uint256 rho = pot.rho(); uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi(); return shares * chi / RAY; } function maxDeposit(address) external pure returns (uint256) { return type(uint256).max; } function previewDeposit(uint256 assets) external view returns (uint256) { return convertToShares(assets); } function deposit(uint256 assets, address receiver) public returns (uint256 shares) { uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi(); shares = assets * RAY / chi; _mint(assets, shares, receiver); } function deposit(uint256 assets, address receiver, uint16 referral) external returns (uint256 shares) { shares = deposit(assets, receiver); emit Referral(referral, receiver, assets, shares); } function maxMint(address) external pure returns (uint256) { return type(uint256).max; } function previewMint(uint256 shares) external view returns (uint256) { uint256 rho = pot.rho(); uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi(); return _divup(shares * chi, RAY); } function mint(uint256 shares, address receiver) public returns (uint256 assets) { uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi(); assets = _divup(shares * chi, RAY); _mint(assets, shares, receiver); } function mint(uint256 shares, address receiver, uint16 referral) external returns (uint256 assets) { assets = mint(shares, receiver); emit Referral(referral, receiver, assets, shares); } function maxWithdraw(address owner) external view returns (uint256) { return convertToAssets(balanceOf[owner]); } function previewWithdraw(uint256 assets) external view returns (uint256) { uint256 rho = pot.rho(); uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi(); return _divup(assets * RAY, chi); } function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares) { uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi(); shares = _divup(assets * RAY, chi); _burn(assets, shares, receiver, owner); } function maxRedeem(address owner) external view returns (uint256) { return balanceOf[owner]; } function previewRedeem(uint256 shares) external view returns (uint256) { return convertToAssets(shares); } function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets) { uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi(); assets = shares * chi / RAY; _burn(assets, shares, receiver, owner); } // --- Approve by signature --- function _isValidSignature( address signer, bytes32 digest, bytes memory signature ) internal view returns (bool) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } if (signer == ecrecover(digest, v, r, s)) { return true; } } (bool success, bytes memory result) = signer.staticcall( abi.encodeWithSelector(IERC1271.isValidSignature.selector, digest, signature) ); return (success && result.length == 32 && abi.decode(result, (bytes4)) == IERC1271.isValidSignature.selector); } function permit( address owner, address spender, uint256 value, uint256 deadline, bytes memory signature ) public { require(block.timestamp <= deadline, "SavingsDai/permit-expired"); require(owner != address(0), "SavingsDai/invalid-owner"); uint256 nonce; unchecked { nonce = nonces[owner]++; } bytes32 digest = keccak256(abi.encodePacked( "\x19\x01", block.chainid == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid), keccak256(abi.encode( PERMIT_TYPEHASH, owner, spender, value, nonce, deadline )) )); require(_isValidSignature(owner, digest, signature), "SavingsDai/invalid-permit"); allowance[owner][spender] = value; emit Approval(owner, spender, value); } function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external { permit(owner, spender, value, deadline, abi.encodePacked(r, s, v)); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_daiJoin","type":"address"},{"internalType":"address","name":"_pot","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"referral","type":"uint16"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Referral","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":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dai","outputs":[{"internalType":"contract DaiLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daiJoin","outputs":[{"internalType":"contract DaiJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint16","name":"referral","type":"uint16"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint16","name":"referral","type":"uint16"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pot","outputs":[{"internalType":"contract PotLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101406040523480156200001257600080fd5b506040516200314738038062003147833981016040819052620000359162000386565b6001600160a01b03821660a0819052604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa15801562000080573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a69190620003be565b6001600160a01b03166080816001600160a01b03168152505060a0516001600160a01b031663f4b9fa756040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000100573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001269190620003be565b6001600160a01b0390811660c052811660e052466101008190526200021990604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6101205260805160a0516040516328ec8bf160e21b81526001600160a01b03918216600482015291169063a3b22fc490602401600060405180830381600087803b1580156200026757600080fd5b505af11580156200027c573d6000803e3d6000fd5b505060805160e0516040516328ec8bf160e21b81526001600160a01b0391821660048201529116925063a3b22fc49150602401600060405180830381600087803b158015620002ca57600080fd5b505af1158015620002df573d6000803e3d6000fd5b505060c05160a05160405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af11580156200033a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003609190620003e3565b50505062000407565b80516001600160a01b03811681146200038157600080fd5b919050565b600080604083850312156200039a57600080fd5b620003a58362000369565b9150620003b56020840162000369565b90509250929050565b600060208284031215620003d157600080fd5b620003dc8262000369565b9392505050565b600060208284031215620003f657600080fd5b81518015158114620003dc57600080fd5b60805160a05160c05160e0516101005161012051612bed6200055a60003960008181610da3015261133c01526000818161059601528181610d7201526113080152600081816103f20152818161068301528181610710015281816107a30152818161082801528181610955015281816109e201528181610a7501528181610afa01528181610e5c01528181610ee401528181610f6b01528181611028015281816110b00152818161113701528181611617015281816116a401528181611737015281816117bc01528181611840015281816118c80152818161194f01528181611a0601528181611a8e01528181611b1501528181611bcc01528181611c5901528181611cec01528181611d71015281816121d901526125310152600081816103a10152818161064a01526120cf01526000818161055c0152818161216101526125b3015260006103650152612bed6000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80637ecebe001161013b578063c11645bc116100b8578063d505accf1161007c578063d505accf146105cb578063d905777e146105de578063dd62ed3e14610607578063ef8b30f714610632578063f4b9fa751461064557600080fd5b8063c11645bc14610557578063c63d75b6146103d8578063c6e6f5921461057e578063cd0d009614610591578063ce96cb77146105b857600080fd5b8063a457c2d7116100ff578063a457c2d7146104f8578063a9059cbb1461050b578063b3d7f6b91461051e578063b460af9414610531578063ba0876521461054457600080fd5b80637ecebe001461047a57806394bf804d1461049a57806395d89b41146104ad5780639b8d6d38146104d05780639fd5a6cf146104e357600080fd5b80633644e515116101c95780634ba2363a1161018d5780634ba2363a146103ed5780634cdad5061461041457806354fd4d50146104275780636e553f651461044757806370a082311461045a57600080fd5b80633644e5151461035857806336569e771461036057806338d52e0f1461039f57806339509351146103c5578063402d267d146103d857600080fd5b806318160ddd1161021057806318160ddd146102e8578063216740a0146102f157806323b872dd1461030457806330adf81f14610317578063313ce5671461033e57600080fd5b806301e1d1141461024d57806306fdde031461026857806307a2d13a1461029f578063095ea7b3146102b25780630a28a477146102d5575b600080fd5b61025561066c565b6040519081526020015b60405180910390f35b6102926040518060400160405280600b81526020016a536176696e67732044616960a81b81525081565b60405161025f91906126b2565b6102556102ad3660046126c5565b61067e565b6102c56102c03660046126fa565b6108f5565b604051901515815260200161025f565b6102556102e33660046126c5565b610950565b61025560005481565b6102556102ff366004612724565b610b8a565b6102c561031236600461276b565b610bf0565b6102557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610346601281565b60405160ff909116815260200161025f565b610255610d6e565b6103877f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025f565b7f0000000000000000000000000000000000000000000000000000000000000000610387565b6102c56103d33660046126fa565b610dc5565b6102556103e63660046127a7565b5060001990565b6103877f000000000000000000000000000000000000000000000000000000000000000081565b6102556104223660046126c5565b610e4c565b610292604051806040016040528060018152602001603160f81b81525081565b6102556104553660046127c2565b610e57565b6102556104683660046127a7565b60016020526000908152604090205481565b6102556104883660046127a7565b60036020526000908152604090205481565b6102556104a83660046127c2565b611023565b610292604051806040016040528060048152602001637344414960e01b81525081565b6102556104de366004612724565b6111e6565b6104f66104f1366004612804565b61123d565b005b6102c56105063660046126fa565b6114b7565b6102c56105193660046126fa565b611546565b61025561052c3660046126c5565b611612565b61025561053f3660046128ea565b61183b565b6102556105523660046128ea565b611a01565b6103877f000000000000000000000000000000000000000000000000000000000000000081565b61025561058c3660046126c5565b611bc7565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6102556105c63660046127a7565b611df9565b6104f66105d9366004612926565b611e1b565b6102556105ec3660046127a7565b6001600160a01b031660009081526001602052604090205490565b610255610615366004612999565b600260209081526000928352604080842090915290825290205481565b6102556106403660046126c5565b611e72565b6103877f000000000000000000000000000000000000000000000000000000000000000081565b600061067960005461067e565b905090565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070391906129c3565b90506000814211610795577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079091906129c3565b6108cb565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082391906129c3565b6108b77f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a891906129c3565b6108b286426129f2565b611e7d565b6108c19190612a05565b6108cb9190612a32565b9050676765c793fa10079d601b1b6108e38286612a05565b6108ed9190612a32565b949350505050565b3360008181526002602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612b988339815191529061093e9086815260200190565b60405180910390a35060015b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d591906129c3565b90506000814211610a67577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6291906129c3565b610b6a565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af591906129c3565b610b567f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b610b609190612a05565b610b6a9190612a32565b90506108ed610b84676765c793fa10079d601b1b86612a05565b82611f6e565b6000610b968484611023565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368387604051610be1929190918252602082015260400190565b60405180910390a39392505050565b60006001600160a01b03831615801590610c1357506001600160a01b0383163014155b610c385760405162461bcd60e51b8152600401610c2f90612a54565b60405180910390fd5b6001600160a01b03841660009081526001602052604090205482811015610c715760405162461bcd60e51b8152600401610c2f90612a8b565b6001600160a01b0385163314610cf9576001600160a01b03851660009081526002602090815260408083203384529091529020546000198114610cf75783811015610cce5760405162461bcd60e51b8152600401610c2f90612ac2565b6001600160a01b0386166000908152600260209081526040808320338452909152902084820390555b505b6001600160a01b0380861660008181526001602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d599087815260200190565b60405180910390a360019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610da05761067946611f9c565b507f000000000000000000000000000000000000000000000000000000000000000090565b3360009081526002602090815260408083206001600160a01b03861684529091528120548190610df6908490612b03565b3360008181526002602090815260408083206001600160a01b038a1680855290835292819020859055518481529394509092600080516020612b9883398151915291015b60405180910390a35060019392505050565b600061094a8261067e565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906129c3565b4211610f69577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6491906129c3565b610fed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fed91906129c3565b905080611005676765c793fa10079d601b1b86612a05565b61100f9190612a32565b915061101c848385612070565b5092915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a891906129c3565b4211611135577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113091906129c3565b6111b9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b991906129c3565b90506111d96111c88286612a05565b676765c793fa10079d601b1b611f6e565b915061101c828585612070565b60006111f28484610e57565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368684604051610be1929190918252602082015260400190565b8142111561128d5760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f7065726d69742d65787069726564000000000000006044820152606401610c2f565b6001600160a01b0385166112e35760405162461bcd60e51b815260206004820152601860248201527f536176696e67734461692f696e76616c69642d6f776e657200000000000000006044820152606401610c2f565b6001600160a01b038516600090815260036020526040812080546001810190915590467f00000000000000000000000000000000000000000000000000000000000000001461133a5761133546611f9c565b61135c565b7f00000000000000000000000000000000000000000000000000000000000000005b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e001604051602081830303815290604052805190602001206040516020016113f592919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506114188782856122a4565b6114645760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f696e76616c69642d7065726d6974000000000000006044820152606401610c2f565b6001600160a01b038781166000818152600260209081526040808320948b16808452948252918290208990559051888152600080516020612b98833981519152910160405180910390a350505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156114fb5760405162461bcd60e51b8152600401610c2f90612ac2565b3360008181526002602090815260408083206001600160a01b03891680855290835292819020948790039485905551848152919291600080516020612b988339815191529101610e3a565b60006001600160a01b0383161580159061156957506001600160a01b0383163014155b6115855760405162461bcd60e51b8152600401610c2f90612a54565b33600090815260016020526040902054828110156115b55760405162461bcd60e51b8152600401610c2f90612a8b565b33600081815260016020908152604080832087860390556001600160a01b03881680845292819020805488019055518681529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610e3a565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169791906129c3565b90506000814211611729577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172491906129c3565b61182c565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b791906129c3565b6118187f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b6118229190612a05565b61182c9190612a32565b90506108ed6111c88286612a05565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c091906129c3565b421161194d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611924573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194891906129c3565b6119d1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d191906129c3565b90506119eb610b84676765c793fa10079d601b1b87612a05565b91506119f985838686612435565b509392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8691906129c3565b4211611b13577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e91906129c3565b611b97565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9791906129c3565b9050676765c793fa10079d601b1b611baf8287612a05565b611bb99190612a32565b91506119f982868686612435565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4c91906129c3565b90506000814211611cde577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd991906129c3565b611de1565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6c91906129c3565b611dcd7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b611dd79190612a05565b611de19190612a32565b9050806108e3676765c793fa10079d601b1b86612a05565b6001600160a01b03811660009081526001602052604081205461094a9061067e565b611e6987878787868689604051602001611e5593929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b60405160208183030381529060405261123d565b50505050505050565b600061094a82611bc7565b6000828015611f4757600183168015611e9857849250611ea7565b676765c793fa10079d601b1b92505b506002909204916b019d971e4fe8401e740000005b8315611f41578485028586820414611ed357600080fd5b81810181811015611ee357600080fd5b676765c793fa10079d601b1b90049550506001841615611f36578483028386820414158615151615611f1457600080fd5b81810181811015611f2457600080fd5b676765c793fa10079d601b1b90049350505b600284049350611ebc565b5061101c565b828015611f575760009250611f66565b676765c793fa10079d601b1b92505b505092915050565b600082600003611f7f576000610d67565b816001840381611f9157611f91612a1c565b046001019392505050565b604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b0381161580159061209157506001600160a01b0381163014155b6120ad5760405162461bcd60e51b8152600401610c2f90612a54565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121449190612b16565b50604051633b4da69f60e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633b4da69f90604401600060405180830381600087803b1580156121ad57600080fd5b505af11580156121c1573d6000803e3d6000fd5b505060405163049878f360e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063049878f39150602401600060405180830381600087803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b505050506001600160a01b038116600081815260016020908152604080832080548701905582548601909255815186815290810185905233917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050565b6000815160410361234157602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa15801561230f573d6000803e3d6000fd5b505050602060405103516001600160a01b0316876001600160a01b03160361233d5760019350505050610d67565b5050505b600080856001600160a01b0316631626ba7e60e01b8686604051602401612369929190612b38565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123a79190612b51565b600060405180830381855afa9150503d80600081146123e2576040519150601f19603f3d011682016040523d82523d6000602084013e6123e7565b606091505b50915091508180156123fa575080516020145b801561242b57508051630b135d3f60e11b9061241f9083016020908101908401612b6d565b6001600160e01b031916145b9695505050505050565b6001600160a01b0381166000908152600160205260409020548381101561246e5760405162461bcd60e51b8152600401610c2f90612a8b565b6001600160a01b03821633146124f6576001600160a01b038216600090815260026020908152604080832033845290915290205460001981146124f457848110156124cb5760405162461bcd60e51b8152600401610c2f90612ac2565b6001600160a01b0383166000908152600260209081526040808320338452909152902085820390555b505b6001600160a01b038281166000908152600160205260408082208785039055815487900390915551637f8661a160e01b8152600481018690527f000000000000000000000000000000000000000000000000000000000000000090911690637f8661a190602401600060405180830381600087803b15801561257757600080fd5b505af115801561258b573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b038681166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016925063ef693bed9150604401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b505060408051888152602081018890526001600160a01b0380871694508716925033917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b60005b8381101561267d578181015183820152602001612665565b50506000910152565b6000815180845261269e816020860160208601612662565b601f01601f19169290920160200192915050565b602081526000610d676020830184612686565b6000602082840312156126d757600080fd5b5035919050565b80356001600160a01b03811681146126f557600080fd5b919050565b6000806040838503121561270d57600080fd5b612716836126de565b946020939093013593505050565b60008060006060848603121561273957600080fd5b83359250612749602085016126de565b9150604084013561ffff8116811461276057600080fd5b809150509250925092565b60008060006060848603121561278057600080fd5b612789846126de565b9250612797602085016126de565b9150604084013590509250925092565b6000602082840312156127b957600080fd5b610d67826126de565b600080604083850312156127d557600080fd5b823591506127e5602084016126de565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a0868803121561281c57600080fd5b612825866126de565b9450612833602087016126de565b93506040860135925060608601359150608086013567ffffffffffffffff8082111561285e57600080fd5b818801915088601f83011261287257600080fd5b813581811115612884576128846127ee565b604051601f8201601f19908116603f011681019083821181831017156128ac576128ac6127ee565b816040528281528b60208487010111156128c557600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806000606084860312156128ff57600080fd5b8335925061290f602085016126de565b915061291d604085016126de565b90509250925092565b600080600080600080600060e0888a03121561294157600080fd5b61294a886126de565b9650612958602089016126de565b95506040880135945060608801359350608088013560ff8116811461297c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156129ac57600080fd5b6129b5836126de565b91506127e5602084016126de565b6000602082840312156129d557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094a5761094a6129dc565b808202811582820484141761094a5761094a6129dc565b634e487b7160e01b600052601260045260246000fd5b600082612a4f57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601a908201527f536176696e67734461692f696e76616c69642d61646472657373000000000000604082015260600190565b6020808252601f908201527f536176696e67734461692f696e73756666696369656e742d62616c616e636500604082015260600190565b60208082526021908201527f536176696e67734461692f696e73756666696369656e742d616c6c6f77616e636040820152606560f81b606082015260800190565b8082018082111561094a5761094a6129dc565b600060208284031215612b2857600080fd5b81518015158114610d6757600080fd5b8281526040602082015260006108ed6040830184612686565b60008251612b63818460208701612662565b9190910192915050565b600060208284031215612b7f57600080fd5b81516001600160e01b031981168114610d6757600080fdfe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122014b93533424145cd0724c1046a0420f5342a34f56b9f5f8a56d80d63e83f075164736f6c634300081300330000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c80637ecebe001161013b578063c11645bc116100b8578063d505accf1161007c578063d505accf146105cb578063d905777e146105de578063dd62ed3e14610607578063ef8b30f714610632578063f4b9fa751461064557600080fd5b8063c11645bc14610557578063c63d75b6146103d8578063c6e6f5921461057e578063cd0d009614610591578063ce96cb77146105b857600080fd5b8063a457c2d7116100ff578063a457c2d7146104f8578063a9059cbb1461050b578063b3d7f6b91461051e578063b460af9414610531578063ba0876521461054457600080fd5b80637ecebe001461047a57806394bf804d1461049a57806395d89b41146104ad5780639b8d6d38146104d05780639fd5a6cf146104e357600080fd5b80633644e515116101c95780634ba2363a1161018d5780634ba2363a146103ed5780634cdad5061461041457806354fd4d50146104275780636e553f651461044757806370a082311461045a57600080fd5b80633644e5151461035857806336569e771461036057806338d52e0f1461039f57806339509351146103c5578063402d267d146103d857600080fd5b806318160ddd1161021057806318160ddd146102e8578063216740a0146102f157806323b872dd1461030457806330adf81f14610317578063313ce5671461033e57600080fd5b806301e1d1141461024d57806306fdde031461026857806307a2d13a1461029f578063095ea7b3146102b25780630a28a477146102d5575b600080fd5b61025561066c565b6040519081526020015b60405180910390f35b6102926040518060400160405280600b81526020016a536176696e67732044616960a81b81525081565b60405161025f91906126b2565b6102556102ad3660046126c5565b61067e565b6102c56102c03660046126fa565b6108f5565b604051901515815260200161025f565b6102556102e33660046126c5565b610950565b61025560005481565b6102556102ff366004612724565b610b8a565b6102c561031236600461276b565b610bf0565b6102557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610346601281565b60405160ff909116815260200161025f565b610255610d6e565b6103877f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b6040516001600160a01b03909116815260200161025f565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f610387565b6102c56103d33660046126fa565b610dc5565b6102556103e63660046127a7565b5060001990565b6103877f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf781565b6102556104223660046126c5565b610e4c565b610292604051806040016040528060018152602001603160f81b81525081565b6102556104553660046127c2565b610e57565b6102556104683660046127a7565b60016020526000908152604090205481565b6102556104883660046127a7565b60036020526000908152604090205481565b6102556104a83660046127c2565b611023565b610292604051806040016040528060048152602001637344414960e01b81525081565b6102556104de366004612724565b6111e6565b6104f66104f1366004612804565b61123d565b005b6102c56105063660046126fa565b6114b7565b6102c56105193660046126fa565b611546565b61025561052c3660046126c5565b611612565b61025561053f3660046128ea565b61183b565b6102556105523660046128ea565b611a01565b6103877f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2881565b61025561058c3660046126c5565b611bc7565b6102557f000000000000000000000000000000000000000000000000000000000000000181565b6102556105c63660046127a7565b611df9565b6104f66105d9366004612926565b611e1b565b6102556105ec3660046127a7565b6001600160a01b031660009081526001602052604090205490565b610255610615366004612999565b600260209081526000928352604080842090915290825290205481565b6102556106403660046126c5565b611e72565b6103877f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b600061067960005461067e565b905090565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070391906129c3565b90506000814211610795577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079091906129c3565b6108cb565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082391906129c3565b6108b77f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a891906129c3565b6108b286426129f2565b611e7d565b6108c19190612a05565b6108cb9190612a32565b9050676765c793fa10079d601b1b6108e38286612a05565b6108ed9190612a32565b949350505050565b3360008181526002602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612b988339815191529061093e9086815260200190565b60405180910390a35060015b92915050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d591906129c3565b90506000814211610a67577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6291906129c3565b610b6a565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af591906129c3565b610b567f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b610b609190612a05565b610b6a9190612a32565b90506108ed610b84676765c793fa10079d601b1b86612a05565b82611f6e565b6000610b968484611023565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368387604051610be1929190918252602082015260400190565b60405180910390a39392505050565b60006001600160a01b03831615801590610c1357506001600160a01b0383163014155b610c385760405162461bcd60e51b8152600401610c2f90612a54565b60405180910390fd5b6001600160a01b03841660009081526001602052604090205482811015610c715760405162461bcd60e51b8152600401610c2f90612a8b565b6001600160a01b0385163314610cf9576001600160a01b03851660009081526002602090815260408083203384529091529020546000198114610cf75783811015610cce5760405162461bcd60e51b8152600401610c2f90612ac2565b6001600160a01b0386166000908152600260209081526040808320338452909152902084820390555b505b6001600160a01b0380861660008181526001602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d599087815260200190565b60405180910390a360019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610da05761067946611f9c565b507f29c3e0eba3720c4cd591a90235441325869935ffeb8c5653d9c437d5917c404090565b3360009081526002602090815260408083206001600160a01b03861684529091528120548190610df6908490612b03565b3360008181526002602090815260408083206001600160a01b038a1680855290835292819020859055518481529394509092600080516020612b9883398151915291015b60405180910390a35060019392505050565b600061094a8261067e565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906129c3565b4211610f69577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6491906129c3565b610fed565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fed91906129c3565b905080611005676765c793fa10079d601b1b86612a05565b61100f9190612a32565b915061101c848385612070565b5092915050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a891906129c3565b4211611135577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113091906129c3565b6111b9565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b991906129c3565b90506111d96111c88286612a05565b676765c793fa10079d601b1b611f6e565b915061101c828585612070565b60006111f28484610e57565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368684604051610be1929190918252602082015260400190565b8142111561128d5760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f7065726d69742d65787069726564000000000000006044820152606401610c2f565b6001600160a01b0385166112e35760405162461bcd60e51b815260206004820152601860248201527f536176696e67734461692f696e76616c69642d6f776e657200000000000000006044820152606401610c2f565b6001600160a01b038516600090815260036020526040812080546001810190915590467f00000000000000000000000000000000000000000000000000000000000000011461133a5761133546611f9c565b61135c565b7f29c3e0eba3720c4cd591a90235441325869935ffeb8c5653d9c437d5917c40405b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e001604051602081830303815290604052805190602001206040516020016113f592919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506114188782856122a4565b6114645760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f696e76616c69642d7065726d6974000000000000006044820152606401610c2f565b6001600160a01b038781166000818152600260209081526040808320948b16808452948252918290208990559051888152600080516020612b98833981519152910160405180910390a350505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156114fb5760405162461bcd60e51b8152600401610c2f90612ac2565b3360008181526002602090815260408083206001600160a01b03891680855290835292819020948790039485905551848152919291600080516020612b988339815191529101610e3a565b60006001600160a01b0383161580159061156957506001600160a01b0383163014155b6115855760405162461bcd60e51b8152600401610c2f90612a54565b33600090815260016020526040902054828110156115b55760405162461bcd60e51b8152600401610c2f90612a8b565b33600081815260016020908152604080832087860390556001600160a01b03881680845292819020805488019055518681529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610e3a565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169791906129c3565b90506000814211611729577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172491906129c3565b61182c565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b791906129c3565b6118187f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b6118229190612a05565b61182c9190612a32565b90506108ed6111c88286612a05565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c091906129c3565b421161194d577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611924573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194891906129c3565b6119d1565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d191906129c3565b90506119eb610b84676765c793fa10079d601b1b87612a05565b91506119f985838686612435565b509392505050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8691906129c3565b4211611b13577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e91906129c3565b611b97565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9791906129c3565b9050676765c793fa10079d601b1b611baf8287612a05565b611bb99190612a32565b91506119f982868686612435565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4c91906129c3565b90506000814211611cde577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd991906129c3565b611de1565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6c91906129c3565b611dcd7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b611dd79190612a05565b611de19190612a32565b9050806108e3676765c793fa10079d601b1b86612a05565b6001600160a01b03811660009081526001602052604081205461094a9061067e565b611e6987878787868689604051602001611e5593929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b60405160208183030381529060405261123d565b50505050505050565b600061094a82611bc7565b6000828015611f4757600183168015611e9857849250611ea7565b676765c793fa10079d601b1b92505b506002909204916b019d971e4fe8401e740000005b8315611f41578485028586820414611ed357600080fd5b81810181811015611ee357600080fd5b676765c793fa10079d601b1b90049550506001841615611f36578483028386820414158615151615611f1457600080fd5b81810181811015611f2457600080fd5b676765c793fa10079d601b1b90049350505b600284049350611ebc565b5061101c565b828015611f575760009250611f66565b676765c793fa10079d601b1b92505b505092915050565b600082600003611f7f576000610d67565b816001840381611f9157611f91612a1c565b046001019392505050565b604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b0381161580159061209157506001600160a01b0381163014155b6120ad5760405162461bcd60e51b8152600401610c2f90612a54565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121449190612b16565b50604051633b4da69f60e01b8152306004820152602481018490527f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a286001600160a01b031690633b4da69f90604401600060405180830381600087803b1580156121ad57600080fd5b505af11580156121c1573d6000803e3d6000fd5b505060405163049878f360e01b8152600481018590527f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316925063049878f39150602401600060405180830381600087803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b505050506001600160a01b038116600081815260016020908152604080832080548701905582548601909255815186815290810185905233917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050565b6000815160410361234157602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa15801561230f573d6000803e3d6000fd5b505050602060405103516001600160a01b0316876001600160a01b03160361233d5760019350505050610d67565b5050505b600080856001600160a01b0316631626ba7e60e01b8686604051602401612369929190612b38565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123a79190612b51565b600060405180830381855afa9150503d80600081146123e2576040519150601f19603f3d011682016040523d82523d6000602084013e6123e7565b606091505b50915091508180156123fa575080516020145b801561242b57508051630b135d3f60e11b9061241f9083016020908101908401612b6d565b6001600160e01b031916145b9695505050505050565b6001600160a01b0381166000908152600160205260409020548381101561246e5760405162461bcd60e51b8152600401610c2f90612a8b565b6001600160a01b03821633146124f6576001600160a01b038216600090815260026020908152604080832033845290915290205460001981146124f457848110156124cb5760405162461bcd60e51b8152600401610c2f90612ac2565b6001600160a01b0383166000908152600260209081526040808320338452909152902085820390555b505b6001600160a01b038281166000908152600160205260408082208785039055815487900390915551637f8661a160e01b8152600481018690527f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf790911690637f8661a190602401600060405180830381600087803b15801561257757600080fd5b505af115801561258b573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b038681166004830152602482018990527f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2816925063ef693bed9150604401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b505060408051888152602081018890526001600160a01b0380871694508716925033917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b60005b8381101561267d578181015183820152602001612665565b50506000910152565b6000815180845261269e816020860160208601612662565b601f01601f19169290920160200192915050565b602081526000610d676020830184612686565b6000602082840312156126d757600080fd5b5035919050565b80356001600160a01b03811681146126f557600080fd5b919050565b6000806040838503121561270d57600080fd5b612716836126de565b946020939093013593505050565b60008060006060848603121561273957600080fd5b83359250612749602085016126de565b9150604084013561ffff8116811461276057600080fd5b809150509250925092565b60008060006060848603121561278057600080fd5b612789846126de565b9250612797602085016126de565b9150604084013590509250925092565b6000602082840312156127b957600080fd5b610d67826126de565b600080604083850312156127d557600080fd5b823591506127e5602084016126de565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a0868803121561281c57600080fd5b612825866126de565b9450612833602087016126de565b93506040860135925060608601359150608086013567ffffffffffffffff8082111561285e57600080fd5b818801915088601f83011261287257600080fd5b813581811115612884576128846127ee565b604051601f8201601f19908116603f011681019083821181831017156128ac576128ac6127ee565b816040528281528b60208487010111156128c557600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806000606084860312156128ff57600080fd5b8335925061290f602085016126de565b915061291d604085016126de565b90509250925092565b600080600080600080600060e0888a03121561294157600080fd5b61294a886126de565b9650612958602089016126de565b95506040880135945060608801359350608088013560ff8116811461297c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156129ac57600080fd5b6129b5836126de565b91506127e5602084016126de565b6000602082840312156129d557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094a5761094a6129dc565b808202811582820484141761094a5761094a6129dc565b634e487b7160e01b600052601260045260246000fd5b600082612a4f57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601a908201527f536176696e67734461692f696e76616c69642d61646472657373000000000000604082015260600190565b6020808252601f908201527f536176696e67734461692f696e73756666696369656e742d62616c616e636500604082015260600190565b60208082526021908201527f536176696e67734461692f696e73756666696369656e742d616c6c6f77616e636040820152606560f81b606082015260800190565b8082018082111561094a5761094a6129dc565b600060208284031215612b2857600080fd5b81518015158114610d6757600080fd5b8281526040602082015260006108ed6040830184612686565b60008251612b63818460208701612662565b9190910192915050565b600060208284031215612b7f57600080fd5b81516001600160e01b031981168114610d6757600080fdfe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122014b93533424145cd0724c1046a0420f5342a34f56b9f5f8a56d80d63e83f075164736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7
-----Decoded View---------------
Arg [0] : _daiJoin (address): 0x9759A6Ac90977b93B58547b4A71c78317f391A28
Arg [1] : _pot (address): 0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28
Arg [1] : 000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.