POA Network merged with the Gnosis Chain. More information about the merger.

Contract Address Details

0x7B2a3e7376b629e6C9f48B20C14a1633fDe71639

Contract Name
ProxyStorage
Creator
0x48a1b2–21d69f at 0x6b11d1–cc1d04
Balance
0 POA
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
28054667
Contract name:
ProxyStorage




Optimization enabled
true
Compiler version
v0.4.24+commit.e67f0147




Verified at
2019-02-26T14:11:28.452786Z

Contract source code

pragma solidity ^0.4.24;


/**
 * @title EternalStorage
 * @dev This contract holds all the necessary state variables to carry out the storage of any contract
 * and to support the upgrade functionality.
 */
contract EternalStorage {

    // Version number of the current implementation
    uint256 internal _version;

    // Address of the current implementation
    address internal _implementation;

    // Storage mappings
    mapping(bytes32 => uint256) internal uintStorage;
    mapping(bytes32 => string) internal stringStorage;
    mapping(bytes32 => address) internal addressStorage;
    mapping(bytes32 => bytes) internal bytesStorage;
    mapping(bytes32 => bool) internal boolStorage;
    mapping(bytes32 => int256) internal intStorage;
    mapping(bytes32 => bytes32) internal bytes32Storage;

    mapping(bytes32 => uint256[]) internal uintArrayStorage;
    mapping(bytes32 => string[]) internal stringArrayStorage;
    mapping(bytes32 => address[]) internal addressArrayStorage;
    //mapping(bytes32 => bytes[]) internal bytesArrayStorage;
    mapping(bytes32 => bool[]) internal boolArrayStorage;
    mapping(bytes32 => int256[]) internal intArrayStorage;
    mapping(bytes32 => bytes32[]) internal bytes32ArrayStorage;

}



interface IEternalStorageProxy {
    function upgradeTo(address) external returns(bool);
}


interface IPoaNetworkConsensus {
    function addValidator(address, bool) external returns(bool);
    function finalizeChange() external;
    function removeValidator(address, bool) external returns(bool);
    function swapValidatorKey(address, address) external returns(bool);
    function isMasterOfCeremonyRemoved() external view returns(bool);
    function isValidator(address) external view returns(bool);
    function getCurrentValidatorsLength() external view returns(uint256);
    function getCurrentValidatorsLengthWithoutMoC() external view returns(uint256);
    function getPendingList() external view returns(address[]);
    function getValidators() external view returns(address[]);
    function masterOfCeremony() external view returns(address);
}


interface IPoaNetworkConsensusForVotingToChange {
    function currentValidators(uint256) external view returns(address);
    function getCurrentValidatorsLength() external view returns(uint256);
}


interface IProxyStorage {
    function initializeAddresses(
        address, address, address, address, address, address, address, address
    ) external;

    function setContractAddress(uint256, address) external returns(bool);
    function getBallotsStorage() external view returns(address);
    function getKeysManager() external view returns(address);
    function getPoaConsensus() external view returns(address);
    function getValidatorMetadata() external view returns(address);
    function getVotingToChangeKeys() external view returns(address);
    function getVotingToChangeMinThreshold() external view returns(address);
}







contract ProxyStorage is EternalStorage, IProxyStorage {
    bytes32 internal constant INIT_DISABLED =
        keccak256("initDisabled");
    
    bytes32 internal constant BALLOTS_STORAGE_ETERNAL_STORAGE =
        keccak256("ballotsStorageEternalStorage");
    
    bytes32 internal constant KEYS_MANAGER_ETERNAL_STORAGE =
        keccak256("keysManagerEternalStorage");
    
    bytes32 internal constant MOC_INITIALIZED =
        keccak256("mocInitialized");
    
    bytes32 internal constant OWNER =
        keccak256("owner");
    
    bytes32 internal constant POA_CONSENSUS =
        keccak256("poaConsensus");

    bytes32 internal constant REWARD_BY_BLOCK_ETERNAL_STORAGE = 
        keccak256("rewardByBlockEternalStorage");
    
    bytes32 internal constant VALIDATOR_METADATA_ETERNAL_STORAGE =
        keccak256("validatorMetadataEternalStorage");
    
    bytes32 internal constant VOTING_TO_CHANGE_KEYS_ETERNAL_STORAGE =
        keccak256("votingToChangeKeysEternalStorage");
    
    bytes32 internal constant VOTING_TO_CHANGE_MIN_THRESHOLD_ETERNAL_STORAGE =
        keccak256("votingToChangeMinThresholdEternalStorage");
    
    bytes32 internal constant VOTING_TO_CHANGE_PROXY_ETERNAL_STORAGE =
        keccak256("votingToChangeProxyEternalStorage");

    bytes32 internal constant VOTING_TO_MANAGE_EMISSION_FUNDS_ETERNAL_STORAGE = 
        keccak256("votingToManageEmissionFundsEternalStorage");

    enum ContractTypes {
        Invalid,
        KeysManager,
        VotingToChangeKeys,
        VotingToChangeMinThreshold,
        VotingToChangeProxy,
        BallotsStorage,
        PoaConsensus,
        ValidatorMetadata,
        ProxyStorage,
        RewardByBlock
    }

    event ProxyInitialized(
        address keysManagerEternalStorage,
        address votingToChangeKeysEternalStorage,
        address votingToChangeMinThresholdEternalStorage,
        address votingToChangeProxyEternalStorage,
        address votingToManageEmissionFundsEternalStorage,
        address ballotsStorageEternalStorage,
        address validatorMetadataEternalStorage,
        address rewardByBlockEternalStorage
    );

    event AddressSet(uint256 contractType, address contractAddress);

    modifier onlyVotingToChangeProxy() {
        require(msg.sender == getVotingToChangeProxy());
        _;
    }

    modifier onlyOwner() {
        require(_isOwner(msg.sender));
        _;
    }

    function initDisabled() public view returns(bool) {
        return boolStorage[INIT_DISABLED];
    }

    function init(address _poaConsensus) public onlyOwner {
        require(!initDisabled());
        require(_poaConsensus != address(0));
        require(_poaConsensus != address(this));
        _setPoaConsensus(_poaConsensus);
        boolStorage[INIT_DISABLED] = true;
    }

    function mocInitialized() public view returns(bool) {
        return boolStorage[MOC_INITIALIZED];
    }

    function getKeysManager() public view returns(address) {
        return addressStorage[KEYS_MANAGER_ETERNAL_STORAGE];
    }

    function getVotingToChangeKeys() public view returns(address) {
        return addressStorage[VOTING_TO_CHANGE_KEYS_ETERNAL_STORAGE];
    }

    function getVotingToChangeMinThreshold() public view returns(address) {
        return addressStorage[VOTING_TO_CHANGE_MIN_THRESHOLD_ETERNAL_STORAGE];
    }

    function getVotingToChangeProxy() public view returns(address) {
        return addressStorage[VOTING_TO_CHANGE_PROXY_ETERNAL_STORAGE];
    }

    function getVotingToManageEmissionFunds() public view returns(address) {
        return addressStorage[VOTING_TO_MANAGE_EMISSION_FUNDS_ETERNAL_STORAGE];
    }

    function getPoaConsensus() public view returns(address) {
        return addressStorage[POA_CONSENSUS];
    }

    function getBallotsStorage() public view returns(address) {
        return addressStorage[BALLOTS_STORAGE_ETERNAL_STORAGE];
    }

    function getValidatorMetadata() public view returns(address) {
        return addressStorage[VALIDATOR_METADATA_ETERNAL_STORAGE];
    }

    function getRewardByBlock() public view returns(address) {
        return addressStorage[REWARD_BY_BLOCK_ETERNAL_STORAGE];
    }

    function initializeAddresses(
        address _keysManagerEternalStorage,
        address _votingToChangeKeysEternalStorage,
        address _votingToChangeMinThresholdEternalStorage,
        address _votingToChangeProxyEternalStorage,
        address _votingToManageEmissionFundsEternalStorage,
        address _ballotsStorageEternalStorage,
        address _validatorMetadataEternalStorage,
        address _rewardByBlockEternalStorage
    ) public {
        require(_isOwner(msg.sender) || _isMoC(msg.sender));
        require(!mocInitialized());
        addressStorage[KEYS_MANAGER_ETERNAL_STORAGE] =
            _keysManagerEternalStorage;
        addressStorage[VOTING_TO_CHANGE_KEYS_ETERNAL_STORAGE] =
            _votingToChangeKeysEternalStorage;
        addressStorage[VOTING_TO_CHANGE_MIN_THRESHOLD_ETERNAL_STORAGE] =
            _votingToChangeMinThresholdEternalStorage;
        addressStorage[VOTING_TO_CHANGE_PROXY_ETERNAL_STORAGE] =
            _votingToChangeProxyEternalStorage;
        addressStorage[VOTING_TO_MANAGE_EMISSION_FUNDS_ETERNAL_STORAGE] =
            _votingToManageEmissionFundsEternalStorage;
        addressStorage[BALLOTS_STORAGE_ETERNAL_STORAGE] =
            _ballotsStorageEternalStorage;
        addressStorage[VALIDATOR_METADATA_ETERNAL_STORAGE] =
            _validatorMetadataEternalStorage;
        addressStorage[REWARD_BY_BLOCK_ETERNAL_STORAGE] = 
            _rewardByBlockEternalStorage;
        boolStorage[MOC_INITIALIZED] = true;
        emit ProxyInitialized(
            _keysManagerEternalStorage,
            _votingToChangeKeysEternalStorage,
            _votingToChangeMinThresholdEternalStorage,
            _votingToChangeProxyEternalStorage,
            _votingToManageEmissionFundsEternalStorage,
            _ballotsStorageEternalStorage,
            _validatorMetadataEternalStorage,
            _rewardByBlockEternalStorage
        );
    }

    // solhint-disable code-complexity
    function setContractAddress(uint256 _contractType, address _contractAddress)
        public
        onlyVotingToChangeProxy
        returns(bool)
    {
        if (!mocInitialized()) return false;
        if (!initDisabled()) return false;
        if (_contractAddress == address(0)) return false;
        bool success = false;
        if (_contractType == uint256(ContractTypes.KeysManager)) {
            success = IEternalStorageProxy(
                getKeysManager()
            ).upgradeTo(_contractAddress);
        } else if (_contractType == uint256(ContractTypes.VotingToChangeKeys)) {
            success = IEternalStorageProxy(
                getVotingToChangeKeys()
            ).upgradeTo(_contractAddress);
        } else if (_contractType == uint256(ContractTypes.VotingToChangeMinThreshold)) {
            success = IEternalStorageProxy(
                getVotingToChangeMinThreshold()
            ).upgradeTo(_contractAddress);
        } else if (_contractType == uint256(ContractTypes.VotingToChangeProxy)) {
            success = IEternalStorageProxy(
                getVotingToChangeProxy()
            ).upgradeTo(_contractAddress);
        } else if (_contractType == uint256(ContractTypes.BallotsStorage)) {
            success = IEternalStorageProxy(
                getBallotsStorage()
            ).upgradeTo(_contractAddress);
        } else if (_contractType == uint256(ContractTypes.PoaConsensus)) {
            _setPoaConsensus(_contractAddress);
            success = true;
        } else if (_contractType == uint256(ContractTypes.ValidatorMetadata)) {
            success = IEternalStorageProxy(
                getValidatorMetadata()
            ).upgradeTo(_contractAddress);
        } else if (_contractType == uint256(ContractTypes.ProxyStorage)) {
            success = IEternalStorageProxy(this).upgradeTo(_contractAddress);
        } else if (_contractType == uint256(ContractTypes.RewardByBlock)) {
            success = IEternalStorageProxy(
                getRewardByBlock()
            ).upgradeTo(_contractAddress);
        }
        if (success) {
            emit AddressSet(_contractType, _contractAddress);
        }
        return success;
    }
    // solhint-enable code-complexity

    function _isMoC(address _validator) private view returns(bool) {
        IPoaNetworkConsensus poa = IPoaNetworkConsensus(getPoaConsensus());
        return _validator == poa.masterOfCeremony() && !poa.isMasterOfCeremonyRemoved();
    }

    function _isOwner(address _sender) private view returns(bool) {
        return _sender == addressStorage[OWNER];
    }

    function _setPoaConsensus(address _poaConsensus) private {
        addressStorage[POA_CONSENSUS] = _poaConsensus;
    }
}
        

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getRewardByBlock","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getVotingToChangeProxy","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"init","inputs":[{"type":"address","name":"_poaConsensus"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getBallotsStorage","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getVotingToChangeKeys","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"initDisabled","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"mocInitialized","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getVotingToManageEmissionFunds","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getPoaConsensus","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getKeysManager","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"initializeAddresses","inputs":[{"type":"address","name":"_keysManagerEternalStorage"},{"type":"address","name":"_votingToChangeKeysEternalStorage"},{"type":"address","name":"_votingToChangeMinThresholdEternalStorage"},{"type":"address","name":"_votingToChangeProxyEternalStorage"},{"type":"address","name":"_votingToManageEmissionFundsEternalStorage"},{"type":"address","name":"_ballotsStorageEternalStorage"},{"type":"address","name":"_validatorMetadataEternalStorage"},{"type":"address","name":"_rewardByBlockEternalStorage"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getVotingToChangeMinThreshold","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getValidatorMetadata","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":""}],"name":"setContractAddress","inputs":[{"type":"uint256","name":"_contractType"},{"type":"address","name":"_contractAddress"}],"constant":false},{"type":"event","name":"ProxyInitialized","inputs":[{"type":"address","name":"keysManagerEternalStorage","indexed":false},{"type":"address","name":"votingToChangeKeysEternalStorage","indexed":false},{"type":"address","name":"votingToChangeMinThresholdEternalStorage","indexed":false},{"type":"address","name":"votingToChangeProxyEternalStorage","indexed":false},{"type":"address","name":"votingToManageEmissionFundsEternalStorage","indexed":false},{"type":"address","name":"ballotsStorageEternalStorage","indexed":false},{"type":"address","name":"validatorMetadataEternalStorage","indexed":false},{"type":"address","name":"rewardByBlockEternalStorage","indexed":false}],"anonymous":false},{"type":"event","name":"AddressSet","inputs":[{"type":"uint256","name":"contractType","indexed":false},{"type":"address","name":"contractAddress","indexed":false}],"anonymous":false}]
            

Contract Creation Code

0x608060405234801561001057600080fd5b50611124806100206000396000f3006080604052600436106100b65763ffffffff60e060020a60003504166302afdfd481146100bb57806313e468b3146100ec57806319ab453c1461010157806336ee77731461012457806349285b581461013957806352a369381461014e5780636398316c146101775780636ecad99d1461018c5780638b8414c4146101a15780639a573786146101b65780639efa82cf146101cb578063a3b3fff114610216578063b1339de31461022b578063bb0165b114610240575b600080fd5b3480156100c757600080fd5b506100d0610264565b60408051600160a060020a039092168252519081900360200190f35b3480156100f857600080fd5b506100d06102ae565b34801561010d57600080fd5b50610122600160a060020a0360043516610323565b005b34801561013057600080fd5b506100d06103c8565b34801561014557600080fd5b506100d0610412565b34801561015a57600080fd5b5061016361045d565b604080519115158252519081900360200190f35b34801561018357600080fd5b506101636104a1565b34801561019857600080fd5b506100d06104e5565b3480156101ad57600080fd5b506100d061055a565b3480156101c257600080fd5b506100d06105a4565b3480156101d757600080fd5b50610122600160a060020a0360043581169060243581169060443581169060643581169060843581169060a43581169060c43581169060e435166105ee565b34801561022257600080fd5b506100d0610baf565b34801561023757600080fd5b506100d0610c24565b34801561024c57600080fd5b50610163600435600160a060020a0360243516610c6e565b604080517f7265776172644279426c6f636b457465726e616c53746f7261676500000000008152815190819003601b019020600090815260046020522054600160a060020a031690565b604080517f766f74696e67546f4368616e676550726f7879457465726e616c53746f72616781527f6500000000000000000000000000000000000000000000000000000000000000602080830191909152825191829003602101909120600090815260049091522054600160a060020a031690565b61032c33610f3d565b151561033757600080fd5b61033f61045d565b1561034957600080fd5b600160a060020a038116151561035e57600080fd5b600160a060020a03811630141561037457600080fd5b61037d81610f8e565b50604080517f696e697444697361626c656400000000000000000000000000000000000000008152815190819003600c0190206000908152600660205220805460ff19166001179055565b604080517f62616c6c6f747353746f72616765457465726e616c53746f72616765000000008152815190819003601c019020600090815260046020522054600160a060020a031690565b604080517f766f74696e67546f4368616e67654b657973457465726e616c53746f726167658152815160209181900382019020600090815260049091522054600160a060020a031690565b604080517f696e697444697361626c656400000000000000000000000000000000000000008152815190819003600c01902060009081526006602052205460ff1690565b604080517f6d6f63496e697469616c697a65640000000000000000000000000000000000008152815190819003600e01902060009081526006602052205460ff1690565b604080517f766f74696e67546f4d616e616765456d697373696f6e46756e6473457465726e81527f616c53746f726167650000000000000000000000000000000000000000000000602080830191909152825191829003602901909120600090815260049091522054600160a060020a031690565b604080517f706f61436f6e73656e73757300000000000000000000000000000000000000008152815190819003600c019020600090815260046020522054600160a060020a031690565b604080517f6b6579734d616e61676572457465726e616c53746f726167650000000000000081528151908190036019019020600090815260046020522054600160a060020a031690565b6105f733610f3d565b80610606575061060633610ff9565b151561061157600080fd5b6106196104a1565b1561062357600080fd5b876004600060405180807f6b6579734d616e61676572457465726e616c53746f7261676500000000000000815250601901905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550866004600060405180807f766f74696e67546f4368616e67654b657973457465726e616c53746f72616765815250602001905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550856004600060405180807f766f74696e67546f4368616e67654d696e5468726573686f6c64457465726e6181526020017f6c53746f72616765000000000000000000000000000000000000000000000000815250602801905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550846004600060405180807f766f74696e67546f4368616e676550726f7879457465726e616c53746f72616781526020017f6500000000000000000000000000000000000000000000000000000000000000815250602101905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550836004600060405180807f766f74696e67546f4d616e616765456d697373696f6e46756e6473457465726e81526020017f616c53746f726167650000000000000000000000000000000000000000000000815250602901905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550826004600060405180807f62616c6c6f747353746f72616765457465726e616c53746f7261676500000000815250601c01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550816004600060405180807f76616c696461746f724d65746164617461457465726e616c53746f7261676500815250601f01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550806004600060405180807f7265776172644279426c6f636b457465726e616c53746f726167650000000000815250601b01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a0316021790555060016006600060405180807f6d6f63496e697469616c697a6564000000000000000000000000000000000000815250600e01905060405180910390206000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa0b05192e1273ceffbbdd1e02195c6ea17c6555a090c4f498adbd7ba31a19eb688888888888888886040518089600160a060020a0316600160a060020a0316815260200188600160a060020a0316600160a060020a0316815260200187600160a060020a0316600160a060020a0316815260200186600160a060020a0316600160a060020a0316815260200185600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a031681526020019850505050505050505060405180910390a15050505050505050565b604080517f766f74696e67546f4368616e67654d696e5468726573686f6c64457465726e6181527f6c53746f72616765000000000000000000000000000000000000000000000000602080830191909152825191829003602801909120600090815260049091522054600160a060020a031690565b604080517f76616c696461746f724d65746164617461457465726e616c53746f72616765008152815190819003601f019020600090815260046020522054600160a060020a031690565b600080610c796102ae565b600160a060020a03163314610c8d57600080fd5b610c956104a1565b1515610ca45760009150610f36565b610cac61045d565b1515610cbb5760009150610f36565b600160a060020a0383161515610cd45760009150610f36565b5060006001841415610d7557610ce86105a4565b600160a060020a0316633659cfe6846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506040513d6020811015610d6c57600080fd5b50519050610ee8565b6002841415610d8657610ce8610412565b6003841415610d9757610ce8610baf565b6004841415610da857610ce86102ae565b6005841415610db957610ce86103c8565b6006841415610dd357610dcb83610f8e565b506001610ee8565b6007841415610de457610ce8610c24565b6008841415610e4e57604080517f3659cfe6000000000000000000000000000000000000000000000000000000008152600160a060020a038516600482015290513091633659cfe69160248083019260209291908290030181600087803b158015610d4257600080fd5b6009841415610ee857610e5f610264565b600160a060020a0316633659cfe6846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b505050506040513d6020811015610ee357600080fd5b505190505b8015610f325760408051858152600160a060020a038516602082015281517fcb8f0f32182a0f756b1e065dab832c24d2c48fa533912c33552252a7f25bf4ae929181900390910190a15b8091505b5092915050565b604080517f6f776e657200000000000000000000000000000000000000000000000000000081528151908190036005019020600090815260046020522054600160a060020a03828116911614919050565b604080517f706f61436f6e73656e73757300000000000000000000000000000000000000008152815190819003600c01902060009081526004602052208054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19909216919091179055565b60008061100461055a565b905080600160a060020a031663fa81b2006040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b5051600160a060020a0384811691161480156110f1575080600160a060020a031663379fed9a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d60208110156110ed57600080fd5b5051155b93925050505600a165627a7a72305820c4e40563da9dd306565687d95ac620e3977d835521791cd4b1523851223435bf0029

Deployed ByteCode

0x6080604052600436106100b65763ffffffff60e060020a60003504166302afdfd481146100bb57806313e468b3146100ec57806319ab453c1461010157806336ee77731461012457806349285b581461013957806352a369381461014e5780636398316c146101775780636ecad99d1461018c5780638b8414c4146101a15780639a573786146101b65780639efa82cf146101cb578063a3b3fff114610216578063b1339de31461022b578063bb0165b114610240575b600080fd5b3480156100c757600080fd5b506100d0610264565b60408051600160a060020a039092168252519081900360200190f35b3480156100f857600080fd5b506100d06102ae565b34801561010d57600080fd5b50610122600160a060020a0360043516610323565b005b34801561013057600080fd5b506100d06103c8565b34801561014557600080fd5b506100d0610412565b34801561015a57600080fd5b5061016361045d565b604080519115158252519081900360200190f35b34801561018357600080fd5b506101636104a1565b34801561019857600080fd5b506100d06104e5565b3480156101ad57600080fd5b506100d061055a565b3480156101c257600080fd5b506100d06105a4565b3480156101d757600080fd5b50610122600160a060020a0360043581169060243581169060443581169060643581169060843581169060a43581169060c43581169060e435166105ee565b34801561022257600080fd5b506100d0610baf565b34801561023757600080fd5b506100d0610c24565b34801561024c57600080fd5b50610163600435600160a060020a0360243516610c6e565b604080517f7265776172644279426c6f636b457465726e616c53746f7261676500000000008152815190819003601b019020600090815260046020522054600160a060020a031690565b604080517f766f74696e67546f4368616e676550726f7879457465726e616c53746f72616781527f6500000000000000000000000000000000000000000000000000000000000000602080830191909152825191829003602101909120600090815260049091522054600160a060020a031690565b61032c33610f3d565b151561033757600080fd5b61033f61045d565b1561034957600080fd5b600160a060020a038116151561035e57600080fd5b600160a060020a03811630141561037457600080fd5b61037d81610f8e565b50604080517f696e697444697361626c656400000000000000000000000000000000000000008152815190819003600c0190206000908152600660205220805460ff19166001179055565b604080517f62616c6c6f747353746f72616765457465726e616c53746f72616765000000008152815190819003601c019020600090815260046020522054600160a060020a031690565b604080517f766f74696e67546f4368616e67654b657973457465726e616c53746f726167658152815160209181900382019020600090815260049091522054600160a060020a031690565b604080517f696e697444697361626c656400000000000000000000000000000000000000008152815190819003600c01902060009081526006602052205460ff1690565b604080517f6d6f63496e697469616c697a65640000000000000000000000000000000000008152815190819003600e01902060009081526006602052205460ff1690565b604080517f766f74696e67546f4d616e616765456d697373696f6e46756e6473457465726e81527f616c53746f726167650000000000000000000000000000000000000000000000602080830191909152825191829003602901909120600090815260049091522054600160a060020a031690565b604080517f706f61436f6e73656e73757300000000000000000000000000000000000000008152815190819003600c019020600090815260046020522054600160a060020a031690565b604080517f6b6579734d616e61676572457465726e616c53746f726167650000000000000081528151908190036019019020600090815260046020522054600160a060020a031690565b6105f733610f3d565b80610606575061060633610ff9565b151561061157600080fd5b6106196104a1565b1561062357600080fd5b876004600060405180807f6b6579734d616e61676572457465726e616c53746f7261676500000000000000815250601901905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550866004600060405180807f766f74696e67546f4368616e67654b657973457465726e616c53746f72616765815250602001905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550856004600060405180807f766f74696e67546f4368616e67654d696e5468726573686f6c64457465726e6181526020017f6c53746f72616765000000000000000000000000000000000000000000000000815250602801905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550846004600060405180807f766f74696e67546f4368616e676550726f7879457465726e616c53746f72616781526020017f6500000000000000000000000000000000000000000000000000000000000000815250602101905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550836004600060405180807f766f74696e67546f4d616e616765456d697373696f6e46756e6473457465726e81526020017f616c53746f726167650000000000000000000000000000000000000000000000815250602901905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550826004600060405180807f62616c6c6f747353746f72616765457465726e616c53746f7261676500000000815250601c01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550816004600060405180807f76616c696461746f724d65746164617461457465726e616c53746f7261676500815250601f01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550806004600060405180807f7265776172644279426c6f636b457465726e616c53746f726167650000000000815250601b01905060405180910390206000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a0316021790555060016006600060405180807f6d6f63496e697469616c697a6564000000000000000000000000000000000000815250600e01905060405180910390206000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa0b05192e1273ceffbbdd1e02195c6ea17c6555a090c4f498adbd7ba31a19eb688888888888888886040518089600160a060020a0316600160a060020a0316815260200188600160a060020a0316600160a060020a0316815260200187600160a060020a0316600160a060020a0316815260200186600160a060020a0316600160a060020a0316815260200185600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a031681526020019850505050505050505060405180910390a15050505050505050565b604080517f766f74696e67546f4368616e67654d696e5468726573686f6c64457465726e6181527f6c53746f72616765000000000000000000000000000000000000000000000000602080830191909152825191829003602801909120600090815260049091522054600160a060020a031690565b604080517f76616c696461746f724d65746164617461457465726e616c53746f72616765008152815190819003601f019020600090815260046020522054600160a060020a031690565b600080610c796102ae565b600160a060020a03163314610c8d57600080fd5b610c956104a1565b1515610ca45760009150610f36565b610cac61045d565b1515610cbb5760009150610f36565b600160a060020a0383161515610cd45760009150610f36565b5060006001841415610d7557610ce86105a4565b600160a060020a0316633659cfe6846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506040513d6020811015610d6c57600080fd5b50519050610ee8565b6002841415610d8657610ce8610412565b6003841415610d9757610ce8610baf565b6004841415610da857610ce86102ae565b6005841415610db957610ce86103c8565b6006841415610dd357610dcb83610f8e565b506001610ee8565b6007841415610de457610ce8610c24565b6008841415610e4e57604080517f3659cfe6000000000000000000000000000000000000000000000000000000008152600160a060020a038516600482015290513091633659cfe69160248083019260209291908290030181600087803b158015610d4257600080fd5b6009841415610ee857610e5f610264565b600160a060020a0316633659cfe6846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b505050506040513d6020811015610ee357600080fd5b505190505b8015610f325760408051858152600160a060020a038516602082015281517fcb8f0f32182a0f756b1e065dab832c24d2c48fa533912c33552252a7f25bf4ae929181900390910190a15b8091505b5092915050565b604080517f6f776e657200000000000000000000000000000000000000000000000000000081528151908190036005019020600090815260046020522054600160a060020a03828116911614919050565b604080517f706f61436f6e73656e73757300000000000000000000000000000000000000008152815190819003600c01902060009081526004602052208054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19909216919091179055565b60008061100461055a565b905080600160a060020a031663fa81b2006040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b5051600160a060020a0384811691161480156110f1575080600160a060020a031663379fed9a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d60208110156110ed57600080fd5b5051155b93925050505600a165627a7a72305820c4e40563da9dd306565687d95ac620e3977d835521791cd4b1523851223435bf0029