false
true
0

Contract Address Details

0x64CFC7428621B2B118896670c0b4d52aB020Ee6a

Token
AUSD (AUSD)
Creator
0x47461e–f5e9fb at 0x0a521b–793ee6
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
143,062 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26393053
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
AUSD




Optimization enabled
true
Compiler version
v0.4.25+commit.59dbf8f1




Optimization runs
200
EVM Version
byzantium




Verified at
2026-04-02T06:22:51.720242Z

AUSD.sol

pragma solidity ^0.4.24;

/*
*
*
*     _  _   _ ___ ___    _____    _
*    /_\| | | / __|   \  |_   _|__| |_____ _ _
*   / _ \ |_| \__ \ |) |   | |/ _ \ / / -_) ' \
*  /_/ \_\___/|___/___/    |_|\___/_\_\___|_||_|
*
*
*
*/

// SafeMath methods
library SafeMath {
    function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
        uint256 c = _a + _b;
        assert(c >= _a);
        return c;
    }

    function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
        assert(_a >= _b);
        return _a - _b;
    }

    function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
        uint256 c = _a * _b;
        assert(_a == 0 || c / _a == _b);
        return c;
    }
}

// Contract must have an owner
contract Owned {
    address public owner;

    constructor() public {
        owner = msg.sender;
    }

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

    function setOwner(address _owner) onlyOwner public {
        owner = _owner;
    }
}

// Standard ERC20 Token Interface
interface ERC20Token {
    function name() external view returns (string name_);
    function symbol() external view returns (string symbol_);
    function decimals() external view returns (uint8 decimals_);
    function totalSupply() external view returns (uint256 totalSupply_);
    function balanceOf(address _owner) external view returns (uint256 _balance);
    function transfer(address _to, uint256 _value) external returns (bool _success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool _success);
    function approve(address _spender, uint256 _value) external returns (bool _success);
    function allowance(address _owner, address _spender) external view returns (uint256 _remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// the main ERC20-compliant multi-timelock enabled contract
contract AUSD is Owned, ERC20Token {
    using SafeMath for uint256;

    string private constant standard = "201811113309";
    string private constant version = "6.0663600";
    string private name_ = "AUSD";
    string private symbol_ = "AUSD";
    uint8 private decimals_ = 18;
    uint256 private totalSupply_ = uint256(20) * uint256(10)**uint256(8) * uint256(10)**uint256(decimals_);
    mapping (address => uint256) private balanceP;
    mapping (address => mapping (address => uint256)) private allowed;

    mapping (address => uint256[]) private lockTime;
    mapping (address => uint256[]) private lockValue;
    mapping (address => uint256) private lockNum;
    uint256 private later = 0;
    uint256 private earlier = 0;
    bool private mintable_ = true;

    // burn token event
    event Burn(address indexed _from, uint256 _value);

    // mint token event
    event Mint(address indexed _to, uint256 _value);

    // timelock-related events
    event TransferLocked(address indexed _from, address indexed _to, uint256 _time, uint256 _value);
    event TokenUnlocked(address indexed _address, uint256 _value);

    // safety method-related events
    event WrongTokenEmptied(address indexed _token, address indexed _addr, uint256 _amount);
    event WrongEtherEmptied(address indexed _addr, uint256 _amount);

    // constructor for the ERC20 Token
    constructor() public {
        balanceP[msg.sender] = totalSupply_;
    }

    modifier validAddress(address _address) {
        require(_address != 0x0);
        _;
    }

    modifier isMintable() {
        require(mintable_);
        _;
    }

    // fast-forward the timelocks for all accounts
    function setUnlockEarlier(uint256 _earlier) public onlyOwner {
        earlier = earlier.add(_earlier);
    }

    // delay the timelocks for all accounts
    function setUnlockLater(uint256 _later) public onlyOwner {
        later = later.add(_later);
    }

    // owner may permanently disable minting
    function disableMint() public onlyOwner isMintable {
        mintable_ = false;
    }

    // show if the token is still mintable
    function mintable() public view returns (bool) {
        return mintable_;
    }

    // standard ERC20 name function
    function name() public view returns (string) {
        return name_;
    }

    // standard ERC20 symbol function
    function symbol() public view returns (string) {
        return symbol_;
    }

    // standard ERC20 decimals function
    function decimals() public view returns (uint8) {
        return decimals_;
    }

    // standard ERC20 totalSupply function
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

    // standard ERC20 allowance function
    function allowance(address _owner, address _spender) external view returns (uint256) {
        return allowed[_owner][_spender];
    }

    // show unlocked balance of an account
    function balanceUnlocked(address _address) public view returns (uint256 _balance) {
        _balance = balanceP[_address];
        uint256 i = 0;
        while (i < lockNum[_address]) {
            if (now.add(earlier) >= lockTime[_address][i].add(later)) _balance = _balance.add(lockValue[_address][i]);
            i++;
        }
        return _balance;
    }

    // show timelocked balance of an account
    function balanceLocked(address _address) public view returns (uint256 _balance) {
        _balance = 0;
        uint256 i = 0;
        while (i < lockNum[_address]) {
            if (now.add(earlier) < lockTime[_address][i].add(later)) _balance = _balance.add(lockValue[_address][i]);
            i++;
        }
        return  _balance;
    }

    // standard ERC20 balanceOf with timelock added
    function balanceOf(address _address) public view returns (uint256 _balance) {
        _balance = balanceP[_address];
        uint256 i = 0;
        while (i < lockNum[_address]) {
            _balance = _balance.add(lockValue[_address][i]);
            i++;
        }
        return _balance;
    }

    // show timelocks in an account
    function showLockTimes(address _address) public view validAddress(_address) returns (uint256[] _times) {
        uint i = 0;
        uint256[] memory tempLockTime = new uint256[](lockNum[_address]);
        while (i < lockNum[_address]) {
            tempLockTime[i] = lockTime[_address][i].add(later).sub(earlier);
            i++;
        }
        return tempLockTime;
    }

    // show values locked in an account's timelocks
    function showLockValues(address _address) public view validAddress(_address) returns (uint256[] _values) {
        return lockValue[_address];
    }

    function showLockNum(address _address) public view validAddress(_address) returns (uint256 _lockNum) {
        return lockNum[_address];
    }

    // Calculate and process the timelock states of an account
    function calcUnlock(address _address) private {
        uint256 i = 0;
        uint256 j = 0;
        uint256[] memory currentLockTime;
        uint256[] memory currentLockValue;
        uint256[] memory newLockTime = new uint256[](lockNum[_address]);
        uint256[] memory newLockValue = new uint256[](lockNum[_address]);
        currentLockTime = lockTime[_address];
        currentLockValue = lockValue[_address];
        while (i < lockNum[_address]) {
            if (now.add(earlier) >= currentLockTime[i].add(later)) {
                balanceP[_address] = balanceP[_address].add(currentLockValue[i]);
                emit TokenUnlocked(_address, currentLockValue[i]);
            } else {
                newLockTime[j] = currentLockTime[i];
                newLockValue[j] = currentLockValue[i];
                j++;
            }
            i++;
        }
        uint256[] memory trimLockTime = new uint256[](j);
        uint256[] memory trimLockValue = new uint256[](j);
        i = 0;
        while (i < j) {
            trimLockTime[i] = newLockTime[i];
            trimLockValue[i] = newLockValue[i];
            i++;
        }
        lockTime[_address] = trimLockTime;
        lockValue[_address] = trimLockValue;
        lockNum[_address] = j;
    }

    // standard ERC20 transfer
    function transfer(address _to, uint256 _value) public validAddress(_to) returns (bool _success) {
        if (lockNum[msg.sender] > 0) calcUnlock(msg.sender);
        require(balanceP[msg.sender] >= _value && _value >= 0);
        balanceP[msg.sender] = balanceP[msg.sender].sub(_value);
        balanceP[_to] = balanceP[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    // transfer Token with timelocks
    function transferLocked(address _to, uint256[] _time, uint256[] _value) public validAddress(_to) returns (bool _success) {
        require(_value.length == _time.length);

        if (lockNum[msg.sender] > 0) calcUnlock(msg.sender);
        uint256 i = 0;
        uint256 totalValue = 0;
        while (i < _value.length) {
            totalValue = totalValue.add(_value[i]);
            i++;
        }
        require(balanceP[msg.sender] >= totalValue && totalValue >= 0);
        require(lockNum[_to].add(_time.length) <= 42);
        i = 0;
        while (i < _time.length) {
            if (_value[i] > 0) {
                balanceP[msg.sender] = balanceP[msg.sender].sub(_value[i]);
                lockTime[_to].length = lockNum[_to]+1;
                lockValue[_to].length = lockNum[_to]+1;
                lockTime[_to][lockNum[_to]] = now.add(_time[i]).add(earlier).sub(later);
                lockValue[_to][lockNum[_to]] = _value[i];
                lockNum[_to]++;
            }

            // emit custom TransferLocked event
            emit TransferLocked(msg.sender, _to, _time[i], _value[i]);

            // emit standard Transfer event for wallets
            emit Transfer(msg.sender, _to, _value[i]);

            i++;
        }
        return true;
    }

    // TransferFrom Token with timelocks
    function transferLockedFrom(address _from, address _to, uint256[] _time, uint256[] _value) public
	    validAddress(_from) validAddress(_to) returns (bool success) {
        require(_value.length == _time.length);

        if (lockNum[_from] > 0) calcUnlock(_from);
        uint256 i = 0;
        uint256 totalValue = 0;
        while (i < _value.length) {
            totalValue = totalValue.add(_value[i]);
            i++;
        }
        require(balanceP[_from] >= totalValue && totalValue >= 0 && allowed[_from][msg.sender] >= totalValue);
        require(lockNum[_to].add(_time.length) <= 42);
        i = 0;
        while (i < _time.length) {
            if (_value[i] > 0) {
                balanceP[_from] = balanceP[_from].sub(_value[i]);
                allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value[i]);
                lockTime[_to].length = lockNum[_to]+1;
                lockValue[_to].length = lockNum[_to]+1;
                lockTime[_to][lockNum[_to]] = now.add(_time[i]).add(earlier).sub(later);
                lockValue[_to][lockNum[_to]] = _value[i];
                lockNum[_to]++;
            }

            // emit custom TransferLocked event
            emit TransferLocked(_from, _to, _time[i], _value[i]);

            // emit standard Transfer event for wallets
            emit Transfer(_from, _to, _value[i]);

            i++;
        }
        return true;
    }

    // standard ERC20 transferFrom
    function transferFrom(address _from, address _to, uint256 _value) public validAddress(_from) validAddress(_to) returns (bool _success) {
        if (lockNum[_from] > 0) calcUnlock(_from);
        require(balanceP[_from] >= _value && _value >= 0 && allowed[_from][msg.sender] >= _value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        balanceP[_from] = balanceP[_from].sub(_value);
        balanceP[_to] = balanceP[_to].add(_value);
        emit Transfer(_from, _to, _value);
        return true;
    }

    // should only be called when first setting an allowed
    function approve(address _spender, uint256 _value) public validAddress(_spender) returns (bool _success) {
        if (lockNum[msg.sender] > 0) calcUnlock(msg.sender);
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    // increase or decrease allowed
    function increaseApproval(address _spender, uint _value) public validAddress(_spender) returns (bool _success) {
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_value);
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    function decreaseApproval(address _spender, uint _value) public validAddress(_spender) returns (bool _success) {
        if(_value >= allowed[msg.sender][_spender]) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = allowed[msg.sender][_spender].sub(_value);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    // owner may burn own token
    function burn(uint256 _value) public onlyOwner returns (bool _success) {
        if (lockNum[msg.sender] > 0) calcUnlock(msg.sender);
        require(balanceP[msg.sender] >= _value && _value >= 0);
        balanceP[msg.sender] = balanceP[msg.sender].sub(_value);
        totalSupply_ = totalSupply_.sub(_value);
        emit Burn(msg.sender, _value);
        return true;
    }

    // owner may mint new token and increase total supply
    function mint(uint256 _value) public onlyOwner isMintable returns (bool _success) {
        balanceP[msg.sender] = balanceP[msg.sender].add(_value);
        totalSupply_ = totalSupply_.add(_value);
        emit Mint(msg.sender, _value);
        return true;
    }

    // safety methods
    function () public payable {
        revert();
    }

    function emptyWrongToken(address _addr) onlyOwner public {
        ERC20Token wrongToken = ERC20Token(_addr);
        uint256 amount = wrongToken.balanceOf(address(this));
        require(amount > 0);
        require(wrongToken.transfer(msg.sender, amount));

        emit WrongTokenEmptied(_addr, msg.sender, amount);
    }

    // shouldn't happen, just in case
    function emptyWrongEther() onlyOwner public {
        uint256 amount = address(this).balance;
        require(amount > 0);
        msg.sender.transfer(amount);

        emit WrongEtherEmptied(msg.sender, amount);
    }

}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"byzantium","compilationTarget":{"AUSD.sol":"AUSD"}}
              

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_balance"}],"name":"balanceUnlocked","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"approve","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"transferLockedFrom","inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256[]","name":"_time"},{"type":"uint256[]","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setOwner","inputs":[{"type":"address","name":"_owner"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":""}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"disableMint","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"burn","inputs":[{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"mintable","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_balance"}],"name":"balanceLocked","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"decreaseApproval","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_balance"}],"name":"balanceOf","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"mint","inputs":[{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"transfer","inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"transferLocked","inputs":[{"type":"address","name":"_to"},{"type":"uint256[]","name":"_time"},{"type":"uint256[]","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256[]","name":"_times"}],"name":"showLockTimes","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256[]","name":"_values"}],"name":"showLockValues","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setUnlockLater","inputs":[{"type":"uint256","name":"_later"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"emptyWrongToken","inputs":[{"type":"address","name":"_addr"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"_success"}],"name":"increaseApproval","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"emptyWrongEther","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"allowance","inputs":[{"type":"address","name":"_owner"},{"type":"address","name":"_spender"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setUnlockEarlier","inputs":[{"type":"uint256","name":"_earlier"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_lockNum"}],"name":"showLockNum","inputs":[{"type":"address","name":"_address"}],"constant":true},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[]},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"TransferLocked","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_time","indexed":false},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"TokenUnlocked","inputs":[{"type":"address","name":"_address","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"WrongTokenEmptied","inputs":[{"type":"address","name":"_token","indexed":true},{"type":"address","name":"_addr","indexed":true},{"type":"uint256","name":"_amount","indexed":false}],"anonymous":false},{"type":"event","name":"WrongEtherEmptied","inputs":[{"type":"address","name":"_addr","indexed":true},{"type":"uint256","name":"_amount","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"_owner","indexed":true},{"type":"address","name":"_spender","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false}]
              

Contract Creation Code

Verify & Publish
0x60c0604052600460808190527f415553440000000000000000000000000000000000000000000000000000000060a0908152620000409160019190620000fa565b506040805180820190915260048082527f415553440000000000000000000000000000000000000000000000000000000060209092019182526200008791600291620000fa565b5060038054601260ff19918216179182905560ff909116600a90810a637735940002600455600090819055600b55600c80549091166001179055348015620000ce57600080fd5b5060008054600160a060020a03191633908117825560045490825260056020526040909120556200019f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013d57805160ff19168380011785556200016d565b828001600101855582156200016d579182015b828111156200016d57825182559160200191906001019062000150565b506200017b9291506200017f565b5090565b6200019c91905b808211156200017b576000815560010162000186565b90565b61227580620001af6000396000f3006080604052600436106101695763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630451f520811461016e57806306fdde03146101a1578063095ea7b31461022b5780630fce887b1461026357806313af40351461030757806318160ddd1461032a57806323b872dd1461033f578063313ce5671461036957806334452f381461039457806342966c68146103a95780634bf365df146103c15780635fc3a312146103d657806366188463146103f757806370a082311461041b5780638da5cb5b1461043c57806395d89b411461046d578063a0712d6814610482578063a9059cbb1461049a578063b91aedab146104be578063b9c5416d1461055a578063c9e6bd34146105cb578063ca0cd7c0146105ec578063d729018114610604578063d73dd62314610625578063d80b205614610649578063dd62ed3e1461065e578063df51d46b14610685578063fb276fcf1461069d575b600080fd5b34801561017a57600080fd5b5061018f600160a060020a03600435166106be565b60408051918252519081900360200190f35b3480156101ad57600080fd5b506101b66107ac565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023757600080fd5b5061024f600160a060020a0360043516602435610842565b604080519115158252519081900360200190f35b34801561026f57600080fd5b50604080516020600460443581810135838102808601850190965280855261024f958335600160a060020a039081169660248035909216963696956064959294930192829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506108e19650505050505050565b34801561031357600080fd5b50610328600160a060020a0360043516610d61565b005b34801561033657600080fd5b5061018f610da7565b34801561034b57600080fd5b5061024f600160a060020a0360043581169060243516604435610dad565b34801561037557600080fd5b5061037e610f61565b6040805160ff9092168252519081900360200190f35b3480156103a057600080fd5b50610328610f6a565b3480156103b557600080fd5b5061024f600435610f9e565b3480156103cd57600080fd5b5061024f611084565b3480156103e257600080fd5b5061018f600160a060020a036004351661108d565b34801561040357600080fd5b5061024f600160a060020a036004351660243561112c565b34801561042757600080fd5b5061018f600160a060020a0360043516611256565b34801561044857600080fd5b506104516112c4565b60408051600160a060020a039092168252519081900360200190f35b34801561047957600080fd5b506101b66112d3565b34801561048e57600080fd5b5061024f600435611331565b3480156104a657600080fd5b5061024f600160a060020a03600435166024356113de565b3480156104ca57600080fd5b5060408051602060046024803582810135848102808701860190975280865261024f968435600160a060020a031696369660449591949091019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506114df9650505050505050565b34801561056657600080fd5b5061057b600160a060020a036004351661185d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105b757818101518382015260200161059f565b505050509050019250505060405180910390f35b3480156105d757600080fd5b5061057b600160a060020a036004351661194f565b3480156105f857600080fd5b506103286004356119d2565b34801561061057600080fd5b50610328600160a060020a0360043516611a02565b34801561063157600080fd5b5061024f600160a060020a0360043516602435611b9f565b34801561065557600080fd5b50610328611beb565b34801561066a57600080fd5b5061018f600160a060020a0360043581169060243516611c7a565b34801561069157600080fd5b50610328600435611ca5565b3480156106a957600080fd5b5061018f600160a060020a0360043516611cd5565b600160a060020a038116600090815260056020526040812054905b600160a060020a0383166000908152600960205260409020548110156107a657600a54600160a060020a0384166000908152600760205260409020805461073f9291908490811061072657fe5b9060005260206000200154611d0a90919063ffffffff16565b600b5461075390429063ffffffff611d0a16565b1061079e57600160a060020a0383166000908152600860205260409020805461079b91908390811061078157fe5b906000526020600020015483611d0a90919063ffffffff16565b91505b6001016106d9565b50919050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b505050505090505b90565b600082600160a060020a038116151561085a57600080fd5b3360009081526009602052604081205411156108795761087933611d20565b336000818152600660209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000808086600160a060020a03811615156108fb57600080fd5b86600160a060020a038116151561091157600080fd5b865186511461091f57600080fd5b600160a060020a03891660009081526009602052604081205411156109475761094789611d20565b60009350600092505b855184101561098e57610981868581518110151561096a57fe5b60209081029091010151849063ffffffff611d0a16565b6001909401939250610950565b600160a060020a03891660009081526005602052604090205483118015906109b7575060008310155b80156109e65750600160a060020a03891660009081526006602090815260408083203384529091529020548311155b15156109f157600080fd5b8651600160a060020a038916600090815260096020526040902054602a91610a1f919063ffffffff611d0a16565b1115610a2a57600080fd5b600093505b8651841015610d525760008685815181101515610a4857fe5b906020019060200201511115610c7d57610a9a8685815181101515610a6957fe5b6020908102909101810151600160a060020a038c16600090815260059092526040909120549063ffffffff61218916565b600160a060020a038a166000908152600560205260409020558551610aff90879086908110610ac557fe5b6020908102909101810151600160a060020a038c16600090815260068352604080822033835290935291909120549063ffffffff61218916565b600160a060020a03808b166000908152600660209081526040808320338452825280832094909455918b1681526009825282812054600790925291909120600190910190610b4d908261219b565b50600160a060020a0388166000908152600960209081526040808320546008909252909120600190910190610b82908261219b565b50610bcf600a54610bc3600b54610bb78b89815181101515610ba057fe5b60209081029091010151429063ffffffff611d0a16565b9063ffffffff611d0a16565b9063ffffffff61218916565b600160a060020a038916600090815260076020908152604080832060099092529091205481548110610bfd57fe5b6000918252602090912001558551869085908110610c1757fe5b6020908102909101810151600160a060020a038a166000908152600883526040808220600990945290205482549192918110610c4f57fe5b6000918252602080832090910192909255600160a060020a038a168152600990915260409020805460010190555b87600160a060020a031689600160a060020a03167f34c966766e471b87b7ce8d0d0358378cf20008a30bbb36246a3413c8a286834e8987815181101515610cc057fe5b906020019060200201518988815181101515610cd857fe5b602090810290910181015160408051938452918301528051918290030190a387600160a060020a031689600160a060020a031660008051602061222a8339815191528887815181101515610d2857fe5b906020019060200201516040518082815260200191505060405180910390a3600190930192610a2f565b50600198975050505050505050565b600054600160a060020a03163314610d7857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045490565b600083600160a060020a0381161515610dc557600080fd5b83600160a060020a0381161515610ddb57600080fd5b600160a060020a0386166000908152600960205260408120541115610e0357610e0386611d20565b600160a060020a0386166000908152600560205260409020548411801590610e2c575060008410155b8015610e5b5750600160a060020a03861660009081526006602090815260408083203384529091529020548411155b1515610e6657600080fd5b600160a060020a0386166000908152600660209081526040808320338452909152902054610e9a908563ffffffff61218916565b600160a060020a038716600081815260066020908152604080832033845282528083209490945591815260059091522054610edb908563ffffffff61218916565b600160a060020a038088166000908152600560205260408082209390935590871681522054610f10908563ffffffff611d0a16565b600160a060020a0380871660008181526005602090815260409182902094909455805188815290519193928a169260008051602061222a83398151915292918290030190a350600195945050505050565b60035460ff1690565b600054600160a060020a03163314610f8157600080fd5b600c5460ff161515610f9257600080fd5b600c805460ff19169055565b60008054600160a060020a03163314610fb657600080fd5b336000908152600960205260408120541115610fd557610fd533611d20565b336000908152600560205260409020548211801590610ff5575060008210155b151561100057600080fd5b33600090815260056020526040902054611020908363ffffffff61218916565b33600090815260056020526040902055600454611043908363ffffffff61218916565b60045560408051838152905133917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a2506001919050565b600c5460ff1690565b6000805b600160a060020a0383166000908152600960205260409020548110156107a657600a54600160a060020a038416600090815260076020526040902080546110de9291908490811061072657fe5b600b546110f290429063ffffffff611d0a16565b101561112457600160a060020a0383166000908152600860205260409020805461112191908390811061078157fe5b91505b600101611091565b600082600160a060020a038116151561114457600080fd5b336000908152600660209081526040808320600160a060020a0388168452909152902054831061119757336000908152600660209081526040808320600160a060020a03881684529091528120556111f0565b336000908152600660209081526040808320600160a060020a03881684529091529020546111cb908463ffffffff61218916565b336000908152600660209081526040808320600160a060020a03891684529091529020555b336000818152600660209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a038116600090815260056020526040812054905b600160a060020a0383166000908152600960205260409020548110156107a657600160a060020a038316600090815260086020526040902080546112ba91908390811061078157fe5b9150600101611271565b600054600160a060020a031681565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156108375780601f1061080c57610100808354040283529160200191610837565b60008054600160a060020a0316331461134957600080fd5b600c5460ff16151561135a57600080fd5b3360009081526005602052604090205461137a908363ffffffff611d0a16565b3360009081526005602052604090205560045461139d908363ffffffff611d0a16565b60045560408051838152905133917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a2506001919050565b600082600160a060020a03811615156113f657600080fd5b3360009081526009602052604081205411156114155761141533611d20565b336000908152600560205260409020548311801590611435575060008310155b151561144057600080fd5b33600090815260056020526040902054611460908463ffffffff61218916565b3360009081526005602052604080822092909255600160a060020a03861681522054611492908463ffffffff611d0a16565b600160a060020a03851660008181526005602090815260409182902093909355805186815290519192339260008051602061222a8339815191529281900390910190a35060019392505050565b6000808085600160a060020a03811615156114f957600080fd5b855185511461150757600080fd5b3360009081526009602052604081205411156115265761152633611d20565b60009250600091505b845183101561156d57611560858481518110151561154957fe5b60209081029091010151839063ffffffff611d0a16565b600190930192915061152f565b33600090815260056020526040902054821180159061158d575060008210155b151561159857600080fd5b8551600160a060020a038816600090815260096020526040902054602a916115c6919063ffffffff611d0a16565b11156115d157600080fd5b600092505b855183101561185057600085848151811015156115ef57fe5b90602001906020020151111561177b57611638858481518110151561161057fe5b602090810290910181015133600090815260059092526040909120549063ffffffff61218916565b33600090815260056020908152604080832093909355600160a060020a038a1682526009815282822054600790915291902060019091019061167a908261219b565b50600160a060020a03871660009081526009602090815260408083205460089092529091206001909101906116af908261219b565b506116cd600a54610bc3600b54610bb78a88815181101515610ba057fe5b600160a060020a0388166000908152600760209081526040808320600990925290912054815481106116fb57fe5b600091825260209091200155845185908490811061171557fe5b6020908102909101810151600160a060020a038916600090815260088352604080822060099094529020548254919291811061174d57fe5b6000918252602080832090910192909255600160a060020a0389168152600990915260409020805460010190555b86600160a060020a031633600160a060020a03167f34c966766e471b87b7ce8d0d0358378cf20008a30bbb36246a3413c8a286834e88868151811015156117be57fe5b9060200190602002015188878151811015156117d657fe5b602090810290910181015160408051938452918301528051918290030190a386600160a060020a031633600160a060020a031660008051602061222a833981519152878681518110151561182657fe5b906020019060200201516040518082815260200191505060405180910390a36001909201916115d6565b5060019695505050505050565b606060008183600160a060020a038116151561187857600080fd5b600092506009600086600160a060020a0316600160a060020a03168152602001908152602001600020546040519080825280602002602001820160405280156118cb578160200160208202803883390190505b5091505b600160a060020a03851660009081526009602052604090205483101561194757600b54600a54600160a060020a038716600090815260076020526040902080546119249392610bc39290918890811061072657fe5b828481518110151561193257fe5b602090810290910101526001909201916118cf565b509392505050565b606081600160a060020a038116151561196757600080fd5b600160a060020a038316600090815260086020908152604091829020805483518184028101840190945280845290918301828280156119c557602002820191906000526020600020905b8154815260200190600101908083116119b1575b5050505050915050919050565b600054600160a060020a031633146119e957600080fd5b600a546119fc908263ffffffff611d0a16565b600a5550565b600080548190600160a060020a03163314611a1c57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015611a8057600080fd5b505af1158015611a94573d6000803e3d6000fd5b505050506040513d6020811015611aaa57600080fd5b5051905060008111611abb57600080fd5b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0384169163a9059cbb9160448083019260209291908290030181600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b50511515611b5a57600080fd5b6040805182815290513391600160a060020a038616917f5d8daa04d680e083e2ab17a35494ba9f290f554edf76a78f0103a8a599b5c4249181900360200190a3505050565b600082600160a060020a0381161515611bb757600080fd5b336000908152600660209081526040808320600160a060020a03881684529091529020546111cb908463ffffffff611d0a16565b60008054600160a060020a03163314611c0357600080fd5b50303160008111611c1357600080fd5b604051339082156108fc029083906000818181858888f19350505050158015611c40573d6000803e3d6000fd5b5060408051828152905133917faea7a96dc17068a25e51e08f8ed45b86bd34b10af65af8e757af57b7e7b9e55d919081900360200190a250565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b600054600160a060020a03163314611cbc57600080fd5b600b54611ccf908263ffffffff611d0a16565b600b5550565b600081600160a060020a0381161515611ced57600080fd5b5050600160a060020a031660009081526009602052604090205490565b600082820183811015611d1957fe5b9392505050565b6000806060806060806060806000975060009650600960008a600160a060020a0316600160a060020a0316815260200190815260200160002054604051908082528060200260200182016040528015611d83578160200160208202803883390190505b509350600960008a600160a060020a0316600160a060020a0316815260200190815260200160002054604051908082528060200260200182016040528015611dd5578160200160208202803883390190505b50600160a060020a038a166000908152600760209081526040918290208054835181840281018401909452808452939650919290830182828015611e3857602002820191906000526020600020905b815481526020019060010190808311611e24575b50505050509550600860008a600160a060020a0316600160a060020a03168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611eae57602002820191906000526020600020905b815481526020019060010190808311611e9a575b505050505094505b600160a060020a03891660009081526009602052604090205488101561203d57611f00600a54878a815181101515611eea57fe5b602090810290910101519063ffffffff611d0a16565b600b54611f1490429063ffffffff611d0a16565b10611fcb57611f5b8589815181101515611f2a57fe5b6020908102909101810151600160a060020a038c16600090815260059092526040909120549063ffffffff611d0a16565b600160a060020a038a1660008181526005602052604090209190915585517f613edbda9d1e6bda8af8e869a973f88cccf93854a11f351589038de07e1ab4e39087908b908110611fa757fe5b906020019060200201516040518082815260200191505060405180910390a2612032565b8588815181101515611fd957fe5b906020019060200201518488815181101515611ff157fe5b60209081029091010152845185908990811061200957fe5b90602001906020020151838881518110151561202157fe5b602090810290910101526001909601955b600190970196611eb6565b86604051908082528060200260200182016040528015612067578160200160208202803883390190505b50915086604051908082528060200260200182016040528015612094578160200160208202803883390190505b509050600097505b8688101561210f5783888151811015156120b257fe5b9060200190602002015182898151811015156120ca57fe5b6020908102909101015282518390899081106120e257fe5b9060200190602002015181898151811015156120fa57fe5b6020908102909101015260019097019661209c565b600160a060020a03891660009081526007602090815260409091208351612138928501906121c4565b50600160a060020a03891660009081526008602090815260409091208251612162928401906121c4565b505050600160a060020a039096166000908152600960205260409020939093555050505050565b60008183101561219557fe5b50900390565b8154818355818111156121bf576000838152602090206121bf91810190830161220f565b505050565b8280548282559060005260206000209081019282156121ff579160200282015b828111156121ff5782518255916020019190600101906121e4565b5061220b92915061220f565b5090565b61083f91905b8082111561220b57600081556001016122155600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582004e327a4db376800f1cf8fb357f9a1addb8dd7b973f7aca43d086a8e69281caa0029

Deployed ByteCode

0x6080604052600436106101695763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630451f520811461016e57806306fdde03146101a1578063095ea7b31461022b5780630fce887b1461026357806313af40351461030757806318160ddd1461032a57806323b872dd1461033f578063313ce5671461036957806334452f381461039457806342966c68146103a95780634bf365df146103c15780635fc3a312146103d657806366188463146103f757806370a082311461041b5780638da5cb5b1461043c57806395d89b411461046d578063a0712d6814610482578063a9059cbb1461049a578063b91aedab146104be578063b9c5416d1461055a578063c9e6bd34146105cb578063ca0cd7c0146105ec578063d729018114610604578063d73dd62314610625578063d80b205614610649578063dd62ed3e1461065e578063df51d46b14610685578063fb276fcf1461069d575b600080fd5b34801561017a57600080fd5b5061018f600160a060020a03600435166106be565b60408051918252519081900360200190f35b3480156101ad57600080fd5b506101b66107ac565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023757600080fd5b5061024f600160a060020a0360043516602435610842565b604080519115158252519081900360200190f35b34801561026f57600080fd5b50604080516020600460443581810135838102808601850190965280855261024f958335600160a060020a039081169660248035909216963696956064959294930192829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506108e19650505050505050565b34801561031357600080fd5b50610328600160a060020a0360043516610d61565b005b34801561033657600080fd5b5061018f610da7565b34801561034b57600080fd5b5061024f600160a060020a0360043581169060243516604435610dad565b34801561037557600080fd5b5061037e610f61565b6040805160ff9092168252519081900360200190f35b3480156103a057600080fd5b50610328610f6a565b3480156103b557600080fd5b5061024f600435610f9e565b3480156103cd57600080fd5b5061024f611084565b3480156103e257600080fd5b5061018f600160a060020a036004351661108d565b34801561040357600080fd5b5061024f600160a060020a036004351660243561112c565b34801561042757600080fd5b5061018f600160a060020a0360043516611256565b34801561044857600080fd5b506104516112c4565b60408051600160a060020a039092168252519081900360200190f35b34801561047957600080fd5b506101b66112d3565b34801561048e57600080fd5b5061024f600435611331565b3480156104a657600080fd5b5061024f600160a060020a03600435166024356113de565b3480156104ca57600080fd5b5060408051602060046024803582810135848102808701860190975280865261024f968435600160a060020a031696369660449591949091019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506114df9650505050505050565b34801561056657600080fd5b5061057b600160a060020a036004351661185d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105b757818101518382015260200161059f565b505050509050019250505060405180910390f35b3480156105d757600080fd5b5061057b600160a060020a036004351661194f565b3480156105f857600080fd5b506103286004356119d2565b34801561061057600080fd5b50610328600160a060020a0360043516611a02565b34801561063157600080fd5b5061024f600160a060020a0360043516602435611b9f565b34801561065557600080fd5b50610328611beb565b34801561066a57600080fd5b5061018f600160a060020a0360043581169060243516611c7a565b34801561069157600080fd5b50610328600435611ca5565b3480156106a957600080fd5b5061018f600160a060020a0360043516611cd5565b600160a060020a038116600090815260056020526040812054905b600160a060020a0383166000908152600960205260409020548110156107a657600a54600160a060020a0384166000908152600760205260409020805461073f9291908490811061072657fe5b9060005260206000200154611d0a90919063ffffffff16565b600b5461075390429063ffffffff611d0a16565b1061079e57600160a060020a0383166000908152600860205260409020805461079b91908390811061078157fe5b906000526020600020015483611d0a90919063ffffffff16565b91505b6001016106d9565b50919050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b505050505090505b90565b600082600160a060020a038116151561085a57600080fd5b3360009081526009602052604081205411156108795761087933611d20565b336000818152600660209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000808086600160a060020a03811615156108fb57600080fd5b86600160a060020a038116151561091157600080fd5b865186511461091f57600080fd5b600160a060020a03891660009081526009602052604081205411156109475761094789611d20565b60009350600092505b855184101561098e57610981868581518110151561096a57fe5b60209081029091010151849063ffffffff611d0a16565b6001909401939250610950565b600160a060020a03891660009081526005602052604090205483118015906109b7575060008310155b80156109e65750600160a060020a03891660009081526006602090815260408083203384529091529020548311155b15156109f157600080fd5b8651600160a060020a038916600090815260096020526040902054602a91610a1f919063ffffffff611d0a16565b1115610a2a57600080fd5b600093505b8651841015610d525760008685815181101515610a4857fe5b906020019060200201511115610c7d57610a9a8685815181101515610a6957fe5b6020908102909101810151600160a060020a038c16600090815260059092526040909120549063ffffffff61218916565b600160a060020a038a166000908152600560205260409020558551610aff90879086908110610ac557fe5b6020908102909101810151600160a060020a038c16600090815260068352604080822033835290935291909120549063ffffffff61218916565b600160a060020a03808b166000908152600660209081526040808320338452825280832094909455918b1681526009825282812054600790925291909120600190910190610b4d908261219b565b50600160a060020a0388166000908152600960209081526040808320546008909252909120600190910190610b82908261219b565b50610bcf600a54610bc3600b54610bb78b89815181101515610ba057fe5b60209081029091010151429063ffffffff611d0a16565b9063ffffffff611d0a16565b9063ffffffff61218916565b600160a060020a038916600090815260076020908152604080832060099092529091205481548110610bfd57fe5b6000918252602090912001558551869085908110610c1757fe5b6020908102909101810151600160a060020a038a166000908152600883526040808220600990945290205482549192918110610c4f57fe5b6000918252602080832090910192909255600160a060020a038a168152600990915260409020805460010190555b87600160a060020a031689600160a060020a03167f34c966766e471b87b7ce8d0d0358378cf20008a30bbb36246a3413c8a286834e8987815181101515610cc057fe5b906020019060200201518988815181101515610cd857fe5b602090810290910181015160408051938452918301528051918290030190a387600160a060020a031689600160a060020a031660008051602061222a8339815191528887815181101515610d2857fe5b906020019060200201516040518082815260200191505060405180910390a3600190930192610a2f565b50600198975050505050505050565b600054600160a060020a03163314610d7857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045490565b600083600160a060020a0381161515610dc557600080fd5b83600160a060020a0381161515610ddb57600080fd5b600160a060020a0386166000908152600960205260408120541115610e0357610e0386611d20565b600160a060020a0386166000908152600560205260409020548411801590610e2c575060008410155b8015610e5b5750600160a060020a03861660009081526006602090815260408083203384529091529020548411155b1515610e6657600080fd5b600160a060020a0386166000908152600660209081526040808320338452909152902054610e9a908563ffffffff61218916565b600160a060020a038716600081815260066020908152604080832033845282528083209490945591815260059091522054610edb908563ffffffff61218916565b600160a060020a038088166000908152600560205260408082209390935590871681522054610f10908563ffffffff611d0a16565b600160a060020a0380871660008181526005602090815260409182902094909455805188815290519193928a169260008051602061222a83398151915292918290030190a350600195945050505050565b60035460ff1690565b600054600160a060020a03163314610f8157600080fd5b600c5460ff161515610f9257600080fd5b600c805460ff19169055565b60008054600160a060020a03163314610fb657600080fd5b336000908152600960205260408120541115610fd557610fd533611d20565b336000908152600560205260409020548211801590610ff5575060008210155b151561100057600080fd5b33600090815260056020526040902054611020908363ffffffff61218916565b33600090815260056020526040902055600454611043908363ffffffff61218916565b60045560408051838152905133917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a2506001919050565b600c5460ff1690565b6000805b600160a060020a0383166000908152600960205260409020548110156107a657600a54600160a060020a038416600090815260076020526040902080546110de9291908490811061072657fe5b600b546110f290429063ffffffff611d0a16565b101561112457600160a060020a0383166000908152600860205260409020805461112191908390811061078157fe5b91505b600101611091565b600082600160a060020a038116151561114457600080fd5b336000908152600660209081526040808320600160a060020a0388168452909152902054831061119757336000908152600660209081526040808320600160a060020a03881684529091528120556111f0565b336000908152600660209081526040808320600160a060020a03881684529091529020546111cb908463ffffffff61218916565b336000908152600660209081526040808320600160a060020a03891684529091529020555b336000818152600660209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a038116600090815260056020526040812054905b600160a060020a0383166000908152600960205260409020548110156107a657600160a060020a038316600090815260086020526040902080546112ba91908390811061078157fe5b9150600101611271565b600054600160a060020a031681565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156108375780601f1061080c57610100808354040283529160200191610837565b60008054600160a060020a0316331461134957600080fd5b600c5460ff16151561135a57600080fd5b3360009081526005602052604090205461137a908363ffffffff611d0a16565b3360009081526005602052604090205560045461139d908363ffffffff611d0a16565b60045560408051838152905133917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a2506001919050565b600082600160a060020a03811615156113f657600080fd5b3360009081526009602052604081205411156114155761141533611d20565b336000908152600560205260409020548311801590611435575060008310155b151561144057600080fd5b33600090815260056020526040902054611460908463ffffffff61218916565b3360009081526005602052604080822092909255600160a060020a03861681522054611492908463ffffffff611d0a16565b600160a060020a03851660008181526005602090815260409182902093909355805186815290519192339260008051602061222a8339815191529281900390910190a35060019392505050565b6000808085600160a060020a03811615156114f957600080fd5b855185511461150757600080fd5b3360009081526009602052604081205411156115265761152633611d20565b60009250600091505b845183101561156d57611560858481518110151561154957fe5b60209081029091010151839063ffffffff611d0a16565b600190930192915061152f565b33600090815260056020526040902054821180159061158d575060008210155b151561159857600080fd5b8551600160a060020a038816600090815260096020526040902054602a916115c6919063ffffffff611d0a16565b11156115d157600080fd5b600092505b855183101561185057600085848151811015156115ef57fe5b90602001906020020151111561177b57611638858481518110151561161057fe5b602090810290910181015133600090815260059092526040909120549063ffffffff61218916565b33600090815260056020908152604080832093909355600160a060020a038a1682526009815282822054600790915291902060019091019061167a908261219b565b50600160a060020a03871660009081526009602090815260408083205460089092529091206001909101906116af908261219b565b506116cd600a54610bc3600b54610bb78a88815181101515610ba057fe5b600160a060020a0388166000908152600760209081526040808320600990925290912054815481106116fb57fe5b600091825260209091200155845185908490811061171557fe5b6020908102909101810151600160a060020a038916600090815260088352604080822060099094529020548254919291811061174d57fe5b6000918252602080832090910192909255600160a060020a0389168152600990915260409020805460010190555b86600160a060020a031633600160a060020a03167f34c966766e471b87b7ce8d0d0358378cf20008a30bbb36246a3413c8a286834e88868151811015156117be57fe5b9060200190602002015188878151811015156117d657fe5b602090810290910181015160408051938452918301528051918290030190a386600160a060020a031633600160a060020a031660008051602061222a833981519152878681518110151561182657fe5b906020019060200201516040518082815260200191505060405180910390a36001909201916115d6565b5060019695505050505050565b606060008183600160a060020a038116151561187857600080fd5b600092506009600086600160a060020a0316600160a060020a03168152602001908152602001600020546040519080825280602002602001820160405280156118cb578160200160208202803883390190505b5091505b600160a060020a03851660009081526009602052604090205483101561194757600b54600a54600160a060020a038716600090815260076020526040902080546119249392610bc39290918890811061072657fe5b828481518110151561193257fe5b602090810290910101526001909201916118cf565b509392505050565b606081600160a060020a038116151561196757600080fd5b600160a060020a038316600090815260086020908152604091829020805483518184028101840190945280845290918301828280156119c557602002820191906000526020600020905b8154815260200190600101908083116119b1575b5050505050915050919050565b600054600160a060020a031633146119e957600080fd5b600a546119fc908263ffffffff611d0a16565b600a5550565b600080548190600160a060020a03163314611a1c57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015611a8057600080fd5b505af1158015611a94573d6000803e3d6000fd5b505050506040513d6020811015611aaa57600080fd5b5051905060008111611abb57600080fd5b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0384169163a9059cbb9160448083019260209291908290030181600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b50511515611b5a57600080fd5b6040805182815290513391600160a060020a038616917f5d8daa04d680e083e2ab17a35494ba9f290f554edf76a78f0103a8a599b5c4249181900360200190a3505050565b600082600160a060020a0381161515611bb757600080fd5b336000908152600660209081526040808320600160a060020a03881684529091529020546111cb908463ffffffff611d0a16565b60008054600160a060020a03163314611c0357600080fd5b50303160008111611c1357600080fd5b604051339082156108fc029083906000818181858888f19350505050158015611c40573d6000803e3d6000fd5b5060408051828152905133917faea7a96dc17068a25e51e08f8ed45b86bd34b10af65af8e757af57b7e7b9e55d919081900360200190a250565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b600054600160a060020a03163314611cbc57600080fd5b600b54611ccf908263ffffffff611d0a16565b600b5550565b600081600160a060020a0381161515611ced57600080fd5b5050600160a060020a031660009081526009602052604090205490565b600082820183811015611d1957fe5b9392505050565b6000806060806060806060806000975060009650600960008a600160a060020a0316600160a060020a0316815260200190815260200160002054604051908082528060200260200182016040528015611d83578160200160208202803883390190505b509350600960008a600160a060020a0316600160a060020a0316815260200190815260200160002054604051908082528060200260200182016040528015611dd5578160200160208202803883390190505b50600160a060020a038a166000908152600760209081526040918290208054835181840281018401909452808452939650919290830182828015611e3857602002820191906000526020600020905b815481526020019060010190808311611e24575b50505050509550600860008a600160a060020a0316600160a060020a03168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611eae57602002820191906000526020600020905b815481526020019060010190808311611e9a575b505050505094505b600160a060020a03891660009081526009602052604090205488101561203d57611f00600a54878a815181101515611eea57fe5b602090810290910101519063ffffffff611d0a16565b600b54611f1490429063ffffffff611d0a16565b10611fcb57611f5b8589815181101515611f2a57fe5b6020908102909101810151600160a060020a038c16600090815260059092526040909120549063ffffffff611d0a16565b600160a060020a038a1660008181526005602052604090209190915585517f613edbda9d1e6bda8af8e869a973f88cccf93854a11f351589038de07e1ab4e39087908b908110611fa757fe5b906020019060200201516040518082815260200191505060405180910390a2612032565b8588815181101515611fd957fe5b906020019060200201518488815181101515611ff157fe5b60209081029091010152845185908990811061200957fe5b90602001906020020151838881518110151561202157fe5b602090810290910101526001909601955b600190970196611eb6565b86604051908082528060200260200182016040528015612067578160200160208202803883390190505b50915086604051908082528060200260200182016040528015612094578160200160208202803883390190505b509050600097505b8688101561210f5783888151811015156120b257fe5b9060200190602002015182898151811015156120ca57fe5b6020908102909101015282518390899081106120e257fe5b9060200190602002015181898151811015156120fa57fe5b6020908102909101015260019097019661209c565b600160a060020a03891660009081526007602090815260409091208351612138928501906121c4565b50600160a060020a03891660009081526008602090815260409091208251612162928401906121c4565b505050600160a060020a039096166000908152600960205260409020939093555050505050565b60008183101561219557fe5b50900390565b8154818355818111156121bf576000838152602090206121bf91810190830161220f565b505050565b8280548282559060005260206000209081019282156121ff579160200282015b828111156121ff5782518255916020019190600101906121e4565b5061220b92915061220f565b5090565b61083f91905b8082111561220b57600081556001016122155600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582004e327a4db376800f1cf8fb357f9a1addb8dd7b973f7aca43d086a8e69281caa0029