ETH Price: $3,068.49 (-0.14%)
Gas: 7 Gwei

Token

Alien Worlds Trilium (TLM)
 

Overview

Max Total Supply

1,671,734,196.4836 TLM

Holders

5,679 ( 0.053%)

Market

Price

$0.02 @ 0.000006 ETH (-0.54%)

Onchain Market Cap

$29,199,612.82

Circulating Supply Market Cap

$72,225,426.00

Other Info

Token Contract (WITH 4 Decimals)

Filtered by Token Holder
Binance 16
Balance
3,076,556.538 TLM

Value
$53,737.17 ( ~17.5126 Eth) [0.1840%]
0xdfd5293d8e347dfe59e90efd55b2956a1343963d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Alien Worlds is an NFT Metaverse where you can play with digital items (NFTs).Players stake Trilium to planets to vote in the upcoming Planetary elections, as well as to increase the Planet’s reward pool.

Market

Volume (24H):$8,093,290.00
Market Capitalization:$72,225,426.00
Circulating Supply:4,135,045,749.00 TLM
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TeleportToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-21
*/

pragma solidity ^0.6.12;
/*
 * SPDX-License-Identifier: MIT
 */
pragma experimental ABIEncoderV2;


contract Verify {

  function recoverSigner(bytes32 message, bytes memory sig)
       public
       pure
       returns (address)
    {
       uint8 v;
       bytes32 r;
       bytes32 s;

       (v, r, s) = splitSignature(sig);

       if (v != 27 && v != 28) {
           return (address(0));
       } else {
           // solium-disable-next-line arg-overflow
           return ecrecover(message, v, r, s);
       }
  }

  function splitSignature(bytes memory sig)
       public
       pure
       returns (uint8, bytes32, bytes32)
   {
       require(sig.length == 65);

       bytes32 r;
       bytes32 s;
       uint8 v;

       assembly {
           // first 32 bytes, after the length prefix
           r := mload(add(sig, 32))
           // second 32 bytes
           s := mload(add(sig, 64))
           // final byte (first byte of the next 32 bytes)
           v := byte(0, mload(add(sig, 96)))
       }

       if (v < 27)
           v += 27;

       return (v, r, s);
   }
}


library Endian {
    /* https://ethereum.stackexchange.com/questions/83626/how-to-reverse-byte-order-in-uint256-or-bytes32 */
    function reverse64(uint64 input) internal pure returns (uint64 v) {
        v = input;

        // swap bytes
        v = ((v & 0xFF00FF00FF00FF00) >> 8) |
            ((v & 0x00FF00FF00FF00FF) << 8);

        // swap 2-byte long pairs
        v = ((v & 0xFFFF0000FFFF0000) >> 16) |
            ((v & 0x0000FFFF0000FFFF) << 16);

        // swap 4-byte long pairs
        v = (v >> 32) | (v << 32);
    }
    function reverse32(uint32 input) internal pure returns (uint32 v) {
        v = input;

        // swap bytes
        v = ((v & 0xFF00FF00) >> 8) |
            ((v & 0x00FF00FF) << 8);

        // swap 2-byte long pairs
        v = (v >> 16) | (v << 16);
    }
    function reverse16(uint16 input) internal pure returns (uint16 v) {
        v = input;

        // swap bytes
        v = (v >> 8) | (v << 8);
    }
}

// ----------------------------------------------------------------------------
// Safe maths
// ----------------------------------------------------------------------------
library SafeMath {
    function add(uint a, uint b) internal pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function sub(uint a, uint b) internal pure returns (uint c) {
        require(b <= a);
        c = a - b;
    }
    function mul(uint a, uint b) internal pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b);
    }
    function div(uint a, uint b) internal pure returns (uint c) {
        require(b > 0);
        c = a / b;
    }
}


// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
abstract contract ERC20Interface {
    function totalSupply() virtual public view returns (uint);
    function balanceOf(address tokenOwner) virtual public view returns (uint balance);
    function allowance(address tokenOwner, address spender) virtual public view returns (uint remaining);
    function transfer(address to, uint tokens) virtual public returns (bool success);
    function approve(address spender, uint tokens) virtual public returns (bool success);
    function transferFrom(address from, address to, uint tokens) virtual public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}


// ----------------------------------------------------------------------------
// Contract function to receive approval and execute function in one call
//
// Borrowed from MiniMeToken
// ----------------------------------------------------------------------------
abstract contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes memory data) virtual public;
}


// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {
    address public owner;
    address public newOwner;

    event OwnershipTransferred(address indexed _from, address indexed _to);

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

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

    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }

    function acceptOwnership() public {
        require(msg.sender == newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}


contract Oracled is Owned {
    mapping(address => bool) public oracles;

    modifier onlyOracle {
        require(oracles[msg.sender] == true, "Account is not a registered oracle");

        _;
    }

    function regOracle(address _newOracle) public onlyOwner {
        require(!oracles[_newOracle], "Oracle is already registered");

        oracles[_newOracle] = true;
    }

    function unregOracle(address _remOracle) public onlyOwner {
        require(oracles[_remOracle] == true, "Oracle is not registered");

        delete oracles[_remOracle];
    }
}

// ----------------------------------------------------------------------------
// ERC20 Token, with the addition of symbol, name and decimals and an
// initial fixed supply, added teleport method
// ----------------------------------------------------------------------------
contract TeleportToken is ERC20Interface, Owned, Oracled, Verify {
    using SafeMath for uint;

    string public symbol;
    string public  name;
    uint8 public decimals;
    uint public _totalSupply;
    uint8 public threshold;
    uint8 public thisChainId;

    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;

    mapping(uint64 => mapping(address => bool)) signed;
    mapping(uint64 => bool) public claimed;

    event Teleport(address indexed from, string to, uint tokens, uint chainId);
    event Claimed(uint64 id, address to, uint tokens);

    struct TeleportData {
        uint64 id;
        uint32 ts;
        uint64 fromAddr;
        uint64 quantity;
        uint64 symbolRaw;
        uint8 chainId;
        address toAddress;
    }

    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    constructor() public {
        symbol = "TLM";
        name = "Alien Worlds Trilium";
        decimals = 4;
        _totalSupply = 10000000000 * 10**uint(decimals);
        balances[address(0)] = _totalSupply;
        threshold = 3;
        thisChainId = 1;
    }


    // ------------------------------------------------------------------------
    // Total supply
    // ------------------------------------------------------------------------
    function totalSupply() override public view returns (uint) {
        return _totalSupply - balances[address(0)];
    }


    // ------------------------------------------------------------------------
    // Get the token balance for account `tokenOwner`
    // ------------------------------------------------------------------------
    function balanceOf(address tokenOwner) override public view returns (uint balance) {
        return balances[tokenOwner];
    }


    // ------------------------------------------------------------------------
    // Transfer the balance from token owner's account to `to` account
    // - Owner's account must have sufficient balance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transfer(address to, uint tokens) override public returns (bool success) {
        balances[msg.sender] = balances[msg.sender].sub(tokens);
        balances[to] = balances[to].add(tokens);
        emit Transfer(msg.sender, to, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account
    //
    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
    // recommends that there are no checks for the approval double-spend attack
    // as this should be implemented in user interfaces
    // ------------------------------------------------------------------------
    function approve(address spender, uint tokens) override public returns (bool success) {
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // Transfer `tokens` from the `from` account to the `to` account
    //
    // The calling account must already have sufficient tokens approve(...)-d
    // for spending from the `from` account and
    // - From account must have sufficient balance to transfer
    // - Spender must have sufficient allowance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transferFrom(address from, address to, uint tokens) override public returns (bool success) {
        balances[from] = balances[from].sub(tokens);
        allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
        balances[to] = balances[to].add(tokens);
        emit Transfer(from, to, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(address tokenOwner, address spender) override public view returns (uint remaining) {
        return allowed[tokenOwner][spender];
    }


    // ------------------------------------------------------------------------
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account. The `spender` contract function
    // `receiveApproval(...)` is then executed
    // ------------------------------------------------------------------------
    function approveAndCall(address spender, uint tokens, bytes memory data) public returns (bool success) {
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data);
        return true;
    }


    // ------------------------------------------------------------------------
    // Moves tokens to the inaccessible account and then sends event for the oracles
    // to monitor and issue on other chain
    // to : EOS address
    // tokens : number of tokens in satoshis
    // chainId : The chain id that they will be sent to
    // ------------------------------------------------------------------------

    function teleport(string memory to, uint tokens, uint chainid) public returns (bool success) {
        balances[msg.sender] = balances[msg.sender].sub(tokens);
        balances[address(0)] = balances[address(0)].add(tokens);
        emit Teleport(msg.sender, to, tokens, chainid);

        return true;
    }


    // ------------------------------------------------------------------------
    // Claim tokens sent using signatures supplied to the other chain
    // ------------------------------------------------------------------------


    function verifySigData(bytes memory sigData) private returns (TeleportData memory) {
        TeleportData memory td;

        uint64 id;
        uint32 ts;
        uint64 fromAddr;
        uint64 quantity;
        uint64 symbolRaw;
        uint8 chainId;
        address toAddress;

        assembly {
            id := mload(add(add(sigData, 0x8), 0))
            ts := mload(add(add(sigData, 0x4), 8))
            fromAddr := mload(add(add(sigData, 0x8), 12))
            quantity := mload(add(add(sigData, 0x8), 20))
            symbolRaw := mload(add(add(sigData, 0x8), 28))
            chainId := mload(add(add(sigData, 0x1), 36))
            toAddress := mload(add(add(sigData, 0x14), 37))
        }

        td.id = Endian.reverse64(id);
        td.ts = Endian.reverse32(ts);
        td.fromAddr = Endian.reverse64(fromAddr);
        td.quantity = Endian.reverse64(quantity);
        td.symbolRaw = Endian.reverse64(symbolRaw);
        td.chainId = chainId;
        td.toAddress = toAddress;

        require(thisChainId == td.chainId, "Invalid Chain ID");
        require(block.timestamp < SafeMath.add(td.ts, (60 * 60 * 24 * 30)), "Teleport has expired");

        require(!claimed[td.id], "Already Claimed");

        claimed[td.id] = true;

        return td;
    }

    function claim(bytes memory sigData, bytes[] calldata signatures) public returns (address toAddress) {
        TeleportData memory td = verifySigData(sigData);

        // verify signatures
        require(sigData.length == 69, "Signature data is the wrong size");
        require(signatures.length <= 10, "Maximum of 10 signatures can be provided");

        bytes32 message = keccak256(sigData);

        uint8 numberSigs = 0;

        for (uint8 i = 0; i < signatures.length; i++){
            address potential = Verify.recoverSigner(message, signatures[i]);

            // Check that they are an oracle and they haven't signed twice
            if (oracles[potential] && !signed[td.id][potential]){
                signed[td.id][potential] = true;
                numberSigs++;

                if (numberSigs >= 10){
                    break;
                }
            }
        }

        require(numberSigs >= threshold, "Not enough valid signatures provided");

        balances[address(0)] = balances[address(0)].sub(td.quantity);
        balances[td.toAddress] = balances[td.toAddress].add(td.quantity);

        emit Claimed(td.id, td.toAddress, td.quantity);
        emit Transfer(address(0), td.toAddress, td.quantity);

        return td.toAddress;
    }

    function updateThreshold(uint8 newThreshold) public onlyOwner returns (bool success) {
        if (newThreshold > 0){
            require(newThreshold <= 10, "Threshold has maximum of 10");

            threshold = newThreshold;

            return true;
        }

        return false;
    }

    function updateChainId(uint8 newChainId) public onlyOwner returns (bool success) {
        if (newChainId > 0){
            require(newChainId <= 100, "ChainID is too big");
            thisChainId = newChainId;

            return true;
        }

        return false;
    }

    // ------------------------------------------------------------------------
    // Don't accept ETH
    // ------------------------------------------------------------------------
    receive () external payable {
        revert();
    }


    // ------------------------------------------------------------------------
    // Owner can transfer out any accidentally sent ERC20 tokens
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {
        return ERC20Interface(tokenAddress).transfer(owner, tokens);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"id","type":"uint64"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"Teleport","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"sigData","type":"bytes"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"claim","outputs":[{"internalType":"address","name":"toAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"oracles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_newOracle","type":"address"}],"name":"regOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"chainid","type":"uint256"}],"name":"teleport","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thisChainId","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_remOracle","type":"address"}],"name":"unregOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newChainId","type":"uint8"}],"name":"updateChainId","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newThreshold","type":"uint8"}],"name":"updateThreshold","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600381526020017f544c4d0000000000000000000000000000000000000000000000000000000000815250600390805190602001906200009f929190620001b1565b506040518060400160405280601481526020017f416c69656e20576f726c6473205472696c69756d00000000000000000000000081525060049080519060200190620000ed929190620001b1565b506004600560006101000a81548160ff021916908360ff160217905550600560009054906101000a900460ff1660ff16600a0a6402540be40002600681905550600654600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003600760006101000a81548160ff021916908360ff1602179055506001600760016101000a81548160ff021916908360ff16021790555062000257565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001f457805160ff191683800117855562000225565b8280016001018555821562000225579182015b828111156200022457825182559160200191906001019062000207565b5b50905062000234919062000238565b5090565b5b808211156200025357600081600090555060010162000239565b5090565b61335180620002676000396000f3fe6080604052600436106101bb5760003560e01c806395d89b41116100ec578063cae9ca511161008a578063dd62ed3e11610064578063dd62ed3e146106a6578063e3d29c5d146106e3578063f2fde38b1461070e578063f3df5b6914610737576101c5565b8063cae9ca5114610601578063d4ee1d901461063e578063dc39d06d14610669576101c5565b80639ea8a71a116100c65780639ea8a71a1461050b578063a7bb580314610548578063a9059cbb14610587578063addd5099146105c4576101c5565b806395d89b411461046657806397aba7f9146104915780639e8da543146104ce576101c5565b80636426d53d116101595780637739acc7116101335780637739acc7146103be57806379ba5097146103fb578063825540c7146104125780638da5cb5b1461043b576101c5565b80636426d53d1461031b57806370a0823114610358578063769c8d9014610395576101c5565b806323b872dd1161019557806323b872dd1461025d578063313ce5671461029a5780633eaaf86b146102c557806342cde4e8146102f0576101c5565b806306fdde03146101ca578063095ea7b3146101f557806318160ddd14610232576101c5565b366101c557600080fd5b600080fd5b3480156101d657600080fd5b506101df610774565b6040516101ec9190612e10565b60405180910390f35b34801561020157600080fd5b5061021c600480360381019061021791906126e0565b610812565b6040516102299190612db0565b60405180910390f35b34801561023e57600080fd5b50610247610904565b6040516102549190612fb0565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f9190612691565b61094f565b6040516102919190612db0565b60405180910390f35b3480156102a657600080fd5b506102af610bfa565b6040516102bc919061301d565b60405180910390f35b3480156102d157600080fd5b506102da610c0d565b6040516102e79190612fb0565b60405180910390f35b3480156102fc57600080fd5b50610305610c13565b604051610312919061301d565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190612841565b610c26565b60405161034f9190612d20565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061262c565b61113c565b60405161038c9190612fb0565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061262c565b611185565b005b3480156103ca57600080fd5b506103e560048036038101906103e09190612941565b6112c2565b6040516103f29190612db0565b60405180910390f35b34801561040757600080fd5b5061041061139e565b005b34801561041e57600080fd5b506104396004803603810190610434919061262c565b61153a565b005b34801561044757600080fd5b5061045061167a565b60405161045d9190612d20565b60405180910390f35b34801561047257600080fd5b5061047b61169e565b6040516104889190612e10565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b391906127ac565b61173c565b6040516104c59190612d20565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612918565b6117db565b6040516105029190612db0565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d91906128b1565b6117fb565b60405161053f9190612db0565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190612800565b611984565b60405161057e93929190613038565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a991906126e0565b6119da565b6040516105bb9190612db0565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e6919061262c565b611b75565b6040516105f89190612db0565b60405180910390f35b34801561060d57600080fd5b506106286004803603810190610623919061271c565b611b95565b6040516106359190612db0565b60405180910390f35b34801561064a57600080fd5b50610653611cf9565b6040516106609190612d20565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b91906126e0565b611d1f565b60405161069d9190612db0565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190612655565b611e2f565b6040516106da9190612fb0565b60405180910390f35b3480156106ef57600080fd5b506106f8611eb6565b604051610705919061301d565b60405180910390f35b34801561071a57600080fd5b506107356004803603810190610730919061262c565b611ec9565b005b34801561074357600080fd5b5061075e60048036038101906107599190612941565b611f65565b60405161076b9190612db0565b60405180910390f35b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b505050505081565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108f29190612fb0565b60405180910390a36001905092915050565b6000600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460065403905090565b60006109a382600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a7582600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b4782600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be79190612fb0565b60405180910390a3600190509392505050565b600560009054906101000a900460ff1681565b60065481565b600760009054906101000a900460ff1681565b6000610c30612438565b610c3985612075565b90506045855114610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612ef0565b60405180910390fd5b600a848490501115610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90612eb0565b60405180910390fd5b6000858051906020012090506000805b868690508160ff161015610ecf576000610d538489898560ff16818110610cf957fe5b9050602002810190610d0b919061306f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061173c565b9050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610e215750600a6000866000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610ec1576001600a6000876000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508280600101935050600a8360ff1610610ec05750610ecf565b5b508080600101915050610cd6565b50600760009054906101000a900460ff1660ff168160ff161015610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612f90565b60405180910390fd5b610f88836060015167ffffffffffffffff16600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061102f836060015167ffffffffffffffff16600860008660c0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600860008560c0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507ff20fc6923b8057dd0c3b606483fcaa038229bb36ebc35a0040e3eaa39cf97b1783600001518460c0015185606001516040516110b593929190612fe6565b60405180910390a18260c0015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85606001516040516111239190612fcb565b60405180910390a38260c0015193505050509392505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111dd57600080fd5b60011515600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790612f30565b60405180910390fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131d57600080fd5b60008260ff1611156113945760648260ff161115611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790612f10565b60405180910390fd5b81600760016101000a81548160ff021916908360ff16021790555060019050611399565b600090505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f857600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461159257600080fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690612ed0565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117345780601f1061170957610100808354040283529160200191611734565b820191906000526020600020905b81548152906001019060200180831161171757829003601f168201915b505050505081565b60008060008061174b85611984565b809350819450829550505050601b8360ff161415801561176f5750601c8360ff1614155b1561178057600093505050506117d5565b600186848484604051600081526020016040526040516117a39493929190612dcb565b6020604051602081039080840390855afa1580156117c5573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600061184f83600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118e483600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f622824274e0937ee319b036740cd0887131781bc2032b47eac3e88a1be17f5d585858560405161197193929190612e32565b60405180910390a2600190509392505050565b6000806000604184511461199757600080fd5b60008060006020870151925060408701519150606087015160001a9050601b8160ff1610156119c757601b810190505b8083839550955095505050509193909250565b6000611a2e82600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ac382600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b639190612fb0565b60405180910390a36001905092915050565b60026020528060005260406000206000915054906101000a900460ff1681565b600082600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611c759190612fb0565b60405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff1660e01b8152600401611cbc9493929190612d3b565b600060405180830381600087803b158015611cd657600080fd5b505af1158015611cea573d6000803e3d6000fd5b50505050600190509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d7a57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611dd5929190612d87565b602060405180830381600087803b158015611def57600080fd5b505af1158015611e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e279190612783565b905092915050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760019054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f2157600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fc057600080fd5b60008260ff16111561203757600a8260ff161115612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90612e90565b60405180910390fd5b81600760006101000a81548160ff021916908360ff1602179055506001905061203c565b600090505b919050565b60008282111561205057600080fd5b818303905092915050565b600081830190508281101561206f57600080fd5b92915050565b61207d612438565b612085612438565b60008060008060008060008060088b0101519650600860048b0101519550600c60088b0101519450601460088b0101519350601c60088b0101519250602460018b0101519150602560148b01015190506120de8761235f565b886000019067ffffffffffffffff16908167ffffffffffffffff1681525050612106866123f1565b886020019063ffffffff16908163ffffffff16815250506121268561235f565b886040019067ffffffffffffffff16908167ffffffffffffffff168152505061214e8461235f565b886060019067ffffffffffffffff16908167ffffffffffffffff16815250506121768361235f565b886080019067ffffffffffffffff16908167ffffffffffffffff1681525050818860a0019060ff16908160ff1681525050808860c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508760a0015160ff16600760019054906101000a900460ff1660ff161461223a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223190612e70565b60405180910390fd5b612251886020015163ffffffff1662278d0061205b565b4210612292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228990612f50565b60405180910390fd5b600b6000896000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290612f70565b60405180910390fd5b6001600b60008a6000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508798505050505050505050919050565b6000819050600866ff00ff00ff00ff821667ffffffffffffffff16901b600867ff00ff00ff00ff00831667ffffffffffffffff16901c179050601065ffff0000ffff821667ffffffffffffffff16901b601067ffff0000ffff0000831667ffffffffffffffff16901c17905060208167ffffffffffffffff16901b60208267ffffffffffffffff16901c179050919050565b6000819050600862ff00ff821663ffffffff16901b600863ff00ff00831663ffffffff16901c17905060108163ffffffff16901b60108263ffffffff16901c179050919050565b6040518060e00160405280600067ffffffffffffffff168152602001600063ffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600060ff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6000813590506124cb81613291565b92915050565b60008083601f8401126124e357600080fd5b8235905067ffffffffffffffff8111156124fc57600080fd5b60208301915083602082028301111561251457600080fd5b9250929050565b60008151905061252a816132a8565b92915050565b60008135905061253f816132bf565b92915050565b600082601f83011261255657600080fd5b8135612569612564826130f3565b6130c6565b9150808252602083016020830185838301111561258557600080fd5b61259083828461323e565b50505092915050565b600082601f8301126125aa57600080fd5b81356125bd6125b88261311f565b6130c6565b915080825260208301602083018583830111156125d957600080fd5b6125e483828461323e565b50505092915050565b6000813590506125fc816132d6565b92915050565b600081359050612611816132ed565b92915050565b60008135905061262681613304565b92915050565b60006020828403121561263e57600080fd5b600061264c848285016124bc565b91505092915050565b6000806040838503121561266857600080fd5b6000612676858286016124bc565b9250506020612687858286016124bc565b9150509250929050565b6000806000606084860312156126a657600080fd5b60006126b4868287016124bc565b93505060206126c5868287016124bc565b92505060406126d6868287016125ed565b9150509250925092565b600080604083850312156126f357600080fd5b6000612701858286016124bc565b9250506020612712858286016125ed565b9150509250929050565b60008060006060848603121561273157600080fd5b600061273f868287016124bc565b9350506020612750868287016125ed565b925050604084013567ffffffffffffffff81111561276d57600080fd5b61277986828701612545565b9150509250925092565b60006020828403121561279557600080fd5b60006127a38482850161251b565b91505092915050565b600080604083850312156127bf57600080fd5b60006127cd85828601612530565b925050602083013567ffffffffffffffff8111156127ea57600080fd5b6127f685828601612545565b9150509250929050565b60006020828403121561281257600080fd5b600082013567ffffffffffffffff81111561282c57600080fd5b61283884828501612545565b91505092915050565b60008060006040848603121561285657600080fd5b600084013567ffffffffffffffff81111561287057600080fd5b61287c86828701612545565b935050602084013567ffffffffffffffff81111561289957600080fd5b6128a5868287016124d1565b92509250509250925092565b6000806000606084860312156128c657600080fd5b600084013567ffffffffffffffff8111156128e057600080fd5b6128ec86828701612599565b93505060206128fd868287016125ed565b925050604061290e868287016125ed565b9150509250925092565b60006020828403121561292a57600080fd5b600061293884828501612602565b91505092915050565b60006020828403121561295357600080fd5b600061296184828501612617565b91505092915050565b612973816131f6565b82525050565b61298281613183565b82525050565b61299181613195565b82525050565b6129a0816131a1565b82525050565b60006129b18261314b565b6129bb8185613161565b93506129cb81856020860161324d565b6129d481613280565b840191505092915050565b60006129ea82613156565b6129f48185613172565b9350612a0481856020860161324d565b612a0d81613280565b840191505092915050565b6000612a25601083613172565b91507f496e76616c696420436861696e204944000000000000000000000000000000006000830152602082019050919050565b6000612a65601b83613172565b91507f5468726573686f6c6420686173206d6178696d756d206f6620313000000000006000830152602082019050919050565b6000612aa5602883613172565b91507f4d6178696d756d206f66203130207369676e6174757265732063616e2062652060008301527f70726f76696465640000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b0b601c83613172565b91507f4f7261636c6520697320616c72656164792072656769737465726564000000006000830152602082019050919050565b6000612b4b602083613172565b91507f5369676e61747572652064617461206973207468652077726f6e672073697a656000830152602082019050919050565b6000612b8b601283613172565b91507f436861696e494420697320746f6f2062696700000000000000000000000000006000830152602082019050919050565b6000612bcb601883613172565b91507f4f7261636c65206973206e6f74207265676973746572656400000000000000006000830152602082019050919050565b6000612c0b601483613172565b91507f54656c65706f72742068617320657870697265640000000000000000000000006000830152602082019050919050565b6000612c4b600f83613172565b91507f416c726561647920436c61696d656400000000000000000000000000000000006000830152602082019050919050565b6000612c8b602483613172565b91507f4e6f7420656e6f7567682076616c6964207369676e6174757265732070726f7660008301527f69646564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b612ced816131cb565b82525050565b612cfc8161322c565b82525050565b612d0b816131d5565b82525050565b612d1a816131e9565b82525050565b6000602082019050612d356000830184612979565b92915050565b6000608082019050612d50600083018761296a565b612d5d6020830186612ce4565b612d6a604083018561296a565b8181036060830152612d7c81846129a6565b905095945050505050565b6000604082019050612d9c6000830185612979565b612da96020830184612ce4565b9392505050565b6000602082019050612dc56000830184612988565b92915050565b6000608082019050612de06000830187612997565b612ded6020830186612d11565b612dfa6040830185612997565b612e076060830184612997565b95945050505050565b60006020820190508181036000830152612e2a81846129df565b905092915050565b60006060820190508181036000830152612e4c81866129df565b9050612e5b6020830185612ce4565b612e686040830184612ce4565b949350505050565b60006020820190508181036000830152612e8981612a18565b9050919050565b60006020820190508181036000830152612ea981612a58565b9050919050565b60006020820190508181036000830152612ec981612a98565b9050919050565b60006020820190508181036000830152612ee981612afe565b9050919050565b60006020820190508181036000830152612f0981612b3e565b9050919050565b60006020820190508181036000830152612f2981612b7e565b9050919050565b60006020820190508181036000830152612f4981612bbe565b9050919050565b60006020820190508181036000830152612f6981612bfe565b9050919050565b60006020820190508181036000830152612f8981612c3e565b9050919050565b60006020820190508181036000830152612fa981612c7e565b9050919050565b6000602082019050612fc56000830184612ce4565b92915050565b6000602082019050612fe06000830184612cf3565b92915050565b6000606082019050612ffb6000830186612d02565b6130086020830185612979565b6130156040830184612cf3565b949350505050565b60006020820190506130326000830184612d11565b92915050565b600060608201905061304d6000830186612d11565b61305a6020830185612997565b6130676040830184612997565b949350505050565b6000808335600160200384360303811261308857600080fd5b80840192508235915067ffffffffffffffff8211156130a657600080fd5b6020830192506001820236038313156130be57600080fd5b509250929050565b6000604051905081810181811067ffffffffffffffff821117156130e957600080fd5b8060405250919050565b600067ffffffffffffffff82111561310a57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561313657600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061318e826131ab565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061320182613208565b9050919050565b60006132138261321a565b9050919050565b6000613225826131ab565b9050919050565b6000613237826131d5565b9050919050565b82818337600083830152505050565b60005b8381101561326b578082015181840152602081019050613250565b8381111561327a576000848401525b50505050565b6000601f19601f8301169050919050565b61329a81613183565b81146132a557600080fd5b50565b6132b181613195565b81146132bc57600080fd5b50565b6132c8816131a1565b81146132d357600080fd5b50565b6132df816131cb565b81146132ea57600080fd5b50565b6132f6816131d5565b811461330157600080fd5b50565b61330d816131e9565b811461331857600080fd5b5056fea264697066735822122096ea4bb0a78d8d74e167250f466bd38d23273f80f65efe9a80cd7a330d9a513464736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c806395d89b41116100ec578063cae9ca511161008a578063dd62ed3e11610064578063dd62ed3e146106a6578063e3d29c5d146106e3578063f2fde38b1461070e578063f3df5b6914610737576101c5565b8063cae9ca5114610601578063d4ee1d901461063e578063dc39d06d14610669576101c5565b80639ea8a71a116100c65780639ea8a71a1461050b578063a7bb580314610548578063a9059cbb14610587578063addd5099146105c4576101c5565b806395d89b411461046657806397aba7f9146104915780639e8da543146104ce576101c5565b80636426d53d116101595780637739acc7116101335780637739acc7146103be57806379ba5097146103fb578063825540c7146104125780638da5cb5b1461043b576101c5565b80636426d53d1461031b57806370a0823114610358578063769c8d9014610395576101c5565b806323b872dd1161019557806323b872dd1461025d578063313ce5671461029a5780633eaaf86b146102c557806342cde4e8146102f0576101c5565b806306fdde03146101ca578063095ea7b3146101f557806318160ddd14610232576101c5565b366101c557600080fd5b600080fd5b3480156101d657600080fd5b506101df610774565b6040516101ec9190612e10565b60405180910390f35b34801561020157600080fd5b5061021c600480360381019061021791906126e0565b610812565b6040516102299190612db0565b60405180910390f35b34801561023e57600080fd5b50610247610904565b6040516102549190612fb0565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f9190612691565b61094f565b6040516102919190612db0565b60405180910390f35b3480156102a657600080fd5b506102af610bfa565b6040516102bc919061301d565b60405180910390f35b3480156102d157600080fd5b506102da610c0d565b6040516102e79190612fb0565b60405180910390f35b3480156102fc57600080fd5b50610305610c13565b604051610312919061301d565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190612841565b610c26565b60405161034f9190612d20565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061262c565b61113c565b60405161038c9190612fb0565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061262c565b611185565b005b3480156103ca57600080fd5b506103e560048036038101906103e09190612941565b6112c2565b6040516103f29190612db0565b60405180910390f35b34801561040757600080fd5b5061041061139e565b005b34801561041e57600080fd5b506104396004803603810190610434919061262c565b61153a565b005b34801561044757600080fd5b5061045061167a565b60405161045d9190612d20565b60405180910390f35b34801561047257600080fd5b5061047b61169e565b6040516104889190612e10565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b391906127ac565b61173c565b6040516104c59190612d20565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612918565b6117db565b6040516105029190612db0565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d91906128b1565b6117fb565b60405161053f9190612db0565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190612800565b611984565b60405161057e93929190613038565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a991906126e0565b6119da565b6040516105bb9190612db0565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e6919061262c565b611b75565b6040516105f89190612db0565b60405180910390f35b34801561060d57600080fd5b506106286004803603810190610623919061271c565b611b95565b6040516106359190612db0565b60405180910390f35b34801561064a57600080fd5b50610653611cf9565b6040516106609190612d20565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b91906126e0565b611d1f565b60405161069d9190612db0565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190612655565b611e2f565b6040516106da9190612fb0565b60405180910390f35b3480156106ef57600080fd5b506106f8611eb6565b604051610705919061301d565b60405180910390f35b34801561071a57600080fd5b506107356004803603810190610730919061262c565b611ec9565b005b34801561074357600080fd5b5061075e60048036038101906107599190612941565b611f65565b60405161076b9190612db0565b60405180910390f35b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b505050505081565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108f29190612fb0565b60405180910390a36001905092915050565b6000600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460065403905090565b60006109a382600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a7582600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b4782600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be79190612fb0565b60405180910390a3600190509392505050565b600560009054906101000a900460ff1681565b60065481565b600760009054906101000a900460ff1681565b6000610c30612438565b610c3985612075565b90506045855114610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612ef0565b60405180910390fd5b600a848490501115610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90612eb0565b60405180910390fd5b6000858051906020012090506000805b868690508160ff161015610ecf576000610d538489898560ff16818110610cf957fe5b9050602002810190610d0b919061306f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061173c565b9050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610e215750600a6000866000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610ec1576001600a6000876000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508280600101935050600a8360ff1610610ec05750610ecf565b5b508080600101915050610cd6565b50600760009054906101000a900460ff1660ff168160ff161015610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612f90565b60405180910390fd5b610f88836060015167ffffffffffffffff16600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061102f836060015167ffffffffffffffff16600860008660c0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600860008560c0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507ff20fc6923b8057dd0c3b606483fcaa038229bb36ebc35a0040e3eaa39cf97b1783600001518460c0015185606001516040516110b593929190612fe6565b60405180910390a18260c0015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85606001516040516111239190612fcb565b60405180910390a38260c0015193505050509392505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111dd57600080fd5b60011515600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790612f30565b60405180910390fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131d57600080fd5b60008260ff1611156113945760648260ff161115611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790612f10565b60405180910390fd5b81600760016101000a81548160ff021916908360ff16021790555060019050611399565b600090505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f857600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461159257600080fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690612ed0565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117345780601f1061170957610100808354040283529160200191611734565b820191906000526020600020905b81548152906001019060200180831161171757829003601f168201915b505050505081565b60008060008061174b85611984565b809350819450829550505050601b8360ff161415801561176f5750601c8360ff1614155b1561178057600093505050506117d5565b600186848484604051600081526020016040526040516117a39493929190612dcb565b6020604051602081039080840390855afa1580156117c5573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600061184f83600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118e483600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f622824274e0937ee319b036740cd0887131781bc2032b47eac3e88a1be17f5d585858560405161197193929190612e32565b60405180910390a2600190509392505050565b6000806000604184511461199757600080fd5b60008060006020870151925060408701519150606087015160001a9050601b8160ff1610156119c757601b810190505b8083839550955095505050509193909250565b6000611a2e82600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204190919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ac382600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b90919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b639190612fb0565b60405180910390a36001905092915050565b60026020528060005260406000206000915054906101000a900460ff1681565b600082600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611c759190612fb0565b60405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff1660e01b8152600401611cbc9493929190612d3b565b600060405180830381600087803b158015611cd657600080fd5b505af1158015611cea573d6000803e3d6000fd5b50505050600190509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d7a57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611dd5929190612d87565b602060405180830381600087803b158015611def57600080fd5b505af1158015611e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e279190612783565b905092915050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760019054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f2157600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fc057600080fd5b60008260ff16111561203757600a8260ff161115612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90612e90565b60405180910390fd5b81600760006101000a81548160ff021916908360ff1602179055506001905061203c565b600090505b919050565b60008282111561205057600080fd5b818303905092915050565b600081830190508281101561206f57600080fd5b92915050565b61207d612438565b612085612438565b60008060008060008060008060088b0101519650600860048b0101519550600c60088b0101519450601460088b0101519350601c60088b0101519250602460018b0101519150602560148b01015190506120de8761235f565b886000019067ffffffffffffffff16908167ffffffffffffffff1681525050612106866123f1565b886020019063ffffffff16908163ffffffff16815250506121268561235f565b886040019067ffffffffffffffff16908167ffffffffffffffff168152505061214e8461235f565b886060019067ffffffffffffffff16908167ffffffffffffffff16815250506121768361235f565b886080019067ffffffffffffffff16908167ffffffffffffffff1681525050818860a0019060ff16908160ff1681525050808860c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508760a0015160ff16600760019054906101000a900460ff1660ff161461223a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223190612e70565b60405180910390fd5b612251886020015163ffffffff1662278d0061205b565b4210612292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228990612f50565b60405180910390fd5b600b6000896000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290612f70565b60405180910390fd5b6001600b60008a6000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508798505050505050505050919050565b6000819050600866ff00ff00ff00ff821667ffffffffffffffff16901b600867ff00ff00ff00ff00831667ffffffffffffffff16901c179050601065ffff0000ffff821667ffffffffffffffff16901b601067ffff0000ffff0000831667ffffffffffffffff16901c17905060208167ffffffffffffffff16901b60208267ffffffffffffffff16901c179050919050565b6000819050600862ff00ff821663ffffffff16901b600863ff00ff00831663ffffffff16901c17905060108163ffffffff16901b60108263ffffffff16901c179050919050565b6040518060e00160405280600067ffffffffffffffff168152602001600063ffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600060ff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6000813590506124cb81613291565b92915050565b60008083601f8401126124e357600080fd5b8235905067ffffffffffffffff8111156124fc57600080fd5b60208301915083602082028301111561251457600080fd5b9250929050565b60008151905061252a816132a8565b92915050565b60008135905061253f816132bf565b92915050565b600082601f83011261255657600080fd5b8135612569612564826130f3565b6130c6565b9150808252602083016020830185838301111561258557600080fd5b61259083828461323e565b50505092915050565b600082601f8301126125aa57600080fd5b81356125bd6125b88261311f565b6130c6565b915080825260208301602083018583830111156125d957600080fd5b6125e483828461323e565b50505092915050565b6000813590506125fc816132d6565b92915050565b600081359050612611816132ed565b92915050565b60008135905061262681613304565b92915050565b60006020828403121561263e57600080fd5b600061264c848285016124bc565b91505092915050565b6000806040838503121561266857600080fd5b6000612676858286016124bc565b9250506020612687858286016124bc565b9150509250929050565b6000806000606084860312156126a657600080fd5b60006126b4868287016124bc565b93505060206126c5868287016124bc565b92505060406126d6868287016125ed565b9150509250925092565b600080604083850312156126f357600080fd5b6000612701858286016124bc565b9250506020612712858286016125ed565b9150509250929050565b60008060006060848603121561273157600080fd5b600061273f868287016124bc565b9350506020612750868287016125ed565b925050604084013567ffffffffffffffff81111561276d57600080fd5b61277986828701612545565b9150509250925092565b60006020828403121561279557600080fd5b60006127a38482850161251b565b91505092915050565b600080604083850312156127bf57600080fd5b60006127cd85828601612530565b925050602083013567ffffffffffffffff8111156127ea57600080fd5b6127f685828601612545565b9150509250929050565b60006020828403121561281257600080fd5b600082013567ffffffffffffffff81111561282c57600080fd5b61283884828501612545565b91505092915050565b60008060006040848603121561285657600080fd5b600084013567ffffffffffffffff81111561287057600080fd5b61287c86828701612545565b935050602084013567ffffffffffffffff81111561289957600080fd5b6128a5868287016124d1565b92509250509250925092565b6000806000606084860312156128c657600080fd5b600084013567ffffffffffffffff8111156128e057600080fd5b6128ec86828701612599565b93505060206128fd868287016125ed565b925050604061290e868287016125ed565b9150509250925092565b60006020828403121561292a57600080fd5b600061293884828501612602565b91505092915050565b60006020828403121561295357600080fd5b600061296184828501612617565b91505092915050565b612973816131f6565b82525050565b61298281613183565b82525050565b61299181613195565b82525050565b6129a0816131a1565b82525050565b60006129b18261314b565b6129bb8185613161565b93506129cb81856020860161324d565b6129d481613280565b840191505092915050565b60006129ea82613156565b6129f48185613172565b9350612a0481856020860161324d565b612a0d81613280565b840191505092915050565b6000612a25601083613172565b91507f496e76616c696420436861696e204944000000000000000000000000000000006000830152602082019050919050565b6000612a65601b83613172565b91507f5468726573686f6c6420686173206d6178696d756d206f6620313000000000006000830152602082019050919050565b6000612aa5602883613172565b91507f4d6178696d756d206f66203130207369676e6174757265732063616e2062652060008301527f70726f76696465640000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b0b601c83613172565b91507f4f7261636c6520697320616c72656164792072656769737465726564000000006000830152602082019050919050565b6000612b4b602083613172565b91507f5369676e61747572652064617461206973207468652077726f6e672073697a656000830152602082019050919050565b6000612b8b601283613172565b91507f436861696e494420697320746f6f2062696700000000000000000000000000006000830152602082019050919050565b6000612bcb601883613172565b91507f4f7261636c65206973206e6f74207265676973746572656400000000000000006000830152602082019050919050565b6000612c0b601483613172565b91507f54656c65706f72742068617320657870697265640000000000000000000000006000830152602082019050919050565b6000612c4b600f83613172565b91507f416c726561647920436c61696d656400000000000000000000000000000000006000830152602082019050919050565b6000612c8b602483613172565b91507f4e6f7420656e6f7567682076616c6964207369676e6174757265732070726f7660008301527f69646564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b612ced816131cb565b82525050565b612cfc8161322c565b82525050565b612d0b816131d5565b82525050565b612d1a816131e9565b82525050565b6000602082019050612d356000830184612979565b92915050565b6000608082019050612d50600083018761296a565b612d5d6020830186612ce4565b612d6a604083018561296a565b8181036060830152612d7c81846129a6565b905095945050505050565b6000604082019050612d9c6000830185612979565b612da96020830184612ce4565b9392505050565b6000602082019050612dc56000830184612988565b92915050565b6000608082019050612de06000830187612997565b612ded6020830186612d11565b612dfa6040830185612997565b612e076060830184612997565b95945050505050565b60006020820190508181036000830152612e2a81846129df565b905092915050565b60006060820190508181036000830152612e4c81866129df565b9050612e5b6020830185612ce4565b612e686040830184612ce4565b949350505050565b60006020820190508181036000830152612e8981612a18565b9050919050565b60006020820190508181036000830152612ea981612a58565b9050919050565b60006020820190508181036000830152612ec981612a98565b9050919050565b60006020820190508181036000830152612ee981612afe565b9050919050565b60006020820190508181036000830152612f0981612b3e565b9050919050565b60006020820190508181036000830152612f2981612b7e565b9050919050565b60006020820190508181036000830152612f4981612bbe565b9050919050565b60006020820190508181036000830152612f6981612bfe565b9050919050565b60006020820190508181036000830152612f8981612c3e565b9050919050565b60006020820190508181036000830152612fa981612c7e565b9050919050565b6000602082019050612fc56000830184612ce4565b92915050565b6000602082019050612fe06000830184612cf3565b92915050565b6000606082019050612ffb6000830186612d02565b6130086020830185612979565b6130156040830184612cf3565b949350505050565b60006020820190506130326000830184612d11565b92915050565b600060608201905061304d6000830186612d11565b61305a6020830185612997565b6130676040830184612997565b949350505050565b6000808335600160200384360303811261308857600080fd5b80840192508235915067ffffffffffffffff8211156130a657600080fd5b6020830192506001820236038313156130be57600080fd5b509250929050565b6000604051905081810181811067ffffffffffffffff821117156130e957600080fd5b8060405250919050565b600067ffffffffffffffff82111561310a57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561313657600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061318e826131ab565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061320182613208565b9050919050565b60006132138261321a565b9050919050565b6000613225826131ab565b9050919050565b6000613237826131d5565b9050919050565b82818337600083830152505050565b60005b8381101561326b578082015181840152602081019050613250565b8381111561327a576000848401525b50505050565b6000601f19601f8301169050919050565b61329a81613183565b81146132a557600080fd5b50565b6132b181613195565b81146132bc57600080fd5b50565b6132c8816131a1565b81146132d357600080fd5b50565b6132df816131cb565b81146132ea57600080fd5b50565b6132f6816131d5565b811461330157600080fd5b50565b61330d816131e9565b811461331857600080fd5b5056fea264697066735822122096ea4bb0a78d8d74e167250f466bd38d23273f80f65efe9a80cd7a330d9a513464736f6c634300060c0033

Deployed Bytecode Sourcemap

5968:10253:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15780:8;;;5968:10253;;;;6099:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9062:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7443:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9822:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6125:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6153:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6184:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13633:1309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7790:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5500:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15261:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4896:196;;;;;;;;;;;;;:::i;:::-;;5317:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4496:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6072;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;130:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6404:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11751:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;554:583;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;8270:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5134:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10986:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4523:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16034:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10462:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6213:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4786:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14950:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6099:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9062:217::-;9134:12;9190:6;9159:7;:19;9167:10;9159:19;;;;;;;;;;;;;;;:28;9179:7;9159:28;;;;;;;;;;;;;;;:37;;;;9233:7;9212:37;;9221:10;9212:37;;;9242:6;9212:37;;;;;;:::i;:::-;;;;;;;;9267:4;9260:11;;9062:217;;;;:::o;7443:120::-;7496:4;7535:8;:20;7552:1;7535:20;;;;;;;;;;;;;;;;7520:12;;:35;7513:42;;7443:120;:::o;9822:352::-;9908:12;9950:26;9969:6;9950:8;:14;9959:4;9950:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;9933:8;:14;9942:4;9933:14;;;;;;;;;;;;;;;:43;;;;10015:37;10045:6;10015:7;:13;10023:4;10015:13;;;;;;;;;;;;;;;:25;10029:10;10015:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;9987:7;:13;9995:4;9987:13;;;;;;;;;;;;;;;:25;10001:10;9987:25;;;;;;;;;;;;;;;:65;;;;10078:24;10095:6;10078:8;:12;10087:2;10078:12;;;;;;;;;;;;;;;;:16;;:24;;;;:::i;:::-;10063:8;:12;10072:2;10063:12;;;;;;;;;;;;;;;:39;;;;10133:2;10118:26;;10127:4;10118:26;;;10137:6;10118:26;;;;;;:::i;:::-;;;;;;;;10162:4;10155:11;;9822:352;;;;;:::o;6125:21::-;;;;;;;;;;;;;:::o;6153:24::-;;;;:::o;6184:22::-;;;;;;;;;;;;;:::o;13633:1309::-;13715:17;13745:22;;:::i;:::-;13770;13784:7;13770:13;:22::i;:::-;13745:47;;13861:2;13843:7;:14;:20;13835:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13940:2;13919:10;;:17;;:23;;13911:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;14000:15;14028:7;14018:18;;;;;;14000:36;;14049:16;14087:7;14082:466;14104:10;;:17;;14100:1;:21;;;14082:466;;;14142:17;14162:44;14183:7;14192:10;;14203:1;14192:13;;;;;;;;;;;;;;;;;;;;:::i;:::-;14162:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:44::i;:::-;14142:64;;14303:7;:18;14311:9;14303:18;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;;14326:6;:13;14333:2;:5;;;14326:13;;;;;;;;;;;;;;;:24;14340:9;14326:24;;;;;;;;;;;;;;;;;;;;;;;;;14325:25;14303:47;14299:238;;;14397:4;14370:6;:13;14377:2;:5;;;14370:13;;;;;;;;;;;;;;;:24;14384:9;14370:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;14420:12;;;;;;;14471:2;14457:10;:16;;;14453:69;;14497:5;;;14453:69;14299:238;14082:466;14123:3;;;;;;;14082:466;;;;14582:9;;;;;;;;;;;14568:23;;:10;:23;;;;14560:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14668:37;14693:2;:11;;;14668:37;;:8;:20;14685:1;14668:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;14645:8;:20;14662:1;14645:20;;;;;;;;;;;;;;;:60;;;;14741:39;14768:2;:11;;;14741:39;;:8;:22;14750:2;:12;;;14741:22;;;;;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;14716:8;:22;14725:2;:12;;;14716:22;;;;;;;;;;;;;;;:64;;;;14798:41;14806:2;:5;;;14813:2;:12;;;14827:2;:11;;;14798:41;;;;;;;;:::i;:::-;;;;;;;;14876:2;:12;;;14855:47;;14872:1;14855:47;;;14890:2;:11;;;14855:47;;;;;;:::i;:::-;;;;;;;;14922:2;:12;;;14915:19;;;;;13633:1309;;;;;:::o;7790:129::-;7859:12;7891:8;:20;7900:10;7891:20;;;;;;;;;;;;;;;;7884:27;;7790:129;;;:::o;5500:180::-;4752:5;;;;;;;;;;4738:19;;:10;:19;;;4730:28;;;;;;5600:4:::1;5577:27;;:7;:19;5585:10;5577:19;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;5569:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5653:7;:19;5661:10;5653:19;;;;;;;;;;;;;;;;5646:26;;;;;;;;;;;5500:180:::0;:::o;15261:285::-;15328:12;4752:5;;;;;;;;;;;4738:19;;:10;:19;;;4730:28;;;;;;15370:1:::1;15357:10;:14;;;15353:161;;;15409:3;15395:10;:17;;;;15387:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;15464:10;15450:11;;:24;;;;;;;;;;;;;;;;;;15498:4;15491:11;;;;15353:161;15533:5;15526:12;;4769:1;15261:285:::0;;;:::o;4896:196::-;4963:8;;;;;;;;;;;4949:22;;:10;:22;;;4941:31;;;;;;5016:8;;;;;;;;;;;4988:37;;5009:5;;;;;;;;;;4988:37;;;;;;;;;;;;5044:8;;;;;;;;;;;5036:5;;:16;;;;;;;;;;;;;;;;;;5082:1;5063:8;;:21;;;;;;;;;;;;;;;;;;4896:196::o;5317:175::-;4752:5;;;;;;;;;;4738:19;;:10;:19;;;4730:28;;;;;;5393:7:::1;:19;5401:10;5393:19;;;;;;;;;;;;;;;;;;;;;;;;;5392:20;5384:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;5480:4;5458:7;:19;5466:10;5458:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;5317:175:::0;:::o;4496:20::-;;;;;;;;;;;;:::o;6072:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;130:418::-;233:7;257;274:9;293;326:19;341:3;326:14;:19::i;:::-;314:31;;;;;;;;;;;;366:2;361:1;:7;;;;:18;;;;;377:2;372:1;:7;;;;361:18;357:186;;;411:1;395:19;;;;;;;357:186;505:27;515:7;524:1;527;530;505:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;498:34;;;;;130:418;;;;;:::o;6404:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;11751:314::-;11830:12;11878:32;11903:6;11878:8;:20;11887:10;11878:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11855:8;:20;11864:10;11855:20;;;;;;;;;;;;;;;:55;;;;11944:32;11969:6;11944:8;:20;11961:1;11944:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11921:8;:20;11938:1;11921:20;;;;;;;;;;;;;;;:55;;;;12001:10;11992:41;;;12013:2;12017:6;12025:7;11992:41;;;;;;;;:::i;:::-;;;;;;;;12053:4;12046:11;;11751:314;;;;;:::o;554:583::-;641:5;648:7;657;702:2;688:3;:10;:16;680:25;;;;;;717:9;736;755:7;872:2;867:3;863:12;857:19;852:24;;940:2;935:3;931:12;925:19;920:24;;1045:2;1040:3;1036:12;1030:19;1027:1;1022:28;1017:33;;1079:2;1075:1;:6;;;1071:31;;;1100:2;1095:7;;;;1071:31;1122:1;1125;1128;1114:16;;;;;;;;;554:583;;;;;:::o;8270:276::-;8338:12;8386:32;8411:6;8386:8;:20;8395:10;8386:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8363:8;:20;8372:10;8363:20;;;;;;;;;;;;;;;:55;;;;8444:24;8461:6;8444:8;:12;8453:2;8444:12;;;;;;;;;;;;;;;;:16;;:24;;;;:::i;:::-;8429:8;:12;8438:2;8429:12;;;;;;;;;;;;;;;:39;;;;8505:2;8484:32;;8493:10;8484:32;;;8509:6;8484:32;;;;;;:::i;:::-;;;;;;;;8534:4;8527:11;;8270:276;;;;:::o;5134:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;10986:333::-;11075:12;11131:6;11100:7;:19;11108:10;11100:19;;;;;;;;;;;;;;;:28;11120:7;11100:28;;;;;;;;;;;;;;;:37;;;;11174:7;11153:37;;11162:10;11153:37;;;11183:6;11153:37;;;;;;:::i;:::-;;;;;;;;11224:7;11201:47;;;11249:10;11261:6;11277:4;11284;11201:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11307:4;11300:11;;10986:333;;;;;:::o;4523:23::-;;;;;;;;;;;;;:::o;16034:184::-;16126:12;4752:5;;;;;;;;;;;4738:19;;:10;:19;;;4730:28;;;;;;16173:12:::1;16158:37;;;16196:5;::::0;::::1;;;;;;;;16203:6;16158:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16151:59;;16034:184:::0;;;;:::o;10462:156::-;10548:14;10582:7;:19;10590:10;10582:19;;;;;;;;;;;;;;;:28;10602:7;10582:28;;;;;;;;;;;;;;;;10575:35;;10462:156;;;;:::o;6213:24::-;;;;;;;;;;;;;:::o;4786:102::-;4752:5;;;;;;;;;;4738:19;;:10;:19;;;4730:28;;;;;;4871:9:::1;4860:8;;:20;;;;;;;;;;;;;;;;;;4786:102:::0;:::o;14950:303::-;15021:12;4752:5;;;;;;;;;;;4738:19;;:10;:19;;;4730:28;;;;;;15065:1:::1;15050:12;:16;;;15046:175;;;15106:2;15090:12;:18;;;;15082:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;15169:12;15157:9;;:24;;;;;;;;;;;;;;;;;;15205:4;15198:11;;;;15046:175;15240:5;15233:12;;4769:1;14950:303:::0;;;:::o;2457:114::-;2509:6;2541:1;2536;:6;;2528:15;;;;;;2562:1;2558;:5;2554:9;;2457:114;;;;:::o;2337:::-;2389:6;2416:1;2412;:5;2408:9;;2441:1;2436;:6;;2428:15;;;;;;2337:114;;;;:::o;12312:1313::-;12374:19;;:::i;:::-;12406:22;;:::i;:::-;12441:9;12461;12481:15;12507;12533:16;12560:13;12584:17;12673:1;12667:3;12658:7;12654:17;12650:25;12644:32;12638:38;;12725:1;12719:3;12710:7;12706:17;12702:25;12696:32;12690:38;;12783:2;12777:3;12768:7;12764:17;12760:26;12754:33;12742:45;;12842:2;12836:3;12827:7;12823:17;12819:26;12813:33;12801:45;;12902:2;12896:3;12887:7;12883:17;12879:26;12873:33;12860:46;;12960:2;12954:3;12945:7;12941:17;12937:26;12931:33;12920:44;;13021:2;13014:4;13005:7;13001:18;12997:27;12991:34;12978:47;;13056:20;13073:2;13056:16;:20::i;:::-;13048:2;:5;;:28;;;;;;;;;;;13095:20;13112:2;13095:16;:20::i;:::-;13087:2;:5;;:28;;;;;;;;;;;13140:26;13157:8;13140:16;:26::i;:::-;13126:2;:11;;:40;;;;;;;;;;;13191:26;13208:8;13191:16;:26::i;:::-;13177:2;:11;;:40;;;;;;;;;;;13243:27;13260:9;13243:16;:27::i;:::-;13228:2;:12;;:42;;;;;;;;;;;13294:7;13281:2;:10;;:20;;;;;;;;;;;13327:9;13312:2;:12;;:24;;;;;;;;;;;13372:2;:10;;;13357:25;;:11;;;;;;;;;;;:25;;;13349:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;13440:40;13453:2;:5;;;13440:40;;13461:17;13440:12;:40::i;:::-;13422:15;:58;13414:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;13527:7;:14;13535:2;:5;;;13527:14;;;;;;;;;;;;;;;;;;;;;;;;;13526:15;13518:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;13591:4;13574:7;:14;13582:2;:5;;;13574:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;13615:2;13608:9;;;;;;;;;;12312:1313;;;:::o;1278:417::-;1334:8;1359:5;1355:9;;1480:1;1457:18;1453:1;:22;1452:29;;;;1433:1;1410:18;1406:1;:22;1405:29;;;;1404:78;1400:82;;1611:2;1588:18;1584:1;:22;1583:30;;;;1563:2;1540:18;1536:1;:22;1535:30;;;;1534:80;1530:84;;1684:2;1679:1;:7;;;;1672:2;1667:1;:7;;;;1666:21;1662:25;;1278:417;;;:::o;1701:269::-;1757:8;1782:5;1778:9;;1887:1;1872:10;1868:1;:14;1867:21;;;;1848:1;1833:10;1829:1;:14;1828:21;;;;1827:62;1823:66;;1959:2;1954:1;:7;;;;1947:2;1942:1;:7;;;;1941:21;1937:25;;1701:269;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;158:363::-;;;299:3;292:4;284:6;280:17;276:27;266:2;;317:1;314;307:12;266:2;350:6;337:20;327:30;;377:18;369:6;366:30;363:2;;;409:1;406;399:12;363:2;443:4;435:6;431:17;419:29;;494:3;486:4;478:6;474:17;464:8;460:32;457:41;454:2;;;511:1;508;501:12;454:2;259:262;;;;;:::o;529:128::-;;610:6;604:13;595:22;;622:30;646:5;622:30;:::i;:::-;589:68;;;;:::o;664:130::-;;744:6;731:20;722:29;;756:33;783:5;756:33;:::i;:::-;716:78;;;;:::o;802:440::-;;903:3;896:4;888:6;884:17;880:27;870:2;;921:1;918;911:12;870:2;958:6;945:20;980:64;995:48;1036:6;995:48;:::i;:::-;980:64;:::i;:::-;971:73;;1064:6;1057:5;1050:21;1100:4;1092:6;1088:17;1133:4;1126:5;1122:16;1168:3;1159:6;1154:3;1150:16;1147:25;1144:2;;;1185:1;1182;1175:12;1144:2;1195:41;1229:6;1224:3;1219;1195:41;:::i;:::-;863:379;;;;;;;:::o;1251:442::-;;1353:3;1346:4;1338:6;1334:17;1330:27;1320:2;;1371:1;1368;1361:12;1320:2;1408:6;1395:20;1430:65;1445:49;1487:6;1445:49;:::i;:::-;1430:65;:::i;:::-;1421:74;;1515:6;1508:5;1501:21;1551:4;1543:6;1539:17;1584:4;1577:5;1573:16;1619:3;1610:6;1605:3;1601:16;1598:25;1595:2;;;1636:1;1633;1626:12;1595:2;1646:41;1680:6;1675:3;1670;1646:41;:::i;:::-;1313:380;;;;;;;:::o;1701:130::-;;1781:6;1768:20;1759:29;;1793:33;1820:5;1793:33;:::i;:::-;1753:78;;;;:::o;1838:128::-;;1917:6;1904:20;1895:29;;1929:32;1955:5;1929:32;:::i;:::-;1889:77;;;;:::o;1973:126::-;;2051:6;2038:20;2029:29;;2063:31;2088:5;2063:31;:::i;:::-;2023:76;;;;:::o;2106:241::-;;2210:2;2198:9;2189:7;2185:23;2181:32;2178:2;;;2226:1;2223;2216:12;2178:2;2261:1;2278:53;2323:7;2314:6;2303:9;2299:22;2278:53;:::i;:::-;2268:63;;2240:97;2172:175;;;;:::o;2354:366::-;;;2475:2;2463:9;2454:7;2450:23;2446:32;2443:2;;;2491:1;2488;2481:12;2443:2;2526:1;2543:53;2588:7;2579:6;2568:9;2564:22;2543:53;:::i;:::-;2533:63;;2505:97;2633:2;2651:53;2696:7;2687:6;2676:9;2672:22;2651:53;:::i;:::-;2641:63;;2612:98;2437:283;;;;;:::o;2727:491::-;;;;2865:2;2853:9;2844:7;2840:23;2836:32;2833:2;;;2881:1;2878;2871:12;2833:2;2916:1;2933:53;2978:7;2969:6;2958:9;2954:22;2933:53;:::i;:::-;2923:63;;2895:97;3023:2;3041:53;3086:7;3077:6;3066:9;3062:22;3041:53;:::i;:::-;3031:63;;3002:98;3131:2;3149:53;3194:7;3185:6;3174:9;3170:22;3149:53;:::i;:::-;3139:63;;3110:98;2827:391;;;;;:::o;3225:366::-;;;3346:2;3334:9;3325:7;3321:23;3317:32;3314:2;;;3362:1;3359;3352:12;3314:2;3397:1;3414:53;3459:7;3450:6;3439:9;3435:22;3414:53;:::i;:::-;3404:63;;3376:97;3504:2;3522:53;3567:7;3558:6;3547:9;3543:22;3522:53;:::i;:::-;3512:63;;3483:98;3308:283;;;;;:::o;3598:595::-;;;;3745:2;3733:9;3724:7;3720:23;3716:32;3713:2;;;3761:1;3758;3751:12;3713:2;3796:1;3813:53;3858:7;3849:6;3838:9;3834:22;3813:53;:::i;:::-;3803:63;;3775:97;3903:2;3921:53;3966:7;3957:6;3946:9;3942:22;3921:53;:::i;:::-;3911:63;;3882:98;4039:2;4028:9;4024:18;4011:32;4063:18;4055:6;4052:30;4049:2;;;4095:1;4092;4085:12;4049:2;4115:62;4169:7;4160:6;4149:9;4145:22;4115:62;:::i;:::-;4105:72;;3990:193;3707:486;;;;;:::o;4200:257::-;;4312:2;4300:9;4291:7;4287:23;4283:32;4280:2;;;4328:1;4325;4318:12;4280:2;4363:1;4380:61;4433:7;4424:6;4413:9;4409:22;4380:61;:::i;:::-;4370:71;;4342:105;4274:183;;;;:::o;4464:470::-;;;4594:2;4582:9;4573:7;4569:23;4565:32;4562:2;;;4610:1;4607;4600:12;4562:2;4645:1;4662:53;4707:7;4698:6;4687:9;4683:22;4662:53;:::i;:::-;4652:63;;4624:97;4780:2;4769:9;4765:18;4752:32;4804:18;4796:6;4793:30;4790:2;;;4836:1;4833;4826:12;4790:2;4856:62;4910:7;4901:6;4890:9;4886:22;4856:62;:::i;:::-;4846:72;;4731:193;4556:378;;;;;:::o;4941:345::-;;5054:2;5042:9;5033:7;5029:23;5025:32;5022:2;;;5070:1;5067;5060:12;5022:2;5133:1;5122:9;5118:17;5105:31;5156:18;5148:6;5145:30;5142:2;;;5188:1;5185;5178:12;5142:2;5208:62;5262:7;5253:6;5242:9;5238:22;5208:62;:::i;:::-;5198:72;;5084:192;5016:270;;;;:::o;5293:648::-;;;;5469:2;5457:9;5448:7;5444:23;5440:32;5437:2;;;5485:1;5482;5475:12;5437:2;5548:1;5537:9;5533:17;5520:31;5571:18;5563:6;5560:30;5557:2;;;5603:1;5600;5593:12;5557:2;5623:62;5677:7;5668:6;5657:9;5653:22;5623:62;:::i;:::-;5613:72;;5499:192;5750:2;5739:9;5735:18;5722:32;5774:18;5766:6;5763:30;5760:2;;;5806:1;5803;5796:12;5760:2;5834:91;5917:7;5908:6;5897:9;5893:22;5834:91;:::i;:::-;5816:109;;;;5701:230;5431:510;;;;;:::o;5948:597::-;;;;6096:2;6084:9;6075:7;6071:23;6067:32;6064:2;;;6112:1;6109;6102:12;6064:2;6175:1;6164:9;6160:17;6147:31;6198:18;6190:6;6187:30;6184:2;;;6230:1;6227;6220:12;6184:2;6250:63;6305:7;6296:6;6285:9;6281:22;6250:63;:::i;:::-;6240:73;;6126:193;6350:2;6368:53;6413:7;6404:6;6393:9;6389:22;6368:53;:::i;:::-;6358:63;;6329:98;6458:2;6476:53;6521:7;6512:6;6501:9;6497:22;6476:53;:::i;:::-;6466:63;;6437:98;6058:487;;;;;:::o;6552:239::-;;6655:2;6643:9;6634:7;6630:23;6626:32;6623:2;;;6671:1;6668;6661:12;6623:2;6706:1;6723:52;6767:7;6758:6;6747:9;6743:22;6723:52;:::i;:::-;6713:62;;6685:96;6617:174;;;;:::o;6798:237::-;;6900:2;6888:9;6879:7;6875:23;6871:32;6868:2;;;6916:1;6913;6906:12;6868:2;6951:1;6968:51;7011:7;7002:6;6991:9;6987:22;6968:51;:::i;:::-;6958:61;;6930:95;6862:173;;;;:::o;7042:142::-;7133:45;7172:5;7133:45;:::i;:::-;7128:3;7121:58;7115:69;;:::o;7191:113::-;7274:24;7292:5;7274:24;:::i;:::-;7269:3;7262:37;7256:48;;:::o;7311:104::-;7388:21;7403:5;7388:21;:::i;:::-;7383:3;7376:34;7370:45;;:::o;7422:113::-;7505:24;7523:5;7505:24;:::i;:::-;7500:3;7493:37;7487:48;;:::o;7542:343::-;;7652:38;7684:5;7652:38;:::i;:::-;7702:70;7765:6;7760:3;7702:70;:::i;:::-;7695:77;;7777:52;7822:6;7817:3;7810:4;7803:5;7799:16;7777:52;:::i;:::-;7850:29;7872:6;7850:29;:::i;:::-;7845:3;7841:39;7834:46;;7632:253;;;;;:::o;7892:347::-;;8004:39;8037:5;8004:39;:::i;:::-;8055:71;8119:6;8114:3;8055:71;:::i;:::-;8048:78;;8131:52;8176:6;8171:3;8164:4;8157:5;8153:16;8131:52;:::i;:::-;8204:29;8226:6;8204:29;:::i;:::-;8199:3;8195:39;8188:46;;7984:255;;;;;:::o;8247:316::-;;8407:67;8471:2;8466:3;8407:67;:::i;:::-;8400:74;;8507:18;8503:1;8498:3;8494:11;8487:39;8554:2;8549:3;8545:12;8538:19;;8393:170;;;:::o;8572:327::-;;8732:67;8796:2;8791:3;8732:67;:::i;:::-;8725:74;;8832:29;8828:1;8823:3;8819:11;8812:50;8890:2;8885:3;8881:12;8874:19;;8718:181;;;:::o;8908:377::-;;9068:67;9132:2;9127:3;9068:67;:::i;:::-;9061:74;;9168:34;9164:1;9159:3;9155:11;9148:55;9237:10;9232:2;9227:3;9223:12;9216:32;9276:2;9271:3;9267:12;9260:19;;9054:231;;;:::o;9294:328::-;;9454:67;9518:2;9513:3;9454:67;:::i;:::-;9447:74;;9554:30;9550:1;9545:3;9541:11;9534:51;9613:2;9608:3;9604:12;9597:19;;9440:182;;;:::o;9631:332::-;;9791:67;9855:2;9850:3;9791:67;:::i;:::-;9784:74;;9891:34;9887:1;9882:3;9878:11;9871:55;9954:2;9949:3;9945:12;9938:19;;9777:186;;;:::o;9972:318::-;;10132:67;10196:2;10191:3;10132:67;:::i;:::-;10125:74;;10232:20;10228:1;10223:3;10219:11;10212:41;10281:2;10276:3;10272:12;10265:19;;10118:172;;;:::o;10299:324::-;;10459:67;10523:2;10518:3;10459:67;:::i;:::-;10452:74;;10559:26;10555:1;10550:3;10546:11;10539:47;10614:2;10609:3;10605:12;10598:19;;10445:178;;;:::o;10632:320::-;;10792:67;10856:2;10851:3;10792:67;:::i;:::-;10785:74;;10892:22;10888:1;10883:3;10879:11;10872:43;10943:2;10938:3;10934:12;10927:19;;10778:174;;;:::o;10961:315::-;;11121:67;11185:2;11180:3;11121:67;:::i;:::-;11114:74;;11221:17;11217:1;11212:3;11208:11;11201:38;11267:2;11262:3;11258:12;11251:19;;11107:169;;;:::o;11285:373::-;;11445:67;11509:2;11504:3;11445:67;:::i;:::-;11438:74;;11545:34;11541:1;11536:3;11532:11;11525:55;11614:6;11609:2;11604:3;11600:12;11593:28;11649:2;11644:3;11640:12;11633:19;;11431:227;;;:::o;11666:113::-;11749:24;11767:5;11749:24;:::i;:::-;11744:3;11737:37;11731:48;;:::o;11786:124::-;11868:36;11898:5;11868:36;:::i;:::-;11863:3;11856:49;11850:60;;:::o;11917:110::-;11998:23;12015:5;11998:23;:::i;:::-;11993:3;11986:36;11980:47;;:::o;12034:107::-;12113:22;12129:5;12113:22;:::i;:::-;12108:3;12101:35;12095:46;;:::o;12148:222::-;;12275:2;12264:9;12260:18;12252:26;;12289:71;12357:1;12346:9;12342:17;12333:6;12289:71;:::i;:::-;12246:124;;;;:::o;12377:672::-;;12622:3;12611:9;12607:19;12599:27;;12637:79;12713:1;12702:9;12698:17;12689:6;12637:79;:::i;:::-;12727:72;12795:2;12784:9;12780:18;12771:6;12727:72;:::i;:::-;12810:80;12886:2;12875:9;12871:18;12862:6;12810:80;:::i;:::-;12938:9;12932:4;12928:20;12923:2;12912:9;12908:18;12901:48;12963:76;13034:4;13025:6;12963:76;:::i;:::-;12955:84;;12593:456;;;;;;;:::o;13056:333::-;;13211:2;13200:9;13196:18;13188:26;;13225:71;13293:1;13282:9;13278:17;13269:6;13225:71;:::i;:::-;13307:72;13375:2;13364:9;13360:18;13351:6;13307:72;:::i;:::-;13182:207;;;;;:::o;13396:210::-;;13517:2;13506:9;13502:18;13494:26;;13531:65;13593:1;13582:9;13578:17;13569:6;13531:65;:::i;:::-;13488:118;;;;:::o;13613:548::-;;13820:3;13809:9;13805:19;13797:27;;13835:71;13903:1;13892:9;13888:17;13879:6;13835:71;:::i;:::-;13917:68;13981:2;13970:9;13966:18;13957:6;13917:68;:::i;:::-;13996:72;14064:2;14053:9;14049:18;14040:6;13996:72;:::i;:::-;14079;14147:2;14136:9;14132:18;14123:6;14079:72;:::i;:::-;13791:370;;;;;;;:::o;14168:310::-;;14315:2;14304:9;14300:18;14292:26;;14365:9;14359:4;14355:20;14351:1;14340:9;14336:17;14329:47;14390:78;14463:4;14454:6;14390:78;:::i;:::-;14382:86;;14286:192;;;;:::o;14485:532::-;;14688:2;14677:9;14673:18;14665:26;;14738:9;14732:4;14728:20;14724:1;14713:9;14709:17;14702:47;14763:78;14836:4;14827:6;14763:78;:::i;:::-;14755:86;;14852:72;14920:2;14909:9;14905:18;14896:6;14852:72;:::i;:::-;14935;15003:2;14992:9;14988:18;14979:6;14935:72;:::i;:::-;14659:358;;;;;;:::o;15024:416::-;;15224:2;15213:9;15209:18;15201:26;;15274:9;15268:4;15264:20;15260:1;15249:9;15245:17;15238:47;15299:131;15425:4;15299:131;:::i;:::-;15291:139;;15195:245;;;:::o;15447:416::-;;15647:2;15636:9;15632:18;15624:26;;15697:9;15691:4;15687:20;15683:1;15672:9;15668:17;15661:47;15722:131;15848:4;15722:131;:::i;:::-;15714:139;;15618:245;;;:::o;15870:416::-;;16070:2;16059:9;16055:18;16047:26;;16120:9;16114:4;16110:20;16106:1;16095:9;16091:17;16084:47;16145:131;16271:4;16145:131;:::i;:::-;16137:139;;16041:245;;;:::o;16293:416::-;;16493:2;16482:9;16478:18;16470:26;;16543:9;16537:4;16533:20;16529:1;16518:9;16514:17;16507:47;16568:131;16694:4;16568:131;:::i;:::-;16560:139;;16464:245;;;:::o;16716:416::-;;16916:2;16905:9;16901:18;16893:26;;16966:9;16960:4;16956:20;16952:1;16941:9;16937:17;16930:47;16991:131;17117:4;16991:131;:::i;:::-;16983:139;;16887:245;;;:::o;17139:416::-;;17339:2;17328:9;17324:18;17316:26;;17389:9;17383:4;17379:20;17375:1;17364:9;17360:17;17353:47;17414:131;17540:4;17414:131;:::i;:::-;17406:139;;17310:245;;;:::o;17562:416::-;;17762:2;17751:9;17747:18;17739:26;;17812:9;17806:4;17802:20;17798:1;17787:9;17783:17;17776:47;17837:131;17963:4;17837:131;:::i;:::-;17829:139;;17733:245;;;:::o;17985:416::-;;18185:2;18174:9;18170:18;18162:26;;18235:9;18229:4;18225:20;18221:1;18210:9;18206:17;18199:47;18260:131;18386:4;18260:131;:::i;:::-;18252:139;;18156:245;;;:::o;18408:416::-;;18608:2;18597:9;18593:18;18585:26;;18658:9;18652:4;18648:20;18644:1;18633:9;18629:17;18622:47;18683:131;18809:4;18683:131;:::i;:::-;18675:139;;18579:245;;;:::o;18831:416::-;;19031:2;19020:9;19016:18;19008:26;;19081:9;19075:4;19071:20;19067:1;19056:9;19052:17;19045:47;19106:131;19232:4;19106:131;:::i;:::-;19098:139;;19002:245;;;:::o;19254:222::-;;19381:2;19370:9;19366:18;19358:26;;19395:71;19463:1;19452:9;19448:17;19439:6;19395:71;:::i;:::-;19352:124;;;;:::o;19483:220::-;;19609:2;19598:9;19594:18;19586:26;;19623:70;19690:1;19679:9;19675:17;19666:6;19623:70;:::i;:::-;19580:123;;;;:::o;19710:438::-;;19890:2;19879:9;19875:18;19867:26;;19904:69;19970:1;19959:9;19955:17;19946:6;19904:69;:::i;:::-;19984:72;20052:2;20041:9;20037:18;20028:6;19984:72;:::i;:::-;20067:71;20134:2;20123:9;20119:18;20110:6;20067:71;:::i;:::-;19861:287;;;;;;:::o;20155:214::-;;20278:2;20267:9;20263:18;20255:26;;20292:67;20356:1;20345:9;20341:17;20332:6;20292:67;:::i;:::-;20249:120;;;;:::o;20376:436::-;;20555:2;20544:9;20540:18;20532:26;;20569:67;20633:1;20622:9;20618:17;20609:6;20569:67;:::i;:::-;20647:72;20715:2;20704:9;20700:18;20691:6;20647:72;:::i;:::-;20730;20798:2;20787:9;20783:18;20774:6;20730:72;:::i;:::-;20526:286;;;;;;:::o;20819:506::-;;;20954:11;20941:25;21050:1;21044:4;21040:12;21029:8;21013:14;21009:29;21005:48;20985:18;20981:73;20971:2;;21068:1;21065;21058:12;20971:2;21099:18;21089:8;21085:33;21077:41;;21152:4;21139:18;21129:28;;21177:18;21169:6;21166:30;21163:2;;;21209:1;21206;21199:12;21163:2;21237;21231:4;21227:13;21219:21;;21291:4;21283:6;21279:17;21263:14;21259:38;21253:4;21249:49;21246:2;;;21311:1;21308;21301:12;21246:2;20909:416;;;;;;:::o;21332:256::-;;21394:2;21388:9;21378:19;;21432:4;21424:6;21420:17;21531:6;21519:10;21516:22;21495:18;21483:10;21480:34;21477:62;21474:2;;;21552:1;21549;21542:12;21474:2;21572:10;21568:2;21561:22;21372:216;;;;:::o;21595:321::-;;21738:18;21730:6;21727:30;21724:2;;;21770:1;21767;21760:12;21724:2;21837:4;21833:9;21826:4;21818:6;21814:17;21810:33;21802:41;;21901:4;21895;21891:15;21883:23;;21661:255;;;:::o;21923:322::-;;22067:18;22059:6;22056:30;22053:2;;;22099:1;22096;22089:12;22053:2;22166:4;22162:9;22155:4;22147:6;22143:17;22139:33;22131:41;;22230:4;22224;22220:15;22212:23;;21990:255;;;:::o;22252:121::-;;22345:5;22339:12;22329:22;;22310:63;;;:::o;22380:122::-;;22474:5;22468:12;22458:22;;22439:63;;;:::o;22510:162::-;;22624:6;22619:3;22612:19;22661:4;22656:3;22652:14;22637:29;;22605:67;;;;:::o;22681:163::-;;22796:6;22791:3;22784:19;22833:4;22828:3;22824:14;22809:29;;22777:67;;;;:::o;22852:91::-;;22914:24;22932:5;22914:24;:::i;:::-;22903:35;;22897:46;;;:::o;22950:85::-;;23023:5;23016:13;23009:21;22998:32;;22992:43;;;:::o;23042:72::-;;23104:5;23093:16;;23087:27;;;:::o;23121:121::-;;23194:42;23187:5;23183:54;23172:65;;23166:76;;;:::o;23249:72::-;;23311:5;23300:16;;23294:27;;;:::o;23328:96::-;;23400:18;23393:5;23389:30;23378:41;;23372:52;;;:::o;23431:81::-;;23502:4;23495:5;23491:16;23480:27;;23474:38;;;:::o;23519:129::-;;23606:37;23637:5;23606:37;:::i;:::-;23593:50;;23587:61;;;:::o;23655:121::-;;23734:37;23765:5;23734:37;:::i;:::-;23721:50;;23715:61;;;:::o;23783:108::-;;23862:24;23880:5;23862:24;:::i;:::-;23849:37;;23843:48;;;:::o;23898:106::-;;23976:23;23993:5;23976:23;:::i;:::-;23963:36;;23957:47;;;:::o;24012:145::-;24093:6;24088:3;24083;24070:30;24149:1;24140:6;24135:3;24131:16;24124:27;24063:94;;;:::o;24166:268::-;24231:1;24238:101;24252:6;24249:1;24246:13;24238:101;;;24328:1;24323:3;24319:11;24313:18;24309:1;24304:3;24300:11;24293:39;24274:2;24271:1;24267:10;24262:15;;24238:101;;;24354:6;24351:1;24348:13;24345:2;;;24419:1;24410:6;24405:3;24401:16;24394:27;24345:2;24215:219;;;;:::o;24442:97::-;;24530:2;24526:7;24521:2;24514:5;24510:14;24506:28;24496:38;;24490:49;;;:::o;24547:117::-;24616:24;24634:5;24616:24;:::i;:::-;24609:5;24606:35;24596:2;;24655:1;24652;24645:12;24596:2;24590:74;:::o;24671:111::-;24737:21;24752:5;24737:21;:::i;:::-;24730:5;24727:32;24717:2;;24773:1;24770;24763:12;24717:2;24711:71;:::o;24789:117::-;24858:24;24876:5;24858:24;:::i;:::-;24851:5;24848:35;24838:2;;24897:1;24894;24887:12;24838:2;24832:74;:::o;24913:117::-;24982:24;25000:5;24982:24;:::i;:::-;24975:5;24972:35;24962:2;;25021:1;25018;25011:12;24962:2;24956:74;:::o;25037:115::-;25105:23;25122:5;25105:23;:::i;:::-;25098:5;25095:34;25085:2;;25143:1;25140;25133:12;25085:2;25079:73;:::o;25159:113::-;25226:22;25242:5;25226:22;:::i;:::-;25219:5;25216:33;25206:2;;25263:1;25260;25253:12;25206:2;25200:72;:::o

Swarm Source

ipfs://96ea4bb0a78d8d74e167250f466bd38d23273f80f65efe9a80cd7a330d9a5134
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.