Address Details
contract

0x348a8A6317179A1385640036d5F7f238331aE397

Contract Name
Community
Creator
0xf3ba2c–7af8b6 at 0xdeef5c–b1d250
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
7,851 Transactions
Transfers
7,679 Transfers
Gas Used
762,575,705
Last Balance Update
15797154
Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0x27a9f905481d666a51148a4b43ad4254cf105103.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
Contract name:
Community




Optimization enabled
true
Compiler version
v0.6.5+commit.f956cc89




Optimization runs
200
Verified at
2021-12-02T10:43:07.149142Z

/home/obernardovieira/Documentos/GitHub/impact-market/smart-contracts/contracts/Community.sol

// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.6.0;

import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./interfaces/ICommunity.sol";

/**
 * @notice Welcome to the Community contract. For each community
 * there will be one contract like this being deployed by
 * ImpactMarket contract. This enable us to save tokens on the
 * contract itself, and avoid the problems of having everything
 * in one single contract. Each community has it's own members and
 * and managers.
 */
contract Community is AccessControl {
    bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
    enum BeneficiaryState {NONE, Valid, Locked, Removed} // starts by 0 (when user is not added yet)

    mapping(address => uint256) public cooldown;
    mapping(address => uint256) public lastInterval;
    mapping(address => uint256) public claimed;
    mapping(address => BeneficiaryState) public beneficiaries;

    uint256 public claimAmount;
    uint256 public baseInterval;
    uint256 public incrementInterval;
    uint256 public maxClaim;

    address public previousCommunityContract;
    address public impactMarketAddress;
    address public cUSDAddress;
    bool public locked;

    event ManagerAdded(address indexed _account);
    event ManagerRemoved(address indexed _account);
    event BeneficiaryAdded(address indexed _account);
    event BeneficiaryLocked(address indexed _account);
    event BeneficiaryUnlocked(address indexed _account);
    event BeneficiaryRemoved(address indexed _account);
    event BeneficiaryClaim(address indexed _account, uint256 _amount);
    event CommunityEdited(
        uint256 _claimAmount,
        uint256 _maxClaim,
        uint256 _baseInterval,
        uint256 _incrementInterval
    );
    event CommunityLocked(address indexed _by);
    event CommunityUnlocked(address indexed _by);
    event MigratedFunds(address indexed _to, uint256 _amount);

    /**
     * @dev Constructor with custom fields, choosen by the community.
     * @param _firstManager Comminuty's first manager. Will
     * be able to add others.
     * @param _claimAmount Base amount to be claim by the benificiary.
     * @param _maxClaim Limit that a beneficiary can claim at once.
     * @param _baseInterval Base interval to start claiming.
     * @param _incrementInterval Increment interval used in each claim.
     * @param _previousCommunityContract previous smart contract address of community.
     * @param _cUSDAddress cUSD smart contract address.
     */
    constructor(
        address _firstManager,
        uint256 _claimAmount,
        uint256 _maxClaim,
        uint256 _baseInterval,
        uint256 _incrementInterval,
        address _previousCommunityContract,
        address _cUSDAddress,
        address _impactMarketAddress
    ) public {
        require(_baseInterval > _incrementInterval, "");
        require(_maxClaim > _claimAmount, "");

        _setupRole(MANAGER_ROLE, _firstManager);
        _setRoleAdmin(MANAGER_ROLE, MANAGER_ROLE);
        emit ManagerAdded(_firstManager);

        claimAmount = _claimAmount;
        baseInterval = _baseInterval;
        incrementInterval = _incrementInterval;
        maxClaim = _maxClaim;

        previousCommunityContract = _previousCommunityContract;
        cUSDAddress = _cUSDAddress;
        impactMarketAddress = _impactMarketAddress;
        locked = false;
    }

    modifier onlyValidBeneficiary() {
        require(beneficiaries[msg.sender] != BeneficiaryState.Locked, "LOCKED");
        require(
            beneficiaries[msg.sender] != BeneficiaryState.Removed,
            "REMOVED"
        );
        require(
            beneficiaries[msg.sender] == BeneficiaryState.Valid,
            "NOT_BENEFICIARY"
        );
        _;
    }

    modifier onlyManagers() {
        require(hasRole(MANAGER_ROLE, msg.sender), "NOT_MANAGER");
        _;
    }

    modifier onlyImpactMarket() {
        require(msg.sender == impactMarketAddress, "NOT_ALLOWED");
        _;
    }

    /**
     * @dev Allow community managers to add other managers.
     */
    function addManager(address _account) external onlyManagers {
        grantRole(MANAGER_ROLE, _account);
        emit ManagerAdded(_account);
    }

    /**
     * @dev Allow community managers to remove other managers.
     */
    function removeManager(address _account) external onlyManagers {
        revokeRole(MANAGER_ROLE, _account);
        emit ManagerRemoved(_account);
    }

    /**
     * @dev Allow community managers to add beneficiaries.
     */
    function addBeneficiary(address _account) external onlyManagers {
        beneficiaries[_account] = BeneficiaryState.Valid;
        // solhint-disable-next-line not-rely-on-time
        cooldown[_account] = block.timestamp;
        lastInterval[_account] = uint256(baseInterval - incrementInterval);
        // send 5 cents when adding a new beneficiary
        bool success = IERC20(cUSDAddress).transfer(_account, 50000000000000000);
        require(success, "NOT_ALLOWED");
        emit BeneficiaryAdded(_account);
    }

    /**
     * @dev Allow community managers to lock beneficiaries.
     */
    function lockBeneficiary(address _account) external onlyManagers {
        require(beneficiaries[_account] == BeneficiaryState.Valid, "NOT_YET");
        beneficiaries[_account] = BeneficiaryState.Locked;
        emit BeneficiaryLocked(_account);
    }

    /**
     * @dev Allow community managers to unlock locked beneficiaries.
     */
    function unlockBeneficiary(address _account) external onlyManagers {
        require(beneficiaries[_account] == BeneficiaryState.Locked, "NOT_YET");
        beneficiaries[_account] = BeneficiaryState.Valid;
        emit BeneficiaryUnlocked(_account);
    }

    /**
     * @dev Allow community managers to add beneficiaries.
     */
    function removeBeneficiary(address _account) external onlyManagers {
        beneficiaries[_account] = BeneficiaryState.Removed;
        emit BeneficiaryRemoved(_account);
    }

    /**
     * @dev Allow beneficiaries to claim.
     */
    function claim() external onlyValidBeneficiary {
        require(!locked, "LOCKED");
        // solhint-disable-next-line not-rely-on-time
        require(cooldown[msg.sender] <= block.timestamp, "NOT_YET");
        require((claimed[msg.sender] + claimAmount) <= maxClaim, "MAX_CLAIM");
        claimed[msg.sender] = claimed[msg.sender] + claimAmount;
        lastInterval[msg.sender] = lastInterval[msg.sender] + incrementInterval;
        cooldown[msg.sender] = uint256(
            // solhint-disable-next-line not-rely-on-time
            block.timestamp + lastInterval[msg.sender]
        );
        emit BeneficiaryClaim(msg.sender, claimAmount);
        bool success = IERC20(cUSDAddress).transfer(msg.sender, claimAmount);
        require(success, "NOT_ALLOWED");
    }

    /**
     * @dev Allow community managers to edit community variables.
     */
    function edit(
        uint256 _claimAmount,
        uint256 _maxClaim,
        uint256 _baseInterval,
        uint256 _incrementInterval
    ) external onlyManagers {
        require(_baseInterval > _incrementInterval, "");
        require(_maxClaim > _claimAmount, "");

        claimAmount = _claimAmount;
        baseInterval = _baseInterval;
        incrementInterval = _incrementInterval;
        maxClaim = _maxClaim;

        emit CommunityEdited(
            _claimAmount,
            _maxClaim,
            _baseInterval,
            _incrementInterval
        );
    }

    /**
     * Allow community managers to lock community claims.
     */
    function lock() external onlyManagers {
        locked = true;
        emit CommunityLocked(msg.sender);
    }

    /**
     * Allow community managers to unlock community claims.
     */
    function unlock() external onlyManagers {
        locked = false;
        emit CommunityUnlocked(msg.sender);
    }

    /**
     * Migrate funds in current community to new one.
     */
    function migrateFunds(address _newCommunity, address _newCommunityManager)
        external
        onlyImpactMarket
    {
        ICommunity newCommunity = ICommunity(_newCommunity);
        require(
            newCommunity.hasRole(MANAGER_ROLE, _newCommunityManager) == true,
            "NOT_ALLOWED"
        );
        require(
            newCommunity.previousCommunityContract() == address(this),
            "NOT_ALLOWED"
        );
        uint256 balance = IERC20(cUSDAddress).balanceOf(address(this));
        bool success = IERC20(cUSDAddress).transfer(_newCommunity, balance);
        require(success, "NOT_ALLOWED");
        emit MigratedFunds(_newCommunity, balance);
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_firstManager","internalType":"address"},{"type":"uint256","name":"_claimAmount","internalType":"uint256"},{"type":"uint256","name":"_maxClaim","internalType":"uint256"},{"type":"uint256","name":"_baseInterval","internalType":"uint256"},{"type":"uint256","name":"_incrementInterval","internalType":"uint256"},{"type":"address","name":"_previousCommunityContract","internalType":"address"},{"type":"address","name":"_cUSDAddress","internalType":"address"},{"type":"address","name":"_impactMarketAddress","internalType":"address"}]},{"type":"event","name":"BeneficiaryAdded","inputs":[{"type":"address","name":"_account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"BeneficiaryClaim","inputs":[{"type":"address","name":"_account","internalType":"address","indexed":true},{"type":"uint256","name":"_amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"BeneficiaryLocked","inputs":[{"type":"address","name":"_account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"BeneficiaryRemoved","inputs":[{"type":"address","name":"_account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"BeneficiaryUnlocked","inputs":[{"type":"address","name":"_account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"CommunityEdited","inputs":[{"type":"uint256","name":"_claimAmount","internalType":"uint256","indexed":false},{"type":"uint256","name":"_maxClaim","internalType":"uint256","indexed":false},{"type":"uint256","name":"_baseInterval","internalType":"uint256","indexed":false},{"type":"uint256","name":"_incrementInterval","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"CommunityLocked","inputs":[{"type":"address","name":"_by","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"CommunityUnlocked","inputs":[{"type":"address","name":"_by","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ManagerAdded","inputs":[{"type":"address","name":"_account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ManagerRemoved","inputs":[{"type":"address","name":"_account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"MigratedFunds","inputs":[{"type":"address","name":"_to","internalType":"address","indexed":true},{"type":"uint256","name":"_amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DEFAULT_ADMIN_ROLE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"MANAGER_ROLE","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addBeneficiary","inputs":[{"type":"address","name":"_account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addManager","inputs":[{"type":"address","name":"_account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"baseInterval","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"enum Community.BeneficiaryState"}],"name":"beneficiaries","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"cUSDAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claim","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"claimAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"claimed","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"cooldown","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"edit","inputs":[{"type":"uint256","name":"_claimAmount","internalType":"uint256"},{"type":"uint256","name":"_maxClaim","internalType":"uint256"},{"type":"uint256","name":"_baseInterval","internalType":"uint256"},{"type":"uint256","name":"_incrementInterval","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getRoleAdmin","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getRoleMember","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getRoleMemberCount","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"grantRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"hasRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"impactMarketAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"incrementInterval","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastInterval","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"lock","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"lockBeneficiary","inputs":[{"type":"address","name":"_account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"locked","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxClaim","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"migrateFunds","inputs":[{"type":"address","name":"_newCommunity","internalType":"address"},{"type":"address","name":"_newCommunityManager","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"previousCommunityContract","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeBeneficiary","inputs":[{"type":"address","name":"_account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeManager","inputs":[{"type":"address","name":"_account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unlock","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unlockBeneficiary","inputs":[{"type":"address","name":"_account","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x60806040523480156200001157600080fd5b5060405162001e3338038062001e3383398181016040526101008110156200003857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e0909701519596949593949293919290918385116200009a576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b868611620000c9576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c019020620000ff90896001600160e01b03620001da16565b604080516b4d414e414745525f524f4c4560a01b808252825191829003600c908101832091835292519182900390920190206200014691906001600160e01b03620001f316565b6040516001600160a01b038916907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a2600596909655600693909355600791909155600892909255600980546001600160a01b03199081166001600160a01b0394851617909155600b8054600a8054841696861696909617909555931691161760ff60a01b191690555062000327565b620001ef82826001600160e01b036200020816565b5050565b60009182526020829052604090912060020155565b6000828152602081815260409091206200022d9183906200185c6200028a821b17901c565b15620001ef57620002466001600160e01b03620002b316565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000620002aa836001600160a01b0384166001600160e01b03620002b716565b90505b92915050565b3390565b6000620002ce83836001600160e01b036200030f16565b6200030657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620002ad565b506000620002ad565b60009081526001919091016020526040902054151590565b611afc80620003376000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063a217fddf1161010f578063ca15c873116100a2578063d547741f11610071578063d547741f14610540578063e1b56a7d1461056c578063ec87621c1461059b578063f83d08ba146105a3576101f0565b8063ca15c873146104ed578063cf3090121461050a578063d10f510714610512578063d4938db314610538576101f0565b8063b222e0c2116100de578063b222e0c214610473578063c041fdc514610499578063c0e27b6b146104a1578063c884ef83146104c7576101f0565b8063a217fddf14610417578063a69df4b51461041f578063a8f3e06314610427578063ac18de431461044d576101f0565b80633ff574b611610187578063597be18b11610156578063597be18b146103a4578063830953ab146103ac5780639010d07c146103b457806391d14854146103d7576101f0565b80633ff574b6146103485780634e71d92d146103505780635926651d1461035857806359633a1c1461037e576101f0565b80632d06177a116101c35780632d06177a146102a65780632f2ff15d146102cc57806336568abe146102f85780633df03b4a14610324576101f0565b806301567739146101f55780630e5b7c531461023f5780631fe9578e14610259578063248a9ca314610289575b600080fd5b61021b6004803603602081101561020b57600080fd5b50356001600160a01b03166105ab565b6040518082600381111561022b57fe5b60ff16815260200191505060405180910390f35b6102476105c0565b60408051918252519081900360200190f35b6102876004803603604081101561026f57600080fd5b506001600160a01b03813581169160200135166105c6565b005b6102476004803603602081101561029f57600080fd5b503561092d565b610287600480360360208110156102bc57600080fd5b50356001600160a01b0316610942565b610287600480360360408110156102e257600080fd5b50803590602001356001600160a01b0316610a0e565b6102876004803603604081101561030e57600080fd5b50803590602001356001600160a01b0316610a7a565b61032c610adb565b604080516001600160a01b039092168252519081900360200190f35b61032c610aea565b610287610af9565b6102876004803603602081101561036e57600080fd5b50356001600160a01b0316610e3c565b6102876004803603602081101561039457600080fd5b50356001600160a01b0316610fdc565b610247611092565b610247611098565b61032c600480360360408110156103ca57600080fd5b508035906020013561109e565b610403600480360360408110156103ed57600080fd5b50803590602001356001600160a01b03166110c5565b604080519115158252519081900360200190f35b6102476110e3565b6102876110e8565b6102476004803603602081101561043d57600080fd5b50356001600160a01b031661118c565b6102876004803603602081101561046357600080fd5b50356001600160a01b031661119e565b6102476004803603602081101561048957600080fd5b50356001600160a01b031661126a565b61032c61127c565b610287600480360360208110156104b757600080fd5b50356001600160a01b031661128b565b610247600480360360208110156104dd57600080fd5b50356001600160a01b03166113a6565b6102476004803603602081101561050357600080fd5b50356113b8565b6104036113cf565b6102876004803603602081101561052857600080fd5b50356001600160a01b03166113df565b6102476114fa565b6102876004803603604081101561055657600080fd5b50803590602001356001600160a01b0316611500565b6102876004803603608081101561058257600080fd5b5080359060208101359060408101359060600135611559565b610247611680565b6102876116a4565b60046020526000908152604090205460ff1681565b60065481565b600a546001600160a01b03163314610613576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b604080516b4d414e414745525f524f4c4560a01b8152815190819003600c018120632474521560e21b825260048201526001600160a01b038381166024830152915184928316916391d14854916044808301926020929190829003018186803b15801561067f57600080fd5b505afa158015610693573d6000803e3d6000fd5b505050506040513d60208110156106a957600080fd5b505115156001146106ef576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b306001600160a01b0316816001600160a01b0316633df03b4a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561073257600080fd5b505afa158015610746573d6000803e3d6000fd5b505050506040513d602081101561075c57600080fd5b50516001600160a01b0316146107a7576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d602081101561081c57600080fd5b5051600b546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151939450600093919092169163a9059cbb91604480830192602092919082900301818787803b15801561087957600080fd5b505af115801561088d573d6000803e3d6000fd5b505050506040513d60208110156108a357600080fd5b50519050806108e7576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b6040805183815290516001600160a01b038716917fec3fe17382089950d15d61fa7c2347c1b7eeb9a828e1cc790f522eca57ed18ec919081900360200190a25050505050565b60009081526020819052604090206002015490565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061096d90336110c5565b6109ac576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206109d79082610a0e565b6040516001600160a01b038216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600082815260208190526040902060020154610a3190610a2c61174e565b6110c5565b610a6c5760405162461bcd60e51b815260040180806020018281038252602f815260200180611a39602f913960400191505060405180910390fd5b610a768282611752565b5050565b610a8261174e565b6001600160a01b0316816001600160a01b031614610ad15760405162461bcd60e51b815260040180806020018281038252602f815260200180611a98602f913960400191505060405180910390fd5b610a7682826117c1565b6009546001600160a01b031681565b600b546001600160a01b031681565b60023360009081526004602052604090205460ff166003811115610b1957fe5b1415610b55576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60033360009081526004602052604090205460ff166003811115610b7557fe5b1415610bb2576040805162461bcd60e51b815260206004820152600760248201526614915353d5915160ca1b604482015290519081900360640190fd5b60013360009081526004602052604090205460ff166003811115610bd257fe5b14610c16576040805162461bcd60e51b815260206004820152600f60248201526e4e4f545f42454e454649434941525960881b604482015290519081900360640190fd5b600b54600160a01b900460ff1615610c5e576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b33600090815260016020526040902054421015610cac576040805162461bcd60e51b81526020600482015260076024820152661393d517d6515560ca1b604482015290519081900360640190fd5b60085460055433600090815260036020526040902054011115610d02576040805162461bcd60e51b81526020600482015260096024820152684d41585f434c41494d60b81b604482015290519081900360640190fd5b6005805433600081815260036020908152604080832080549095019094556007546002825284832080549091019081905560018252918490204290920190915592548251908152915190927fd54e03b214b3e8c17e98044f98554b6f1b18dd2a3163a2619afea7e9b2a6eb97928290030190a2600b546005546040805163a9059cbb60e01b81523360048201526024810192909252516000926001600160a01b03169163a9059cbb91604480830192602092919082900301818787803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050506040513d6020811015610df557600080fd5b5051905080610e39576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b50565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c019020610e6790336110c5565b610ea6576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b6001600160a01b038181166000818152600460208181526040808420805460ff191660019081179091558252808420429055600754600654600284528286209190039055600b54815163a9059cbb60e01b81529384019590955266b1a2bc2ec500006024840152519294939093169263a9059cbb9260448084019382900301818787803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b505050506040513d6020811015610f6057600080fd5b5051905080610fa4576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b6040516001600160a01b038316907fc3e089fc6227e049d0e41c3d7a383d57efe69c1955c5752f7e5a9b5f1f11302090600090a25050565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061100790336110c5565b611046576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b6001600160a01b038116600081815260046020526040808220805460ff19166003179055517f72977dad29432f655f11c2f0e72ef5124bb9ade7a512fb7a43a9f504df2234289190a250565b60075481565b60055481565b60008281526020819052604081206110bc908363ffffffff61183016565b90505b92915050565b60008281526020819052604081206110bc908363ffffffff61183c16565b600081565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061111390336110c5565b611152576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b600b805460ff60a01b1916905560405133907f4e50048c25972c85ad169c2302967f1e633e8dc6108d6aca51a90d2a59d4934d90600090a2565b60026020526000908152604090205481565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206111c990336110c5565b611208576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206112339082611500565b6040516001600160a01b038216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b60016020526000908152604090205481565b600a546001600160a01b031681565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206112b690336110c5565b6112f5576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b60016001600160a01b03821660009081526004602052604090205460ff16600381111561131e57fe5b1461135a576040805162461bcd60e51b81526020600482015260076024820152661393d517d6515560ca1b604482015290519081900360640190fd5b6001600160a01b038116600081815260046020526040808220805460ff19166002179055517f8bbf1861fd29297756bc2ec1496a157359ea7fda5746df5233b4fc3e812451189190a250565b60036020526000908152604090205481565b60008181526020819052604081206110bf90611851565b600b54600160a01b900460ff1681565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061140a90336110c5565b611449576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b60026001600160a01b03821660009081526004602052604090205460ff16600381111561147257fe5b146114ae576040805162461bcd60e51b81526020600482015260076024820152661393d517d6515560ca1b604482015290519081900360640190fd5b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fb84ab42066834057600f08f7bc7564111d6f5c12497b99f98d02346aed682a149190a250565b60085481565b60008281526020819052604090206002015461151e90610a2c61174e565b610ad15760405162461bcd60e51b8152600401808060200182810382526030815260200180611a686030913960400191505060405180910390fd5b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061158490336110c5565b6115c3576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b8082116115f1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b83831161161f576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b600584905560068290556007819055600883905560408051858152602081018590528082018490526060810183905290517f439aed8a17825b1759469932384a25f3652d3eac82c0f52e402a0b458ae4e8389181900360800190a150505050565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902081565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206116cf90336110c5565b61170e576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b600b805460ff60a01b1916600160a01b17905560405133907fe1e6bc10311f2f958d6cd2d0ab7308c32089aa1acb8ab11a2ccb60028e332bd090600090a2565b3390565b6000828152602081905260409020611770908263ffffffff61185c16565b15610a765761177d61174e565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020819052604090206117df908263ffffffff61187116565b15610a76576117ec61174e565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006110bc8383611886565b60006110bc836001600160a01b0384166118ea565b60006110bf82611902565b60006110bc836001600160a01b038416611906565b60006110bc836001600160a01b038416611950565b815460009082106118c85760405162461bcd60e51b8152600401808060200182810382526022815260200180611a176022913960400191505060405180910390fd5b8260000182815481106118d757fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600061191283836118ea565b611948575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556110bf565b5060006110bf565b60008181526001830160205260408120548015611a0c578354600019808301919081019060009087908390811061198357fe5b90600052602060002001549050808760000184815481106119a057fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806119d057fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506110bf565b60009150506110bf56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220e0e5000ed055b2c0b41132ba44064bc93f20909512299fca5bacbdd21dcf105964736f6c63430006050033000000000000000000000000a141bf02b13096774d9d67389ca048cae89fd62300000000000000000000000000000000000000000000000014d1120d7b160000000000000000000000000000000000000000000000000018650127cc3dc800000000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a000000000000000000000000e55c3eb4a04f93c3302a5d8058348157561bf5ca

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063a217fddf1161010f578063ca15c873116100a2578063d547741f11610071578063d547741f14610540578063e1b56a7d1461056c578063ec87621c1461059b578063f83d08ba146105a3576101f0565b8063ca15c873146104ed578063cf3090121461050a578063d10f510714610512578063d4938db314610538576101f0565b8063b222e0c2116100de578063b222e0c214610473578063c041fdc514610499578063c0e27b6b146104a1578063c884ef83146104c7576101f0565b8063a217fddf14610417578063a69df4b51461041f578063a8f3e06314610427578063ac18de431461044d576101f0565b80633ff574b611610187578063597be18b11610156578063597be18b146103a4578063830953ab146103ac5780639010d07c146103b457806391d14854146103d7576101f0565b80633ff574b6146103485780634e71d92d146103505780635926651d1461035857806359633a1c1461037e576101f0565b80632d06177a116101c35780632d06177a146102a65780632f2ff15d146102cc57806336568abe146102f85780633df03b4a14610324576101f0565b806301567739146101f55780630e5b7c531461023f5780631fe9578e14610259578063248a9ca314610289575b600080fd5b61021b6004803603602081101561020b57600080fd5b50356001600160a01b03166105ab565b6040518082600381111561022b57fe5b60ff16815260200191505060405180910390f35b6102476105c0565b60408051918252519081900360200190f35b6102876004803603604081101561026f57600080fd5b506001600160a01b03813581169160200135166105c6565b005b6102476004803603602081101561029f57600080fd5b503561092d565b610287600480360360208110156102bc57600080fd5b50356001600160a01b0316610942565b610287600480360360408110156102e257600080fd5b50803590602001356001600160a01b0316610a0e565b6102876004803603604081101561030e57600080fd5b50803590602001356001600160a01b0316610a7a565b61032c610adb565b604080516001600160a01b039092168252519081900360200190f35b61032c610aea565b610287610af9565b6102876004803603602081101561036e57600080fd5b50356001600160a01b0316610e3c565b6102876004803603602081101561039457600080fd5b50356001600160a01b0316610fdc565b610247611092565b610247611098565b61032c600480360360408110156103ca57600080fd5b508035906020013561109e565b610403600480360360408110156103ed57600080fd5b50803590602001356001600160a01b03166110c5565b604080519115158252519081900360200190f35b6102476110e3565b6102876110e8565b6102476004803603602081101561043d57600080fd5b50356001600160a01b031661118c565b6102876004803603602081101561046357600080fd5b50356001600160a01b031661119e565b6102476004803603602081101561048957600080fd5b50356001600160a01b031661126a565b61032c61127c565b610287600480360360208110156104b757600080fd5b50356001600160a01b031661128b565b610247600480360360208110156104dd57600080fd5b50356001600160a01b03166113a6565b6102476004803603602081101561050357600080fd5b50356113b8565b6104036113cf565b6102876004803603602081101561052857600080fd5b50356001600160a01b03166113df565b6102476114fa565b6102876004803603604081101561055657600080fd5b50803590602001356001600160a01b0316611500565b6102876004803603608081101561058257600080fd5b5080359060208101359060408101359060600135611559565b610247611680565b6102876116a4565b60046020526000908152604090205460ff1681565b60065481565b600a546001600160a01b03163314610613576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b604080516b4d414e414745525f524f4c4560a01b8152815190819003600c018120632474521560e21b825260048201526001600160a01b038381166024830152915184928316916391d14854916044808301926020929190829003018186803b15801561067f57600080fd5b505afa158015610693573d6000803e3d6000fd5b505050506040513d60208110156106a957600080fd5b505115156001146106ef576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b306001600160a01b0316816001600160a01b0316633df03b4a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561073257600080fd5b505afa158015610746573d6000803e3d6000fd5b505050506040513d602081101561075c57600080fd5b50516001600160a01b0316146107a7576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d602081101561081c57600080fd5b5051600b546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151939450600093919092169163a9059cbb91604480830192602092919082900301818787803b15801561087957600080fd5b505af115801561088d573d6000803e3d6000fd5b505050506040513d60208110156108a357600080fd5b50519050806108e7576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b6040805183815290516001600160a01b038716917fec3fe17382089950d15d61fa7c2347c1b7eeb9a828e1cc790f522eca57ed18ec919081900360200190a25050505050565b60009081526020819052604090206002015490565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061096d90336110c5565b6109ac576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206109d79082610a0e565b6040516001600160a01b038216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600082815260208190526040902060020154610a3190610a2c61174e565b6110c5565b610a6c5760405162461bcd60e51b815260040180806020018281038252602f815260200180611a39602f913960400191505060405180910390fd5b610a768282611752565b5050565b610a8261174e565b6001600160a01b0316816001600160a01b031614610ad15760405162461bcd60e51b815260040180806020018281038252602f815260200180611a98602f913960400191505060405180910390fd5b610a7682826117c1565b6009546001600160a01b031681565b600b546001600160a01b031681565b60023360009081526004602052604090205460ff166003811115610b1957fe5b1415610b55576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60033360009081526004602052604090205460ff166003811115610b7557fe5b1415610bb2576040805162461bcd60e51b815260206004820152600760248201526614915353d5915160ca1b604482015290519081900360640190fd5b60013360009081526004602052604090205460ff166003811115610bd257fe5b14610c16576040805162461bcd60e51b815260206004820152600f60248201526e4e4f545f42454e454649434941525960881b604482015290519081900360640190fd5b600b54600160a01b900460ff1615610c5e576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b33600090815260016020526040902054421015610cac576040805162461bcd60e51b81526020600482015260076024820152661393d517d6515560ca1b604482015290519081900360640190fd5b60085460055433600090815260036020526040902054011115610d02576040805162461bcd60e51b81526020600482015260096024820152684d41585f434c41494d60b81b604482015290519081900360640190fd5b6005805433600081815260036020908152604080832080549095019094556007546002825284832080549091019081905560018252918490204290920190915592548251908152915190927fd54e03b214b3e8c17e98044f98554b6f1b18dd2a3163a2619afea7e9b2a6eb97928290030190a2600b546005546040805163a9059cbb60e01b81523360048201526024810192909252516000926001600160a01b03169163a9059cbb91604480830192602092919082900301818787803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050506040513d6020811015610df557600080fd5b5051905080610e39576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b50565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c019020610e6790336110c5565b610ea6576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b6001600160a01b038181166000818152600460208181526040808420805460ff191660019081179091558252808420429055600754600654600284528286209190039055600b54815163a9059cbb60e01b81529384019590955266b1a2bc2ec500006024840152519294939093169263a9059cbb9260448084019382900301818787803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b505050506040513d6020811015610f6057600080fd5b5051905080610fa4576040805162461bcd60e51b815260206004820152600b60248201526a1393d517d0531313d5d15160aa1b604482015290519081900360640190fd5b6040516001600160a01b038316907fc3e089fc6227e049d0e41c3d7a383d57efe69c1955c5752f7e5a9b5f1f11302090600090a25050565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061100790336110c5565b611046576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b6001600160a01b038116600081815260046020526040808220805460ff19166003179055517f72977dad29432f655f11c2f0e72ef5124bb9ade7a512fb7a43a9f504df2234289190a250565b60075481565b60055481565b60008281526020819052604081206110bc908363ffffffff61183016565b90505b92915050565b60008281526020819052604081206110bc908363ffffffff61183c16565b600081565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061111390336110c5565b611152576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b600b805460ff60a01b1916905560405133907f4e50048c25972c85ad169c2302967f1e633e8dc6108d6aca51a90d2a59d4934d90600090a2565b60026020526000908152604090205481565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206111c990336110c5565b611208576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206112339082611500565b6040516001600160a01b038216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b60016020526000908152604090205481565b600a546001600160a01b031681565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206112b690336110c5565b6112f5576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b60016001600160a01b03821660009081526004602052604090205460ff16600381111561131e57fe5b1461135a576040805162461bcd60e51b81526020600482015260076024820152661393d517d6515560ca1b604482015290519081900360640190fd5b6001600160a01b038116600081815260046020526040808220805460ff19166002179055517f8bbf1861fd29297756bc2ec1496a157359ea7fda5746df5233b4fc3e812451189190a250565b60036020526000908152604090205481565b60008181526020819052604081206110bf90611851565b600b54600160a01b900460ff1681565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061140a90336110c5565b611449576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b60026001600160a01b03821660009081526004602052604090205460ff16600381111561147257fe5b146114ae576040805162461bcd60e51b81526020600482015260076024820152661393d517d6515560ca1b604482015290519081900360640190fd5b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fb84ab42066834057600f08f7bc7564111d6f5c12497b99f98d02346aed682a149190a250565b60085481565b60008281526020819052604090206002015461151e90610a2c61174e565b610ad15760405162461bcd60e51b8152600401808060200182810382526030815260200180611a686030913960400191505060405180910390fd5b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061158490336110c5565b6115c3576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b8082116115f1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b83831161161f576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b600584905560068290556007819055600883905560408051858152602081018590528082018490526060810183905290517f439aed8a17825b1759469932384a25f3652d3eac82c0f52e402a0b458ae4e8389181900360800190a150505050565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902081565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c0190206116cf90336110c5565b61170e576040805162461bcd60e51b815260206004820152600b60248201526a2727aa2fa6a0a720a3a2a960a91b604482015290519081900360640190fd5b600b805460ff60a01b1916600160a01b17905560405133907fe1e6bc10311f2f958d6cd2d0ab7308c32089aa1acb8ab11a2ccb60028e332bd090600090a2565b3390565b6000828152602081905260409020611770908263ffffffff61185c16565b15610a765761177d61174e565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020819052604090206117df908263ffffffff61187116565b15610a76576117ec61174e565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006110bc8383611886565b60006110bc836001600160a01b0384166118ea565b60006110bf82611902565b60006110bc836001600160a01b038416611906565b60006110bc836001600160a01b038416611950565b815460009082106118c85760405162461bcd60e51b8152600401808060200182810382526022815260200180611a176022913960400191505060405180910390fd5b8260000182815481106118d757fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600061191283836118ea565b611948575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556110bf565b5060006110bf565b60008181526001830160205260408120548015611a0c578354600019808301919081019060009087908390811061198357fe5b90600052602060002001549050808760000184815481106119a057fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806119d057fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506110bf565b60009150506110bf56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220e0e5000ed055b2c0b41132ba44064bc93f20909512299fca5bacbdd21dcf105964736f6c63430006050033