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
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PYLONDelegate
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Multiple files format)
pragma solidity 0.5.17; import "./PYLON.sol"; contract PYLONDelegationStorage { /** * @notice Implementation address for this contract */ address public implementation; } contract PYLONDelegatorInterface is PYLONDelegationStorage { /** * @notice Emitted when implementation is changed */ event NewImplementation(address oldImplementation, address newImplementation); /** * @notice Called by the gov to update the implementation of the delegator * @param implementation_ The address of the new implementation for delegation * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation */ function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public; } contract PYLONDelegateInterface is PYLONDelegationStorage { /** * @notice Called by the delegator on a delegate to initialize it for duty * @dev Should revert if any issues arise which make it unfit for delegation * @param data The encoded bytes data for any initialization */ function _becomeImplementation(bytes memory data) public; /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() public; } contract PYLONDelegate is PYLON, PYLONDelegateInterface { /** * @notice Construct an empty delegate */ constructor() public {} /** * @notice Called by the delegator on a delegate to initialize it for duty * @param data The encoded bytes data for any initialization */ function _becomeImplementation(bytes memory data) public { // Shh -- currently unused data; // Shh -- we don't ever want this hook to be marked pure if (false) { implementation = address(0); } require(msg.sender == gov, "only the gov may call _becomeImplementation"); } /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() public { // Shh -- we don't ever want this hook to be marked pure if (false) { implementation = address(0); } require(msg.sender == gov, "only the gov may call _resignImplementation"); } }
pragma solidity 0.5.17; import "./PYLONTokenInterface.sol"; import "./PYLONGovernance.sol"; contract PYLONToken is PYLONGovernanceToken { // Modifiers modifier onlyGov() { require(msg.sender == gov); _; } modifier onlyRebaser() { require(msg.sender == rebaser); _; } modifier onlyMinter() { require(msg.sender == rebaser || msg.sender == incentivizer || msg.sender == gov, "not minter"); _; } modifier validRecipient(address to) { require(to != address(0x0)); require(to != address(this)); _; } function initialize( string memory name_, string memory symbol_, uint8 decimals_ ) public { require(pylonsScalingFactor == 0, "already initialized"); name = name_; symbol = symbol_; decimals = decimals_; } /** * @notice Computes the current max scaling factor */ function maxScalingFactor() external view returns (uint256) { return _maxScalingFactor(); } function _maxScalingFactor() internal view returns (uint256) { // scaling factor can only go up to 2**256-1 = initSupply * pylonsScalingFactor // this is used to check if pylonsScalingFactor will be too high to compute balances when rebasing. return uint256(-1) / initSupply; } /** * @notice Mints new tokens, increasing totalSupply, initSupply, and a users balance. * @dev Limited to onlyMinter modifier */ function mint(address to, uint256 amount) external onlyMinter returns (bool) { _mint(to, amount); return true; } function _mint(address to, uint256 amount) internal { // increase totalSupply totalSupply = totalSupply.add(amount); // get underlying value uint256 pylonValue = amount.mul(internalDecimals).div(pylonsScalingFactor); // increase initSupply initSupply = initSupply.add(pylonValue); // make sure the mint didnt push maxScalingFactor too low require(pylonsScalingFactor <= _maxScalingFactor(), "max scaling factor too low"); // add balance _pylonBalances[to] = _pylonBalances[to].add(pylonValue); // add delegates to the minter _moveDelegates(address(0), _delegates[to], pylonValue); emit Mint(to, amount); } /* - ERC20 functionality - */ /** * @dev Transfer tokens to a specified address. * @param to The address to transfer to. * @param value The amount to be transferred. * @return True on success, false otherwise. */ function transfer(address to, uint256 value) external validRecipient(to) returns (bool) { // underlying balance is stored in pylons, so divide by current scaling factor // note, this means as scaling factor grows, dust will be untransferrable. // minimum transfer value == pylonsScalingFactor / 1e24; // get amount in underlying uint256 pylonValue = value.mul(internalDecimals).div(pylonsScalingFactor); // sub from balance of sender _pylonBalances[msg.sender] = _pylonBalances[msg.sender].sub(pylonValue); // add to balance of receiver _pylonBalances[to] = _pylonBalances[to].add(pylonValue); emit Transfer(msg.sender, to, value); _moveDelegates(_delegates[msg.sender], _delegates[to], pylonValue); return true; } /** * @dev Transfer tokens from one address to another. * @param from The address you want to send tokens from. * @param to The address you want to transfer to. * @param value The amount of tokens to be transferred. */ function transferFrom(address from, address to, uint256 value) external validRecipient(to) returns (bool) { // decrease allowance _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender].sub(value); // get value in pylons uint256 pylonValue = value.mul(internalDecimals).div(pylonsScalingFactor); // sub from from _pylonBalances[from] = _pylonBalances[from].sub(pylonValue); _pylonBalances[to] = _pylonBalances[to].add(pylonValue); emit Transfer(from, to, value); _moveDelegates(_delegates[from], _delegates[to], pylonValue); return true; } /** * @param who The address to query. * @return The balance of the specified address. */ function balanceOf(address who) external view returns (uint256) { return _pylonBalances[who].mul(pylonsScalingFactor).div(internalDecimals); } /** @notice Currently returns the internal storage amount * @param who The address to query. * @return The underlying balance of the specified address. */ function balanceOfUnderlying(address who) external view returns (uint256) { return _pylonBalances[who]; } /** * @dev Function to check the amount of tokens that an owner has allowed to a spender. * @param owner_ The address which owns the funds. * @param spender The address which will spend the funds. * @return The number of tokens still available for the spender. */ function allowance(address owner_, address spender) external view returns (uint256) { return _allowedFragments[owner_][spender]; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of * msg.sender. This method is included for ERC20 compatibility. * increaseAllowance and decreaseAllowance should be used instead. * Changing an allowance with this method brings the risk that someone may transfer both * the old and the new allowance - if they are both greater than zero - if a transfer * transaction is mined before the later approve() call is mined. * * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) external returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Increase the amount of tokens that an owner has allowed to a spender. * This method should be used instead of approve() to avoid the double approval vulnerability * described above. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner has allowed to a spender. * * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue); } emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]); return true; } /* - Governance Functions - */ /** @notice sets the rebaser * @param rebaser_ The address of the rebaser contract to use for authentication. */ function _setRebaser(address rebaser_) external onlyGov { address oldRebaser = rebaser; rebaser = rebaser_; emit NewRebaser(oldRebaser, rebaser_); } /** @notice sets the incentivizer * @param incentivizer_ The address of the rebaser contract to use for authentication. */ function _setIncentivizer(address incentivizer_) external onlyGov { address oldIncentivizer = incentivizer; incentivizer = incentivizer_; emit NewIncentivizer(oldIncentivizer, incentivizer_); } /** @notice sets the pendingGov * @param pendingGov_ The address of the rebaser contract to use for authentication. */ function _setPendingGov(address pendingGov_) external onlyGov { address oldPendingGov = pendingGov; pendingGov = pendingGov_; emit NewPendingGov(oldPendingGov, pendingGov_); } /** @notice lets msg.sender accept governance * */ function _acceptGov() external { require(msg.sender == pendingGov, "!pending"); address oldGov = gov; gov = pendingGov; pendingGov = address(0); emit NewGov(oldGov, gov); } /* - Extras - */ /** * @notice Initiates a new rebase operation, provided the minimum time period has elapsed. * * @dev The supply adjustment equals (totalSupply * DeviationFromTargetRate) / rebaseLag * Where DeviationFromTargetRate is (MarketOracleRate - targetRate) / targetRate * and targetRate is CpiOracleRate / baseCpi */ function rebase( uint256 epoch, uint256 indexDelta, bool positive ) external onlyRebaser returns (uint256) { if (indexDelta == 0) { emit Rebase(epoch, pylonsScalingFactor, pylonsScalingFactor); return totalSupply; } uint256 prevPYLONsScalingFactor = pylonsScalingFactor; if (!positive) { pylonsScalingFactor = pylonsScalingFactor.mul(BASE.sub(indexDelta)).div(BASE); } else { uint256 newScalingFactor = pylonsScalingFactor.mul(BASE.add(indexDelta)).div(BASE); if (newScalingFactor < _maxScalingFactor()) { pylonsScalingFactor = newScalingFactor; } else { pylonsScalingFactor = _maxScalingFactor(); } } totalSupply = initSupply.mul(pylonsScalingFactor); emit Rebase(epoch, prevPYLONsScalingFactor, pylonsScalingFactor); return totalSupply; } } contract PYLON is PYLONToken { /** * @notice Initialize the new money market * @param name_ ERC-20 name of this token * @param symbol_ ERC-20 symbol of this token * @param decimals_ ERC-20 decimal precision of this token */ function initialize( string memory name_, string memory symbol_, uint8 decimals_, address initial_owner, uint256 initSupply_ ) public { require(initSupply_ > 0, "0 init supply"); super.initialize(name_, symbol_, decimals_); initSupply = initSupply_.mul(10**24/ (BASE)); totalSupply = initSupply_; pylonsScalingFactor = BASE; _pylonBalances[initial_owner] = initSupply_.mul(10**24 / (BASE)); // owner renounces ownership after deployment as they need to set // rebaser and incentivizer // gov = gov_; } }
pragma solidity 0.5.17; pragma experimental ABIEncoderV2; import "./PYLONGovernanceStorage.sol"; import "./PYLONTokenInterface.sol"; contract PYLONGovernanceToken is PYLONTokenInterface { /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( DELEGATION_TYPEHASH, delegatee, nonce, expiry ) ); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", domainSeparator, structHash ) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "PYLON::delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "PYLON::delegateBySig: invalid nonce"); require(now <= expiry, "PYLON::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256) { require(blockNumber < block.number, "PYLON::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = _pylonBalances[delegator]; // balance of underlying PYLONs (not scaled); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "PYLON::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } }
pragma solidity 0.5.17; pragma experimental ABIEncoderV2; contract PYLONGovernanceStorage { /// @notice A record of each accounts delegate mapping (address => address) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; }
pragma solidity 0.5.17; import "./PYLONTokenStorage.sol"; import "./PYLONGovernanceStorage.sol"; contract PYLONTokenInterface is PYLONTokenStorage, PYLONGovernanceStorage { /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Event emitted when tokens are rebased */ event Rebase(uint256 epoch, uint256 prevPYLONsScalingFactor, uint256 newPYLONsScalingFactor); /*** Gov Events ***/ /** * @notice Event emitted when pendingGov is changed */ event NewPendingGov(address oldPendingGov, address newPendingGov); /** * @notice Event emitted when gov is changed */ event NewGov(address oldGov, address newGov); /** * @notice Sets the rebaser contract */ event NewRebaser(address oldRebaser, address newRebaser); /** * @notice Sets the incentivizer contract */ event NewIncentivizer(address oldIncentivizer, address newIncentivizer); /* - ERC20 Events - */ /** * @notice EIP20 Transfer event */ event Transfer(address indexed from, address indexed to, uint amount); /** * @notice EIP20 Approval event */ event Approval(address indexed owner, address indexed spender, uint amount); /* - Extra Events - */ /** * @notice Tokens minted event */ event Mint(address to, uint256 amount); // Public functions function transfer(address to, uint256 value) external returns(bool); function transferFrom(address from, address to, uint256 value) external returns(bool); function balanceOf(address who) external view returns(uint256); function balanceOfUnderlying(address who) external view returns(uint256); function allowance(address owner_, address spender) external view returns(uint256); function approve(address spender, uint256 value) external returns (bool); function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); function maxScalingFactor() external view returns (uint256); /* - Governance Functions - */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256); function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) external; function delegate(address delegatee) external; function delegates(address delegator) external view returns (address); function getCurrentVotes(address account) external view returns (uint256); /* - Permissioned/Governance functions - */ function mint(address to, uint256 amount) external returns (bool); function rebase(uint256 epoch, uint256 indexDelta, bool positive) external returns (uint256); function _setRebaser(address rebaser_) external; function _setIncentivizer(address incentivizer_) external; function _setPendingGov(address pendingGov_) external; function _acceptGov() external; }
pragma solidity 0.5.17; import "./SafeMath.sol"; // Storage for a PYLON token contract PYLONTokenStorage { using SafeMath for uint256; /** * @dev Guard variable for re-entrancy checks. Not currently used */ bool internal _notEntered; /** * @notice EIP-20 token name for this token */ string public name; /** * @notice EIP-20 token symbol for this token */ string public symbol; /** * @notice EIP-20 token decimals for this token */ uint8 public decimals; /** * @notice Governor for this contract */ address public gov; /** * @notice Pending governance for this contract */ address public pendingGov; /** * @notice Approved rebaser for this contract */ address public rebaser; /** * @notice Reserve address of PYLON protocol */ address public incentivizer; /** * @notice Total supply of PYLONs */ uint256 public totalSupply; /** * @notice Internal decimals used to handle scaling factor */ uint256 public constant internalDecimals = 10**24; /** * @notice Used for percentage maths */ uint256 public constant BASE = 10**18; /** * @notice Scaling factor that adjusts everyone's balances */ uint256 public pylonsScalingFactor; mapping (address => uint256) internal _pylonBalances; mapping (address => mapping (address => uint256)) internal _allowedFragments; uint256 public initSupply; }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.17; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"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":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGov","type":"address"},{"indexed":false,"internalType":"address","name":"newGov","type":"address"}],"name":"NewGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldIncentivizer","type":"address"},{"indexed":false,"internalType":"address","name":"newIncentivizer","type":"address"}],"name":"NewIncentivizer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingGov","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingGov","type":"address"}],"name":"NewPendingGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRebaser","type":"address"},{"indexed":false,"internalType":"address","name":"newRebaser","type":"address"}],"name":"NewRebaser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prevPYLONsScalingFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPYLONsScalingFactor","type":"uint256"}],"name":"Rebase","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"_acceptGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"_becomeImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_resignImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"incentivizer_","type":"address"}],"name":"_setIncentivizer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pendingGov_","type":"address"}],"name":"_setPendingGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"rebaser_","type":"address"}],"name":"_setRebaser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incentivizer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address","name":"initial_owner","type":"address"},{"internalType":"uint256","name":"initSupply_","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"internalDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingGov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pylonsScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"indexDelta","type":"uint256"},{"internalType":"bool","name":"positive","type":"bool"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061497a806100206000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80636c9452211161014657806398dca210116100c3578063dd62ed3e11610087578063dd62ed3e14611017578063e249fd9f1461108f578063e7a324dc146110ad578063ec342ad0146110cb578063f1127ed8146110e9578063fa8f3455146111645761025e565b806398dca21014610e36578063a457c2d714610e7a578063a9059cbb14610ee0578063b4b5ea5714610f46578063c3cda52014610f9e5761025e565b8063782d6fe11161010a578063782d6fe114610c835780637af548c114610ce55780637ecebe0014610d3d57806395d89b4114610d9557806397d63f9314610e185761025e565b80636c945221146109b05780636fc6407c14610b395780636fcfff4514610b8357806370a0823114610be757806373f03dff14610c3f5761025e565b806325240810116101df5780634bda2e20116101a35780634bda2e20146107bb57806356e67728146107c5578063587cde1e146108805780635c19a95c146109045780635c60da1b1461094857806364dd48f5146109925761025e565b80632524081014610629578063313ce5671461067357806339509351146106975780633af9e669146106fd57806340c10f19146107555761025e565b8063153ab50511610226578063153ab505146103fe5780631624f6c61461040857806318160ddd1461056757806320606b701461058557806323b872dd146105a35761025e565b806306fdde0314610263578063095ea7b3146102e657806311d3e6c41461034c57806311fd8a831461036a57806312d43a51146103b4575b600080fd5b61026b6111a8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610332600480360360408110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611246565b604051808215151515815260200191505060405180910390f35b610354611338565b6040518082815260200191505060405180910390f35b610372611347565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103bc61136d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610406611393565b005b6105656004803603606081101561041e57600080fd5b810190808035906020019064010000000081111561043b57600080fd5b82018360208201111561044d57600080fd5b8035906020019184600183028401116401000000008311171561046f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104d257600080fd5b8201836020820111156104e457600080fd5b8035906020019184600183028401116401000000008311171561050657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050611485565b005b61056f61154b565b6040518082815260200191505060405180910390f35b61058d611551565b6040518082815260200191505060405180910390f35b61060f600480360360608110156105b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061156d565b604051808215151515815260200191505060405180910390f35b61063161198c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61067b6119b2565b604051808260ff1660ff16815260200191505060405180910390f35b6106e3600480360360408110156106ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119c5565b604051808215151515815260200191505060405180910390f35b61073f6004803603602081101561071357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc1565b6040518082815260200191505060405180910390f35b6107a16004803603604081101561076b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c0a565b604051808215151515815260200191505060405180910390f35b6107c3611d93565b005b61087e600480360360208110156107db57600080fd5b81019080803590602001906401000000008111156107f857600080fd5b82018360208201111561080a57600080fd5b8035906020019184600183028401116401000000008311171561082c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611fde565b005b6108c26004803603602081101561089657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109466004803603602081101561091a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061213a565b005b610950612147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61099a61216d565b6040518082815260200191505060405180910390f35b610b37600480360360a08110156109c657600080fd5b81019080803590602001906401000000008111156109e357600080fd5b8201836020820111156109f557600080fd5b80359060200191846001830284011164010000000083111715610a1757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a7a57600080fd5b820183602082011115610a8c57600080fd5b80359060200191846001830284011164010000000083111715610aae57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061217b565b005b610b416122be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bc560048036036020811015610b9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e4565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b610c2960048036036020811015610bfd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612307565b6040518082815260200191505060405180910390f35b610c8160048036036020811015610c5557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612380565b005b610ccf60048036036040811015610c9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124dd565b6040518082815260200191505060405180910390f35b610d2760048036036060811015610cfb57600080fd5b8101908080359060200190929190803590602001909291908035151590602001909291905050506128a2565b6040518082815260200191505060405180910390f35b610d7f60048036036020811015610d5357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aa9565b6040518082815260200191505060405180910390f35b610d9d612ac1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ddd578082015181840152602081019050610dc2565b50505050905090810190601f168015610e0a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e20612b5f565b6040518082815260200191505060405180910390f35b610e7860048036036020811015610e4c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b65565b005b610ec660048036036040811015610e9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612cc2565b604051808215151515815260200191505060405180910390f35b610f2c60048036036040811015610ef657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f52565b604051808215151515815260200191505060405180910390f35b610f8860048036036020811015610f5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613261565b6040518082815260200191505060405180910390f35b611015600480360360c0811015610fb457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613337565b005b6110796004803603604081101561102d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613715565b6040518082815260200191505060405180910390f35b61109761379c565b6040518082815260200191505060405180910390f35b6110b56137a2565b6040518082815260200191505060405180910390f35b6110d36137be565b6040518082815260200191505060405180910390f35b61113b600480360360408110156110ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff1690602001909291905050506137ca565b604051808363ffffffff1663ffffffff1681526020018281526020019250505060405180910390f35b6111a66004803603602081101561117a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061380b565b005b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561123e5780601f106112135761010080835404028352916020019161123e565b820191906000526020600020905b81548152906001019060200180831161122157829003601f168201915b505050505081565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000611342613968565b905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000156113dd576000601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806147a7602b913960400191505060405180910390fd5b565b6000600854146114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b82600190805190602001906115139291906146be565b50816002908051906020019061152a9291906146be565b5080600360006101000a81548160ff021916908360ff160217905550505050565b60075481565b604051808061485a604391396043019050604051809103902081565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115aa57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e357600080fd5b61167283600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399b90919063ffffffff16565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061172560085461171769d3c21bcecceda1000000876139e590919063ffffffff16565b613a6b90919063ffffffff16565b905061177981600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399b90919063ffffffff16565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061180e81600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab590919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361197f600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b3d565b6001925050509392505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900460ff1681565b6000611a5682600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab590919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cb55750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611d0d5750600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6e6f74206d696e7465720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611d898383613dda565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f2170656e64696e6700000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d552381600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600015612028576000601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806147fa602b913960400191505060405180910390fd5b50565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6121443382614034565b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b69d3c21bcecceda100000081565b600081116121f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f3020696e697420737570706c790000000000000000000000000000000000000081525060200191505060405180910390fd5b6121fc858585611485565b61222a670de0b6b3a764000069d3c21bcecceda10000008161221a57fe5b04826139e590919063ffffffff16565b600b8190555080600781905550670de0b6b3a7640000600881905550612274670de0b6b3a764000069d3c21bcecceda10000008161226457fe5b04826139e590919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900463ffffffff1681565b600061237969d3c21bcecceda100000061236b600854600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139e590919063ffffffff16565b613a6b90919063ffffffff16565b9050919050565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123da57600080fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e8183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b6000438210612537576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147d26028913960400191505060405180910390fd5b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1614156125a457600091505061289c565b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161161268e57600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff1681526020019081526020016000206001015491505061289c565b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16111561270f57600091505061289c565b600080905060006001830390505b8163ffffffff168163ffffffff161115612836576000600283830363ffffffff168161274557fe5b048203905061275261473e565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff16141561280e5780602001519550505050505061289c565b86816000015163ffffffff1610156128285781935061282f565b6001820392505b505061271d565b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128fe57600080fd5b600083141561295c577fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c08460085460085460405180848152602001838152602001828152602001935050505060405180910390a16007549050612aa2565b60006008549050826129bc576129b1670de0b6b3a76400006129a361299287670de0b6b3a764000061399b90919063ffffffff16565b6008546139e590919063ffffffff16565b613a6b90919063ffffffff16565b600881905550612a35565b6000612a07670de0b6b3a76400006129f96129e888670de0b6b3a7640000613ab590919063ffffffff16565b6008546139e590919063ffffffff16565b613a6b90919063ffffffff16565b9050612a11613968565b811015612a245780600881905550612a33565b612a2c613968565b6008819055505b505b612a4c600854600b546139e590919063ffffffff16565b6007819055507fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c0858260085460405180848152602001838152602001828152602001935050505060405180910390a16007549150505b9392505050565b600f6020528060005260406000206000915090505481565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b575780601f10612b2c57610100808354040283529160200191612b57565b820191906000526020600020905b815481529060010190602001808311612b3a57829003601f168201915b505050505081565b600b5481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bbf57600080fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2ee668ca7d17a9122dc00c0bfd73b684f2f7d681f17733cc02b294f69f1b38968183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b600080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310612dd2576000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e66565b612de5838261399b90919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f8f57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fc857600080fd5b6000612ffb600854612fed69d3c21bcecceda1000000876139e590919063ffffffff16565b613a6b90919063ffffffff16565b905061304f81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399b90919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130e481600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab590919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3613255600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b3d565b60019250505092915050565b600080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116132cb57600061332f565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b6000604051808061485a6043913960430190506040518091039020600160405180828054600181600116156101000203166002900480156133af5780601f1061338d5761010080835404028352918201916133af565b820191906000526020600020905b81548152906001019060200180831161339b575b505091505060405180910390206133c46141dc565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051602081830303815290604052805190602001209050600060405180806148e5603a9139603a0190506040518091039020888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561356f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806148be6027913960400191505060405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505589146136a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806147846023913960400191505060405180910390fd5b874211156136ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061491f6027913960400191505060405180910390fd5b613709818b614034565b50505050505050505050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60405180806148e5603a9139603a019050604051809103902081565b670de0b6b3a764000081565b600d602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461386557600080fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c150305458183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b6000600b547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161399557fe5b04905090565b60006139dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506141e9565b905092915050565b6000808314156139f85760009050613a65565b6000828402905082848281613a0957fe5b0414613a60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061489d6021913960400191505060405180910390fd5b809150505b92915050565b6000613aad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142a9565b905092915050565b600080828401905083811015613b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613b795750600081115b15613dd557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613ca9576000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613c1c576000613c80565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613c97848361399b90919063ffffffff16565b9050613ca58684848461436f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613dd4576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613d47576000613dab565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613dc28483613ab590919063ffffffff16565b9050613dd08584848461436f565b5050505b5b505050565b613def81600754613ab590919063ffffffff16565b6007819055506000613e28600854613e1a69d3c21bcecceda1000000856139e590919063ffffffff16565b613a6b90919063ffffffff16565b9050613e3f81600b54613ab590919063ffffffff16565b600b81905550613e4d613968565b6008541115613ec4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6d6178207363616c696e6720666163746f7220746f6f206c6f7700000000000081525060200191505060405180910390fd5b613f1681600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab590919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fc46000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b3d565b7f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46141d6828483613b3d565b50505050565b6000804690508091505090565b6000838311158290614296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561425b578082015181840152602081019050614240565b50505050905090810190601f1680156142885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290614355576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561431a5780820151818401526020810190506142ff565b50505050905090810190601f1680156143475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161436157fe5b049050809150509392505050565b60006143934360405180606001604052806035815260200161482560359139614603565b905060008463ffffffff1611801561442857508063ffffffff16600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156144995781600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff168152602001908152602001600020600101819055506145a6565b60405180604001604052808263ffffffff16815260200183815250600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b6000640100000000831082906146b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561467957808201518184015260208101905061465e565b50505050905090810190601f1680156146a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106146ff57805160ff191683800117855561472d565b8280016001018555821561472d579182015b8281111561472c578251825591602001919060010190614711565b5b50905061473a919061475e565b5090565b6040518060400160405280600063ffffffff168152602001600081525090565b61478091905b8082111561477c576000816000905550600101614764565b5090565b9056fe50594c4f4e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e63656f6e6c792074686520676f76206d61792063616c6c205f72657369676e496d706c656d656e746174696f6e50594c4f4e3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65646f6e6c792074686520676f76206d61792063616c6c205f6265636f6d65496d706c656d656e746174696f6e50594c4f4e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750594c4f4e3a3a64656c656761746542795369673a20696e76616c6964207369676e617475726544656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e74323536206578706972792950594c4f4e3a3a64656c656761746542795369673a207369676e61747572652065787069726564a265627a7a7231582002aab853a8d92744884fcd18c620da911333b985a790e2b0b637b5c99c80bf3e64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80636c9452211161014657806398dca210116100c3578063dd62ed3e11610087578063dd62ed3e14611017578063e249fd9f1461108f578063e7a324dc146110ad578063ec342ad0146110cb578063f1127ed8146110e9578063fa8f3455146111645761025e565b806398dca21014610e36578063a457c2d714610e7a578063a9059cbb14610ee0578063b4b5ea5714610f46578063c3cda52014610f9e5761025e565b8063782d6fe11161010a578063782d6fe114610c835780637af548c114610ce55780637ecebe0014610d3d57806395d89b4114610d9557806397d63f9314610e185761025e565b80636c945221146109b05780636fc6407c14610b395780636fcfff4514610b8357806370a0823114610be757806373f03dff14610c3f5761025e565b806325240810116101df5780634bda2e20116101a35780634bda2e20146107bb57806356e67728146107c5578063587cde1e146108805780635c19a95c146109045780635c60da1b1461094857806364dd48f5146109925761025e565b80632524081014610629578063313ce5671461067357806339509351146106975780633af9e669146106fd57806340c10f19146107555761025e565b8063153ab50511610226578063153ab505146103fe5780631624f6c61461040857806318160ddd1461056757806320606b701461058557806323b872dd146105a35761025e565b806306fdde0314610263578063095ea7b3146102e657806311d3e6c41461034c57806311fd8a831461036a57806312d43a51146103b4575b600080fd5b61026b6111a8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610332600480360360408110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611246565b604051808215151515815260200191505060405180910390f35b610354611338565b6040518082815260200191505060405180910390f35b610372611347565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103bc61136d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610406611393565b005b6105656004803603606081101561041e57600080fd5b810190808035906020019064010000000081111561043b57600080fd5b82018360208201111561044d57600080fd5b8035906020019184600183028401116401000000008311171561046f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104d257600080fd5b8201836020820111156104e457600080fd5b8035906020019184600183028401116401000000008311171561050657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050611485565b005b61056f61154b565b6040518082815260200191505060405180910390f35b61058d611551565b6040518082815260200191505060405180910390f35b61060f600480360360608110156105b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061156d565b604051808215151515815260200191505060405180910390f35b61063161198c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61067b6119b2565b604051808260ff1660ff16815260200191505060405180910390f35b6106e3600480360360408110156106ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119c5565b604051808215151515815260200191505060405180910390f35b61073f6004803603602081101561071357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc1565b6040518082815260200191505060405180910390f35b6107a16004803603604081101561076b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c0a565b604051808215151515815260200191505060405180910390f35b6107c3611d93565b005b61087e600480360360208110156107db57600080fd5b81019080803590602001906401000000008111156107f857600080fd5b82018360208201111561080a57600080fd5b8035906020019184600183028401116401000000008311171561082c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611fde565b005b6108c26004803603602081101561089657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109466004803603602081101561091a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061213a565b005b610950612147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61099a61216d565b6040518082815260200191505060405180910390f35b610b37600480360360a08110156109c657600080fd5b81019080803590602001906401000000008111156109e357600080fd5b8201836020820111156109f557600080fd5b80359060200191846001830284011164010000000083111715610a1757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a7a57600080fd5b820183602082011115610a8c57600080fd5b80359060200191846001830284011164010000000083111715610aae57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061217b565b005b610b416122be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bc560048036036020811015610b9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e4565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b610c2960048036036020811015610bfd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612307565b6040518082815260200191505060405180910390f35b610c8160048036036020811015610c5557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612380565b005b610ccf60048036036040811015610c9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124dd565b6040518082815260200191505060405180910390f35b610d2760048036036060811015610cfb57600080fd5b8101908080359060200190929190803590602001909291908035151590602001909291905050506128a2565b6040518082815260200191505060405180910390f35b610d7f60048036036020811015610d5357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aa9565b6040518082815260200191505060405180910390f35b610d9d612ac1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ddd578082015181840152602081019050610dc2565b50505050905090810190601f168015610e0a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e20612b5f565b6040518082815260200191505060405180910390f35b610e7860048036036020811015610e4c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b65565b005b610ec660048036036040811015610e9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612cc2565b604051808215151515815260200191505060405180910390f35b610f2c60048036036040811015610ef657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f52565b604051808215151515815260200191505060405180910390f35b610f8860048036036020811015610f5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613261565b6040518082815260200191505060405180910390f35b611015600480360360c0811015610fb457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613337565b005b6110796004803603604081101561102d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613715565b6040518082815260200191505060405180910390f35b61109761379c565b6040518082815260200191505060405180910390f35b6110b56137a2565b6040518082815260200191505060405180910390f35b6110d36137be565b6040518082815260200191505060405180910390f35b61113b600480360360408110156110ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff1690602001909291905050506137ca565b604051808363ffffffff1663ffffffff1681526020018281526020019250505060405180910390f35b6111a66004803603602081101561117a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061380b565b005b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561123e5780601f106112135761010080835404028352916020019161123e565b820191906000526020600020905b81548152906001019060200180831161122157829003601f168201915b505050505081565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000611342613968565b905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000156113dd576000601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806147a7602b913960400191505060405180910390fd5b565b6000600854146114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b82600190805190602001906115139291906146be565b50816002908051906020019061152a9291906146be565b5080600360006101000a81548160ff021916908360ff160217905550505050565b60075481565b604051808061485a604391396043019050604051809103902081565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115aa57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e357600080fd5b61167283600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399b90919063ffffffff16565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061172560085461171769d3c21bcecceda1000000876139e590919063ffffffff16565b613a6b90919063ffffffff16565b905061177981600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399b90919063ffffffff16565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061180e81600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab590919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361197f600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b3d565b6001925050509392505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900460ff1681565b6000611a5682600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab590919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cb55750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611d0d5750600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6e6f74206d696e7465720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611d898383613dda565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f2170656e64696e6700000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d552381600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600015612028576000601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806147fa602b913960400191505060405180910390fd5b50565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6121443382614034565b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b69d3c21bcecceda100000081565b600081116121f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f3020696e697420737570706c790000000000000000000000000000000000000081525060200191505060405180910390fd5b6121fc858585611485565b61222a670de0b6b3a764000069d3c21bcecceda10000008161221a57fe5b04826139e590919063ffffffff16565b600b8190555080600781905550670de0b6b3a7640000600881905550612274670de0b6b3a764000069d3c21bcecceda10000008161226457fe5b04826139e590919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900463ffffffff1681565b600061237969d3c21bcecceda100000061236b600854600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139e590919063ffffffff16565b613a6b90919063ffffffff16565b9050919050565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123da57600080fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e8183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b6000438210612537576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147d26028913960400191505060405180910390fd5b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1614156125a457600091505061289c565b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161161268e57600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff1681526020019081526020016000206001015491505061289c565b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16111561270f57600091505061289c565b600080905060006001830390505b8163ffffffff168163ffffffff161115612836576000600283830363ffffffff168161274557fe5b048203905061275261473e565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff16141561280e5780602001519550505050505061289c565b86816000015163ffffffff1610156128285781935061282f565b6001820392505b505061271d565b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128fe57600080fd5b600083141561295c577fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c08460085460085460405180848152602001838152602001828152602001935050505060405180910390a16007549050612aa2565b60006008549050826129bc576129b1670de0b6b3a76400006129a361299287670de0b6b3a764000061399b90919063ffffffff16565b6008546139e590919063ffffffff16565b613a6b90919063ffffffff16565b600881905550612a35565b6000612a07670de0b6b3a76400006129f96129e888670de0b6b3a7640000613ab590919063ffffffff16565b6008546139e590919063ffffffff16565b613a6b90919063ffffffff16565b9050612a11613968565b811015612a245780600881905550612a33565b612a2c613968565b6008819055505b505b612a4c600854600b546139e590919063ffffffff16565b6007819055507fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c0858260085460405180848152602001838152602001828152602001935050505060405180910390a16007549150505b9392505050565b600f6020528060005260406000206000915090505481565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b575780601f10612b2c57610100808354040283529160200191612b57565b820191906000526020600020905b815481529060010190602001808311612b3a57829003601f168201915b505050505081565b600b5481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bbf57600080fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2ee668ca7d17a9122dc00c0bfd73b684f2f7d681f17733cc02b294f69f1b38968183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b600080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310612dd2576000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e66565b612de5838261399b90919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f8f57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fc857600080fd5b6000612ffb600854612fed69d3c21bcecceda1000000876139e590919063ffffffff16565b613a6b90919063ffffffff16565b905061304f81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399b90919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130e481600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab590919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3613255600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b3d565b60019250505092915050565b600080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116132cb57600061332f565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b6000604051808061485a6043913960430190506040518091039020600160405180828054600181600116156101000203166002900480156133af5780601f1061338d5761010080835404028352918201916133af565b820191906000526020600020905b81548152906001019060200180831161339b575b505091505060405180910390206133c46141dc565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051602081830303815290604052805190602001209050600060405180806148e5603a9139603a0190506040518091039020888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561356f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806148be6027913960400191505060405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505589146136a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806147846023913960400191505060405180910390fd5b874211156136ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061491f6027913960400191505060405180910390fd5b613709818b614034565b50505050505050505050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60405180806148e5603a9139603a019050604051809103902081565b670de0b6b3a764000081565b600d602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461386557600080fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c150305458183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b6000600b547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161399557fe5b04905090565b60006139dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506141e9565b905092915050565b6000808314156139f85760009050613a65565b6000828402905082848281613a0957fe5b0414613a60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061489d6021913960400191505060405180910390fd5b809150505b92915050565b6000613aad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142a9565b905092915050565b600080828401905083811015613b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613b795750600081115b15613dd557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613ca9576000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613c1c576000613c80565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613c97848361399b90919063ffffffff16565b9050613ca58684848461436f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613dd4576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613d47576000613dab565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613dc28483613ab590919063ffffffff16565b9050613dd08584848461436f565b5050505b5b505050565b613def81600754613ab590919063ffffffff16565b6007819055506000613e28600854613e1a69d3c21bcecceda1000000856139e590919063ffffffff16565b613a6b90919063ffffffff16565b9050613e3f81600b54613ab590919063ffffffff16565b600b81905550613e4d613968565b6008541115613ec4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6d6178207363616c696e6720666163746f7220746f6f206c6f7700000000000081525060200191505060405180910390fd5b613f1681600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab590919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fc46000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b3d565b7f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46141d6828483613b3d565b50505050565b6000804690508091505090565b6000838311158290614296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561425b578082015181840152602081019050614240565b50505050905090810190601f1680156142885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290614355576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561431a5780820151818401526020810190506142ff565b50505050905090810190601f1680156143475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161436157fe5b049050809150509392505050565b60006143934360405180606001604052806035815260200161482560359139614603565b905060008463ffffffff1611801561442857508063ffffffff16600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156144995781600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff168152602001908152602001600020600101819055506145a6565b60405180604001604052808263ffffffff16815260200183815250600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b6000640100000000831082906146b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561467957808201518184015260208101905061465e565b50505050905090810190601f1680156146a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106146ff57805160ff191683800117855561472d565b8280016001018555821561472d579182015b8281111561472c578251825591602001919060010190614711565b5b50905061473a919061475e565b5090565b6040518060400160405280600063ffffffff168152602001600081525090565b61478091905b8082111561477c576000816000905550600101614764565b5090565b9056fe50594c4f4e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e63656f6e6c792074686520676f76206d61792063616c6c205f72657369676e496d706c656d656e746174696f6e50594c4f4e3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65646f6e6c792074686520676f76206d61792063616c6c205f6265636f6d65496d706c656d656e746174696f6e50594c4f4e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750594c4f4e3a3a64656c656761746542795369673a20696e76616c6964207369676e617475726544656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e74323536206578706972792950594c4f4e3a3a64656c656761746542795369673a207369676e61747572652065787069726564a265627a7a7231582002aab853a8d92744884fcd18c620da911333b985a790e2b0b637b5c99c80bf3e64736f6c63430005110032
Deployed Bytecode Sourcemap
1470:1053:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1470:1053:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;346:18:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;346:18:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6382:235:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6382:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1015:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;834:22:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;633:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2245:275:1;;;:::i;:::-;;641:292:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;641:292:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;641:292:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;641:292:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;641:292:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;641:292:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;641:292:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;641:292:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;641:292:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;641:292:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1026:26:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;707:122:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3943:690:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3943:690:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;731:25:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;542:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6990:345:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6990:345:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5114:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5114:143:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1659:167;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1659:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9336:236;;;:::i;:::-;;1790:345:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1790:345:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1790:345:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1790:345:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1790:345:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1790:345:1;;;;;;;;;;;;;;;:::i;:::-;;724:149:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;724:149:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1017:104;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1017:104:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;166:29:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1143:49:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11245:657:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;11245:657:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11245:657:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11245:657:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;11245:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11245:657:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11245:657:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11245:657:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;11245:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11245:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;933:27:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;585:49:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;585:49:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4751:180:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4751:180:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9030:230;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9030:230:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;3621:1254:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3621:1254:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9960:1014:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9960:1014:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1121:39:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1121:39:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;442:20:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;442:20:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1578:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8638:248:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8638:248:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7597:514;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7597:514:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2817:869;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2817:869:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2935:255:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2935:255:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1555:1179;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1555:1179:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5564:176:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5564:176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1389:34:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;923:117:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1261:37:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;446:70:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;446:70:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8287:203:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8287:203:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;346:18:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6382:235:0:-;6467:4;6530:5;6489:17;:29;6507:10;6489:29;;;;;;;;;;;;;;;:38;6519:7;6489:38;;;;;;;;;;;;;;;:46;;;;6572:7;6551:36;;6560:10;6551:36;;;6581:5;6551:36;;;;;;;;;;;;;;;;;;6605:4;6598:11;;6382:235;;;;:::o;1015:137::-;1093:7;1125:19;:17;:19::i;:::-;1118:26;;1015:137;:::o;834:22:5:-;;;;;;;;;;;;;:::o;633:18::-;;;;;;;;;;;;;:::o;2245:275:1:-;2366:5;2362:65;;;2413:1;2388:14;;:27;;;;;;;;;;;;;;;;;;2362:65;2461:3;;;;;;;;;;;2447:17;;:10;:17;;;2439:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2245:275::o;641:292:0:-;819:1;796:19;;:24;788:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;862:5;855:4;:12;;;;;;;;;;;;:::i;:::-;;887:7;878:6;:16;;;;;;;;;;;;:::i;:::-;;916:9;905:8;;:20;;;;;;;;;;;;;;;;;;641:292;;;:::o;1026:26:5:-;;;;:::o;707:122:3:-;749:80;;;;;;;;;;;;;;;;;;;707:122;:::o;3943:690:0:-;4070:4;4048:2;569:3;555:18;;:2;:18;;;;547:27;;;;;;607:4;593:19;;:2;:19;;;;585:28;;;;;;4161:46;4201:5;4161:17;:23;4179:4;4161:23;;;;;;;;;;;;;;;:35;4185:10;4161:35;;;;;;;;;;;;;;;;:39;;:46;;;;:::i;:::-;4123:17;:23;4141:4;4123:23;;;;;;;;;;;;;;;:35;4147:10;4123:35;;;;;;;;;;;;;;;:84;;;;4252:18;4273:52;4305:19;;4273:27;1186:6:5;4273:5:0;:9;;:27;;;;:::i;:::-;:31;;:52;;;;:::i;:::-;4252:73;;4387:36;4412:10;4387:14;:20;4402:4;4387:20;;;;;;;;;;;;;;;;:24;;:36;;;;:::i;:::-;4364:14;:20;4379:4;4364:20;;;;;;;;;;;;;;;:59;;;;4455:34;4478:10;4455:14;:18;4470:2;4455:18;;;;;;;;;;;;;;;;:22;;:34;;;;:::i;:::-;4434:14;:18;4449:2;4434:18;;;;;;;;;;;;;;;:55;;;;4520:2;4505:25;;4514:4;4505:25;;;4524:5;4505:25;;;;;;;;;;;;;;;;;;4543:60;4558:10;:16;4569:4;4558:16;;;;;;;;;;;;;;;;;;;;;;;;;4576:10;:14;4587:2;4576:14;;;;;;;;;;;;;;;;;;;;;;;;;4592:10;4543:14;:60::i;:::-;4621:4;4614:11;;;3943:690;;;;;;:::o;731:25:5:-;;;;;;;;;;;;;:::o;542:21::-;;;;;;;;;;;;;:::o;6990:345:0:-;7090:4;7166:54;7209:10;7166:17;:29;7184:10;7166:29;;;;;;;;;;;;;;;:38;7196:7;7166:38;;;;;;;;;;;;;;;;:42;;:54;;;;:::i;:::-;7112:17;:29;7130:10;7112:29;;;;;;;;;;;;;;;:38;7142:7;7112:38;;;;;;;;;;;;;;;:108;;;;7257:7;7236:69;;7245:10;7236:69;;;7266:17;:29;7284:10;7266:29;;;;;;;;;;;;;;;:38;7296:7;7266:38;;;;;;;;;;;;;;;;7236:69;;;;;;;;;;;;;;;;;;7323:4;7316:11;;6990:345;;;;:::o;5114:143::-;5200:7;5230:14;:19;5245:3;5230:19;;;;;;;;;;;;;;;;5223:26;;5114:143;;;:::o;1659:167::-;1757:4;399:7;;;;;;;;;;;385:21;;:10;:21;;;:51;;;;424:12;;;;;;;;;;;410:26;;:10;:26;;;385:51;:72;;;;454:3;;;;;;;;;;;440:17;;:10;:17;;;385:72;377:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:17;1785:2;1789:6;1779:5;:17::i;:::-;1814:4;1807:11;;1659:167;;;;:::o;9336:236::-;9414:10;;;;;;;;;;;9400:24;;:10;:24;;;9392:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9448:14;9465:3;;;;;;;;;;;9448:20;;9485:10;;;;;;;;;;;9479:3;;:16;;;;;;;;;;;;;;;;;;9527:1;9506:10;;:23;;;;;;;;;;;;;;;;;;9545:19;9552:6;9560:3;;;;;;;;;;;9545:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9336:236;:::o;1790:345:1:-;1981:5;1977:65;;;2028:1;2003:14;;:27;;;;;;;;;;;;;;;;;;1977:65;2076:3;;;;;;;;;;;2062:17;;:10;:17;;;2054:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1790:345;:::o;724:149:2:-;812:7;844:10;:21;855:9;844:21;;;;;;;;;;;;;;;;;;;;;;;;;837:28;;724:149;;;:::o;1017:104::-;1081:32;1091:10;1103:9;1081;:32::i;:::-;1017:104;:::o;166:29:1:-;;;;;;;;;;;;;:::o;1143:49:5:-;1186:6;1143:49;:::o;11245:657:0:-;11476:1;11462:11;:15;11454:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11508:43;11525:5;11532:7;11541:9;11508:16;:43::i;:::-;11577:31;1292:6:5;11593::0;:14;;;;;;11577:11;:15;;:31;;;;:::i;:::-;11564:10;:44;;;;11633:11;11619;:25;;;;1292:6:5;11655:19:0;:26;;;;11724:32;1292:6:5;11740::0;:15;;;;;;11724:11;:15;;:32;;;;:::i;:::-;11692:14;:29;11707:13;11692:29;;;;;;;;;;;;;;;:64;;;;11245:657;;;;;:::o;933:27:5:-;;;;;;;;;;;;;:::o;585:49:3:-;;;;;;;;;;;;;;;;;;;;;;:::o;4751:180:0:-;4827:7;4857:66;1186:6:5;4857:44:0;4881:19;;4857:14;:19;4872:3;4857:19;;;;;;;;;;;;;;;;:23;;:44;;;;:::i;:::-;:48;;:66;;;;:::i;:::-;4850:73;;4751:180;;;:::o;9030:230::-;220:3;;;;;;;;;;;206:17;;:10;:17;;;198:26;;;;;;9126:21;9150:10;;;;;;;;;;;9126:34;;9184:11;9171:10;;:24;;;;;;;;;;;;;;;;;;9211:41;9225:13;9240:11;9211:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;235:1;9030:230;:::o;3621:1254:2:-;3729:7;3776:12;3762:11;:26;3754:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3846:19;3868:14;:23;3883:7;3868:23;;;;;;;;;;;;;;;;;;;;;;;;;3846:45;;3922:1;3906:12;:17;;;3902:58;;;3947:1;3940:8;;;;;3902:58;4072:11;4020;:20;4032:7;4020:20;;;;;;;;;;;;;;;:38;4056:1;4041:12;:16;4020:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;4016:147;;4107:11;:20;4119:7;4107:20;;;;;;;;;;;;;;;:38;4143:1;4128:12;:16;4107:38;;;;;;;;;;;;;;;:44;;;4100:51;;;;;4016:147;4260:11;4224;:20;4236:7;4224:20;;;;;;;;;;;;;;;:23;4245:1;4224:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;4220:88;;;4295:1;4288:8;;;;;4220:88;4320:12;4335:1;4320:16;;4347:12;4377:1;4362:12;:16;4347:31;;4389:428;4404:5;4396:13;;:5;:13;;;4389:428;;;4426:13;4468:1;4459:5;4451;:13;4450:19;;;;;;;;4442:5;:27;4426:43;;4511:20;;:::i;:::-;4534:11;:20;4546:7;4534:20;;;;;;;;;;;;;;;:28;4555:6;4534:28;;;;;;;;;;;;;;;4511:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4597:11;4581:2;:12;;;:27;;;4577:229;;;4636:2;:8;;;4629:15;;;;;;;;;4577:229;4685:11;4670:2;:12;;;:26;;;4666:140;;;4725:6;4717:14;;4666:140;;;4789:1;4780:6;:10;4772:18;;4666:140;4389:428;;;;;4834:11;:20;4846:7;4834:20;;;;;;;;;;;;;;;:27;4855:5;4834:27;;;;;;;;;;;;;;;:33;;;4827:40;;;;;3621:1254;;;;;:::o;9960:1014:0:-;10117:7;308;;;;;;;;;;;294:21;;:10;:21;;;286:30;;;;;;10160:1;10146:10;:15;10142:137;;;10181:55;10188:5;10195:19;;10216;;10181:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10256:11;;10249:18;;;;10142:137;10291:31;10325:19;;10291:53;;10362:8;10357:444;;10408:55;1292:6:5;10408:45:0;10432:20;10441:10;1292:6:5;10432:8:0;;:20;;;;:::i;:::-;10408:19;;:23;;:45;;;;:::i;:::-;:49;;:55;;;;:::i;:::-;10386:19;:77;;;;10357:444;;;10496:24;10523:55;1292:6:5;10523:45:0;10547:20;10556:10;1292:6:5;10547:8:0;;:20;;;;:::i;:::-;10523:19;;:23;;:45;;;;:::i;:::-;:49;;:55;;;;:::i;:::-;10496:82;;10616:19;:17;:19::i;:::-;10597:16;:38;10593:197;;;10678:16;10656:19;:38;;;;10593:197;;;10755:19;:17;:19::i;:::-;10733;:41;;;;10593:197;10357:444;;10827:35;10842:19;;10827:10;;:14;;:35;;;;:::i;:::-;10813:11;:49;;;;10878:59;10885:5;10892:23;10917:19;;10878:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10955:11;;10948:18;;;327:1;9960:1014;;;;;:::o;1121:39:3:-;;;;;;;;;;;;;;;;;:::o;442:20:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1578:25::-;;;;:::o;8638:248:0:-;220:3;;;;;;;;;;;206:17;;:10;:17;;;198:26;;;;;;8738:23;8764:12;;;;;;;;;;;8738:38;;8802:13;8787:12;;:28;;;;;;;;;;;;;;;;;;8831:47;8847:15;8864:13;8831:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;235:1;8638:248;:::o;7597:514::-;7702:4;7724:16;7743:17;:29;7761:10;7743:29;;;;;;;;;;;;;;;:38;7773:7;7743:38;;;;;;;;;;;;;;;;7724:57;;7815:8;7796:15;:27;7792:205;;7881:1;7840:17;:29;7858:10;7840:29;;;;;;;;;;;;;;;:38;7870:7;7840:38;;;;;;;;;;;;;;;:42;;;;7792:205;;;7956:29;7969:15;7956:8;:12;;:29;;;;:::i;:::-;7915:17;:29;7933:10;7915:29;;;;;;;;;;;;;;;:38;7945:7;7915:38;;;;;;;;;;;;;;;:70;;;;7792:205;8033:7;8012:69;;8021:10;8012:69;;;8042:17;:29;8060:10;8042:29;;;;;;;;;;;;;;;:38;8072:7;8042:38;;;;;;;;;;;;;;;;8012:69;;;;;;;;;;;;;;;;;;8099:4;8092:11;;;7597:514;;;;:::o;2817:869::-;2926:4;2904:2;569:3;555:18;;:2;:18;;;;547:27;;;;;;607:4;593:19;;:2;:19;;;;585:28;;;;;;3227:18;3248:52;3280:19;;3248:27;1186:6:5;3248:5:0;:9;;:27;;;;:::i;:::-;:31;;:52;;;;:::i;:::-;3227:73;;3381:42;3412:10;3381:14;:26;3396:10;3381:26;;;;;;;;;;;;;;;;:30;;:42;;;;:::i;:::-;3352:14;:26;3367:10;3352:26;;;;;;;;;;;;;;;:71;;;;3496:34;3519:10;3496:14;:18;3511:2;3496:18;;;;;;;;;;;;;;;;:22;;:34;;;;:::i;:::-;3475:14;:18;3490:2;3475:18;;;;;;;;;;;;;;;:55;;;;3567:2;3546:31;;3555:10;3546:31;;;3571:5;3546:31;;;;;;;;;;;;;;;;;;3590:66;3605:10;:22;3616:10;3605:22;;;;;;;;;;;;;;;;;;;;;;;;;3629:10;:14;3640:2;3629:14;;;;;;;;;;;;;;;;;;;;;;;;;3645:10;3590:14;:66::i;:::-;3674:4;3667:11;;;2817:869;;;;;:::o;2935:255:2:-;3027:7;3052:19;3074:14;:23;3089:7;3074:23;;;;;;;;;;;;;;;;;;;;;;;;;3052:45;;3130:1;3115:12;:16;;;:67;;3181:1;3115:67;;;3134:11;:20;3146:7;3134:20;;;;;;;;;;;;;;;:38;3170:1;3155:12;:16;3134:38;;;;;;;;;;;;;;;:44;;;3115:67;3108:74;;;2935:255;;;:::o;1555:1179::-;1748:23;749:80:3;;;;;;;;;;;;;;;;;;;1877:4:2;1861:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1902:12;:10;:12::i;:::-;1941:4;1798:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1798:163:2;;;1774:198;;;;;;1748:224;;1985:18;969:71:3;;;;;;;;;;;;;;;;;;;2097:9:2;2125:5;2149:6;2030:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2030:140:2;;;2006:175;;;;;;1985:196;;2194:14;2299:15;2333:10;2235:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2235:123:2;;;2211:158;;;;;;2194:175;;2382:17;2402:26;2412:6;2420:1;2423;2426;2402:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2402:26:2;;;;;;;;2382:46;;2468:1;2447:23;;:9;:23;;;;2439:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2542:6;:17;2549:9;2542:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;2533:5;:28;2525:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2627:6;2620:3;:13;;2612:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2695:31;2705:9;2716;2695;:31::i;:::-;2688:38;;;;1555:1179;;;;;;:::o;5564:176:0:-;5666:7;5698:17;:25;5716:6;5698:25;;;;;;;;;;;;;;;:34;5724:7;5698:34;;;;;;;;;;;;;;;;5691:41;;5564:176;;;;:::o;1389:34:5:-;;;;:::o;923:117:3:-;969:71;;;;;;;;;;;;;;;;;;;923:117;:::o;1261:37:5:-;1292:6;1261:37;:::o;446:70:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8287:203:0:-;220:3;;;;;;;;;;;206:17;;:10;:17;;;198:26;;;;;;8377:18;8398:7;;;;;;;;;;;8377:28;;8426:8;8416:7;;:18;;;;;;;;;;;;;;;;;;8450:32;8461:10;8473:8;8450:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;235:1;8287:203;:::o;1160:341::-;1239:7;1483:10;;1477:2;1469:24;;;;;;1462:31;;1160:341;:::o;1367:136:6:-;1425:7;1452:43;1456:1;1459;1452:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1445:50;;1367:136;;;;:::o;2257:471::-;2315:7;2565:1;2560;:6;2556:47;;;2590:1;2583:8;;;;2556:47;2615:9;2631:1;2627;:5;2615:17;;2660:1;2655;2651;:5;;;;;;:10;2643:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2719:1;2712:8;;;2257:471;;;;;:::o;3204:132::-;3262:7;3289:39;3293:1;3296;3289:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3282:46;;3204:132;;;;:::o;903:181::-;961:7;981:9;997:1;993;:5;981:17;;1022:1;1017;:6;;1009:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1075:1;1068:8;;;903:181;;;;:::o;5335:947:2:-;5441:6;5431:16;;:6;:16;;;;:30;;;;;5460:1;5451:6;:10;5431:30;5427:848;;;5500:1;5482:20;;:6;:20;;;5478:385;;5571:16;5590:14;:22;5605:6;5590:22;;;;;;;;;;;;;;;;;;;;;;;;;5571:41;;5631:17;5663:1;5651:9;:13;;;:60;;5710:1;5651:60;;;5667:11;:19;5679:6;5667:19;;;;;;;;;;;;;;;:34;5699:1;5687:9;:13;5667:34;;;;;;;;;;;;;;;:40;;;5651:60;5631:80;;5730:17;5750:21;5764:6;5750:9;:13;;:21;;;;:::i;:::-;5730:41;;5790:57;5807:6;5815:9;5826;5837;5790:16;:57::i;:::-;5478:385;;;;5901:1;5883:20;;:6;:20;;;5879:385;;5972:16;5991:14;:22;6006:6;5991:22;;;;;;;;;;;;;;;;;;;;;;;;;5972:41;;6032:17;6064:1;6052:9;:13;;;:60;;6111:1;6052:60;;;6068:11;:19;6080:6;6068:19;;;;;;;;;;;;;;;:34;6100:1;6088:9;:13;6068:34;;;;;;;;;;;;;;;:40;;;6052:60;6032:80;;6131:17;6151:21;6165:6;6151:9;:13;;:21;;;;:::i;:::-;6131:41;;6191:57;6208:6;6216:9;6227;6238;6191:16;:57::i;:::-;5879:385;;;;5427:848;5335:947;;;:::o;1834:725:0:-;1954:23;1970:6;1954:11;;:15;;:23;;;;:::i;:::-;1940:11;:37;;;;2019:18;2040:53;2073:19;;2040:28;1186:6:5;2040::0;:10;;:28;;;;:::i;:::-;:32;;:53;;;;:::i;:::-;2019:74;;2147:26;2162:10;2147;;:14;;:26;;;;:::i;:::-;2134:10;:39;;;;2280:19;:17;:19::i;:::-;2257;;:42;;2249:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2384:34;2407:10;2384:14;:18;2399:2;2384:18;;;;;;;;;;;;;;;;:22;;:34;;;;:::i;:::-;2363:14;:18;2378:2;2363:18;;;;;;;;;;;;;;;:55;;;;2467:54;2490:1;2494:10;:14;2505:2;2494:14;;;;;;;;;;;;;;;;;;;;;;;;;2510:10;2467:14;:54::i;:::-;2535:16;2540:2;2544:6;2535:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;1834:725;;;:::o;4883:444:2:-;4974:23;5000:10;:21;5011:9;5000:21;;;;;;;;;;;;;;;;;;;;;;;;;4974:47;;5032:24;5059:14;:25;5074:9;5059:25;;;;;;;;;;;;;;;;5032:52;;5165:9;5141:10;:21;5152:9;5141:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;5236:9;5192:54;;5219:15;5192:54;;5208:9;5192:54;;;;;;;;;;;;5259:60;5274:15;5291:9;5302:16;5259:14;:60::i;:::-;4883:444;;;;:::o;7172:153::-;7217:4;7234:15;7282:9;7271:20;;7310:7;7303:14;;;7172:153;:::o;1806:192:6:-;1892:7;1925:1;1920;:6;;1928:12;1912:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1912:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1952:9;1968:1;1964;:5;1952:17;;1989:1;1982:8;;;1806:192;;;;;:::o;3832:278::-;3918:7;3950:1;3946;:5;3953:12;3938:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3938:28:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3977:9;3993:1;3989;:5;;;;;;3977:17;;4101:1;4094:8;;;3832:278;;;;;:::o;6290:705:2:-;6469:18;6490:77;6497:12;6490:77;;;;;;;;;;;;;;;;;:6;:77::i;:::-;6469:98;;6599:1;6584:12;:16;;;:85;;;;;6658:11;6604:65;;:11;:22;6616:9;6604:22;;;;;;;;;;;;;;;:40;6642:1;6627:12;:16;6604:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;6584:85;6580:339;;;6735:8;6686:11;:22;6698:9;6686:22;;;;;;;;;;;;;;;:40;6724:1;6709:12;:16;6686:40;;;;;;;;;;;;;;;:46;;:57;;;;6580:339;;;6815:33;;;;;;;;6826:11;6815:33;;;;;;6839:8;6815:33;;;6776:11;:22;6788:9;6776:22;;;;;;;;;;;;;;;:36;6799:12;6776:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6906:1;6891:12;:16;6863:14;:25;6878:9;6863:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;6580:339;6957:9;6936:51;;;6968:8;6978;6936:51;;;;;;;;;;;;;;;;;;;;;;;;6290:705;;;;;:::o;7003:161::-;7078:6;7109:5;7105:1;:9;7116:12;7097:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7097:32:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7154:1;7140:16;;7003:161;;;;:::o;1470:1053:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://02aab853a8d92744884fcd18c620da911333b985a790e2b0b637b5c99c80bf3e
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.