ETH Price: $3,399.32 (+2.59%)

Token

Gods Unchained (GODS)
 

Overview

Max Total Supply

10,665 GODS

Holders

240

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
10 GODS

Value
$0.00
0xDB14c5e06D8974dA7A9cDeA2823B5455506697EB
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CardIntegration

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-07-10
*/

pragma solidity 0.4.24;

contract Governable {

    event Pause();
    event Unpause();

    address public governor;
    bool public paused = false;

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

    function setGovernor(address _gov) public onlyGovernor {
        governor = _gov;
    }

    modifier onlyGovernor {
        require(msg.sender == governor);
        _;
    }

    /**
    * @dev Modifier to make a function callable only when the contract is not paused.
    */
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /**
    * @dev Modifier to make a function callable only when the contract is paused.
    */
    modifier whenPaused() {
        require(paused);
        _;
    }

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function pause() onlyGovernor whenNotPaused public {
        paused = true;
        emit Pause();
    }

    /**
    * @dev called by the owner to unpause, returns to normal state
    */
    function unpause() onlyGovernor whenPaused public {
        paused = false;
        emit Unpause();
    }

}

contract CardBase is Governable {


    struct Card {
        uint16 proto;
        uint16 purity;
    }

    function getCard(uint id) public view returns (uint16 proto, uint16 purity) {
        Card memory card = cards[id];
        return (card.proto, card.purity);
    }

    function getShine(uint16 purity) public pure returns (uint8) {
        return uint8(purity / 1000);
    }

    Card[] public cards;
    
}

contract CardProto is CardBase {

    event NewProtoCard(
        uint16 id, uint8 season, uint8 god, 
        Rarity rarity, uint8 mana, uint8 attack, 
        uint8 health, uint8 cardType, uint8 tribe, bool packable
    );

    struct Limit {
        uint64 limit;
        bool exists;
    }

    // limits for mythic cards
    mapping(uint16 => Limit) public limits;

    // can only set limits once
    function setLimit(uint16 id, uint64 limit) public onlyGovernor {
        Limit memory l = limits[id];
        require(!l.exists);
        limits[id] = Limit({
            limit: limit,
            exists: true
        });
    }

    function getLimit(uint16 id) public view returns (uint64 limit, bool set) {
        Limit memory l = limits[id];
        return (l.limit, l.exists);
    }

    // could make these arrays to save gas
    // not really necessary - will be update a very limited no of times
    mapping(uint8 => bool) public seasonTradable;
    mapping(uint8 => bool) public seasonTradabilityLocked;
    uint8 public currentSeason;

    function makeTradeable(uint8 season) public onlyGovernor {
        seasonTradable[season] = true;
    }

    function makeUntradable(uint8 season) public onlyGovernor {
        require(!seasonTradabilityLocked[season]);
        seasonTradable[season] = false;
    }

    function makePermanantlyTradable(uint8 season) public onlyGovernor {
        require(seasonTradable[season]);
        seasonTradabilityLocked[season] = true;
    }

    function isTradable(uint16 proto) public view returns (bool) {
        return seasonTradable[protos[proto].season];
    }

    function nextSeason() public onlyGovernor {
        //Seasons shouldn't go to 0 if there is more than the uint8 should hold, the governor should know this ¯\_(ツ)_/¯ -M
        require(currentSeason <= 255); 

        currentSeason++;
        mythic.length = 0;
        legendary.length = 0;
        epic.length = 0;
        rare.length = 0;
        common.length = 0;
    }

    enum Rarity {
        Common,
        Rare,
        Epic,
        Legendary, 
        Mythic
    }

    uint8 constant SPELL = 1;
    uint8 constant MINION = 2;
    uint8 constant WEAPON = 3;
    uint8 constant HERO = 4;

    struct ProtoCard {
        bool exists;
        uint8 god;
        uint8 season;
        uint8 cardType;
        Rarity rarity;
        uint8 mana;
        uint8 attack;
        uint8 health;
        uint8 tribe;
    }

    // there is a particular design decision driving this:
    // need to be able to iterate over mythics only for card generation
    // don't store 5 different arrays: have to use 2 ids
    // better to bear this cost (2 bytes per proto card)
    // rather than 1 byte per instance

    uint16 public protoCount;
    
    mapping(uint16 => ProtoCard) protos;

    uint16[] public mythic;
    uint16[] public legendary;
    uint16[] public epic;
    uint16[] public rare;
    uint16[] public common;

    function addProtos(
        uint16[] externalIDs, uint8[] gods, Rarity[] rarities, uint8[] manas, uint8[] attacks, uint8[] healths, uint8[] cardTypes, uint8[] tribes, bool[] packable
    ) public onlyGovernor returns(uint16) {

        for (uint i = 0; i < externalIDs.length; i++) {

            ProtoCard memory card = ProtoCard({
                exists: true,
                god: gods[i],
                season: currentSeason,
                cardType: cardTypes[i],
                rarity: rarities[i],
                mana: manas[i],
                attack: attacks[i],
                health: healths[i],
                tribe: tribes[i]
            });

            _addProto(externalIDs[i], card, packable[i]);
        }
        
    }

    function addProto(
        uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 cardType, uint8 tribe, bool packable
    ) public onlyGovernor returns(uint16) {
        ProtoCard memory card = ProtoCard({
            exists: true,
            god: god,
            season: currentSeason,
            cardType: cardType,
            rarity: rarity,
            mana: mana,
            attack: attack,
            health: health,
            tribe: tribe
        });

        _addProto(externalID, card, packable);
    }

    function addWeapon(
        uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 durability, bool packable
    ) public onlyGovernor returns(uint16) {

        ProtoCard memory card = ProtoCard({
            exists: true,
            god: god,
            season: currentSeason,
            cardType: WEAPON,
            rarity: rarity,
            mana: mana,
            attack: attack,
            health: durability,
            tribe: 0
        });

        _addProto(externalID, card, packable);
    }

    function addSpell(uint16 externalID, uint8 god, Rarity rarity, uint8 mana, bool packable) public onlyGovernor returns(uint16) {

        ProtoCard memory card = ProtoCard({
            exists: true,
            god: god,
            season: currentSeason,
            cardType: SPELL,
            rarity: rarity,
            mana: mana,
            attack: 0,
            health: 0,
            tribe: 0
        });

        _addProto(externalID, card, packable);
    }

    function addMinion(
        uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 tribe, bool packable
    ) public onlyGovernor returns(uint16) {

        ProtoCard memory card = ProtoCard({
            exists: true,
            god: god,
            season: currentSeason,
            cardType: MINION,
            rarity: rarity,
            mana: mana,
            attack: attack,
            health: health,
            tribe: tribe
        });

        _addProto(externalID, card, packable);
    }

    function _addProto(uint16 externalID, ProtoCard memory card, bool packable) internal {

        require(!protos[externalID].exists);

        card.exists = true;

        protos[externalID] = card;

        protoCount++;

        emit NewProtoCard(
            externalID, currentSeason, card.god, 
            card.rarity, card.mana, card.attack, 
            card.health, card.cardType, card.tribe, packable
        );

        if (packable) {
            Rarity rarity = card.rarity;
            if (rarity == Rarity.Common) {
                common.push(externalID);
            } else if (rarity == Rarity.Rare) {
                rare.push(externalID);
            } else if (rarity == Rarity.Epic) {
                epic.push(externalID);
            } else if (rarity == Rarity.Legendary) {
                legendary.push(externalID);
            } else if (rarity == Rarity.Mythic) {
                mythic.push(externalID);
            } else {
                require(false);
            }
        }
    }

    function getProto(uint16 id) public view returns(
        bool exists, uint8 god, uint8 season, uint8 cardType, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 tribe
    ) {
        ProtoCard memory proto = protos[id];
        return (
            proto.exists,
            proto.god,
            proto.season,
            proto.cardType,
            proto.rarity,
            proto.mana,
            proto.attack,
            proto.health,
            proto.tribe
        );
    }

    function getRandomCard(Rarity rarity, uint16 random) public view returns (uint16) {
        // modulo bias is fine - creates rarity tiers etc
        // will obviously revert is there are no cards of that type: this is expected - should never happen
        if (rarity == Rarity.Common) {
            return common[random % common.length];
        } else if (rarity == Rarity.Rare) {
            return rare[random % rare.length];
        } else if (rarity == Rarity.Epic) {
            return epic[random % epic.length];
        } else if (rarity == Rarity.Legendary) {
            return legendary[random % legendary.length];
        } else if (rarity == Rarity.Mythic) {
            // make sure a mythic is available
            uint16 id;
            uint64 limit;
            bool set;
            for (uint i = 0; i < mythic.length; i++) {
                id = mythic[(random + i) % mythic.length];
                (limit, set) = getLimit(id);
                if (set && limit > 0){
                    return id;
                }
            }
            // if not, they get a legendary :(
            return legendary[random % legendary.length];
        }
        require(false);
        return 0;
    }

    // can never adjust tradable cards
    // each season gets a 'balancing beta'
    // totally immutable: season, rarity
    function replaceProto(
        uint16 index, uint8 god, uint8 cardType, uint8 mana, uint8 attack, uint8 health, uint8 tribe
    ) public onlyGovernor {
        ProtoCard memory pc = protos[index];
        require(!seasonTradable[pc.season]);
        protos[index] = ProtoCard({
            exists: true,
            god: god,
            season: pc.season,
            cardType: cardType,
            rarity: pc.rarity,
            mana: mana,
            attack: attack,
            health: health,
            tribe: tribe
        });
    }

}

interface ERC721Metadata /* is ERC721 */ {
    /// @notice A descriptive name for a collection of NFTs in this contract
    function name() external pure returns (string _name);

    /// @notice An abbreviated name for NFTs in this contract
    function symbol() external pure returns (string _symbol);

    /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
    ///  3986. The URI may point to a JSON file that conforms to the "ERC721
    ///  Metadata JSON Schema".
    function tokenURI(uint256 _tokenId) external view returns (string);
}

interface ERC721Enumerable /* is ERC721 */ {
    /// @notice Count NFTs tracked by this contract
    /// @return A count of valid NFTs tracked by this contract, where each one of
    ///  them has an assigned and queryable owner not equal to the zero address
    function totalSupply() public view returns (uint256);

    /// @notice Enumerate valid NFTs
    /// @dev Throws if `_index` >= `totalSupply()`.
    /// @param _index A counter less than `totalSupply()`
    /// @return The token identifier for the `_index`th NFT,
    ///  (sort order not specified)
    function tokenByIndex(uint256 _index) external view returns (uint256);

    /// @notice Enumerate NFTs assigned to an owner
    /// @dev Throws if `_index` >= `balanceOf(_owner)` or if
    ///  `_owner` is the zero address, representing invalid NFTs.
    /// @param _owner An address where we are interested in NFTs    owned by them
    /// @param _index A counter less than `balanceOf(_owner)`
    /// @return The token identifier for the `_index`th NFT assigned to `_owner`,
    ///   (sort order not specified)
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _tokenId);
}

interface ERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceID The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

contract ERC721 {
    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    function balanceOf(address _owner) public view returns (uint256 _balance);
    function ownerOf(uint256 _tokenId) public view returns (address _owner);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) public payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable;
    function transfer(address _to, uint256 _tokenId) public payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) public payable;
    function approve(address _to, uint256 _tokenId) public payable;
    function setApprovalForAll(address _to, bool _approved) public;
    function getApproved(uint256 _tokenId) public view returns (address);
    function isApprovedForAll(address _owner, address _operator) public view returns (bool);
}

contract NFT is ERC721, ERC165, ERC721Metadata, ERC721Enumerable {}

contract CardOwnership is NFT, CardProto {

    // doing this strategy doesn't save gas
    // even setting the length to the max and filling in
    // unfortunately - maybe if we stop it boundschecking
    // address[] owners;
    mapping(uint => address) owners;
    mapping(uint => address) approved;
    // support multiple operators
    mapping(address => mapping(address => bool)) operators;

    // save space, limits us to 2^40 tokens (>1t)
    mapping(address => uint40[]) public ownedTokens;

    mapping(uint => string) uris;

    // save space, limits us to 2^24 tokens per user (~17m)
    uint24[] indices;

    uint public burnCount;

    /**
    * @return the name of this token
    */
    function name() public view returns (string) {
        return "Gods Unchained";
    }

    /**
    * @return the symbol of this token
    */  
    function symbol() public view returns (string) {
        return "GODS";
    }

    /**
    * @return the total number of cards in circulation
    */
    function totalSupply() public view returns (uint) {
        return cards.length - burnCount;
    }

    /**
    * @param to : the address to which the card will be transferred
    * @param id : the id of the card to be transferred
    */
    function transfer(address to, uint id) public payable {
        require(owns(msg.sender, id));
        require(isTradable(cards[id].proto));
        require(to != address(0));
        _transfer(msg.sender, to, id);
    }

    /**
    * internal transfer function which skips checks - use carefully
    * @param from : the address from which the card will be transferred
    * @param to : the address to which the card will be transferred
    * @param id : the id of the card to be transferred
    */
    function _transfer(address from, address to, uint id) internal {
        approved[id] = address(0);
        owners[id] = to;
        _addToken(to, id);
        _removeToken(from, id);
        emit Transfer(from, to, id);
    }

    /**
    * initial internal transfer function which skips checks and saves gas - use carefully
    * @param to : the address to which the card will be transferred
    * @param id : the id of the card to be transferred
    */
    function _create(address to, uint id) internal {
        owners[id] = to;
        _addToken(to, id);
        emit Transfer(address(0), to, id);
    }

    /**
    * @param to : the address to which the cards will be transferred
    * @param ids : the ids of the cards to be transferred
    */
    function transferAll(address to, uint[] ids) public payable {
        for (uint i = 0; i < ids.length; i++) {
            transfer(to, ids[i]);
        }
    }

    /**
    * @param proposed : the claimed owner of the cards
    * @param ids : the ids of the cards to check
    * @return whether proposed owns all of the cards 
    */
    function ownsAll(address proposed, uint[] ids) public view returns (bool) {
        for (uint i = 0; i < ids.length; i++) {
            if (!owns(proposed, ids[i])) {
                return false;
            }
        }
        return true;
    }

    /**
    * @param proposed : the claimed owner of the card
    * @param id : the id of the card to check
    * @return whether proposed owns the card
    */
    function owns(address proposed, uint id) public view returns (bool) {
        return ownerOf(id) == proposed;
    }

    /**
    * @param id : the id of the card
    * @return the address of the owner of the card
    */
    function ownerOf(uint id) public view returns (address) {
        return owners[id];
    }

    /**
    * @param id : the index of the token to burn
    */
    function burn(uint id) public {
        // require(isTradable(cards[id].proto));
        require(owns(msg.sender, id));
        burnCount++;
        // use the internal transfer function as the external
        // has a guard to prevent transfers to 0x0
        _transfer(msg.sender, address(0), id);
    }

    /**
    * @param ids : the indices of the tokens to burn
    */
    function burnAll(uint[] ids) public {
        for (uint i = 0; i < ids.length; i++){
            burn(ids[i]);
        }
    }

    /**
    * @param to : the address to approve for transfer
    * @param id : the index of the card to be approved
    */
    function approve(address to, uint id) public payable {
        require(owns(msg.sender, id));
        require(isTradable(cards[id].proto));
        approved[id] = to;
        emit Approval(msg.sender, to, id);
    }

    /**
    * @param to : the address to approve for transfer
    * @param ids : the indices of the cards to be approved
    */
    function approveAll(address to, uint[] ids) public payable {
        for (uint i = 0; i < ids.length; i++) {
            approve(to, ids[i]);
        }
    }

    /**
    * @param id : the index of the token to check
    * @return the address approved to transfer this token
    */
    function getApproved(uint id) public view returns(address) {
        return approved[id];
    }

    /**
    * @param owner : the address to check
    * @return the number of tokens controlled by owner
    */
    function balanceOf(address owner) public view returns (uint) {
        return ownedTokens[owner].length;
    }

    /**
    * @param id : the index of the proposed token
    * @return whether the token is owned by a non-zero address
    */
    function exists(uint id) public view returns (bool) {
        return owners[id] != address(0);
    }

    /**
    * @param to : the address to which the token should be transferred
    * @param id : the index of the token to transfer
    */
    function transferFrom(address from, address to, uint id) public payable {
        
        require(to != address(0));
        require(to != address(this));

        // TODO: why is this necessary
        // if you're approved, why does it matter where it comes from?
        require(ownerOf(id) == from);

        require(isSenderApprovedFor(id));

        require(isTradable(cards[id].proto));

        _transfer(ownerOf(id), to, id);
    }

    /**
    * @param to : the address to which the tokens should be transferred
    * @param ids : the indices of the tokens to transfer
    */
    function transferAllFrom(address to, uint[] ids) public payable {
        for (uint i = 0; i < ids.length; i++) {
            transferFrom(address(0), to, ids[i]);
        }
    }

    /**
     * @return the number of cards which have been burned
     */
    function getBurnCount() public view returns (uint) {
        return burnCount;
    }

    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return operators[owner][operator];
    }

    function setApprovalForAll(address to, bool toApprove) public {
        require(to != msg.sender);
        operators[msg.sender][to] = toApprove;
        emit ApprovalForAll(msg.sender, to, toApprove);
    }

    bytes4 constant magic = bytes4(keccak256("onERC721Received(address,uint256,bytes)"));

    function safeTransferFrom(address from, address to, uint id, bytes data) public payable {
        require(to != address(0));
        transferFrom(from, to, id);
        if (_isContract(to)) {
            bytes4 response = ERC721TokenReceiver(to).onERC721Received.gas(50000)(from, id, data);
            require(response == magic);
        }
    }

    function safeTransferFrom(address from, address to, uint id) public payable {
        safeTransferFrom(from, to, id, "");
    }

    function _addToken(address to, uint id) private {
        uint pos = ownedTokens[to].push(uint40(id)) - 1;
        indices.push(uint24(pos));
    }

    function _removeToken(address from, uint id) public payable {
        uint24 index = indices[id];
        uint lastIndex = ownedTokens[from].length - 1;
        uint40 lastId = ownedTokens[from][lastIndex];

        ownedTokens[from][index] = lastId;
        ownedTokens[from][lastIndex] = 0;
        ownedTokens[from].length--;
    }

    function isSenderApprovedFor(uint256 id) internal view returns (bool) {
        return owns(msg.sender, id) || getApproved(id) == msg.sender || isApprovedForAll(ownerOf(id), msg.sender);
    }

    function _isContract(address test) internal view returns (bool) {
        uint size; 
        assembly {
            size := extcodesize(test)
        }
        return (size > 0);
    }

    function tokenURI(uint id) public view returns (string) {
        return uris[id];
    }
    
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 _tokenId){
        return ownedTokens[owner][index];
    }

    function tokenByIndex(uint256 index) external view returns (uint256){
        return index;
    }

    function supportsInterface(bytes4 interfaceID) public view returns (bool) {
        return (
            interfaceID == this.supportsInterface.selector || // ERC165
            interfaceID == 0x5b5e139f || // ERC721Metadata
            interfaceID == 0x6466353c || // ERC-721 on 3/7/2018
            interfaceID == 0x780e9d63
        ); // ERC721Enumerable
    }

    function implementsERC721() external pure returns (bool) {
        return true;
    }

    function getOwnedTokens(address user) public view returns (uint40[]) {
        return ownedTokens[user];
    }
    

}

/// @dev Note: the ERC-165 identifier for this interface is 0xf0b9e5ba
interface ERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. This function MUST use 50,000 gas or less. Return of other
    ///  than the magic value MUST result in the transaction being reverted.
    ///  Note: the contract address is always the message sender.
    /// @param _from The sending address
    /// @param _tokenId The NFT identifier which is being transfered
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
    ///  unless throwing
	function onERC721Received(address _from, uint256 _tokenId, bytes _data) external returns(bytes4);
}



contract CardIntegration is CardOwnership {
    
    CardPack[] packs;

    event CardCreated(uint indexed id, uint16 proto, uint16 purity, address owner);

    function addPack(CardPack approved) public onlyGovernor {
        packs.push(approved);
    }

    modifier onlyApprovedPacks {
        require(_isApprovedPack());
        _;
    }

    function _isApprovedPack() private view returns (bool) {
        for (uint i = 0; i < packs.length; i++) {
            if (msg.sender == address(packs[i])) {
                return true;
            }
        }
        return false;
    }

    function createCard(address owner, uint16 proto, uint16 purity) public whenNotPaused onlyApprovedPacks returns (uint) {
        ProtoCard memory card = protos[proto];
        require(card.season == currentSeason);
        if (card.rarity == Rarity.Mythic) {
            uint64 limit;
            bool exists;
            (limit, exists) = getLimit(proto);
            require(!exists || limit > 0);
            limits[proto].limit--;
        }
        return _createCard(owner, proto, purity);
    }

    function _createCard(address owner, uint16 proto, uint16 purity) internal returns (uint) {
        Card memory card = Card({
            proto: proto,
            purity: purity
        });

        uint id = cards.push(card) - 1;

        _create(owner, id);
        
        emit CardCreated(id, proto, purity, owner);

        return id;
    }

    /*function combineCards(uint[] ids) public whenNotPaused {
        require(ids.length == 5);
        require(ownsAll(msg.sender, ids));
        Card memory first = cards[ids[0]];
        uint16 proto = first.proto;
        uint8 shine = _getShine(first.purity);
        require(shine < shineLimit);
        uint16 puritySum = first.purity - (shine * 1000);
        burn(ids[0]);
        for (uint i = 1; i < ids.length; i++) {
            Card memory next = cards[ids[i]];
            require(next.proto == proto);
            require(_getShine(next.purity) == shine);
            puritySum += (next.purity - (shine * 1000));
            burn(ids[i]);
        }
        uint16 newPurity = uint16(((shine + 1) * 1000) + (puritySum / ids.length));
        _createCard(msg.sender, proto, newPurity);
    }*/


    // PURITY NOTES
    // currently, we only
    // however, to protect rarity, you'll never be abl
    // this is enforced by the restriction in the create-card function
    // no cards above this point can be found in packs

    

}

contract CardPack {

    CardIntegration public integration;
    uint public creationBlock;

    constructor(CardIntegration _integration) public payable {
        integration = _integration;
        creationBlock = block.number;
    }

    event Referral(address indexed referrer, uint value, address purchaser);

    /**
    * purchase 'count' of this type of pack
    */
    function purchase(uint16 packCount, address referrer) public payable;

    // store purity and shine as one number to save users gas
    function _getPurity(uint16 randOne, uint16 randTwo) internal pure returns (uint16) {
        if (randOne >= 998) {
            return 3000 + randTwo;
        } else if (randOne >= 988) {
            return 2000 + randTwo;
        } else if (randOne >= 938) {
            return 1000 + randTwo;
        } else {
            return randTwo;
        }
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint16"}],"name":"getProto","outputs":[{"name":"exists","type":"bool"},{"name":"god","type":"uint8"},{"name":"season","type":"uint8"},{"name":"cardType","type":"uint8"},{"name":"rarity","type":"uint8"},{"name":"mana","type":"uint8"},{"name":"attack","type":"uint8"},{"name":"health","type":"uint8"},{"name":"tribe","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"governor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ids","type":"uint256[]"}],"name":"burnAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"season","type":"uint8"}],"name":"makePermanantlyTradable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"externalID","type":"uint16"},{"name":"god","type":"uint8"},{"name":"rarity","type":"uint8"},{"name":"mana","type":"uint8"},{"name":"packable","type":"bool"}],"name":"addSpell","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"common","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"id","type":"uint256"}],"name":"_removeToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"mythic","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"index","type":"uint16"},{"name":"god","type":"uint8"},{"name":"cardType","type":"uint8"},{"name":"mana","type":"uint8"},{"name":"attack","type":"uint8"},{"name":"health","type":"uint8"},{"name":"tribe","type":"uint8"}],"name":"replaceProto","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"burnCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"seasonTradabilityLocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint16"},{"name":"limit","type":"uint64"}],"name":"setLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"}],"name":"transferAll","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"season","type":"uint8"}],"name":"makeTradeable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"seasonTradable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proposed","type":"address"},{"name":"id","type":"uint256"}],"name":"owns","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"approved","type":"address"}],"name":"addPack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"purity","type":"uint16"}],"name":"getShine","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cards","outputs":[{"name":"proto","type":"uint16"},{"name":"purity","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getCard","outputs":[{"name":"proto","type":"uint16"},{"name":"purity","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint16"}],"name":"getLimit","outputs":[{"name":"limit","type":"uint64"},{"name":"set","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"}],"name":"limits","outputs":[{"name":"limit","type":"uint64"},{"name":"exists","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"toApprove","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rare","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proto","type":"uint16"}],"name":"isTradable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"transfer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"proposed","type":"address"},{"name":"ids","type":"uint256[]"}],"name":"ownsAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"nextSeason","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentSeason","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gov","type":"address"}],"name":"setGovernor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"season","type":"uint8"}],"name":"makeUntradable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"rarity","type":"uint8"},{"name":"random","type":"uint16"}],"name":"getRandomCard","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"externalID","type":"uint16"},{"name":"god","type":"uint8"},{"name":"rarity","type":"uint8"},{"name":"mana","type":"uint8"},{"name":"attack","type":"uint8"},{"name":"durability","type":"uint8"},{"name":"packable","type":"bool"}],"name":"addWeapon","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"externalID","type":"uint16"},{"name":"god","type":"uint8"},{"name":"rarity","type":"uint8"},{"name":"mana","type":"uint8"},{"name":"attack","type":"uint8"},{"name":"health","type":"uint8"},{"name":"cardType","type":"uint8"},{"name":"tribe","type":"uint8"},{"name":"packable","type":"bool"}],"name":"addProto","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"protoCount","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"epic","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"getOwnedTokens","outputs":[{"name":"","type":"uint40[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"externalID","type":"uint16"},{"name":"god","type":"uint8"},{"name":"rarity","type":"uint8"},{"name":"mana","type":"uint8"},{"name":"attack","type":"uint8"},{"name":"health","type":"uint8"},{"name":"tribe","type":"uint8"},{"name":"packable","type":"bool"}],"name":"addMinion","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"ownedTokens","outputs":[{"name":"","type":"uint40"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"externalIDs","type":"uint16[]"},{"name":"gods","type":"uint8[]"},{"name":"rarities","type":"uint8[]"},{"name":"manas","type":"uint8[]"},{"name":"attacks","type":"uint8[]"},{"name":"healths","type":"uint8[]"},{"name":"cardTypes","type":"uint8[]"},{"name":"tribes","type":"uint8[]"},{"name":"packable","type":"bool[]"}],"name":"addProtos","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBurnCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"legendary","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"}],"name":"approveAll","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"}],"name":"transferAllFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"proto","type":"uint16"},{"name":"purity","type":"uint16"}],"name":"createCard","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"proto","type":"uint16"},{"indexed":false,"name":"purity","type":"uint16"},{"indexed":false,"name":"owner","type":"address"}],"name":"CardCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint16"},{"indexed":false,"name":"season","type":"uint8"},{"indexed":false,"name":"god","type":"uint8"},{"indexed":false,"name":"rarity","type":"uint8"},{"indexed":false,"name":"mana","type":"uint8"},{"indexed":false,"name":"attack","type":"uint8"},{"indexed":false,"name":"health","type":"uint8"},{"indexed":false,"name":"cardType","type":"uint8"},{"indexed":false,"name":"tribe","type":"uint8"},{"indexed":false,"name":"packable","type":"bool"}],"name":"NewProtoCard","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

608060405260008060146101000a81548160ff021916908315150217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061549f8061006d6000396000f30060806040526004361061030c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a71461031157806305c4af9d1461037557806306fdde031461042e578063081812fc146104be578063095ea7b31461052b5780630c340a241461056b578063100cdd91146105c25780631051db341461062857806318160ddd146106575780631fa24aa71461068257806323b872dd146106b257806324a96d70146107125780632f745c5914610792578063396ed600146107f35780633f4ba83a1461083c57806342842e0e1461085357806342966c68146108b35780634c5a94fe146108e05780634cc90115146109205780634f558e79146109695780634f6ccce7146109ae5780634fb31a6a146109ef578063524773ce14610a6e5780635bd9d9a514610a995780635c975abb14610ae15780635dcbd8bb14610b105780636352211e14610b5557806367025dcf14610bc2578063681f811614610c3b57806370a0823114610c6b5780637a8b9b8514610cc2578063818d4b5d14610d0a578063821f830f14610d6f5780638456cb5914610db2578063850e376014610dc95780638dc1076814610e145780639188d31214610e6c578063943b82f114610ec457806395d89b4114610f28578063986e82f214610fb8578063a22cb4651461101c578063a5487e511461106b578063a71aec73146110b4578063a9059cbb146110fd578063ad94d9011461113d578063b88d4fde146111db578063bc734f0f14611281578063bcb3962114611298578063c42cf535146112c9578063c87b56dd1461130c578063c968aab3146113b2578063caa19168146113e2578063ce9fdb701461143c578063ced28d77146114d6578063d7643e181461158a578063d80f8621146115bd578063d9d6165514611606578063dfb6a75f1461169e578063e149f03614611745578063e3c7336b146117b4578063e7cf548c14611a4e578063e985e9c514611a79578063eeffbe4e14611af4578063f030345214611b3d578063f3d47d1b14611bb6578063fb36eba114611c2f575b600080fd5b34801561031d57600080fd5b5061035b60048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611ca2565b604051808215151515815260200191505060405180910390f35b34801561038157600080fd5b506103a4600480360381019080803561ffff169060200190929190505050611df3565b604051808a1515151581526020018960ff1660ff1681526020018860ff1660ff1681526020018760ff1660ff1681526020018660048111156103e257fe5b60ff1681526020018560ff1660ff1681526020018460ff1660ff1681526020018360ff1660ff1681526020018260ff1660ff168152602001995050505050505050505060405180910390f35b34801561043a57600080fd5b50610443611f94565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610483578082015181840152602081019050610468565b50505050905090810190601f1680156104b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104ca57600080fd5b506104e960048036038101908080359060200190929190505050611fd1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610569600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061200e565b005b34801561057757600080fd5b5061058061211c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105ce57600080fd5b5061062660048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612141565b005b34801561063457600080fd5b5061063d612181565b604051808215151515815260200191505060405180910390f35b34801561066357600080fd5b5061066c61218a565b6040518082815260200191505060405180910390f35b34801561068e57600080fd5b506106b0600480360381019080803560ff16906020019092919050505061219b565b005b610710600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061225d565b005b34801561071e57600080fd5b50610774600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803515159060200190929190505050612380565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561079e57600080fd5b506107dd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612473565b6040518082815260200191505060405180910390f35b3480156107ff57600080fd5b5061081e600480360381019080803590602001909291905050506124f7565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561084857600080fd5b5061085161252e565b005b6108b1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125ec565b005b3480156108bf57600080fd5b506108de6004803603810190808035906020019092919050505061260d565b005b61091e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612643565b005b34801561092c57600080fd5b5061094b6004803603810190808035906020019092919050505061289f565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561097557600080fd5b50610994600480360381019080803590602001909291905050506128d6565b604051808215151515815260200191505060405180910390f35b3480156109ba57600080fd5b506109d960048036038101908080359060200190929190505050612942565b6040518082815260200191505060405180910390f35b3480156109fb57600080fd5b50610a6c600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff16906020019092919050505061294c565b005b348015610a7a57600080fd5b50610a83612ce8565b6040518082815260200191505060405180910390f35b348015610aa557600080fd5b50610ac7600480360381019080803560ff169060200190929190505050612cee565b604051808215151515815260200191505060405180910390f35b348015610aed57600080fd5b50610af6612d0e565b604051808215151515815260200191505060405180910390f35b348015610b1c57600080fd5b50610b53600480360381019080803561ffff169060200190929190803567ffffffffffffffff169060200190929190505050612d21565b005b348015610b6157600080fd5b50610b8060048036038101908080359060200190929190505050612e9e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c39600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612edb565b005b348015610c4757600080fd5b50610c69600480360381019080803560ff169060200190929190505050612f1d565b005b348015610c7757600080fd5b50610cac600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fad565b6040518082815260200191505060405180910390f35b348015610cce57600080fd5b50610cf0600480360381019080803560ff169060200190929190505050612ff9565b604051808215151515815260200191505060405180910390f35b348015610d1657600080fd5b50610d55600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613019565b604051808215151515815260200191505060405180910390f35b348015610d7b57600080fd5b50610db0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061305a565b005b348015610dbe57600080fd5b50610dc761311e565b005b348015610dd557600080fd5b50610df8600480360381019080803561ffff1690602001909291905050506131de565b604051808260ff1660ff16815260200191505060405180910390f35b348015610e2057600080fd5b50610e3f600480360381019080803590602001909291905050506131f9565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b348015610e7857600080fd5b50610e9760048036038101908080359060200190929190505050613244565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b348015610ed057600080fd5b50610ef3600480360381019080803561ffff1690602001909291905050506132c9565b604051808367ffffffffffffffff1667ffffffffffffffff168152602001821515151581526020019250505060405180910390f35b348015610f3457600080fd5b50610f3d61335d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f7d578082015181840152602081019050610f62565b50505050905090810190601f168015610faa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610fc457600080fd5b50610fe7600480360381019080803561ffff16906020019092919050505061339a565b604051808367ffffffffffffffff1667ffffffffffffffff168152602001821515151581526020019250505060405180910390f35b34801561102857600080fd5b50611069600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506133df565b005b34801561107757600080fd5b506110966004803603810190808035906020019092919050505061351b565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156110c057600080fd5b506110e3600480360381019080803561ffff169060200190929190505050613552565b604051808215151515815260200191505060405180910390f35b61113b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506135ad565b005b34801561114957600080fd5b506111c1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061364b565b604051808215151515815260200191505060405180910390f35b61127f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506136a5565b005b34801561128d57600080fd5b506112966138fb565b005b3480156112a457600080fd5b506112ad6139fc565b604051808260ff1660ff16815260200191505060405180910390f35b3480156112d557600080fd5b5061130a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a0f565b005b34801561131857600080fd5b5061133760048036038101908080359060200190929190505050613aad565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561137757808201518184015260208101905061135c565b50505050905090810190601f1680156113a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156113be57600080fd5b506113e0600480360381019080803560ff169060200190929190505050613b62565b005b3480156113ee57600080fd5b5061141e600480360381019080803560ff169060200190929190803561ffff169060200190929190505050613c25565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561144857600080fd5b506114b8600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803515159060200190929190505050613f01565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156114e257600080fd5b5061156c600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803515159060200190929190505050613ff4565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561159657600080fd5b5061159f6140e7565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156115c957600080fd5b506115e8600480360381019080803590602001909291905050506140fb565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561161257600080fd5b50611647600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614132565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561168a57808201518184015260208101905061166f565b505050509050019250505060405180910390f35b3480156116aa57600080fd5b50611727600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff1690602001909291908035151590602001909291905050506141f7565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561175157600080fd5b50611790600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506142ea565b604051808264ffffffffff1664ffffffffff16815260200191505060405180910390f35b3480156117c057600080fd5b50611a30600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050614333565b604051808261ffff1661ffff16815260200191505060405180910390f35b348015611a5a57600080fd5b50611a63614512565b6040518082815260200191505060405180910390f35b348015611a8557600080fd5b50611ada600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061451c565b604051808215151515815260200191505060405180910390f35b348015611b0057600080fd5b50611b1f600480360381019080803590602001909291905050506145b0565b604051808261ffff1661ffff16815260200191505060405180910390f35b611bb4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506145e7565b005b611c2d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050614629565b005b348015611c3b57600080fd5b50611c8c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803561ffff16906020019092919050505061466d565b6040518082815260200191505060405180910390f35b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d545750635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611da05750636466353c7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611dec575063780e9d637c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000806000806000806000806000611e09615323565b600660008c61ffff1661ffff16815260200190815260200160002061012060405190810160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff166004811115611ec157fe5b6004811115611ecc57fe5b81526020016000820160059054906101000a900460ff1660ff1660ff1681526020016000820160069054906101000a900460ff1660ff1660ff1681526020016000820160079054906101000a900460ff1660ff1660ff1681526020016000820160089054906101000a900460ff1660ff1660ff16815250509050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509193959799909294969850565b60606040805190810160405280600e81526020017f476f647320556e636861696e6564000000000000000000000000000000000000815250905090565b6000600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6120183382613019565b151561202357600080fd5b61205660018281548110151561203557fe5b9060005260206000200160000160009054906101000a900461ffff16613552565b151561206157600080fd5b81600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008090505b815181101561217d57612170828281518110151561216157fe5b9060200190602002015161260d565b8080600101915050612147565b5050565b60006001905090565b600060125460018054905003905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156121f657600080fd5b600360008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16151561222857600080fd5b6001600460008360ff1660ff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561229957600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156122d457600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166122f482612e9e565b73ffffffffffffffffffffffffffffffffffffffff1614151561231657600080fd5b61231f816148de565b151561232a57600080fd5b61235d60018281548110151561233c57fe5b9060005260206000200160000160009054906101000a900461ffff16613552565b151561236857600080fd5b61237b61237482612e9e565b8383614948565b505050565b600061238a615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156123e557600080fd5b610120604051908101604052806001151581526020018760ff168152602001600560009054906101000a900460ff1660ff168152602001600160ff16815260200186600481111561243257fe5b81526020018560ff168152602001600060ff168152602001600060ff168152602001600060ff168152509050612469878285614a6b565b5095945050505050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156124c157fe5b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff1664ffffffffff16905092915050565b600b8181548110151561250657fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561258957600080fd5b600060149054906101000a900460ff1615156125a457600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b61260883838360206040519081016040528060008152506136a5565b505050565b6126173382613019565b151561262257600080fd5b60126000815480929190600101919050555061264033600083614948565b50565b600080600060118481548110151561265757fe5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff1692506001600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050039150600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561271257fe5b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff16905080600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208462ffffff1681548110151561278d57fe5b90600052602060002090600691828204019190066005026101000a81548164ffffffffff021916908364ffffffffff1602179055506000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561281057fe5b90600052602060002090600691828204019190066005026101000a81548164ffffffffff021916908364ffffffffff160217905550600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036128979190615392565b505050505050565b6007818154811015156128ae57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600c600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000819050919050565b612954615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129af57600080fd5b600660008961ffff1661ffff16815260200190815260200160002061012060405190810160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff166004811115612a6757fe5b6004811115612a7257fe5b81526020016000820160059054906101000a900460ff1660ff1660ff1681526020016000820160069054906101000a900460ff1660ff1660ff1681526020016000820160079054906101000a900460ff1660ff1660ff1681526020016000820160089054906101000a900460ff1660ff1660ff1681525050905060036000826040015160ff1660ff16815260200190815260200160002060009054906101000a900460ff16151515612b2357600080fd5b610120604051908101604052806001151581526020018860ff168152602001826040015160ff1681526020018760ff16815260200182608001516004811115612b6857fe5b81526020018660ff1681526020018560ff1681526020018460ff1681526020018360ff16815250600660008a61ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff02191690836004811115612c5157fe5b021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055509050505050505050505050565b60125481565b60046020528060005260406000206000915054906101000a900460ff1681565b600060149054906101000a900460ff1681565b612d296153cc565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d8457600080fd5b600260008461ffff1661ffff1681526020019081526020016000206040805190810160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900460ff16151515158152505090508060200151151515612e0a57600080fd5b60408051908101604052808367ffffffffffffffff16815260200160011515815250600260008561ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548160ff021916908315150217905550905050505050565b6000600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008090505b8151811015612f1857612f0b838383815181101515612efc57fe5b906020019060200201516135ad565b8080600101915050612ee1565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612f7857600080fd5b6001600360008360ff1660ff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b60008273ffffffffffffffffffffffffffffffffffffffff1661303b83612e9e565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130b557600080fd5b60138190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561317957600080fd5b600060149054906101000a900460ff1615151561319557600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b60006103e88261ffff168115156131f157fe5b049050919050565b60018181548110151561320857fe5b906000526020600020016000915090508060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b60008061324f6153f2565b60018481548110151561325e57fe5b906000526020600020016040805190810160405290816000820160009054906101000a900461ffff1661ffff1661ffff1681526020016000820160029054906101000a900461ffff1661ffff1661ffff16815250509050806000015181602001519250925050915091565b6000806132d46153cc565b600260008561ffff1661ffff1681526020019081526020016000206040805190810160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900460ff1615151515815250509050806000015181602001519250925050915091565b60606040805190810160405280600481526020017f474f445300000000000000000000000000000000000000000000000000000000815250905090565b60026020528060005260406000206000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900460ff16905082565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561341a57600080fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600a8181548110151561352a57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b600060036000600660008561ffff1661ffff16815260200190815260200160002060000160029054906101000a900460ff1660ff1660ff16815260200190815260200160002060009054906101000a900460ff169050919050565b6135b73382613019565b15156135c257600080fd5b6135f56001828154811015156135d457fe5b9060005260206000200160000160009054906101000a900461ffff16613552565b151561360057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561363c57600080fd5b613647338383614948565b5050565b600080600090505b82518110156136995761367d84848381518110151561366e57fe5b90602001906020020151613019565b151561368c576000915061369e565b8080600101915050613653565b600191505b5092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136e257600080fd5b6136ed85858561225d565b6136f684614f84565b156138f4578373ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba61c3508786866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137c05780820151818401526020810190506137a5565b50505050905090810190601f1680156137ed5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600088803b15801561380e57600080fd5b5087f1158015613822573d6000803e3d6000fd5b50505050506040513d602081101561383957600080fd5b8101908080519060200190929190505050905060405180807f6f6e455243373231526563656976656428616464726573732c75696e7432353681526020017f2c62797465732900000000000000000000000000000000000000000000000000815250602701905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415156138f357600080fd5b5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561395657600080fd5b60ff600560009054906101000a900460ff1660ff161115151561397857600080fd5b6005600081819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff1602179055505060006007816139b99190615414565b5060006008816139c99190615414565b5060006009816139d99190615414565b506000600a816139e99190615414565b506000600b816139f99190615414565b50565b600560009054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613a6a57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060601060008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613b565780601f10613b2b57610100808354040283529160200191613b56565b820191906000526020600020905b815481529060010190602001808311613b3957829003601f168201915b50505050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613bbd57600080fd5b600460008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16151515613bf057600080fd5b6000600360008360ff1660ff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806000806000806004811115613c3957fe5b876004811115613c4557fe5b1415613c9857600b80805490508761ffff16811515613c6057fe5b06815481101515613c6d57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b60016004811115613ca557fe5b876004811115613cb157fe5b1415613d0457600a80805490508761ffff16811515613ccc57fe5b06815481101515613cd957fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b60026004811115613d1157fe5b876004811115613d1d57fe5b1415613d7057600980805490508761ffff16811515613d3857fe5b06815481101515613d4557fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b60036004811115613d7d57fe5b876004811115613d8957fe5b1415613ddc57600880805490508761ffff16811515613da457fe5b06815481101515613db157fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b600480811115613de857fe5b876004811115613df457fe5b1415613ee557600090505b600780549050811015613e985760078080549050828861ffff1601811515613e2357fe5b06815481101515613e3057fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169350613e5f846132c9565b8093508194505050818015613e7e575060008367ffffffffffffffff16115b15613e8b57839450613ef7565b8080600101915050613dff565b600880805490508761ffff16811515613ead57fe5b06815481101515613eba57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b60001515613ef257600080fd5b600094505b5050505092915050565b6000613f0b615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613f6657600080fd5b610120604051908101604052806001151581526020018960ff168152602001600560009054906101000a900460ff1660ff168152602001600360ff168152602001886004811115613fb357fe5b81526020018760ff1681526020018660ff1681526020018560ff168152602001600060ff168152509050613fe8898285614a6b565b50979650505050505050565b6000613ffe615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561405957600080fd5b610120604051908101604052806001151581526020018b60ff168152602001600560009054906101000a900460ff1660ff1681526020018660ff1681526020018a60048111156140a557fe5b81526020018960ff1681526020018860ff1681526020018760ff1681526020018560ff1681525090506140d98b8285614a6b565b509998505050505050505050565b600560019054906101000a900461ffff1681565b60098181548110151561410a57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156141eb57602002820191906000526020600020906000905b82829054906101000a900464ffffffffff1664ffffffffff16815260200190600501906020826004010492830192600103820291508084116141ac5790505b50505050509050919050565b6000614201615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561425c57600080fd5b610120604051908101604052806001151581526020018a60ff168152602001600560009054906101000a900460ff1660ff168152602001600260ff1681526020018960048111156142a957fe5b81526020018860ff1681526020018760ff1681526020018660ff1681526020018560ff1681525090506142dd8a8285614a6b565b5098975050505050505050565b600f6020528160005260406000208181548110151561430557fe5b9060005260206000209060069182820401919006600502915091509054906101000a900464ffffffffff1681565b60008061433e615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561439957600080fd5b600091505b8b5182101561450357610120604051908101604052806001151581526020018c848151811015156143cb57fe5b9060200190602002015160ff168152602001600560009054906101000a900460ff1660ff168152602001878481518110151561440357fe5b9060200190602002015160ff1681526020018b8481518110151561442357fe5b90602001906020020151600481111561443857fe5b81526020018a8481518110151561444b57fe5b9060200190602002015160ff168152602001898481518110151561446b57fe5b9060200190602002015160ff168152602001888481518110151561448b57fe5b9060200190602002015160ff16815260200186848151811015156144ab57fe5b9060200190602002015160ff1681525090506144f68c838151811015156144ce57fe5b906020019060200201518286858151811015156144e757fe5b90602001906020020151614a6b565b818060010192505061439e565b50509998505050505050505050565b6000601254905090565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6008818154811015156145bf57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b60008090505b81518110156146245761461783838381518110151561460857fe5b9060200190602002015161200e565b80806001019150506145ed565b505050565b60008090505b81518110156146685761465b600084848481518110151561464c57fe5b9060200190602002015161225d565b808060010191505061462f565b505050565b6000614677615323565b600080600060149054906101000a900460ff1615151561469657600080fd5b61469e614f97565b15156146a957600080fd5b600660008761ffff1661ffff16815260200190815260200160002061012060405190810160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff16600481111561476157fe5b600481111561476c57fe5b81526020016000820160059054906101000a900460ff1660ff1660ff1681526020016000820160069054906101000a900460ff1660ff1660ff1681526020016000820160079054906101000a900460ff1660ff1660ff1681526020016000820160089054906101000a900460ff1660ff1660ff16815250509250600560009054906101000a900460ff1660ff16836040015160ff1614151561480d57600080fd5b60048081111561481957fe5b8360800151600481111561482957fe5b14156148c757614838866132c9565b8092508193505050801580614857575060008267ffffffffffffffff16115b151561486257600080fd5b600260008761ffff1661ffff168152602001908152602001600020600001600081819054906101000a900467ffffffffffffffff16809291906001900391906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b6148d2878787615038565b93505050509392505050565b60006148ea3383613019565b8061492857503373ffffffffffffffffffffffffffffffffffffffff1661491083611fd1565b73ffffffffffffffffffffffffffffffffffffffff16145b80614941575061494061493a83612e9e565b3361451c565b5b9050919050565b6000600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506149f78282615173565b614a018382612643565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000600660008561ffff1661ffff16815260200190815260200160002060000160009054906101000a900460ff16151515614aa557600080fd5b600183600001901515908115158152505082600660008661ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff02191690836004811115614b7957fe5b021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055509050506005600181819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550507f2f7e8f79713fd202353aaa4d413bb73a3bc66d59a540f646415fd9acee7e59c684600560009054906101000a900460ff16856020015186608001518760a001518860c001518960e001518a606001518b61010001518b604051808b61ffff1661ffff1681526020018a60ff1660ff1681526020018960ff1660ff168152602001886004811115614cc857fe5b60ff1681526020018760ff1660ff1681526020018660ff1660ff1681526020018560ff1660ff1681526020018460ff1660ff1681526020018360ff1660ff168152602001821515151581526020019a505050505050505050505060405180910390a18115614f7e578260800151905060006004811115614d4457fe5b816004811115614d5057fe5b1415614da857600b84908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f7d565b60016004811115614db557fe5b816004811115614dc157fe5b1415614e1957600a84908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f7c565b60026004811115614e2657fe5b816004811115614e3257fe5b1415614e8a57600984908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f7b565b60036004811115614e9757fe5b816004811115614ea357fe5b1415614efb57600884908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f7a565b600480811115614f0757fe5b816004811115614f1357fe5b1415614f6b57600784908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f79565b60001515614f7857600080fd5b5b5b5b5b5b5b50505050565b600080823b905060008111915050919050565b600080600090505b60138054905081101561502f57601381815481101515614fbb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156150225760019150615034565b8080600101915050614f9f565b600091505b5090565b60006150426153f2565b600060408051908101604052808661ffff1681526020018561ffff1681525091506001808390806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555050500390506150e3868261525d565b807fe8a3345b7ca502cc541c08a705987fa4c03d9f59c0427175387a64cbd8f46594868689604051808461ffff1661ffff1681526020018361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a280925050509392505050565b60006001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083908060018154018082558091505090600182039060005260206000209060069182820401919006600502909192909190916101000a81548164ffffffffff021916908364ffffffffff1602179055500390506011819080600181540180825580915050906001820390600052602060002090600a9182820401919006600302909192909190916101000a81548162ffffff021916908362ffffff16021790555050505050565b81600c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506152b98282615173565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61012060405190810160405280600015158152602001600060ff168152602001600060ff168152602001600060ff1681526020016000600481111561536457fe5b8152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b8154818355818111156153c75760050160069004816005016006900483600052602060002091820191016153c6919061544e565b5b505050565b6040805190810160405280600067ffffffffffffffff1681526020016000151581525090565b6040805190810160405280600061ffff168152602001600061ffff1681525090565b81548183558181111561544957600f016010900481600f01601090048360005260206000209182019101615448919061544e565b5b505050565b61547091905b8082111561546c576000816000905550600101615454565b5090565b905600a165627a7a72305820c8069c2ac22ba1f7a118db5e6bba1fa58500c5769b9ce6483d1dc9db2a01c4cc0029

Deployed Bytecode

0x60806040526004361061030c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a71461031157806305c4af9d1461037557806306fdde031461042e578063081812fc146104be578063095ea7b31461052b5780630c340a241461056b578063100cdd91146105c25780631051db341461062857806318160ddd146106575780631fa24aa71461068257806323b872dd146106b257806324a96d70146107125780632f745c5914610792578063396ed600146107f35780633f4ba83a1461083c57806342842e0e1461085357806342966c68146108b35780634c5a94fe146108e05780634cc90115146109205780634f558e79146109695780634f6ccce7146109ae5780634fb31a6a146109ef578063524773ce14610a6e5780635bd9d9a514610a995780635c975abb14610ae15780635dcbd8bb14610b105780636352211e14610b5557806367025dcf14610bc2578063681f811614610c3b57806370a0823114610c6b5780637a8b9b8514610cc2578063818d4b5d14610d0a578063821f830f14610d6f5780638456cb5914610db2578063850e376014610dc95780638dc1076814610e145780639188d31214610e6c578063943b82f114610ec457806395d89b4114610f28578063986e82f214610fb8578063a22cb4651461101c578063a5487e511461106b578063a71aec73146110b4578063a9059cbb146110fd578063ad94d9011461113d578063b88d4fde146111db578063bc734f0f14611281578063bcb3962114611298578063c42cf535146112c9578063c87b56dd1461130c578063c968aab3146113b2578063caa19168146113e2578063ce9fdb701461143c578063ced28d77146114d6578063d7643e181461158a578063d80f8621146115bd578063d9d6165514611606578063dfb6a75f1461169e578063e149f03614611745578063e3c7336b146117b4578063e7cf548c14611a4e578063e985e9c514611a79578063eeffbe4e14611af4578063f030345214611b3d578063f3d47d1b14611bb6578063fb36eba114611c2f575b600080fd5b34801561031d57600080fd5b5061035b60048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611ca2565b604051808215151515815260200191505060405180910390f35b34801561038157600080fd5b506103a4600480360381019080803561ffff169060200190929190505050611df3565b604051808a1515151581526020018960ff1660ff1681526020018860ff1660ff1681526020018760ff1660ff1681526020018660048111156103e257fe5b60ff1681526020018560ff1660ff1681526020018460ff1660ff1681526020018360ff1660ff1681526020018260ff1660ff168152602001995050505050505050505060405180910390f35b34801561043a57600080fd5b50610443611f94565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610483578082015181840152602081019050610468565b50505050905090810190601f1680156104b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104ca57600080fd5b506104e960048036038101908080359060200190929190505050611fd1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610569600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061200e565b005b34801561057757600080fd5b5061058061211c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105ce57600080fd5b5061062660048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612141565b005b34801561063457600080fd5b5061063d612181565b604051808215151515815260200191505060405180910390f35b34801561066357600080fd5b5061066c61218a565b6040518082815260200191505060405180910390f35b34801561068e57600080fd5b506106b0600480360381019080803560ff16906020019092919050505061219b565b005b610710600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061225d565b005b34801561071e57600080fd5b50610774600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803515159060200190929190505050612380565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561079e57600080fd5b506107dd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612473565b6040518082815260200191505060405180910390f35b3480156107ff57600080fd5b5061081e600480360381019080803590602001909291905050506124f7565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561084857600080fd5b5061085161252e565b005b6108b1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125ec565b005b3480156108bf57600080fd5b506108de6004803603810190808035906020019092919050505061260d565b005b61091e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612643565b005b34801561092c57600080fd5b5061094b6004803603810190808035906020019092919050505061289f565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561097557600080fd5b50610994600480360381019080803590602001909291905050506128d6565b604051808215151515815260200191505060405180910390f35b3480156109ba57600080fd5b506109d960048036038101908080359060200190929190505050612942565b6040518082815260200191505060405180910390f35b3480156109fb57600080fd5b50610a6c600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff16906020019092919050505061294c565b005b348015610a7a57600080fd5b50610a83612ce8565b6040518082815260200191505060405180910390f35b348015610aa557600080fd5b50610ac7600480360381019080803560ff169060200190929190505050612cee565b604051808215151515815260200191505060405180910390f35b348015610aed57600080fd5b50610af6612d0e565b604051808215151515815260200191505060405180910390f35b348015610b1c57600080fd5b50610b53600480360381019080803561ffff169060200190929190803567ffffffffffffffff169060200190929190505050612d21565b005b348015610b6157600080fd5b50610b8060048036038101908080359060200190929190505050612e9e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c39600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612edb565b005b348015610c4757600080fd5b50610c69600480360381019080803560ff169060200190929190505050612f1d565b005b348015610c7757600080fd5b50610cac600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fad565b6040518082815260200191505060405180910390f35b348015610cce57600080fd5b50610cf0600480360381019080803560ff169060200190929190505050612ff9565b604051808215151515815260200191505060405180910390f35b348015610d1657600080fd5b50610d55600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613019565b604051808215151515815260200191505060405180910390f35b348015610d7b57600080fd5b50610db0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061305a565b005b348015610dbe57600080fd5b50610dc761311e565b005b348015610dd557600080fd5b50610df8600480360381019080803561ffff1690602001909291905050506131de565b604051808260ff1660ff16815260200191505060405180910390f35b348015610e2057600080fd5b50610e3f600480360381019080803590602001909291905050506131f9565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b348015610e7857600080fd5b50610e9760048036038101908080359060200190929190505050613244565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b348015610ed057600080fd5b50610ef3600480360381019080803561ffff1690602001909291905050506132c9565b604051808367ffffffffffffffff1667ffffffffffffffff168152602001821515151581526020019250505060405180910390f35b348015610f3457600080fd5b50610f3d61335d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f7d578082015181840152602081019050610f62565b50505050905090810190601f168015610faa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610fc457600080fd5b50610fe7600480360381019080803561ffff16906020019092919050505061339a565b604051808367ffffffffffffffff1667ffffffffffffffff168152602001821515151581526020019250505060405180910390f35b34801561102857600080fd5b50611069600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506133df565b005b34801561107757600080fd5b506110966004803603810190808035906020019092919050505061351b565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156110c057600080fd5b506110e3600480360381019080803561ffff169060200190929190505050613552565b604051808215151515815260200191505060405180910390f35b61113b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506135ad565b005b34801561114957600080fd5b506111c1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061364b565b604051808215151515815260200191505060405180910390f35b61127f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506136a5565b005b34801561128d57600080fd5b506112966138fb565b005b3480156112a457600080fd5b506112ad6139fc565b604051808260ff1660ff16815260200191505060405180910390f35b3480156112d557600080fd5b5061130a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a0f565b005b34801561131857600080fd5b5061133760048036038101908080359060200190929190505050613aad565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561137757808201518184015260208101905061135c565b50505050905090810190601f1680156113a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156113be57600080fd5b506113e0600480360381019080803560ff169060200190929190505050613b62565b005b3480156113ee57600080fd5b5061141e600480360381019080803560ff169060200190929190803561ffff169060200190929190505050613c25565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561144857600080fd5b506114b8600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803515159060200190929190505050613f01565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156114e257600080fd5b5061156c600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803515159060200190929190505050613ff4565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561159657600080fd5b5061159f6140e7565b604051808261ffff1661ffff16815260200191505060405180910390f35b3480156115c957600080fd5b506115e8600480360381019080803590602001909291905050506140fb565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561161257600080fd5b50611647600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614132565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561168a57808201518184015260208101905061166f565b505050509050019250505060405180910390f35b3480156116aa57600080fd5b50611727600480360381019080803561ffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff1690602001909291908035151590602001909291905050506141f7565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561175157600080fd5b50611790600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506142ea565b604051808264ffffffffff1664ffffffffff16815260200191505060405180910390f35b3480156117c057600080fd5b50611a30600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050614333565b604051808261ffff1661ffff16815260200191505060405180910390f35b348015611a5a57600080fd5b50611a63614512565b6040518082815260200191505060405180910390f35b348015611a8557600080fd5b50611ada600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061451c565b604051808215151515815260200191505060405180910390f35b348015611b0057600080fd5b50611b1f600480360381019080803590602001909291905050506145b0565b604051808261ffff1661ffff16815260200191505060405180910390f35b611bb4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506145e7565b005b611c2d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050614629565b005b348015611c3b57600080fd5b50611c8c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190803561ffff16906020019092919050505061466d565b6040518082815260200191505060405180910390f35b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d545750635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611da05750636466353c7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611dec575063780e9d637c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000806000806000806000806000611e09615323565b600660008c61ffff1661ffff16815260200190815260200160002061012060405190810160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff166004811115611ec157fe5b6004811115611ecc57fe5b81526020016000820160059054906101000a900460ff1660ff1660ff1681526020016000820160069054906101000a900460ff1660ff1660ff1681526020016000820160079054906101000a900460ff1660ff1660ff1681526020016000820160089054906101000a900460ff1660ff1660ff16815250509050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509193959799909294969850565b60606040805190810160405280600e81526020017f476f647320556e636861696e6564000000000000000000000000000000000000815250905090565b6000600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6120183382613019565b151561202357600080fd5b61205660018281548110151561203557fe5b9060005260206000200160000160009054906101000a900461ffff16613552565b151561206157600080fd5b81600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008090505b815181101561217d57612170828281518110151561216157fe5b9060200190602002015161260d565b8080600101915050612147565b5050565b60006001905090565b600060125460018054905003905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156121f657600080fd5b600360008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16151561222857600080fd5b6001600460008360ff1660ff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561229957600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156122d457600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166122f482612e9e565b73ffffffffffffffffffffffffffffffffffffffff1614151561231657600080fd5b61231f816148de565b151561232a57600080fd5b61235d60018281548110151561233c57fe5b9060005260206000200160000160009054906101000a900461ffff16613552565b151561236857600080fd5b61237b61237482612e9e565b8383614948565b505050565b600061238a615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156123e557600080fd5b610120604051908101604052806001151581526020018760ff168152602001600560009054906101000a900460ff1660ff168152602001600160ff16815260200186600481111561243257fe5b81526020018560ff168152602001600060ff168152602001600060ff168152602001600060ff168152509050612469878285614a6b565b5095945050505050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156124c157fe5b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff1664ffffffffff16905092915050565b600b8181548110151561250657fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561258957600080fd5b600060149054906101000a900460ff1615156125a457600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b61260883838360206040519081016040528060008152506136a5565b505050565b6126173382613019565b151561262257600080fd5b60126000815480929190600101919050555061264033600083614948565b50565b600080600060118481548110151561265757fe5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff1692506001600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050039150600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561271257fe5b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff16905080600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208462ffffff1681548110151561278d57fe5b90600052602060002090600691828204019190066005026101000a81548164ffffffffff021916908364ffffffffff1602179055506000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561281057fe5b90600052602060002090600691828204019190066005026101000a81548164ffffffffff021916908364ffffffffff160217905550600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036128979190615392565b505050505050565b6007818154811015156128ae57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600c600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000819050919050565b612954615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129af57600080fd5b600660008961ffff1661ffff16815260200190815260200160002061012060405190810160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff166004811115612a6757fe5b6004811115612a7257fe5b81526020016000820160059054906101000a900460ff1660ff1660ff1681526020016000820160069054906101000a900460ff1660ff1660ff1681526020016000820160079054906101000a900460ff1660ff1660ff1681526020016000820160089054906101000a900460ff1660ff1660ff1681525050905060036000826040015160ff1660ff16815260200190815260200160002060009054906101000a900460ff16151515612b2357600080fd5b610120604051908101604052806001151581526020018860ff168152602001826040015160ff1681526020018760ff16815260200182608001516004811115612b6857fe5b81526020018660ff1681526020018560ff1681526020018460ff1681526020018360ff16815250600660008a61ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff02191690836004811115612c5157fe5b021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055509050505050505050505050565b60125481565b60046020528060005260406000206000915054906101000a900460ff1681565b600060149054906101000a900460ff1681565b612d296153cc565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d8457600080fd5b600260008461ffff1661ffff1681526020019081526020016000206040805190810160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900460ff16151515158152505090508060200151151515612e0a57600080fd5b60408051908101604052808367ffffffffffffffff16815260200160011515815250600260008561ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548160ff021916908315150217905550905050505050565b6000600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008090505b8151811015612f1857612f0b838383815181101515612efc57fe5b906020019060200201516135ad565b8080600101915050612ee1565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612f7857600080fd5b6001600360008360ff1660ff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b60008273ffffffffffffffffffffffffffffffffffffffff1661303b83612e9e565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130b557600080fd5b60138190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561317957600080fd5b600060149054906101000a900460ff1615151561319557600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b60006103e88261ffff168115156131f157fe5b049050919050565b60018181548110151561320857fe5b906000526020600020016000915090508060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b60008061324f6153f2565b60018481548110151561325e57fe5b906000526020600020016040805190810160405290816000820160009054906101000a900461ffff1661ffff1661ffff1681526020016000820160029054906101000a900461ffff1661ffff1661ffff16815250509050806000015181602001519250925050915091565b6000806132d46153cc565b600260008561ffff1661ffff1681526020019081526020016000206040805190810160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900460ff1615151515815250509050806000015181602001519250925050915091565b60606040805190810160405280600481526020017f474f445300000000000000000000000000000000000000000000000000000000815250905090565b60026020528060005260406000206000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900460ff16905082565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561341a57600080fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600a8181548110151561352a57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b600060036000600660008561ffff1661ffff16815260200190815260200160002060000160029054906101000a900460ff1660ff1660ff16815260200190815260200160002060009054906101000a900460ff169050919050565b6135b73382613019565b15156135c257600080fd5b6135f56001828154811015156135d457fe5b9060005260206000200160000160009054906101000a900461ffff16613552565b151561360057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561363c57600080fd5b613647338383614948565b5050565b600080600090505b82518110156136995761367d84848381518110151561366e57fe5b90602001906020020151613019565b151561368c576000915061369e565b8080600101915050613653565b600191505b5092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156136e257600080fd5b6136ed85858561225d565b6136f684614f84565b156138f4578373ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba61c3508786866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137c05780820151818401526020810190506137a5565b50505050905090810190601f1680156137ed5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600088803b15801561380e57600080fd5b5087f1158015613822573d6000803e3d6000fd5b50505050506040513d602081101561383957600080fd5b8101908080519060200190929190505050905060405180807f6f6e455243373231526563656976656428616464726573732c75696e7432353681526020017f2c62797465732900000000000000000000000000000000000000000000000000815250602701905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415156138f357600080fd5b5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561395657600080fd5b60ff600560009054906101000a900460ff1660ff161115151561397857600080fd5b6005600081819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff1602179055505060006007816139b99190615414565b5060006008816139c99190615414565b5060006009816139d99190615414565b506000600a816139e99190615414565b506000600b816139f99190615414565b50565b600560009054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613a6a57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060601060008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613b565780601f10613b2b57610100808354040283529160200191613b56565b820191906000526020600020905b815481529060010190602001808311613b3957829003601f168201915b50505050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613bbd57600080fd5b600460008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16151515613bf057600080fd5b6000600360008360ff1660ff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806000806000806004811115613c3957fe5b876004811115613c4557fe5b1415613c9857600b80805490508761ffff16811515613c6057fe5b06815481101515613c6d57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b60016004811115613ca557fe5b876004811115613cb157fe5b1415613d0457600a80805490508761ffff16811515613ccc57fe5b06815481101515613cd957fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b60026004811115613d1157fe5b876004811115613d1d57fe5b1415613d7057600980805490508761ffff16811515613d3857fe5b06815481101515613d4557fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b60036004811115613d7d57fe5b876004811115613d8957fe5b1415613ddc57600880805490508761ffff16811515613da457fe5b06815481101515613db157fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b600480811115613de857fe5b876004811115613df457fe5b1415613ee557600090505b600780549050811015613e985760078080549050828861ffff1601811515613e2357fe5b06815481101515613e3057fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169350613e5f846132c9565b8093508194505050818015613e7e575060008367ffffffffffffffff16115b15613e8b57839450613ef7565b8080600101915050613dff565b600880805490508761ffff16811515613ead57fe5b06815481101515613eba57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff169450613ef7565b60001515613ef257600080fd5b600094505b5050505092915050565b6000613f0b615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613f6657600080fd5b610120604051908101604052806001151581526020018960ff168152602001600560009054906101000a900460ff1660ff168152602001600360ff168152602001886004811115613fb357fe5b81526020018760ff1681526020018660ff1681526020018560ff168152602001600060ff168152509050613fe8898285614a6b565b50979650505050505050565b6000613ffe615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561405957600080fd5b610120604051908101604052806001151581526020018b60ff168152602001600560009054906101000a900460ff1660ff1681526020018660ff1681526020018a60048111156140a557fe5b81526020018960ff1681526020018860ff1681526020018760ff1681526020018560ff1681525090506140d98b8285614a6b565b509998505050505050505050565b600560019054906101000a900461ffff1681565b60098181548110151561410a57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156141eb57602002820191906000526020600020906000905b82829054906101000a900464ffffffffff1664ffffffffff16815260200190600501906020826004010492830192600103820291508084116141ac5790505b50505050509050919050565b6000614201615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561425c57600080fd5b610120604051908101604052806001151581526020018a60ff168152602001600560009054906101000a900460ff1660ff168152602001600260ff1681526020018960048111156142a957fe5b81526020018860ff1681526020018760ff1681526020018660ff1681526020018560ff1681525090506142dd8a8285614a6b565b5098975050505050505050565b600f6020528160005260406000208181548110151561430557fe5b9060005260206000209060069182820401919006600502915091509054906101000a900464ffffffffff1681565b60008061433e615323565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561439957600080fd5b600091505b8b5182101561450357610120604051908101604052806001151581526020018c848151811015156143cb57fe5b9060200190602002015160ff168152602001600560009054906101000a900460ff1660ff168152602001878481518110151561440357fe5b9060200190602002015160ff1681526020018b8481518110151561442357fe5b90602001906020020151600481111561443857fe5b81526020018a8481518110151561444b57fe5b9060200190602002015160ff168152602001898481518110151561446b57fe5b9060200190602002015160ff168152602001888481518110151561448b57fe5b9060200190602002015160ff16815260200186848151811015156144ab57fe5b9060200190602002015160ff1681525090506144f68c838151811015156144ce57fe5b906020019060200201518286858151811015156144e757fe5b90602001906020020151614a6b565b818060010192505061439e565b50509998505050505050505050565b6000601254905090565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6008818154811015156145bf57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b60008090505b81518110156146245761461783838381518110151561460857fe5b9060200190602002015161200e565b80806001019150506145ed565b505050565b60008090505b81518110156146685761465b600084848481518110151561464c57fe5b9060200190602002015161225d565b808060010191505061462f565b505050565b6000614677615323565b600080600060149054906101000a900460ff1615151561469657600080fd5b61469e614f97565b15156146a957600080fd5b600660008761ffff1661ffff16815260200190815260200160002061012060405190810160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff16600481111561476157fe5b600481111561476c57fe5b81526020016000820160059054906101000a900460ff1660ff1660ff1681526020016000820160069054906101000a900460ff1660ff1660ff1681526020016000820160079054906101000a900460ff1660ff1660ff1681526020016000820160089054906101000a900460ff1660ff1660ff16815250509250600560009054906101000a900460ff1660ff16836040015160ff1614151561480d57600080fd5b60048081111561481957fe5b8360800151600481111561482957fe5b14156148c757614838866132c9565b8092508193505050801580614857575060008267ffffffffffffffff16115b151561486257600080fd5b600260008761ffff1661ffff168152602001908152602001600020600001600081819054906101000a900467ffffffffffffffff16809291906001900391906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b6148d2878787615038565b93505050509392505050565b60006148ea3383613019565b8061492857503373ffffffffffffffffffffffffffffffffffffffff1661491083611fd1565b73ffffffffffffffffffffffffffffffffffffffff16145b80614941575061494061493a83612e9e565b3361451c565b5b9050919050565b6000600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506149f78282615173565b614a018382612643565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000600660008561ffff1661ffff16815260200190815260200160002060000160009054906101000a900460ff16151515614aa557600080fd5b600183600001901515908115158152505082600660008661ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff02191690836004811115614b7957fe5b021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055509050506005600181819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550507f2f7e8f79713fd202353aaa4d413bb73a3bc66d59a540f646415fd9acee7e59c684600560009054906101000a900460ff16856020015186608001518760a001518860c001518960e001518a606001518b61010001518b604051808b61ffff1661ffff1681526020018a60ff1660ff1681526020018960ff1660ff168152602001886004811115614cc857fe5b60ff1681526020018760ff1660ff1681526020018660ff1660ff1681526020018560ff1660ff1681526020018460ff1660ff1681526020018360ff1660ff168152602001821515151581526020019a505050505050505050505060405180910390a18115614f7e578260800151905060006004811115614d4457fe5b816004811115614d5057fe5b1415614da857600b84908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f7d565b60016004811115614db557fe5b816004811115614dc157fe5b1415614e1957600a84908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f7c565b60026004811115614e2657fe5b816004811115614e3257fe5b1415614e8a57600984908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f7b565b60036004811115614e9757fe5b816004811115614ea357fe5b1415614efb57600884908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f7a565b600480811115614f0757fe5b816004811115614f1357fe5b1415614f6b57600784908060018154018082558091505090600182039060005260206000209060109182820401919006600202909192909190916101000a81548161ffff021916908361ffff16021790555050614f79565b60001515614f7857600080fd5b5b5b5b5b5b5b50505050565b600080823b905060008111915050919050565b600080600090505b60138054905081101561502f57601381815481101515614fbb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156150225760019150615034565b8080600101915050614f9f565b600091505b5090565b60006150426153f2565b600060408051908101604052808661ffff1681526020018561ffff1681525091506001808390806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555050500390506150e3868261525d565b807fe8a3345b7ca502cc541c08a705987fa4c03d9f59c0427175387a64cbd8f46594868689604051808461ffff1661ffff1681526020018361ffff1661ffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a280925050509392505050565b60006001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083908060018154018082558091505090600182039060005260206000209060069182820401919006600502909192909190916101000a81548164ffffffffff021916908364ffffffffff1602179055500390506011819080600181540180825580915050906001820390600052602060002090600a9182820401919006600302909192909190916101000a81548162ffffff021916908362ffffff16021790555050505050565b81600c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506152b98282615173565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61012060405190810160405280600015158152602001600060ff168152602001600060ff168152602001600060ff1681526020016000600481111561536457fe5b8152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b8154818355818111156153c75760050160069004816005016006900483600052602060002091820191016153c6919061544e565b5b505050565b6040805190810160405280600067ffffffffffffffff1681526020016000151581525090565b6040805190810160405280600061ffff168152602001600061ffff1681525090565b81548183558181111561544957600f016010900481600f01601090048360005260206000209182019101615448919061544e565b5b505050565b61547091905b8082111561546c576000816000905550600101615454565b5090565b905600a165627a7a72305820c8069c2ac22ba1f7a118db5e6bba1fa58500c5769b9ce6483d1dc9db2a01c4cc0029

Swarm Source

bzzr://c8069c2ac22ba1f7a118db5e6bba1fa58500c5769b9ce6483d1dc9db2a01c4cc
Loading...
Loading
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.