Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StakingInfo
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-06-30 */ // File: contracts/common/governance/IGovernance.sol pragma solidity ^0.5.2; interface IGovernance { function update(address target, bytes calldata data) external; } // File: contracts/common/governance/Governable.sol pragma solidity ^0.5.2; contract Governable { IGovernance public governance; constructor(address _governance) public { governance = IGovernance(_governance); } modifier onlyGovernance() { require( msg.sender == address(governance), "Only governance contract is authorized" ); _; } } // File: contracts/root/withdrawManager/IWithdrawManager.sol pragma solidity ^0.5.2; contract IWithdrawManager { function createExitQueue(address token) external; function verifyInclusion( bytes calldata data, uint8 offset, bool verifyTxInclusion ) external view returns (uint256 age); function addExitToQueue( address exitor, address childToken, address rootToken, uint256 exitAmountOrTokenId, bytes32 txHash, bool isRegularExit, uint256 priority ) external; function addInput( uint256 exitId, uint256 age, address utxoOwner, address token ) external; function challengeExit( uint256 exitId, uint256 inputId, bytes calldata challengeData, address adjudicatorPredicate ) external; } // File: contracts/common/Registry.sol pragma solidity ^0.5.2; contract Registry is Governable { // @todo hardcode constants bytes32 private constant WETH_TOKEN = keccak256("wethToken"); bytes32 private constant DEPOSIT_MANAGER = keccak256("depositManager"); bytes32 private constant STAKE_MANAGER = keccak256("stakeManager"); bytes32 private constant VALIDATOR_SHARE = keccak256("validatorShare"); bytes32 private constant WITHDRAW_MANAGER = keccak256("withdrawManager"); bytes32 private constant CHILD_CHAIN = keccak256("childChain"); bytes32 private constant STATE_SENDER = keccak256("stateSender"); bytes32 private constant SLASHING_MANAGER = keccak256("slashingManager"); address public erc20Predicate; address public erc721Predicate; mapping(bytes32 => address) public contractMap; mapping(address => address) public rootToChildToken; mapping(address => address) public childToRootToken; mapping(address => bool) public proofValidatorContracts; mapping(address => bool) public isERC721; enum Type {Invalid, ERC20, ERC721, Custom} struct Predicate { Type _type; } mapping(address => Predicate) public predicates; event TokenMapped(address indexed rootToken, address indexed childToken); event ProofValidatorAdded(address indexed validator, address indexed from); event ProofValidatorRemoved(address indexed validator, address indexed from); event PredicateAdded(address indexed predicate, address indexed from); event PredicateRemoved(address indexed predicate, address indexed from); event ContractMapUpdated(bytes32 indexed key, address indexed previousContract, address indexed newContract); constructor(address _governance) public Governable(_governance) {} function updateContractMap(bytes32 _key, address _address) external onlyGovernance { emit ContractMapUpdated(_key, contractMap[_key], _address); contractMap[_key] = _address; } /** * @dev Map root token to child token * @param _rootToken Token address on the root chain * @param _childToken Token address on the child chain * @param _isERC721 Is the token being mapped ERC721 */ function mapToken( address _rootToken, address _childToken, bool _isERC721 ) external onlyGovernance { require(_rootToken != address(0x0) && _childToken != address(0x0), "INVALID_TOKEN_ADDRESS"); rootToChildToken[_rootToken] = _childToken; childToRootToken[_childToken] = _rootToken; isERC721[_rootToken] = _isERC721; IWithdrawManager(contractMap[WITHDRAW_MANAGER]).createExitQueue(_rootToken); emit TokenMapped(_rootToken, _childToken); } function addErc20Predicate(address predicate) public onlyGovernance { require(predicate != address(0x0), "Can not add null address as predicate"); erc20Predicate = predicate; addPredicate(predicate, Type.ERC20); } function addErc721Predicate(address predicate) public onlyGovernance { erc721Predicate = predicate; addPredicate(predicate, Type.ERC721); } function addPredicate(address predicate, Type _type) public onlyGovernance { require(predicates[predicate]._type == Type.Invalid, "Predicate already added"); predicates[predicate]._type = _type; emit PredicateAdded(predicate, msg.sender); } function removePredicate(address predicate) public onlyGovernance { require(predicates[predicate]._type != Type.Invalid, "Predicate does not exist"); delete predicates[predicate]; emit PredicateRemoved(predicate, msg.sender); } function getValidatorShareAddress() public view returns (address) { return contractMap[VALIDATOR_SHARE]; } function getWethTokenAddress() public view returns (address) { return contractMap[WETH_TOKEN]; } function getDepositManagerAddress() public view returns (address) { return contractMap[DEPOSIT_MANAGER]; } function getStakeManagerAddress() public view returns (address) { return contractMap[STAKE_MANAGER]; } function getSlashingManagerAddress() public view returns (address) { return contractMap[SLASHING_MANAGER]; } function getWithdrawManagerAddress() public view returns (address) { return contractMap[WITHDRAW_MANAGER]; } function getChildChainAndStateSender() public view returns (address, address) { return (contractMap[CHILD_CHAIN], contractMap[STATE_SENDER]); } function isTokenMapped(address _token) public view returns (bool) { return rootToChildToken[_token] != address(0x0); } function isTokenMappedAndIsErc721(address _token) public view returns (bool) { require(isTokenMapped(_token), "TOKEN_NOT_MAPPED"); return isERC721[_token]; } function isTokenMappedAndGetPredicate(address _token) public view returns (address) { if (isTokenMappedAndIsErc721(_token)) { return erc721Predicate; } return erc20Predicate; } function isChildTokenErc721(address childToken) public view returns (bool) { address rootToken = childToRootToken[childToken]; require(rootToken != address(0x0), "Child token is not mapped"); return isERC721[rootToken]; } } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.2; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on 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-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol pragma solidity ^0.5.2; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. * @notice Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/common/lib/BytesLib.sol pragma solidity ^0.5.2; library BytesLib { function concat(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bytes memory) { bytes memory tempBytes; assembly { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // Store the length of the first bytes array at the beginning of // the memory for tempBytes. let length := mload(_preBytes) mstore(tempBytes, length) // Maintain a memory counter for the current write location in the // temp bytes array by adding the 32 bytes for the array length to // the starting location. let mc := add(tempBytes, 0x20) // Stop copying when the memory counter reaches the length of the // first bytes array. let end := add(mc, length) for { // Initialize a copy counter to the start of the _preBytes data, // 32 bytes into its memory. let cc := add(_preBytes, 0x20) } lt(mc, end) { // Increase both counters by 32 bytes each iteration. mc := add(mc, 0x20) cc := add(cc, 0x20) } { // Write the _preBytes data into the tempBytes memory 32 bytes // at a time. mstore(mc, mload(cc)) } // Add the length of _postBytes to the current length of tempBytes // and store it as the new length in the first 32 bytes of the // tempBytes memory. length := mload(_postBytes) mstore(tempBytes, add(length, mload(tempBytes))) // Move the memory counter back from a multiple of 0x20 to the // actual end of the _preBytes data. mc := end // Stop copying when the memory counter reaches the new combined // length of the arrays. end := add(mc, length) for { let cc := add(_postBytes, 0x20) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } // Update the free-memory pointer by padding our last write location // to 32 bytes: add 31 bytes to the end of tempBytes to move to the // next 32 byte block, then round down to the nearest multiple of // 32. If the sum of the length of the two arrays is zero then add // one before rounding down to leave a blank 32 bytes (the length block with 0). mstore( 0x40, and( add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31) // Round down to the nearest 32 bytes. ) ) } return tempBytes; } function slice(bytes memory _bytes, uint256 _start, uint256 _length) internal pure returns (bytes memory) { require(_bytes.length >= (_start + _length)); bytes memory tempBytes; assembly { switch iszero(_length) case 0 { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // The first word of the slice result is potentially a partial // word read from the original array. To read it, we calculate // the length of that partial word and start copying that many // bytes into the array. The first word we copy will start with // data we don't care about, but the last `lengthmod` bytes will // land at the beginning of the contents of the new array. When // we're done copying, we overwrite the full first word with // the actual length of the slice. let lengthmod := and(_length, 31) // The multiplication in the next line is necessary // because when slicing multiples of 32 bytes (lengthmod == 0) // the following copy loop was copying the origin's length // and then ending prematurely not copying everything it should. let mc := add( add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)) ) let end := add(mc, _length) for { // The multiplication in the next line has the same exact purpose // as the one above. let cc := add( add( add(_bytes, lengthmod), mul(0x20, iszero(lengthmod)) ), _start ) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) //update free-memory pointer //allocating the array padded to 32 bytes like the compiler does now mstore(0x40, and(add(mc, 31), not(31))) } //if we want a zero-length slice let's just return a zero-length array default { tempBytes := mload(0x40) mstore(0x40, add(tempBytes, 0x20)) } } return tempBytes; } // Pad a bytes array to 32 bytes function leftPad(bytes memory _bytes) internal pure returns (bytes memory) { // may underflow if bytes.length < 32. Hence using SafeMath.sub bytes memory newBytes = new bytes(SafeMath.sub(32, _bytes.length)); return concat(newBytes, _bytes); } function toBytes32(bytes memory b) internal pure returns (bytes32) { require(b.length >= 32, "Bytes array should atleast be 32 bytes"); bytes32 out; for (uint256 i = 0; i < 32; i++) { out |= bytes32(b[i] & 0xFF) >> (i * 8); } return out; } function toBytes4(bytes memory b) internal pure returns (bytes4 result) { assembly { result := mload(add(b, 32)) } } function fromBytes32(bytes32 x) internal pure returns (bytes memory) { bytes memory b = new bytes(32); for (uint256 i = 0; i < 32; i++) { b[i] = bytes1(uint8(uint256(x) / (2**(8 * (31 - i))))); } return b; } function fromUint(uint256 _num) internal pure returns (bytes memory _ret) { _ret = new bytes(32); assembly { mstore(add(_ret, 32), _num) } } function toUint(bytes memory _bytes, uint256 _start) internal pure returns (uint256) { require(_bytes.length >= (_start + 32)); uint256 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x20), _start)) } return tempUint; } function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) { require(_bytes.length >= (_start + 20)); address tempAddress; assembly { tempAddress := div( mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000 ) } return tempAddress; } } // File: contracts/common/lib/ECVerify.sol pragma solidity ^0.5.2; library ECVerify { function ecrecovery(bytes32 hash, bytes memory sig) public pure returns (address) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) { return address(0x0); } assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := and(mload(add(sig, 65)), 255) } // https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) { v += 27; } if (v != 27 && v != 28) { return address(0x0); } // get address out of hash and signature address result = ecrecover(hash, v, r, s); // ecrecover returns zero on error require(result != address(0x0)); return result; } function ecrecovery(bytes32 hash, uint8 v, bytes32 r, bytes32 s) public pure returns (address) { // get address out of hash and signature address result = ecrecover(hash, v, r, s); // ecrecover returns zero on error require(result != address(0x0), "signature verification failed"); return result; } function ecverify(bytes32 hash, bytes memory sig, address signer) public pure returns (bool) { return signer == ecrecovery(hash, sig); } } // File: contracts/staking/StakingInfo.sol pragma solidity ^0.5.2; // dummy interface to avoid cyclic dependency contract IStakeManagerLocal { enum Status {Inactive, Active, Locked, Unstaked} struct Validator { uint256 amount; uint256 reward; uint256 activationEpoch; uint256 deactivationEpoch; uint256 jailTime; address signer; address contractAddress; Status status; } mapping(uint256 => Validator) public validators; bytes32 public accountStateRoot; uint256 public activeAmount; // delegation amount from validator contract uint256 public validatorRewards; function currentValidatorSetTotalStake() public view returns (uint256); // signer to Validator mapping function signerToValidator(address validatorAddress) public view returns (uint256); function isValidator(uint256 validatorId) public view returns (bool); } contract StakingInfo is Ownable { using SafeMath for uint256; mapping(uint256 => uint256) public validatorNonce; /// @dev Emitted when validator stakes in '_stakeFor()' in StakeManager. /// @param signer validator address. /// @param validatorId unique integer to identify a validator. /// @param nonce to synchronize the events in heimdal. /// @param activationEpoch validator's first epoch as proposer. /// @param amount staking amount. /// @param total total staking amount. /// @param signerPubkey public key of the validator event Staked( address indexed signer, uint256 indexed validatorId, uint256 nonce, uint256 indexed activationEpoch, uint256 amount, uint256 total, bytes signerPubkey ); /// @dev Emitted when validator unstakes in 'unstakeClaim()' /// @param user address of the validator. /// @param validatorId unique integer to identify a validator. /// @param amount staking amount. /// @param total total staking amount. event Unstaked( address indexed user, uint256 indexed validatorId, uint256 amount, uint256 total ); /// @dev Emitted when validator unstakes in '_unstake()'. /// @param user address of the validator. /// @param validatorId unique integer to identify a validator. /// @param nonce to synchronize the events in heimdal. /// @param deactivationEpoch last epoch for validator. /// @param amount staking amount. event UnstakeInit( address indexed user, uint256 indexed validatorId, uint256 nonce, uint256 deactivationEpoch, uint256 indexed amount ); /// @dev Emitted when the validator public key is updated in 'updateSigner()'. /// @param validatorId unique integer to identify a validator. /// @param nonce to synchronize the events in heimdal. /// @param oldSigner old address of the validator. /// @param newSigner new address of the validator. /// @param signerPubkey public key of the validator. event SignerChange( uint256 indexed validatorId, uint256 nonce, address indexed oldSigner, address indexed newSigner, bytes signerPubkey ); event Restaked(uint256 indexed validatorId, uint256 amount, uint256 total); event Jailed( uint256 indexed validatorId, uint256 indexed exitEpoch, address indexed signer ); event UnJailed(uint256 indexed validatorId, address indexed signer); event Slashed(uint256 indexed nonce, uint256 indexed amount); event ThresholdChange(uint256 newThreshold, uint256 oldThreshold); event DynastyValueChange(uint256 newDynasty, uint256 oldDynasty); event ProposerBonusChange( uint256 newProposerBonus, uint256 oldProposerBonus ); event RewardUpdate(uint256 newReward, uint256 oldReward); /// @dev Emitted when validator confirms the auction bid and at the time of restaking in confirmAuctionBid() and restake(). /// @param validatorId unique integer to identify a validator. /// @param nonce to synchronize the events in heimdal. /// @param newAmount the updated stake amount. event StakeUpdate( uint256 indexed validatorId, uint256 indexed nonce, uint256 indexed newAmount ); event ClaimRewards( uint256 indexed validatorId, uint256 indexed amount, uint256 indexed totalAmount ); event StartAuction( uint256 indexed validatorId, uint256 indexed amount, uint256 indexed auctionAmount ); event ConfirmAuction( uint256 indexed newValidatorId, uint256 indexed oldValidatorId, uint256 indexed amount ); event TopUpFee(address indexed user, uint256 indexed fee); event ClaimFee(address indexed user, uint256 indexed fee); // Delegator events event ShareMinted( uint256 indexed validatorId, address indexed user, uint256 indexed amount, uint256 tokens ); event ShareBurned( uint256 indexed validatorId, address indexed user, uint256 indexed amount, uint256 tokens ); event DelegatorClaimedRewards( uint256 indexed validatorId, address indexed user, uint256 indexed rewards ); event DelegatorRestaked( uint256 indexed validatorId, address indexed user, uint256 indexed totalStaked ); event DelegatorUnstaked( uint256 indexed validatorId, address indexed user, uint256 amount ); event UpdateCommissionRate( uint256 indexed validatorId, uint256 indexed newCommissionRate, uint256 indexed oldCommissionRate ); Registry public registry; modifier onlyValidatorContract(uint256 validatorId) { address _contract; (, , , , , , _contract, ) = IStakeManagerLocal( registry.getStakeManagerAddress() ) .validators(validatorId); require(_contract == msg.sender, "Invalid sender, not validator"); _; } modifier StakeManagerOrValidatorContract(uint256 validatorId) { address _contract; address _stakeManager = registry.getStakeManagerAddress(); (, , , , , , _contract, ) = IStakeManagerLocal(_stakeManager).validators( validatorId ); require(_contract == msg.sender || _stakeManager == msg.sender, "Invalid sender, not stake manager or validator contract"); _; } modifier onlyStakeManager() { require(registry.getStakeManagerAddress() == msg.sender, "Invalid sender, not stake manager"); _; } modifier onlySlashingManager() { require(registry.getSlashingManagerAddress() == msg.sender, "Invalid sender, not slashing manager"); _; } constructor(address _registry) public { registry = Registry(_registry); } function updateNonce( uint256[] calldata validatorIds, uint256[] calldata nonces ) external onlyOwner { require(validatorIds.length == nonces.length, "args length mismatch"); for (uint256 i = 0; i < validatorIds.length; ++i) { validatorNonce[validatorIds[i]] = nonces[i]; } } function logStaked( address signer, bytes memory signerPubkey, uint256 validatorId, uint256 activationEpoch, uint256 amount, uint256 total ) public onlyStakeManager { validatorNonce[validatorId] = validatorNonce[validatorId].add(1); emit Staked( signer, validatorId, validatorNonce[validatorId], activationEpoch, amount, total, signerPubkey ); } function logUnstaked( address user, uint256 validatorId, uint256 amount, uint256 total ) public onlyStakeManager { emit Unstaked(user, validatorId, amount, total); } function logUnstakeInit( address user, uint256 validatorId, uint256 deactivationEpoch, uint256 amount ) public onlyStakeManager { validatorNonce[validatorId] = validatorNonce[validatorId].add(1); emit UnstakeInit( user, validatorId, validatorNonce[validatorId], deactivationEpoch, amount ); } function logSignerChange( uint256 validatorId, address oldSigner, address newSigner, bytes memory signerPubkey ) public onlyStakeManager { validatorNonce[validatorId] = validatorNonce[validatorId].add(1); emit SignerChange( validatorId, validatorNonce[validatorId], oldSigner, newSigner, signerPubkey ); } function logRestaked(uint256 validatorId, uint256 amount, uint256 total) public onlyStakeManager { emit Restaked(validatorId, amount, total); } function logJailed(uint256 validatorId, uint256 exitEpoch, address signer) public onlyStakeManager { emit Jailed(validatorId, exitEpoch, signer); } function logUnjailed(uint256 validatorId, address signer) public onlyStakeManager { emit UnJailed(validatorId, signer); } function logSlashed(uint256 nonce, uint256 amount) public onlySlashingManager { emit Slashed(nonce, amount); } function logThresholdChange(uint256 newThreshold, uint256 oldThreshold) public onlyStakeManager { emit ThresholdChange(newThreshold, oldThreshold); } function logDynastyValueChange(uint256 newDynasty, uint256 oldDynasty) public onlyStakeManager { emit DynastyValueChange(newDynasty, oldDynasty); } function logProposerBonusChange( uint256 newProposerBonus, uint256 oldProposerBonus ) public onlyStakeManager { emit ProposerBonusChange(newProposerBonus, oldProposerBonus); } function logRewardUpdate(uint256 newReward, uint256 oldReward) public onlyStakeManager { emit RewardUpdate(newReward, oldReward); } function logStakeUpdate(uint256 validatorId) public StakeManagerOrValidatorContract(validatorId) { validatorNonce[validatorId] = validatorNonce[validatorId].add(1); emit StakeUpdate( validatorId, validatorNonce[validatorId], totalValidatorStake(validatorId) ); } function logClaimRewards( uint256 validatorId, uint256 amount, uint256 totalAmount ) public onlyStakeManager { emit ClaimRewards(validatorId, amount, totalAmount); } function logStartAuction( uint256 validatorId, uint256 amount, uint256 auctionAmount ) public onlyStakeManager { emit StartAuction(validatorId, amount, auctionAmount); } function logConfirmAuction( uint256 newValidatorId, uint256 oldValidatorId, uint256 amount ) public onlyStakeManager { emit ConfirmAuction(newValidatorId, oldValidatorId, amount); } function logTopUpFee(address user, uint256 fee) public onlyStakeManager { emit TopUpFee(user, fee); } function logClaimFee(address user, uint256 fee) public onlyStakeManager { emit ClaimFee(user, fee); } function getStakerDetails(uint256 validatorId) public view returns ( uint256 amount, uint256 reward, uint256 activationEpoch, uint256 deactivationEpoch, address signer, uint256 _status ) { IStakeManagerLocal stakeManager = IStakeManagerLocal( registry.getStakeManagerAddress() ); address _contract; IStakeManagerLocal.Status status; ( amount, reward, activationEpoch, deactivationEpoch, , signer, _contract, status ) = stakeManager.validators(validatorId); _status = uint256(status); if (_contract != address(0x0)) { reward += IStakeManagerLocal(_contract).validatorRewards(); } } function totalValidatorStake(uint256 validatorId) public view returns (uint256 validatorStake) { address contractAddress; (validatorStake, , , , , , contractAddress, ) = IStakeManagerLocal( registry.getStakeManagerAddress() ) .validators(validatorId); if (contractAddress != address(0x0)) { validatorStake += IStakeManagerLocal(contractAddress).activeAmount(); } } function getAccountStateRoot() public view returns (bytes32 accountStateRoot) { accountStateRoot = IStakeManagerLocal(registry.getStakeManagerAddress()) .accountStateRoot(); } function getValidatorContractAddress(uint256 validatorId) public view returns (address ValidatorContract) { (, , , , , , ValidatorContract, ) = IStakeManagerLocal( registry.getStakeManagerAddress() ) .validators(validatorId); } // validator Share contract logging func function logShareMinted( uint256 validatorId, address user, uint256 amount, uint256 tokens ) public onlyValidatorContract(validatorId) { emit ShareMinted(validatorId, user, amount, tokens); } function logShareBurned( uint256 validatorId, address user, uint256 amount, uint256 tokens ) public onlyValidatorContract(validatorId) { emit ShareBurned(validatorId, user, amount, tokens); } function logDelegatorClaimRewards( uint256 validatorId, address user, uint256 rewards ) public onlyValidatorContract(validatorId) { emit DelegatorClaimedRewards(validatorId, user, rewards); } function logDelegatorRestaked( uint256 validatorId, address user, uint256 totalStaked ) public onlyValidatorContract(validatorId) { emit DelegatorRestaked(validatorId, user, totalStaked); } function logDelegatorUnstaked(uint256 validatorId, address user, uint256 amount) public onlyValidatorContract(validatorId) { emit DelegatorUnstaked(validatorId, user, amount); } function logUpdateCommissionRate( uint256 validatorId, uint256 newCommissionRate, uint256 oldCommissionRate ) public onlyValidatorContract(validatorId) { emit UpdateCommissionRate( validatorId, newCommissionRate, oldCommissionRate ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_registry","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"ClaimFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValidatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValidatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ConfirmAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"DelegatorClaimedRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"totalStaked","type":"uint256"}],"name":"DelegatorRestaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DelegatorUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDynasty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldDynasty","type":"uint256"}],"name":"DynastyValueChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"exitEpoch","type":"uint256"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"Jailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newProposerBonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldProposerBonus","type":"uint256"}],"name":"ProposerBonusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Restaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldReward","type":"uint256"}],"name":"RewardUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ShareBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ShareMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldSigner","type":"address"},{"indexed":true,"internalType":"address","name":"newSigner","type":"address"},{"indexed":false,"internalType":"bytes","name":"signerPubkey","type":"bytes"}],"name":"SignerChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Slashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"StakeUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"activationEpoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"signerPubkey","type":"bytes"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"auctionAmount","type":"uint256"}],"name":"StartAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldThreshold","type":"uint256"}],"name":"ThresholdChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"TopUpFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"UnJailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deactivationEpoch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"validatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newCommissionRate","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldCommissionRate","type":"uint256"}],"name":"UpdateCommissionRate","type":"event"},{"constant":true,"inputs":[],"name":"getAccountStateRoot","outputs":[{"internalType":"bytes32","name":"accountStateRoot","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"}],"name":"getStakerDetails","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"activationEpoch","type":"uint256"},{"internalType":"uint256","name":"deactivationEpoch","type":"uint256"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"_status","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"}],"name":"getValidatorContractAddress","outputs":[{"internalType":"address","name":"ValidatorContract","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"logClaimFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"logClaimRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newValidatorId","type":"uint256"},{"internalType":"uint256","name":"oldValidatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"logConfirmAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"logDelegatorClaimRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"totalStaked","type":"uint256"}],"name":"logDelegatorRestaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"logDelegatorUnstaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newDynasty","type":"uint256"},{"internalType":"uint256","name":"oldDynasty","type":"uint256"}],"name":"logDynastyValueChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"exitEpoch","type":"uint256"},{"internalType":"address","name":"signer","type":"address"}],"name":"logJailed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newProposerBonus","type":"uint256"},{"internalType":"uint256","name":"oldProposerBonus","type":"uint256"}],"name":"logProposerBonusChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"}],"name":"logRestaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newReward","type":"uint256"},{"internalType":"uint256","name":"oldReward","type":"uint256"}],"name":"logRewardUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"logShareBurned","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"logShareMinted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"oldSigner","type":"address"},{"internalType":"address","name":"newSigner","type":"address"},{"internalType":"bytes","name":"signerPubkey","type":"bytes"}],"name":"logSignerChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"logSlashed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"}],"name":"logStakeUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes","name":"signerPubkey","type":"bytes"},{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"activationEpoch","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"}],"name":"logStaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"auctionAmount","type":"uint256"}],"name":"logStartAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"},{"internalType":"uint256","name":"oldThreshold","type":"uint256"}],"name":"logThresholdChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"logTopUpFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"address","name":"signer","type":"address"}],"name":"logUnjailed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"deactivationEpoch","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"logUnstakeInit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"}],"name":"logUnstaked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"},{"internalType":"uint256","name":"newCommissionRate","type":"uint256"},{"internalType":"uint256","name":"oldCommissionRate","type":"uint256"}],"name":"logUpdateCommissionRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registry","outputs":[{"internalType":"contract Registry","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"validatorId","type":"uint256"}],"name":"totalValidatorStake","outputs":[{"internalType":"uint256","name":"validatorStake","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"validatorIds","type":"uint256[]"},{"internalType":"uint256[]","name":"nonces","type":"uint256[]"}],"name":"updateNonce","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validatorNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051612eb3380380612eb38339818101604052602081101561003357600080fd5b5051600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600280546001600160a01b0319166001600160a01b0392909216919091179055612e06806100ad6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063a3b1d8cb11610125578063ca7d34b6116100ad578063f1382b531161007c578063f1382b5314610894578063f1980a50146108cc578063f2fde38b146108ef578063f92ec5af14610915578063fb77c94e1461094157610211565b8063ca7d34b614610773578063e12ab1af14610790578063eae3f749146107b9578063ebde9f931461087757610211565b8063b6fa74c4116100f4578063b6fa74c4146105f9578063b7721d2d1461061c578063b80fbce51461064e578063c69d057314610712578063c98cc0021461074a57610211565b8063a3b1d8cb14610549578063a449d7951461056c578063ae2e26b114610598578063b685b26a146105d057610211565b8063605be9be116101a85780637f88a957116101775780637f88a9571461049e57806381dc101b146104d05780638da5cb5b146105025780638f32d59b1461050a578063a0e300a61461052657610211565b8063605be9be14610403578063715018a61461043557806378daaf691461043d5780637b1039991461049657610211565b80634b6b87ce116101e45780634b6b87ce1461036b578063532e19a9146103855780635616a7cc146103a25780635e04d483146103cb57610211565b80630934a6df14610216578063122b648114610241578063178d46aa1461026d57806333a8383c146102a6575b600080fd5b61023f6004803603606081101561022c57600080fd5b5080359060208101359060400135610964565b005b61023f6004803603604081101561025757600080fd5b506001600160a01b038135169060200135610a4d565b61028a6004803603602081101561028357600080fd5b5035610b3c565b604080516001600160a01b039092168252519081900360200190f35b61023f600480360360c08110156102bc57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102e657600080fd5b8201836020820111156102f857600080fd5b803590602001918460018302840111600160201b8311171561031957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060208101359060408101359060600135610c2d565b610373610df2565b60408051918252519081900360200190f35b61023f6004803603602081101561039b57600080fd5b5035610ed6565b61023f600480360360608110156103b857600080fd5b50803590602081013590604001356110a5565b61023f600480360360808110156103e157600080fd5b506001600160a01b038135169060208101359060408101359060600135611199565b61023f6004803603606081101561041957600080fd5b508035906001600160a01b0360208201351690604001356112cf565b61023f61145a565b61045a6004803603602081101561045357600080fd5b50356114b5565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0316608084015260a0830152519081900360c00190f35b61028a61167e565b61023f600480360360608110156104b457600080fd5b508035906001600160a01b03602082013516906040013561168d565b61023f600480360360608110156104e657600080fd5b50803590602081013590604001356001600160a01b0316611810565b61028a611902565b610512611911565b604080519115158252519081900360200190f35b61023f6004803603604081101561053c57600080fd5b5080359060200135611922565b61023f6004803603604081101561055f57600080fd5b5080359060200135611a16565b61023f6004803603604081101561058257600080fd5b506001600160a01b038135169060200135611b0a565b61023f600480360360808110156105ae57600080fd5b506001600160a01b038135169060208101359060408101359060600135611bf9565b61023f600480360360608110156105e657600080fd5b5080359060208101359060400135611cfe565b61023f6004803603604081101561060f57600080fd5b5080359060200135611de7565b61023f6004803603606081101561063257600080fd5b508035906001600160a01b036020820135169060400135611edb565b61023f6004803603608081101561066457600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135600160201b81111561069e57600080fd5b8201836020820111156106b057600080fd5b803590602001918460018302840111600160201b831117156106d157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061205e945050505050565b61023f6004803603608081101561072857600080fd5b508035906001600160a01b036020820135169060408101359060600135612202565b61023f6004803603606081101561076057600080fd5b5080359060208101359060400135612391565b6103736004803603602081101561078957600080fd5b503561250b565b61023f600480360360608110156107a657600080fd5b508035906020810135906040013561268b565b61023f600480360360408110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460208302840111600160201b8311171561081c57600080fd5b919390929091602081019035600160201b81111561083957600080fd5b82018360208201111561084b57600080fd5b803590602001918460208302840111600160201b8311171561086c57600080fd5b509092509050612774565b6103736004803603602081101561088d57600080fd5b5035612827565b61023f600480360360808110156108aa57600080fd5b508035906001600160a01b036020820135169060408101359060600135612839565b61023f600480360360408110156108e257600080fd5b50803590602001356129c8565b61023f6004803603602081101561090557600080fd5b50356001600160a01b0316612abc565b61023f6004803603604081101561092b57600080fd5b50803590602001356001600160a01b0316612ad9565b61023f6004803603604081101561095757600080fd5b5080359060200135612bc8565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156109a857600080fd5b505afa1580156109bc573d6000803e3d6000fd5b505050506040513d60208110156109d257600080fd5b50516001600160a01b031614610a195760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f683d0f47c7fa11331f4e9563b3f5a7fdc3d3c5b75c600357a91d991f5a13a43760405160405180910390a4505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610a9157600080fd5b505afa158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b50516001600160a01b031614610b025760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60405181906001600160a01b038416907ff40b9ca28516abde647ef8ed0e7b155e16347eb4d8dd6eb29989ed2c0c3d27e890600090a35050565b60025460408051630a1ef8f960e21b815290516000926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d6020811015610bab57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b158015610bf757600080fd5b505afa158015610c0b573d6000803e3d6000fd5b505050506040513d610100811015610c2257600080fd5b5060c0015192915050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610c7157600080fd5b505afa158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b50516001600160a01b031614610ce25760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b600084815260016020819052604090912054610d039163ffffffff612cae16565b60016000868152602001908152602001600020819055508284876001600160a01b03167f68c13e4125b983d7e2d6114246f443e567ec6c4ee5b4d4a7ef6100b1402bfd84600160008981526020019081526020016000205486868b6040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610dad578181015183820152602001610d95565b50505050905090810190601f168015610dda5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4505050505050565b60025460408051630a1ef8f960e21b815290516000926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610e3757600080fd5b505afa158015610e4b573d6000803e3d6000fd5b505050506040513d6020811015610e6157600080fd5b50516040805163017c2b9160e41b815290516001600160a01b03909216916317c2b91091600480820192602092909190829003018186803b158015610ea557600080fd5b505afa158015610eb9573d6000803e3d6000fd5b505050506040513d6020811015610ecf57600080fd5b5051919050565b80600080600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2857600080fd5b505afa158015610f3c573d6000803e3d6000fd5b505050506040513d6020811015610f5257600080fd5b505160408051630d6a8b9160e21b81526004810186905290519192506001600160a01b038316916335aa2e449160248082019261010092909190829003018186803b158015610fa057600080fd5b505afa158015610fb4573d6000803e3d6000fd5b505050506040513d610100811015610fcb57600080fd5b5060c0015191506001600160a01b038216331480610ff157506001600160a01b03811633145b61102c5760405162461bcd60e51b8152600401808060200182810382526037815260200180612d5a6037913960400191505060405180910390fd5b60008481526001602081905260409091205461104d9163ffffffff612cae16565b6000858152600160205260409020556110658461250b565b600085815260016020526040808220549051909187917f35af9eea1f0e7b300b0a14fae90139a072470e44daa3f14b5069bebbc1265bda9190a450505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156110e957600080fd5b505afa1580156110fd573d6000803e3d6000fd5b505050506040513d602081101561111357600080fd5b50516001600160a01b03161461115a5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6040805183815260208101839052815185927f09b24121f82c610c13909ec63bd0843468819a45f6eda5838c3a80568c2046a8928290030190a2505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b50516001600160a01b03161461124e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60008381526001602081905260409091205461126f9163ffffffff612cae16565b600084815260016020908152604091829020839055815192835282018490528051839286926001600160a01b038916927f69b288bb79cd5386c9fe0af060f650e823bcdfa96a44cdc07f862db060f571209281900390910190a450505050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d602081101561134a57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561139657600080fd5b505afa1580156113aa573d6000803e3d6000fd5b505050506040513d6101008110156113c157600080fd5b5060c0015190506001600160a01b0381163314611413576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b6040805184815290516001600160a01b0386169187917f770c7c7d8e20347e5080e2ac70e8519793bedaff621f044396fd8d6d052c4aa89181900360200190a35050505050565b611462611911565b61146b57600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000806000806000806000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561150e57600080fd5b505afa158015611522573d6000803e3d6000fd5b505050506040513d602081101561153857600080fd5b505160408051630d6a8b9160e21b8152600481018b9052905191925060009182916001600160a01b038516916335aa2e449160248082019261010092909190829003018186803b15801561158b57600080fd5b505afa15801561159f573d6000803e3d6000fd5b505050506040513d6101008110156115b657600080fd5b50805160208201516040830151606084015160a085015160c086015160e090960151949e50929c50909a509850965090925090508060038111156115f657fe5b93506001600160a01b0382161561167257816001600160a01b0316635d1e36166040518163ffffffff1660e01b815260040160206040518083038186803b15801561164057600080fd5b505afa158015611654573d6000803e3d6000fd5b505050506040513d602081101561166a57600080fd5b505197909701965b50505091939550919395565b6002546001600160a01b031681565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156116de57600080fd5b505afa1580156116f2573d6000803e3d6000fd5b505050506040513d602081101561170857600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d61010081101561177f57600080fd5b5060c0015190506001600160a01b03811633146117d1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b82846001600160a01b0316867f0f9ccdda16b467e719059c85ebd8383fcb7f8ffa5576629fe3b842836e04dad160405160405180910390a45050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b15801561185457600080fd5b505afa158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b50516001600160a01b0316146118c55760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b806001600160a01b031682847ff6566d8fbe8f23227826ba3da2ecc1ec48698c5be051a829965e3358fd5b965860405160405180910390a4505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d602081101561199057600080fd5b50516001600160a01b0316146119d75760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f9444bfcfa6aed72a15da73de1220dcc07d7864119c44abfec0037bbcacefda98929181900390910190a15050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b50516001600160a01b031614611acb5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f4a501a9c4d5cce5c32415945bbc8973764f31b844e3e8fd4c15f51f315ac8792929181900390910190a15050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611b4e57600080fd5b505afa158015611b62573d6000803e3d6000fd5b505050506040513d6020811015611b7857600080fd5b50516001600160a01b031614611bbf5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60405181906001600160a01b038416907f2c3bb5458e3dd671c31974c4ca8e8ebc2cdd892ae8602374d9a6f789b00c6b9490600090a35050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611c3d57600080fd5b505afa158015611c51573d6000803e3d6000fd5b505050506040513d6020811015611c6757600080fd5b50516001600160a01b031614611cae5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b82846001600160a01b03167f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de008484604051808381526020018281526020019250505060405180910390a350505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611d4257600080fd5b505afa158015611d56573d6000803e3d6000fd5b505050506040513d6020811015611d6c57600080fd5b50516001600160a01b031614611db35760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f41e5e4590cfcde2f03ee9281c54d03acad8adffb83f8310d66b894532470ba3560405160405180910390a4505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d6020811015611e5557600080fd5b50516001600160a01b031614611e9c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517ff67f33e8589d3ea0356303c0f9a8e764873692159f777ff79e4fc523d389dfcd929181900390910190a15050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2c57600080fd5b505afa158015611f40573d6000803e3d6000fd5b505050506040513d6020811015611f5657600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b158015611fa257600080fd5b505afa158015611fb6573d6000803e3d6000fd5b505050506040513d610100811015611fcd57600080fd5b5060c0015190506001600160a01b038116331461201f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b82846001600160a01b0316867f31d1715032654fde9867c0f095aecce1113049e30b9f4ecbaa6954ed6c63b8df60405160405180910390a45050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b50516001600160a01b0316146121135760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6000848152600160208190526040909120546121349163ffffffff612cae16565b6000858152600160209081526040808320849055805184815280830182815286519282019290925285516001600160a01b0380891696908a16958b957f086044c0612a8c965d4cccd907f0d588e40ad68438bd4c1274cac60f4c3a9d1f9592948a949093926060850192860191908190849084905b838110156121c15781810151838201526020016121a9565b50505050905090810190601f1680156121ee5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a450505050565b836000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561225357600080fd5b505afa158015612267573d6000803e3d6000fd5b505050506040513d602081101561227d57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b1580156122c957600080fd5b505afa1580156122dd573d6000803e3d6000fd5b505050506040513d6101008110156122f457600080fd5b5060c0015190506001600160a01b0381163314612346576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b83856001600160a01b0316877fc9afff0972d33d68c8d330fe0ebd0e9f54491ad8c59ae17330a9206f280f0865866040518082815260200191505060405180910390a4505050505050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156123e257600080fd5b505afa1580156123f6573d6000803e3d6000fd5b505050506040513d602081101561240c57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561245857600080fd5b505afa15801561246c573d6000803e3d6000fd5b505050506040513d61010081101561248357600080fd5b5060c0015190506001600160a01b03811633146124d5576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b8284867f7d5da5ece9d43013d62ab966f4704ca376b92be29ca6fbb958154baf1c0dc17e60405160405180910390a45050505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561255c57600080fd5b505afa158015612570573d6000803e3d6000fd5b505050506040513d602081101561258657600080fd5b505160408051630d6a8b9160e21b81526004810186905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b1580156125d257600080fd5b505afa1580156125e6573d6000803e3d6000fd5b505050506040513d6101008110156125fd57600080fd5b50805160c09091015190925090506001600160a01b0381161561268557806001600160a01b0316633a09bf446040518163ffffffff1660e01b815260040160206040518083038186803b15801561265357600080fd5b505afa158015612667573d6000803e3d6000fd5b505050506040513d602081101561267d57600080fd5b505191909101905b50919050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156126cf57600080fd5b505afa1580156126e3573d6000803e3d6000fd5b505050506040513d60208110156126f957600080fd5b50516001600160a01b0316146127405760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f1002381ecf76700f6f0ab4c90b9f523e39df7b0482b71ec63cf62cf85412047060405160405180910390a4505050565b61277c611911565b61278557600080fd5b8281146127d0576040805162461bcd60e51b81526020600482015260146024820152730c2e4cee640d8cadccee8d040dad2e6dac2e8c6d60631b604482015290519081900360640190fd5b60005b83811015612820578282828181106127e757fe5b90506020020135600160008787858181106127fe57fe5b60209081029290920135835250810191909152604001600020556001016127d3565b5050505050565b60016020526000908152604090205481565b836000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561288a57600080fd5b505afa15801561289e573d6000803e3d6000fd5b505050506040513d60208110156128b457600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561290057600080fd5b505afa158015612914573d6000803e3d6000fd5b505050506040513d61010081101561292b57600080fd5b5060c0015190506001600160a01b038116331461297d576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b83856001600160a01b0316877f7e86625aa6e668407f095af342e0cc237809c4c5086b4d665a0067de122980a9866040518082815260200191505060405180910390a4505050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015612a0c57600080fd5b505afa158015612a20573d6000803e3d6000fd5b505050506040513d6020811015612a3657600080fd5b50516001600160a01b031614612a7d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f5d16a900896e1160c2033bc940e6b072d3dc3b6a996fefb9b3b9b9678841824c929181900390910190a15050565b612ac4611911565b612acd57600080fd5b612ad681612cc7565b50565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015612b1d57600080fd5b505afa158015612b31573d6000803e3d6000fd5b505050506040513d6020811015612b4757600080fd5b50516001600160a01b031614612b8e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6040516001600160a01b0382169083907fd3cb87a9c75a0d21336afc0f79f7e398f06748db5ce1815af01d315c7c135c0b90600090a35050565b60025460408051631ab0168360e31b8152905133926001600160a01b03169163d580b418916004808301926020929190829003018186803b158015612c0c57600080fd5b505afa158015612c20573d6000803e3d6000fd5b505050506040513d6020811015612c3657600080fd5b50516001600160a01b031614612c7d5760405162461bcd60e51b8152600401808060200182810382526024815260200180612d366024913960400191505060405180910390fd5b604051819083907f4f5f38ee30b01a960b4dfdcd520a3ca59c1a664a32dcfe5418ca79b0de6b723690600090a35050565b600082820183811015612cc057600080fd5b9392505050565b6001600160a01b038116612cda57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe496e76616c69642073656e6465722c206e6f7420736c617368696e67206d616e61676572496e76616c69642073656e6465722c206e6f74207374616b65206d616e61676572206f722076616c696461746f7220636f6e7472616374496e76616c69642073656e6465722c206e6f742076616c696461746f72000000496e76616c69642073656e6465722c206e6f74207374616b65206d616e61676572a265627a7a723158205316d3df9356e71f8508554d8e0c0005adcdb8719915964ec6d451a38daff88664736f6c6343000511003200000000000000000000000033a02e6cc863d393d6bf231b697b82f6e499ca71
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063a3b1d8cb11610125578063ca7d34b6116100ad578063f1382b531161007c578063f1382b5314610894578063f1980a50146108cc578063f2fde38b146108ef578063f92ec5af14610915578063fb77c94e1461094157610211565b8063ca7d34b614610773578063e12ab1af14610790578063eae3f749146107b9578063ebde9f931461087757610211565b8063b6fa74c4116100f4578063b6fa74c4146105f9578063b7721d2d1461061c578063b80fbce51461064e578063c69d057314610712578063c98cc0021461074a57610211565b8063a3b1d8cb14610549578063a449d7951461056c578063ae2e26b114610598578063b685b26a146105d057610211565b8063605be9be116101a85780637f88a957116101775780637f88a9571461049e57806381dc101b146104d05780638da5cb5b146105025780638f32d59b1461050a578063a0e300a61461052657610211565b8063605be9be14610403578063715018a61461043557806378daaf691461043d5780637b1039991461049657610211565b80634b6b87ce116101e45780634b6b87ce1461036b578063532e19a9146103855780635616a7cc146103a25780635e04d483146103cb57610211565b80630934a6df14610216578063122b648114610241578063178d46aa1461026d57806333a8383c146102a6575b600080fd5b61023f6004803603606081101561022c57600080fd5b5080359060208101359060400135610964565b005b61023f6004803603604081101561025757600080fd5b506001600160a01b038135169060200135610a4d565b61028a6004803603602081101561028357600080fd5b5035610b3c565b604080516001600160a01b039092168252519081900360200190f35b61023f600480360360c08110156102bc57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102e657600080fd5b8201836020820111156102f857600080fd5b803590602001918460018302840111600160201b8311171561031957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060208101359060408101359060600135610c2d565b610373610df2565b60408051918252519081900360200190f35b61023f6004803603602081101561039b57600080fd5b5035610ed6565b61023f600480360360608110156103b857600080fd5b50803590602081013590604001356110a5565b61023f600480360360808110156103e157600080fd5b506001600160a01b038135169060208101359060408101359060600135611199565b61023f6004803603606081101561041957600080fd5b508035906001600160a01b0360208201351690604001356112cf565b61023f61145a565b61045a6004803603602081101561045357600080fd5b50356114b5565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0316608084015260a0830152519081900360c00190f35b61028a61167e565b61023f600480360360608110156104b457600080fd5b508035906001600160a01b03602082013516906040013561168d565b61023f600480360360608110156104e657600080fd5b50803590602081013590604001356001600160a01b0316611810565b61028a611902565b610512611911565b604080519115158252519081900360200190f35b61023f6004803603604081101561053c57600080fd5b5080359060200135611922565b61023f6004803603604081101561055f57600080fd5b5080359060200135611a16565b61023f6004803603604081101561058257600080fd5b506001600160a01b038135169060200135611b0a565b61023f600480360360808110156105ae57600080fd5b506001600160a01b038135169060208101359060408101359060600135611bf9565b61023f600480360360608110156105e657600080fd5b5080359060208101359060400135611cfe565b61023f6004803603604081101561060f57600080fd5b5080359060200135611de7565b61023f6004803603606081101561063257600080fd5b508035906001600160a01b036020820135169060400135611edb565b61023f6004803603608081101561066457600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135600160201b81111561069e57600080fd5b8201836020820111156106b057600080fd5b803590602001918460018302840111600160201b831117156106d157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061205e945050505050565b61023f6004803603608081101561072857600080fd5b508035906001600160a01b036020820135169060408101359060600135612202565b61023f6004803603606081101561076057600080fd5b5080359060208101359060400135612391565b6103736004803603602081101561078957600080fd5b503561250b565b61023f600480360360608110156107a657600080fd5b508035906020810135906040013561268b565b61023f600480360360408110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460208302840111600160201b8311171561081c57600080fd5b919390929091602081019035600160201b81111561083957600080fd5b82018360208201111561084b57600080fd5b803590602001918460208302840111600160201b8311171561086c57600080fd5b509092509050612774565b6103736004803603602081101561088d57600080fd5b5035612827565b61023f600480360360808110156108aa57600080fd5b508035906001600160a01b036020820135169060408101359060600135612839565b61023f600480360360408110156108e257600080fd5b50803590602001356129c8565b61023f6004803603602081101561090557600080fd5b50356001600160a01b0316612abc565b61023f6004803603604081101561092b57600080fd5b50803590602001356001600160a01b0316612ad9565b61023f6004803603604081101561095757600080fd5b5080359060200135612bc8565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156109a857600080fd5b505afa1580156109bc573d6000803e3d6000fd5b505050506040513d60208110156109d257600080fd5b50516001600160a01b031614610a195760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f683d0f47c7fa11331f4e9563b3f5a7fdc3d3c5b75c600357a91d991f5a13a43760405160405180910390a4505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610a9157600080fd5b505afa158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b50516001600160a01b031614610b025760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60405181906001600160a01b038416907ff40b9ca28516abde647ef8ed0e7b155e16347eb4d8dd6eb29989ed2c0c3d27e890600090a35050565b60025460408051630a1ef8f960e21b815290516000926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d6020811015610bab57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b158015610bf757600080fd5b505afa158015610c0b573d6000803e3d6000fd5b505050506040513d610100811015610c2257600080fd5b5060c0015192915050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610c7157600080fd5b505afa158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b50516001600160a01b031614610ce25760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b600084815260016020819052604090912054610d039163ffffffff612cae16565b60016000868152602001908152602001600020819055508284876001600160a01b03167f68c13e4125b983d7e2d6114246f443e567ec6c4ee5b4d4a7ef6100b1402bfd84600160008981526020019081526020016000205486868b6040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610dad578181015183820152602001610d95565b50505050905090810190601f168015610dda5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4505050505050565b60025460408051630a1ef8f960e21b815290516000926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015610e3757600080fd5b505afa158015610e4b573d6000803e3d6000fd5b505050506040513d6020811015610e6157600080fd5b50516040805163017c2b9160e41b815290516001600160a01b03909216916317c2b91091600480820192602092909190829003018186803b158015610ea557600080fd5b505afa158015610eb9573d6000803e3d6000fd5b505050506040513d6020811015610ecf57600080fd5b5051919050565b80600080600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2857600080fd5b505afa158015610f3c573d6000803e3d6000fd5b505050506040513d6020811015610f5257600080fd5b505160408051630d6a8b9160e21b81526004810186905290519192506001600160a01b038316916335aa2e449160248082019261010092909190829003018186803b158015610fa057600080fd5b505afa158015610fb4573d6000803e3d6000fd5b505050506040513d610100811015610fcb57600080fd5b5060c0015191506001600160a01b038216331480610ff157506001600160a01b03811633145b61102c5760405162461bcd60e51b8152600401808060200182810382526037815260200180612d5a6037913960400191505060405180910390fd5b60008481526001602081905260409091205461104d9163ffffffff612cae16565b6000858152600160205260409020556110658461250b565b600085815260016020526040808220549051909187917f35af9eea1f0e7b300b0a14fae90139a072470e44daa3f14b5069bebbc1265bda9190a450505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156110e957600080fd5b505afa1580156110fd573d6000803e3d6000fd5b505050506040513d602081101561111357600080fd5b50516001600160a01b03161461115a5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6040805183815260208101839052815185927f09b24121f82c610c13909ec63bd0843468819a45f6eda5838c3a80568c2046a8928290030190a2505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b50516001600160a01b03161461124e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60008381526001602081905260409091205461126f9163ffffffff612cae16565b600084815260016020908152604091829020839055815192835282018490528051839286926001600160a01b038916927f69b288bb79cd5386c9fe0af060f650e823bcdfa96a44cdc07f862db060f571209281900390910190a450505050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d602081101561134a57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561139657600080fd5b505afa1580156113aa573d6000803e3d6000fd5b505050506040513d6101008110156113c157600080fd5b5060c0015190506001600160a01b0381163314611413576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b6040805184815290516001600160a01b0386169187917f770c7c7d8e20347e5080e2ac70e8519793bedaff621f044396fd8d6d052c4aa89181900360200190a35050505050565b611462611911565b61146b57600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000806000806000806000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561150e57600080fd5b505afa158015611522573d6000803e3d6000fd5b505050506040513d602081101561153857600080fd5b505160408051630d6a8b9160e21b8152600481018b9052905191925060009182916001600160a01b038516916335aa2e449160248082019261010092909190829003018186803b15801561158b57600080fd5b505afa15801561159f573d6000803e3d6000fd5b505050506040513d6101008110156115b657600080fd5b50805160208201516040830151606084015160a085015160c086015160e090960151949e50929c50909a509850965090925090508060038111156115f657fe5b93506001600160a01b0382161561167257816001600160a01b0316635d1e36166040518163ffffffff1660e01b815260040160206040518083038186803b15801561164057600080fd5b505afa158015611654573d6000803e3d6000fd5b505050506040513d602081101561166a57600080fd5b505197909701965b50505091939550919395565b6002546001600160a01b031681565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156116de57600080fd5b505afa1580156116f2573d6000803e3d6000fd5b505050506040513d602081101561170857600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d61010081101561177f57600080fd5b5060c0015190506001600160a01b03811633146117d1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b82846001600160a01b0316867f0f9ccdda16b467e719059c85ebd8383fcb7f8ffa5576629fe3b842836e04dad160405160405180910390a45050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b15801561185457600080fd5b505afa158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b50516001600160a01b0316146118c55760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b806001600160a01b031682847ff6566d8fbe8f23227826ba3da2ecc1ec48698c5be051a829965e3358fd5b965860405160405180910390a4505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d602081101561199057600080fd5b50516001600160a01b0316146119d75760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f9444bfcfa6aed72a15da73de1220dcc07d7864119c44abfec0037bbcacefda98929181900390910190a15050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b50516001600160a01b031614611acb5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f4a501a9c4d5cce5c32415945bbc8973764f31b844e3e8fd4c15f51f315ac8792929181900390910190a15050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611b4e57600080fd5b505afa158015611b62573d6000803e3d6000fd5b505050506040513d6020811015611b7857600080fd5b50516001600160a01b031614611bbf5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b60405181906001600160a01b038416907f2c3bb5458e3dd671c31974c4ca8e8ebc2cdd892ae8602374d9a6f789b00c6b9490600090a35050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611c3d57600080fd5b505afa158015611c51573d6000803e3d6000fd5b505050506040513d6020811015611c6757600080fd5b50516001600160a01b031614611cae5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b82846001600160a01b03167f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de008484604051808381526020018281526020019250505060405180910390a350505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611d4257600080fd5b505afa158015611d56573d6000803e3d6000fd5b505050506040513d6020811015611d6c57600080fd5b50516001600160a01b031614611db35760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f41e5e4590cfcde2f03ee9281c54d03acad8adffb83f8310d66b894532470ba3560405160405180910390a4505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d6020811015611e5557600080fd5b50516001600160a01b031614611e9c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517ff67f33e8589d3ea0356303c0f9a8e764873692159f777ff79e4fc523d389dfcd929181900390910190a15050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2c57600080fd5b505afa158015611f40573d6000803e3d6000fd5b505050506040513d6020811015611f5657600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b158015611fa257600080fd5b505afa158015611fb6573d6000803e3d6000fd5b505050506040513d610100811015611fcd57600080fd5b5060c0015190506001600160a01b038116331461201f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b82846001600160a01b0316867f31d1715032654fde9867c0f095aecce1113049e30b9f4ecbaa6954ed6c63b8df60405160405180910390a45050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b50516001600160a01b0316146121135760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6000848152600160208190526040909120546121349163ffffffff612cae16565b6000858152600160209081526040808320849055805184815280830182815286519282019290925285516001600160a01b0380891696908a16958b957f086044c0612a8c965d4cccd907f0d588e40ad68438bd4c1274cac60f4c3a9d1f9592948a949093926060850192860191908190849084905b838110156121c15781810151838201526020016121a9565b50505050905090810190601f1680156121ee5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a450505050565b836000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561225357600080fd5b505afa158015612267573d6000803e3d6000fd5b505050506040513d602081101561227d57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b1580156122c957600080fd5b505afa1580156122dd573d6000803e3d6000fd5b505050506040513d6101008110156122f457600080fd5b5060c0015190506001600160a01b0381163314612346576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b83856001600160a01b0316877fc9afff0972d33d68c8d330fe0ebd0e9f54491ad8c59ae17330a9206f280f0865866040518082815260200191505060405180910390a4505050505050565b826000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156123e257600080fd5b505afa1580156123f6573d6000803e3d6000fd5b505050506040513d602081101561240c57600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561245857600080fd5b505afa15801561246c573d6000803e3d6000fd5b505050506040513d61010081101561248357600080fd5b5060c0015190506001600160a01b03811633146124d5576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b8284867f7d5da5ece9d43013d62ab966f4704ca376b92be29ca6fbb958154baf1c0dc17e60405160405180910390a45050505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561255c57600080fd5b505afa158015612570573d6000803e3d6000fd5b505050506040513d602081101561258657600080fd5b505160408051630d6a8b9160e21b81526004810186905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b1580156125d257600080fd5b505afa1580156125e6573d6000803e3d6000fd5b505050506040513d6101008110156125fd57600080fd5b50805160c09091015190925090506001600160a01b0381161561268557806001600160a01b0316633a09bf446040518163ffffffff1660e01b815260040160206040518083038186803b15801561265357600080fd5b505afa158015612667573d6000803e3d6000fd5b505050506040513d602081101561267d57600080fd5b505191909101905b50919050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b1580156126cf57600080fd5b505afa1580156126e3573d6000803e3d6000fd5b505050506040513d60208110156126f957600080fd5b50516001600160a01b0316146127405760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b8082847f1002381ecf76700f6f0ab4c90b9f523e39df7b0482b71ec63cf62cf85412047060405160405180910390a4505050565b61277c611911565b61278557600080fd5b8281146127d0576040805162461bcd60e51b81526020600482015260146024820152730c2e4cee640d8cadccee8d040dad2e6dac2e8c6d60631b604482015290519081900360640190fd5b60005b83811015612820578282828181106127e757fe5b90506020020135600160008787858181106127fe57fe5b60209081029290920135835250810191909152604001600020556001016127d3565b5050505050565b60016020526000908152604090205481565b836000600260009054906101000a90046001600160a01b03166001600160a01b031663287be3e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561288a57600080fd5b505afa15801561289e573d6000803e3d6000fd5b505050506040513d60208110156128b457600080fd5b505160408051630d6a8b9160e21b81526004810185905290516001600160a01b03909216916335aa2e449160248082019261010092909190829003018186803b15801561290057600080fd5b505afa158015612914573d6000803e3d6000fd5b505050506040513d61010081101561292b57600080fd5b5060c0015190506001600160a01b038116331461297d576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d91833981519152604482015290519081900360640190fd5b83856001600160a01b0316877f7e86625aa6e668407f095af342e0cc237809c4c5086b4d665a0067de122980a9866040518082815260200191505060405180910390a4505050505050565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015612a0c57600080fd5b505afa158015612a20573d6000803e3d6000fd5b505050506040513d6020811015612a3657600080fd5b50516001600160a01b031614612a7d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b604080518381526020810183905281517f5d16a900896e1160c2033bc940e6b072d3dc3b6a996fefb9b3b9b9678841824c929181900390910190a15050565b612ac4611911565b612acd57600080fd5b612ad681612cc7565b50565b60025460408051630a1ef8f960e21b8152905133926001600160a01b03169163287be3e4916004808301926020929190829003018186803b158015612b1d57600080fd5b505afa158015612b31573d6000803e3d6000fd5b505050506040513d6020811015612b4757600080fd5b50516001600160a01b031614612b8e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612db16021913960400191505060405180910390fd5b6040516001600160a01b0382169083907fd3cb87a9c75a0d21336afc0f79f7e398f06748db5ce1815af01d315c7c135c0b90600090a35050565b60025460408051631ab0168360e31b8152905133926001600160a01b03169163d580b418916004808301926020929190829003018186803b158015612c0c57600080fd5b505afa158015612c20573d6000803e3d6000fd5b505050506040513d6020811015612c3657600080fd5b50516001600160a01b031614612c7d5760405162461bcd60e51b8152600401808060200182810382526024815260200180612d366024913960400191505060405180910390fd5b604051819083907f4f5f38ee30b01a960b4dfdcd520a3ca59c1a664a32dcfe5418ca79b0de6b723690600090a35050565b600082820183811015612cc057600080fd5b9392505050565b6001600160a01b038116612cda57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe496e76616c69642073656e6465722c206e6f7420736c617368696e67206d616e61676572496e76616c69642073656e6465722c206e6f74207374616b65206d616e61676572206f722076616c696461746f7220636f6e7472616374496e76616c69642073656e6465722c206e6f742076616c696461746f72000000496e76616c69642073656e6465722c206e6f74207374616b65206d616e61676572a265627a7a723158205316d3df9356e71f8508554d8e0c0005adcdb8719915964ec6d451a38daff88664736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000033a02e6cc863d393d6bf231b697b82f6e499ca71
-----Decoded View---------------
Arg [0] : _registry (address): 0x33a02E6cC863D393d6Bf231B697b82F6e499cA71
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000033a02e6cc863d393d6bf231b697b82f6e499ca71
Deployed Bytecode Sourcemap
22062:14576:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22062:14576:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32364:215;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32364:215:0;;;;;;;;;;;;:::i;:::-;;32945:115;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32945:115:0;;;;;;;;:::i;34726:308::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34726:308:0;;:::i;:::-;;;;-1:-1:-1;;;;;34726:308:0;;;;;;;;;;;;;;28646:527;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;28646:527:0;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28646:527:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28646:527:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28646:527:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28646:527:0;;-1:-1:-1;;28646:527:0;;;-1:-1:-1;;;28646:527:0;;;;;;;;;;;;;;:::i;34484:234::-;;;:::i;:::-;;;;;;;;;;;;;;;;31781:356;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31781:356:0;;:::i;30298:180::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30298:180:0;;;;;;;;;;;;:::i;29409:430::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;29409:430:0;;;;;;;;;;;;;;;;;;:::i;36084:214::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36084:214:0;;;-1:-1:-1;;;;;36084:214:0;;;;;;;;;;:::i;10590:140::-;;;:::i;33068:915::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33068:915:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33068:915:0;;;;;;;;;;;;;;;;;;27024:24;;;:::i;35841:235::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35841:235:0;;;-1:-1:-1;;;;;35841:235:0;;;;;;;;;;:::i;30486:184::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30486:184:0;;;;;;;;;;;-1:-1:-1;;;;;30486:184:0;;:::i;9800:79::-;;;:::i;10135:92::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;31193:184;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31193:184:0;;;;;;;:::i;31385:212::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31385:212:0;;;;;;;:::i;32822:115::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32822:115:0;;;;;;;;:::i;29181:220::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;29181:220:0;;;;;;;;;;;;;;;;;;:::i;32145:211::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32145:211:0;;;;;;;;;;;;:::i;31605:168::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31605:168:0;;;;;;;:::i;35596:237::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35596:237:0;;;-1:-1:-1;;;;;35596:237:0;;;;;;;;;;:::i;29847:443::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;29847:443:0;;;-1:-1:-1;;;;;29847:443:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;29847:443:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29847:443:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29847:443:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29847:443:0;;-1:-1:-1;29847:443:0;;-1:-1:-1;;;;;29847:443:0:i;35088:246::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;35088:246:0;;;-1:-1:-1;;;;;35088:246:0;;;;;;;;;;;;;;;:::i;36306:329::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36306:329:0;;;;;;;;;;;;:::i;33991:485::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33991:485:0;;:::i;32587:227::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32587:227:0;;;;;;;;;;;;:::i;28292:345::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28292:345:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28292:345:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28292:345:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28292:345:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28292:345:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28292:345:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;28292:345:0;;-1:-1:-1;28292:345:0;-1:-1:-1;28292:345:0;:::i;22134:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22134:49:0;;:::i;35342:246::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;35342:246:0;;;-1:-1:-1;;;;;35342:246:0;;;;;;;;;;;;;;;:::i;30999:186::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30999:186:0;;;;;;;:::i;10907:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10907:109:0;-1:-1:-1;;;;;10907:109:0;;:::i;30678:158::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30678:158:0;;;;;;-1:-1:-1;;;;;30678:158:0;;:::i;30844:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30844:147:0;;;;;;;:::i;32364:215::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32557:13;32549:6;32536:11;32523:48;;;;;;;;;;32364:215;;;:::o;32945:115::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33033:19;;33048:3;;-1:-1:-1;;;;;33033:19:0;;;;;;;;32945:115;;:::o;34726:308::-;34944:8;;:33;;;-1:-1:-1;;;34944:33:0;;;;34832:25;;-1:-1:-1;;;;;34944:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;34944:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34944:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34944:33:0;34911:115;;;-1:-1:-1;;;34911:115:0;;;;;;;;;;-1:-1:-1;;;;;34911:102:0;;;;;;:115;;;;;;;;;;;;;;;:102;:115;;;5:2:-1;;;;30:1;27;20:12;5:2;34911:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34911:115:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;34911:115:0;;;;34726:308;-1:-1:-1;;34726:308:0:o;28646:527::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28911:27;;;;28943:1;28911:27;;;;;;;;;:34;;;:31;:34;:::i;:::-;28881:14;:27;28896:11;28881:27;;;;;;;;;;;:64;;;;29071:15;29003:11;28982:6;-1:-1:-1;;;;;28961:204:0;;29029:14;:27;29044:11;29029:27;;;;;;;;;;;;29101:6;29122:5;29142:12;28961:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28961:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28646:527;;;;;;:::o;34484:234::-;34643:8;;:33;;;-1:-1:-1;;;34643:33:0;;;;34563:24;;-1:-1:-1;;;;;34643:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;34643:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34643:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34643:33:0;34624:86;;;-1:-1:-1;;;34624:86:0;;;;-1:-1:-1;;;;;34624:84:0;;;;;;:86;;;;;34643:33;;34624:86;;;;;;;;:84;:86;;;5:2:-1;;;;30:1;27;20:12;5:2;34624:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34624:86:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34624:86:0;;34484:234;-1:-1:-1;34484:234:0:o;31781:356::-;31883:11;27477:17;27505:21;27529:8;;;;;;;;;-1:-1:-1;;;;;27529:8:0;-1:-1:-1;;;;;27529:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27529:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27529:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27529:33:0;27601:81;;;-1:-1:-1;;;27601:81:0;;;;;;;;;;27529:33;;-1:-1:-1;;;;;;27601:44:0;;;;;:81;;;;;;;;;;;;;;;:44;:81;;;5:2:-1;;;;30:1;27;20:12;5:2;27601:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27601:81:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;27601:81:0;;;;-1:-1:-1;;;;;;27701:23:0;;27714:10;27701:23;;:54;;-1:-1:-1;;;;;;27728:27:0;;27745:10;27728:27;27701:54;27693:131;;;;-1:-1:-1;;;27693:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31942:27;;;;31974:1;31942:27;;;;;;;;;:34;;;:31;:34;:::i;:::-;31912:27;;;;:14;:27;;;;;:64;32086:32;31927:11;32086:19;:32::i;:::-;32044:27;;;;:14;:27;;;;;;;31992:137;;32044:27;;32059:11;;31992:137;;32044:27;31992:137;31781:356;;;;:::o;30298:180::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30434:36;;;;;;;;;;;;;;30443:11;;30434:36;;;;;;;;30298:180;;;:::o;29409:430::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29619:27;;;;29651:1;29619:27;;;;;;;;;:34;;;:31;:34;:::i;:::-;29589:27;;;;:14;:27;;;;;;;;;:64;;;29669:162;;;;;;;;;;;;29814:6;;29604:11;;-1:-1:-1;;;;;29669:162:0;;;;;;;;;;;;;29409:430;;;;:::o;36084:214::-;36212:11;27120:17;27209:8;;;;;;;;;-1:-1:-1;;;;;27209:8:0;-1:-1:-1;;;;;27209:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27209:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27209:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27209:33:0;27176:115;;;-1:-1:-1;;;27176:115:0;;;;;;;;;;-1:-1:-1;;;;;27176:102:0;;;;;;:115;;;;;;;;;;;;;;;:102;:115;;;5:2:-1;;;;30:1;27;20:12;5:2;27176:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27176:115:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;27176:115:0;;;;-1:-1:-1;;;;;;27310:23:0;;27323:10;27310:23;27302:74;;;;;-1:-1:-1;;;27302:74:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27302:74:0;;;;;;;;;;;;;;;36246:44;;;;;;;;-1:-1:-1;;;;;36246:44:0;;;36264:11;;36246:44;;;;;;;;;36084:214;;;;;:::o;10590:140::-;10012:9;:7;:9::i;:::-;10004:18;;;;;;10689:1;10673:6;;10652:40;;-1:-1:-1;;;;;10673:6:0;;;;10652:40;;10689:1;;10652:40;10720:1;10703:19;;-1:-1:-1;;;;;;10703:19:0;;;10590:140::o;33068:915::-;33177:14;33206;33235:23;33273:25;33313:14;33342:15;33385:31;33452:8;;;;;;;;;-1:-1:-1;;;;;33452:8:0;-1:-1:-1;;;;;33452:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33452:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33452:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33452:33:0;33777:36;;;-1:-1:-1;;;33777:36:0;;;;;;;;;;33452:33;;-1:-1:-1;33507:17:0;;;;-1:-1:-1;;;;;33777:23:0;;;;;:36;;;;;;;;;;;;;;;:23;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;33777:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33777:36:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;33777:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33777:36:0;;-1:-1:-1;33777:36:0;;-1:-1:-1;33777:36:0;-1:-1:-1;33777:36:0;-1:-1:-1;33777:36:0;;-1:-1:-1;33777:36:0;-1:-1:-1;33777:36:0;33834:15;;;;;;;;33824:25;-1:-1:-1;;;;;;33864:25:0;;;33860:116;;33935:9;-1:-1:-1;;;;;33916:46:0;;:48;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33916:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33916:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33916:48:0;33906:58;;;;;33860:116;33068:915;;;;;;;;;;:::o;27024:24::-;;;-1:-1:-1;;;;;27024:24:0;;:::o;35841:235::-;35990:11;27120:17;27209:8;;;;;;;;;-1:-1:-1;;;;;27209:8:0;-1:-1:-1;;;;;27209:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27209:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27209:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27209:33:0;27176:115;;;-1:-1:-1;;;27176:115:0;;;;;;;;;;-1:-1:-1;;;;;27176:102:0;;;;;;:115;;;;;;;;;;;;;;;:102;:115;;;5:2:-1;;;;30:1;27;20:12;5:2;27176:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27176:115:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;27176:115:0;;;;-1:-1:-1;;;;;;27310:23:0;;27323:10;27310:23;27302:74;;;;;-1:-1:-1;;;27302:74:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27302:74:0;;;;;;;;;;;;;;;36056:11;36050:4;-1:-1:-1;;;;;36019:49:0;36037:11;36019:49;;;;;;;;;;35841:235;;;;;:::o;30486:184::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30655:6;-1:-1:-1;;;;;30624:38:0;30644:9;30631:11;30624:38;;;;;;;;;;30486:184;;;:::o;9800:79::-;9838:7;9865:6;-1:-1:-1;;;;;9865:6:0;9800:79;:::o;10135:92::-;10175:4;10213:6;-1:-1:-1;;;;;10213:6:0;10199:10;:20;;10135:92::o;31193:184::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31327:42;;;;;;;;;;;;;;;;;;;;;;;;;31193:184;;:::o;31385:212::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31534:55;;;;;;;;;;;;;;;;;;;;;;;;;31385:212;;:::o;32822:115::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32910:19;;32925:3;;-1:-1:-1;;;;;32910:19:0;;;;;;;;32822:115;;:::o;29181:220::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29366:11;29360:4;-1:-1:-1;;;;;29351:42:0;;29379:6;29387:5;29351:42;;;;;;;;;;;;;;;;;;;;;;;;29181:220;;;;:::o;32145:211::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32336:11;32328:6;32315:11;32302:46;;;;;;;;;;32145:211;;;:::o;31605:168::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31731:34;;;;;;;;;;;;;;;;;;;;;;;;;31605:168;;:::o;35596:237::-;35745:11;27120:17;27209:8;;;;;;;;;-1:-1:-1;;;;;27209:8:0;-1:-1:-1;;;;;27209:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27209:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27209:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27209:33:0;27176:115;;;-1:-1:-1;;;27176:115:0;;;;;;;;;;-1:-1:-1;;;;;27176:102:0;;;;;;:115;;;;;;;;;;;;;;;:102;:115;;;5:2:-1;;;;30:1;27;20:12;5:2;27176:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27176:115:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;27176:115:0;;;;-1:-1:-1;;;;;;27310:23:0;;27323:10;27310:23;27302:74;;;;;-1:-1:-1;;;27302:74:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27302:74:0;;;;;;;;;;;;;;;35817:7;35811:4;-1:-1:-1;;;;;35774:51:0;35798:11;35774:51;;;;;;;;;;35596:237;;;;;:::o;29847:443::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30066:27;;;;30098:1;30066:27;;;;;;;;;:34;;;:31;:34;:::i;:::-;30036:27;;;;:14;:27;;;;;;;;:64;;;30116:166;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30116:166:0;;;;;;;;30051:11;;30116:166;;30036:64;;30259:12;;30116:166;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30116:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29847:443;;;;:::o;35088:246::-;35251:11;27120:17;27209:8;;;;;;;;;-1:-1:-1;;;;;27209:8:0;-1:-1:-1;;;;;27209:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27209:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27209:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27209:33:0;27176:115;;;-1:-1:-1;;;27176:115:0;;;;;;;;;;-1:-1:-1;;;;;27176:102:0;;;;;;:115;;;;;;;;;;;;;;;:102;:115;;;5:2:-1;;;;30:1;27;20:12;5:2;27176:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27176:115:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;27176:115:0;;;;-1:-1:-1;;;;;;27310:23:0;;27323:10;27310:23;27302:74;;;;;-1:-1:-1;;;27302:74:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27302:74:0;;;;;;;;;;;;;;;35311:6;35305:4;-1:-1:-1;;;;;35280:46:0;35292:11;35280:46;35319:6;35280:46;;;;;;;;;;;;;;;;;;35088:246;;;;;;:::o;36306:329::-;36477:11;27120:17;27209:8;;;;;;;;;-1:-1:-1;;;;;27209:8:0;-1:-1:-1;;;;;27209:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27209:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27209:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27209:33:0;27176:115;;;-1:-1:-1;;;27176:115:0;;;;;;;;;;-1:-1:-1;;;;;27176:102:0;;;;;;:115;;;;;;;;;;;;;;;:102;:115;;;5:2:-1;;;;30:1;27;20:12;5:2;27176:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27176:115:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;27176:115:0;;;;-1:-1:-1;;;;;;27310:23:0;;27323:10;27310:23;27302:74;;;;;-1:-1:-1;;;27302:74:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27302:74:0;;;;;;;;;;;;;;;36599:17;36567;36541:11;36506:121;;;;;;;;;;36306:329;;;;;:::o;33991:485::-;34089:22;34129:23;34244:8;;;;;;;;;-1:-1:-1;;;;;34244:8:0;-1:-1:-1;;;;;34244:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34244:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34244:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34244:33:0;34211:115;;;-1:-1:-1;;;34211:115:0;;;;;;;;;;-1:-1:-1;;;;;34211:102:0;;;;;;:115;;;;;;;;;;;;;;;:102;:115;;;5:2:-1;;;;30:1;27;20:12;5:2;34211:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34211:115:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;34211:115:0;;;;;;;;;-1:-1:-1;34211:115:0;-1:-1:-1;;;;;;34341:31:0;;;34337:132;;34426:15;-1:-1:-1;;;;;34407:48:0;;:50;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34407:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34407:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34407:50:0;34389:68;;;;;34337:132;33991:485;;;;:::o;32587:227::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32799:6;32783:14;32767;32752:54;;;;;;;;;;32587:227;;;:::o;28292:345::-;10012:9;:7;:9::i;:::-;10004:18;;;;;;28436:36;;;28428:69;;;;;-1:-1:-1;;;28428:69:0;;;;;;;;;;;;-1:-1:-1;;;28428:69:0;;;;;;;;;;;;;;;28515:9;28510:120;28530:23;;;28510:120;;;28609:6;;28616:1;28609:9;;;;;;;;;;;;;28575:14;:31;28590:12;;28603:1;28590:15;;;;;;;;;;;;;;;;28575:31;;-1:-1:-1;28575:31:0;;;;;;;;-1:-1:-1;28575:31:0;:43;28555:3;;28510:120;;;;28292:345;;;;:::o;22134:49::-;;;;;;;;;;;;;:::o;35342:246::-;35505:11;27120:17;27209:8;;;;;;;;;-1:-1:-1;;;;;27209:8:0;-1:-1:-1;;;;;27209:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27209:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27209:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27209:33:0;27176:115;;;-1:-1:-1;;;27176:115:0;;;;;;;;;;-1:-1:-1;;;;;27176:102:0;;;;;;:115;;;;;;;;;;;;;;;:102;:115;;;5:2:-1;;;;30:1;27;20:12;5:2;27176:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27176:115:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;27176:115:0;;;;-1:-1:-1;;;;;;27310:23:0;;27323:10;27310:23;27302:74;;;;;-1:-1:-1;;;27302:74:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27302:74:0;;;;;;;;;;;;;;;35565:6;35559:4;-1:-1:-1;;;;;35534:46:0;35546:11;35534:46;35573:6;35534:46;;;;;;;;;;;;;;;;;;35342:246;;;;;;:::o;30999:186::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31134:43;;;;;;;;;;;;;;;;;;;;;;;;;30999:186;;:::o;10907:109::-;10012:9;:7;:9::i;:::-;10004:18;;;;;;10980:28;10999:8;10980:18;:28::i;:::-;10907:109;:::o;30678:158::-;27899:8;;:33;;;-1:-1:-1;;;27899:33:0;;;;27936:10;;-1:-1:-1;;;;;27899:8:0;;:31;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27899:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27899:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27899:33:0;-1:-1:-1;;;;;27899:47:0;;27891:102;;;;-1:-1:-1;;;27891:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30799:29;;-1:-1:-1;;;;;30799:29:0;;;30808:11;;30799:29;;;;;30678:158;;:::o;30844:147::-;28069:8;;:36;;;-1:-1:-1;;;28069:36:0;;;;28109:10;;-1:-1:-1;;;;;28069:8:0;;:34;;:36;;;;;;;;;;;;;;:8;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;28069:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28069:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28069:36:0;-1:-1:-1;;;;;28069:50:0;;28061:108;;;;-1:-1:-1;;;28061:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30961:22;;30976:6;;30969:5;;30961:22;;;;;30844:147;;:::o;8609:150::-;8667:7;8699:5;;;8723:6;;;;8715:15;;;;;;8750:1;8609:150;-1:-1:-1;;;8609:150:0:o;11166:187::-;-1:-1:-1;;;;;11240:22:0;;11232:31;;;;;;11300:6;;;11279:38;;-1:-1:-1;;;;;11279:38:0;;;;11300:6;;;11279:38;;;11328:6;:17;;-1:-1:-1;;;;;;11328:17:0;-1:-1:-1;;;;;11328:17:0;;;;;;;;;;11166:187::o
Swarm Source
bzzr://5316d3df9356e71f8508554d8e0c0005adcdb8719915964ec6d451a38daff886
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.