ETH Price: $3,401.48 (+2.01%)

Divine Anarchy (DA)
 

Overview

TokenID

3115

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Official Divine Anarchy Collection. 10,011 Children of Anarchy.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DivineAnarchyToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-05
*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

interface IERC165 {
    
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
   
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}


interface IERC721Metadata is IERC721 {
    
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


interface IDivineAnarchyToken is IERC721, IERC721Metadata {

    function getTokenClass(uint256 _id) external view returns(uint256);
    function getTokenClassSupplyCap(uint256 _classId) external view returns(uint256);
    function getTokenClassCurrentSupply(uint256 _classId) external view returns(uint256);
    function getTokenClassVotingPower(uint256 _classId) external view returns(uint256);
    function getTokensMintedAtPresale(address account) external view returns(uint256);
    function isTokenClass(uint256 _id) external pure returns(bool);
    function isTokenClassMintable(uint256 _id) external pure returns(bool);
    function isAscensionApple(uint256 _id) external pure returns(bool);
    function isBadApple(uint256 _id) external pure returns(bool);
    function consumedAscensionApples(address account) external view returns(uint256);
    function airdropApples(uint256 amount, uint256 appleClass, address[] memory accounts) external;
}


interface IERC721Enumerable is IERC721 {
  
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) external view returns (uint256);
}

interface IERC721Receiver {
    
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

abstract contract ERC165 is IERC165 {
  
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

abstract contract Pausable is Context {
    
    event Paused(address account);
    event Unpaused(address account);
    bool private _paused;

    constructor() {
        _paused = false;
    }

    
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

   
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

library Address {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}


abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    
    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
   
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

library MerkleProof {
    
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

interface IOracle {

    function getRandomNumbers() external returns(uint256[][] memory);
    function wait() external pure returns(bool);
}

interface IAdminWallets {

    function getOwnerWallet() external pure returns(address);
    function getDiversityWallet() external pure returns(address);
    function getAssetBenderWallet() external pure returns(address);
    function getMarketingWallet() external pure returns(address);
    function getDivineTreasuryWallet() external pure returns(address);
}
contract DivineAnarchyToken is IDivineAnarchyToken, ERC165, Ownable, Pausable, ReentrancyGuard {

    using Address for address;
    using Strings for string;

    // Contract variables.
    IAdminWallets public adminWallets;
    IOracle public oracle;

    string private _baseURI;
    string private _name;
    string private _symbol;

    uint256 public constant THE_UNKNOWN = 0;
    uint256 public constant KING = 1;
    uint256 public constant ADAM_EVE = 2;
    uint256 public constant HUMAN_HERO = 3;
    uint256 public constant HUMAN_NEMESIS = 4; 
    uint256 public constant ASCENSION_APPLE = 5;
    uint256 public constant BAD_APPLE = 6;

    mapping(uint256 => uint256) private _tokenClass;
    mapping(uint256 => uint256) private _tokenClassSupplyCap;
    mapping(uint256 => uint256) private _tokenClassSupplyCurrent;
    mapping(uint256 => uint256) private _tokenClassVotingPower;

    uint256 private _mintedToTreasury;
    uint256 public  MAX_MINTED_TO_TREASURY = 270; 
    bool private _mintedToTreasuryHasFinished = false;

    uint256 private constant MAX_TOKENS_MINTED_BY_ADDRESS_PRESALE = 3;
    mapping(address => uint256) private _tokensMintedByAddressAtPresale;

    uint256 public MAX_TOKENS_MINTED_BY_ADDRESS = 4;
    mapping(address => uint256) private _tokensMintedByAddress;

    uint256 private _initAscensionApple = 10011;
    uint256 private _initBadApple = 13011;
    mapping(address => uint256) private _consumedAscensionApples;

    uint256 public  TOKEN_UNIT_PRICE = 0.09 ether;
    
    bytes32 public root = 0x71eb2b2e3c82409bb024f8b681245d3eea25dcfd0dc7bbe701ee18cf1e8ecbb1;
    bool isPresaleActive = true;

    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;
    
    bool public toRescue;
    bool public oracleForced;
    
    event oracleRescued(uint256[][] _tokens, uint256 timestamp, address receiver);
    event val(uint256[][] _tokens);

    // Contract constructor
    constructor (string memory name_, string memory symbol_, string memory baseURI_, address _adminwallets, address _oracle) {
        _name = name_;
        _symbol = symbol_;
        _baseURI = baseURI_;

        adminWallets = IAdminWallets(_adminwallets);
        oracle = IOracle(_oracle);

        _tokenClassSupplyCap[THE_UNKNOWN] = 1;
        _tokenClassSupplyCap[KING] = 8;
        _tokenClassSupplyCap[ADAM_EVE] = 2;
        _tokenClassSupplyCap[HUMAN_HERO] = 5000;
        _tokenClassSupplyCap[HUMAN_NEMESIS] = 5000; 
        _tokenClassSupplyCap[ASCENSION_APPLE] = 3000;
        _tokenClassSupplyCap[BAD_APPLE] = 1500;

        _tokenClassVotingPower[KING] = 2000;
        _tokenClassVotingPower[ADAM_EVE] = 1000;
        _tokenClassVotingPower[HUMAN_HERO] = 1;
        _tokenClassVotingPower[HUMAN_NEMESIS] = 1;
        
        _beforeTokenTransfer(address(0), adminWallets.getDivineTreasuryWallet(), 0);
        _balances[adminWallets.getDivineTreasuryWallet()] += 1;
        _owners[0] = adminWallets.getDivineTreasuryWallet();
        _tokenClass[0] = THE_UNKNOWN;
        _tokenClassSupplyCurrent[THE_UNKNOWN] = 1;
        
        _beforeTokenTransfer(address(0), adminWallets.getDiversityWallet(), 1);
        _beforeTokenTransfer(address(0), adminWallets.getAssetBenderWallet(), 2);
        _beforeTokenTransfer(address(0), adminWallets.getMarketingWallet(), 3);

        // Minting three kings for Diversity, AssetBender and Marketing.
        _balances[adminWallets.getDiversityWallet()] += 1;
        _balances[adminWallets.getAssetBenderWallet()] += 1;
        _balances[adminWallets.getMarketingWallet()] += 1;

        _owners[1] = adminWallets.getDiversityWallet();
        _owners[2] = adminWallets.getAssetBenderWallet();
        _owners[3] = adminWallets.getMarketingWallet();
        _owners[4] = adminWallets.getMarketingWallet();

        for(uint256 i = 1; i <= 5; i++) {
            _tokenClass[i] = KING;
        }
 
        _tokenClassSupplyCurrent[KING] = 3;
    }


    // Contract functions.
    function name() external view override returns (string memory) {
        return _name;
    }

    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        _baseURI = baseURI_;
    }

    function tokenURI(uint256 tokenId) external view override returns (string memory) {
        require(exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI;
        return string(abi.encodePacked(baseURI, Strings.toString(tokenId)));
    }

    function getAdminWalletsAddress() public view returns(address) {
        return address(adminWallets);
    }

    function getOracleAddress() public view returns(address) {
        return address(oracle);
    }

    function getTokenClass(uint256 _id) external view override returns(uint256) {
        return _tokenClass[_id];
    }

    function setTokenClass(uint _id) public pure returns(uint256) {
        // This can be erased if not necessary.
        if (_id == 0) { 
            return THE_UNKNOWN;
        } else if (_id >= 1 && _id <= 8) {
            return KING;
        } else if (_id == 9 && _id == 10) {
            return ADAM_EVE;
        } else if (_id >= 11 && _id <= 5010) {
            return HUMAN_HERO;
        } else if (_id >= 5011 && _id <= 10010) {
            return HUMAN_NEMESIS;
        } else if (_id >= 10011 && _id <= 13010) {
            return ASCENSION_APPLE;
        } else if (_id >= 13011 && _id <= 14510) {
            return BAD_APPLE;
        } else {
            revert('This ID does not belong to a valid token class');
        }
    }

    function getTokenClassSupplyCap(uint256 _classId) external view override returns(uint256) {
        return _tokenClassSupplyCap[_classId];
    }

    function getTokenClassCurrentSupply(uint256 _classId) external view override returns(uint256) {
        return _tokenClassSupplyCurrent[_classId];
    }

    function getTokenClassVotingPower(uint256 _classId) external view override returns(uint256) {
        return _tokenClassVotingPower[_classId];
    }

    function getTokensMintedAtPresale(address account) external view override returns(uint256) {
        return _tokensMintedByAddressAtPresale[account];
    }

    function isTokenClass(uint256 _id) public pure override returns(bool) {
        return (_id >= 0 && _id <= 14510);
    }

    function isTokenClassMintable(uint256 _id) public pure override returns(bool) {
        return (_id >= 0 && _id <= 10010);
    }

    function isAscensionApple(uint256 _id) public pure override returns(bool) {
        return (_id >= 10011 && _id <= 13010);
    }

    function isBadApple(uint256 _id) public pure override returns(bool) {
        return (_id >= 13011 && _id <= 14510);
    }

    function balanceOf(address account) public view returns(uint256) {
        return _balances[account];
    }

    function ownerOf(uint256 _id) public view returns(address) {
        return _owners[_id];
    }

    function consumedAscensionApples(address account) public view override returns(uint256) {
        return _consumedAscensionApples[account];
    }

    // Functions to comply with ERC721.
    function approve(address to, uint256 tokenId) external override {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _tokenApprovals[tokenId] = to;
        emit Approval(ownerOf(tokenId), to, tokenId);
    }

    function getApproved(uint256 tokenId) public view override returns (address operator) {
        require(exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) external override {
        require(_msgSender() != operator, "Error: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address account, address operator) public view override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    function getMintedToTreasuryFinished() public view returns(bool) {
        return _mintedToTreasuryHasFinished;
    }
    
    // Minting & airdropping.
    function airdropToTreasury(uint256[][] memory treasuryRandom) external onlyOwner {
        address divineTreasuryWallet = adminWallets.getDivineTreasuryWallet();
        require(!paused(), "Error: token transfer while paused");
        uint256[] memory tokenIds = treasuryRandom[0];
        uint256[] memory classIds = treasuryRandom[1];
        require(classIds.length == tokenIds.length);
        uint256 amount = tokenIds.length;
        require(_mintedToTreasury + amount <= MAX_MINTED_TO_TREASURY, 'Error: you are exceeding the max airdrop amount to Treasury');
        for (uint256 i = 0; i < tokenIds.length; i++) {
            _beforeTokenTransfer(address(0), divineTreasuryWallet, tokenIds[i]);
            _balances[divineTreasuryWallet] += 1;
            _owners[tokenIds[i]] = divineTreasuryWallet;
            _tokenClass[tokenIds[i]] = classIds[i];
            _tokenClassSupplyCurrent[classIds[i]] += 1;
            emit Transfer(address(0), divineTreasuryWallet, tokenIds[i]);
        }

        _mintedToTreasury += amount;

        if(_mintedToTreasury == MAX_MINTED_TO_TREASURY) {
            _mintedToTreasuryHasFinished = true;
        }
    }    

    function mint(address account, uint256 amount, bytes32[] memory proof) external nonReentrant payable {
        // Pre minting checks.
        address operator = _msgSender();

        require(msg.value >= TOKEN_UNIT_PRICE * amount, 'Make sure you can afford 0.09 eth per token');
        require(account != address(0), "Error: mint to the zero address");
        require(!paused(), "Error: token transfer while paused");
        require(_mintedToTreasuryHasFinished == true, 'Error: Wait until airdropping to Treasury has finished');
        if (isPresaleActive == true) {
            require(_tokensMintedByAddressAtPresale[operator] + amount <= MAX_TOKENS_MINTED_BY_ADDRESS_PRESALE, 'Error: you cannot mint more tokens at presale');
            require(MerkleProof.verify(proof, root, keccak256(abi.encodePacked(operator))), "you are not allowed to mint during presale");
        } else {
            require(_tokensMintedByAddress[operator] + amount <= MAX_TOKENS_MINTED_BY_ADDRESS, 'Error: you cannot mint more tokens');
        }

        uint256[][] memory randomList = getRand(amount);
        uint256[] memory tokensIds = randomList[0];
        uint256[] memory classIds = randomList[1];

        for (uint256 i = 0; i < amount; i++) {
            _beforeTokenTransfer(address(0), account, tokensIds[i]);

            _owners[tokensIds[i]] = account;
            _balances[account] += 1;
            _tokenClass[tokensIds[i]] = classIds[i];
            _tokenClassSupplyCurrent[classIds[i]] += 1;

            emit Transfer(address(0), account, tokensIds[i]);
        }

        // Post minting.
        if (isPresaleActive == true) {
            _tokensMintedByAddressAtPresale[operator] += amount;
        } else {
            _tokensMintedByAddress[operator] += amount;
        }
    }

    function transferFrom(address from, address to, uint256 id) public {
        // Pre transfer checks.
        address operator = _msgSender();
        require(!paused(), "Error: token transfer while paused");

        _transfer(from, to, operator, id);
    }

    function safeTransferFrom(address from, address to, uint256 id) public  {
        // Pre transfer checks.
        address operator = _msgSender();
        require(!paused(), "Error: token transfer while paused");

        _transfer(from, to, operator, id);
        // Post transfer: check IERC721Receiver.
        require(_checkOnERC721Received(from, to, id, ""), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function safeTransferFrom(address from, address to, uint256 id, bytes calldata data) public  {
        // Pre transfer checks.
        address operator = _msgSender();
        require(!paused(), "Error: token transfer while paused");

        _transfer(from, to, operator, id);

        // Post transfer: check IERC721Receiver with data input.
        require(_checkOnERC721Received(from, to, id, data), "ERC721: transfer to non ERC721Receiver implementer");

    }

    function _transfer(address from, address to, address operator, uint256 id) internal virtual {
        require(_owners[id] == from);
        require(from == operator || getApproved(id) == operator || isApprovedForAll(from, operator), "Error: caller is neither owner nor approved");
        _beforeTokenTransfer(from, to, id);

        // Transfer.
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[id] = to;

        emit Transfer(from, to, id);
        _tokenApprovals[id] = address(0);
    }

    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids) public {
        // Pre transfer checks.
        address operator = _msgSender();
        require(!paused(), "Error: token transfer while paused");

        if (from != operator && isApprovedForAll(from, operator) == false) {
            for (uint256 i = 0; i < ids.length; i++) {
                require(getApproved(ids[i]) == operator, 'Error: caller is neither owner nor approved');
            }
        }

        // Transfer.
        for (uint256 i = 0; i < ids.length; i++) {
            require(_owners[ids[i]] == from);
            _beforeTokenTransfer(from, to, ids[i]);
            _balances[from] -= 1;
            _balances[to] += 1;
            _owners[ids[i]] = to;

            emit Transfer(from, to, ids[i]);
            _tokenApprovals[ids[i]] = address(0);

            require(_checkOnERC721Received(from, to, ids[i], ""), "ERC721: transfer to non ERC721Receiver implementer");
        }
    }
    
    function burn(address account, uint256 id) public {
        // Pre burning checks.
        address operator = _msgSender();
        require(!paused(), "Error: token transfer while paused");

        require(account == operator || getApproved(id) == operator || isApprovedForAll(account, operator), "Error: caller is neither owner nor approved");
        require(account != address(0), "Error: burn from the zero address");
        require(_owners[id] == account, 'Error: account is not owner of token id');
         _beforeTokenTransfer(account, address(0), id);

        // Burn process.
        _owners[id] = address(0);
        _balances[account] -= 1;

        emit Transfer(account, address(0), id);

        // Post burning.
        _tokenApprovals[id] = address(0);
    }

    function burnBatch(address account, uint256[] memory ids) public {
        // Pre burning checks.
        address operator = _msgSender();
        require(!paused(), "Error: token transfer while paused");

        if (account != operator && isApprovedForAll(account, operator) == false) {
            for (uint256 i = 0; i < ids.length; i++) {
                require(getApproved(ids[i]) == operator, 'Error: caller is neither owner nor approved');
            }
        } 

        for (uint256 i = 0; i < ids.length; i++) {
            require(_owners[ids[i]] == account, 'Error: account is not owner of token id');
        }

        // Burn process.
        for (uint256 i = 0; i < ids.length; i++) {
            _beforeTokenTransfer(account, address(0), ids[i]);
            _owners[ids[i]] = address(0);
            _balances[account] -= 1;
            emit Transfer(account, address(0), ids[i]);
        }

        // Post burning.
        for (uint256 i=0; i < ids.length; i++) {
            _tokenApprovals[ids[i]] = address(0);
        }
    }

    function airdropApples(uint256 amount, uint256 appleClass, address[] memory accounts) external override onlyOwner {        
        require(accounts.length == amount, "amount not egal to list length");
        require(appleClass == ASCENSION_APPLE || appleClass == BAD_APPLE, 'Error: The token class is not an apple');
        require(_tokenClassSupplyCurrent[appleClass] + amount <= _tokenClassSupplyCap[appleClass], 'Error: You exceed the supply cap for this apple class');

        uint256 appleIdSetter;

        if (appleClass == ASCENSION_APPLE) {
            appleIdSetter = _initAscensionApple + _tokenClassSupplyCurrent[ASCENSION_APPLE];
        } else {
            appleIdSetter = _initBadApple + _tokenClassSupplyCurrent[BAD_APPLE];
        }

        for (uint256 i = 0; i < accounts.length; i++) {
            uint256 appleId = appleIdSetter + i;
            _beforeTokenTransfer(address(0), accounts[i], appleId);
            _owners[appleId] = accounts[i];
            _balances[accounts[i]] += 1;
            _tokenClass[appleId] = appleClass;
        } 

        _tokenClassSupplyCurrent[appleClass] += amount;
    }

    function ascensionAppleConsume(address account, uint256 appleId) external {
        address operator = _msgSender();

        require(isAscensionApple(appleId), 'Error: token provided is not ascension apple');
        require(_owners[appleId] == operator || getApproved(appleId) == operator || isApprovedForAll(account, operator), "Error: caller is neither owner nor approved");
        burn(account, appleId);
        _consumedAscensionApples[account] += 1;
    }

    function badAppleConsume(address account, uint256 appleId, uint256 tokenId) external {
        address operator = _msgSender();

        require(isBadApple(appleId), 'Error: token provided is not bad apple');
        require(isTokenClassMintable(tokenId), "Error: token provided is an apple");

        require(_owners[appleId] == operator || getApproved(appleId) == operator || isApprovedForAll(account, operator), "Error: caller is neither owner nor approved");

        burn(account, appleId);
        burn(account, tokenId);

        // Rewarding with 1 ascension apple.
        require(_tokenClassSupplyCurrent[ASCENSION_APPLE] + 1 <= _tokenClassSupplyCap[ASCENSION_APPLE], 'Error: You exceed the supply cap for this apple class');

        uint256 ascensionAppleId = _initAscensionApple + _tokenClassSupplyCurrent[ASCENSION_APPLE];
            
        _beforeTokenTransfer(address(0), account, ascensionAppleId);
        _owners[ascensionAppleId] = account;
        _balances[account] += 1;
        _tokenClassSupplyCurrent[ASCENSION_APPLE] += 1;
    }

    // Auxiliary functions.
    function exists(uint256 tokenId) public view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
        interfaceId == type(IERC721Enumerable).interfaceId ||
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual  returns (uint256) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual  returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual  returns (uint256) {
        require(index < totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }
    
       function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal   {
        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
    
    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);
        uint256[] memory result = new uint256[](tokenCount);
        for(uint256 i = 0; i < tokenCount; i++) {
            result[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return result;
    }
    
    function getData(address _account)external view returns(uint256[][] memory){
        uint256[][] memory data = new uint256[][](2);
        uint256[] memory arrayOfTokens = walletOfOwner(_account);
        uint256[] memory othersData = new uint256[](2);
        othersData[0] = totalSupply();
        othersData[1] = TOKEN_UNIT_PRICE;
        data[0] = arrayOfTokens;
        data[1] = othersData;
        return data;
    }
    
    function withdrawAll() external onlyOwner nonReentrant{
        uint256 balance = address(this).balance;
        require(balance > 0, "balance is 0.");
        (bool success,) = payable(msg.sender).call{value: balance}(new bytes(0));
        if(!success)revert("withdraw: transfer error");    
        
    }

    function withdraw(uint256 _amount) external onlyOwner nonReentrant{
        uint256 balance = address(this).balance;
        require(balance > 0, "balance is 0.");
        require(balance > _amount, "balance must be superior to amount");
        (bool success,) = payable(msg.sender).call{value: _amount}(new bytes(0));
        if(!success)revert("withdraw: transfer error");
    }
    
    function setPresale(bool _bool) external onlyOwner{
        isPresaleActive = _bool;
    }
    
    function setRoot(bytes32 _root) external onlyOwner {
        root = _root;
    }
    
    function setMaxMintedTreasury(uint256 _amount) external onlyOwner {
        MAX_MINTED_TO_TREASURY = _amount;
                if(_mintedToTreasury == MAX_MINTED_TO_TREASURY) {
            _mintedToTreasuryHasFinished = true;
        }
    }
    function setOracle(address _oracle) external onlyOwner{
        oracle = IOracle(_oracle);
    }
    
    function setAdminWallet(address _adminwallets) external onlyOwner {
        adminWallets = IAdminWallets(_adminwallets);
    }
    
    function oracleRescue(uint256 _amount) public view returns(uint256[][]memory) {
        uint256[][] memory array = new uint256[][](2);
        uint256[] memory tokenIds = new uint256[](_amount);
        uint256[] memory classIds = new uint256[](_amount);
        uint256 initRand = 0;
        uint256 each = 0;
        bytes32 bHash = blockhash(block.number - 1);

        while(initRand != _amount){
            uint256 randomNumber = uint256(
                uint256(
                    keccak256(
                        abi.encodePacked(
                            block.timestamp, 
                            bHash, 
                            _msgSender(), 
                            each
                        )
                    )
                ) % 10011
            );
            bool inArray;
            for(uint256 i = 0; i<initRand; i++){
                if(randomNumber == tokenIds[i]){
                    inArray = true;
                }
            }
            if(!exists(randomNumber) && !inArray){
                tokenIds[initRand] = randomNumber;
                classIds[initRand] = setTokenClass(randomNumber);
                initRand += 1;
            }
            each += 1;
        }
        array[0] = tokenIds;
        array[1] = classIds;
    return array;
       
    }
    
    function setRescue(bool _value) external onlyOwner {
        toRescue = _value;
    }
    
    function forceOracle(bool _value) external onlyOwner {
        oracleForced = _value;
    }
    
    function getRand(uint256 _amount) internal returns(uint256[][] memory ){
        if(!toRescue && !oracleForced){
            try oracle.getRandomNumbers() returns(uint256[][] memory array){
                return (array);
            } catch {
                uint256[][] memory arr = oracleRescue(_amount);
                emit oracleRescued(arr, block.timestamp, msg.sender);
                return arr;
            }
        } else if(!toRescue && oracleForced){
            return oracle.getRandomNumbers();
        } else {
            uint256[][] memory arr = oracleRescue(_amount);
            emit oracleRescued(arr, block.timestamp, msg.sender);
            return arr;        
        }
    }
    
    function setMaxTokenMintedByAddress(uint256 _amount) external onlyOwner{
        MAX_TOKENS_MINTED_BY_ADDRESS = _amount;
    }
    
    function setNewTokenPrice(uint256 _newPrice) external onlyOwner{
        TOKEN_UNIT_PRICE = _newPrice;
    }
    
    function getPresaleState()external view returns(bool){
        return isPresaleActive;
    }
    
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_adminwallets","type":"address"},{"internalType":"address","name":"_oracle","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[][]","name":"_tokens","type":"uint256[][]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"oracleRescued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[][]","name":"_tokens","type":"uint256[][]"}],"name":"val","type":"event"},{"inputs":[],"name":"ADAM_EVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASCENSION_APPLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BAD_APPLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HUMAN_HERO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HUMAN_NEMESIS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KING","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINTED_TO_TREASURY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS_MINTED_BY_ADDRESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"THE_UNKNOWN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_UNIT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminWallets","outputs":[{"internalType":"contract IAdminWallets","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"appleClass","type":"uint256"},{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"airdropApples","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[][]","name":"treasuryRandom","type":"uint256[][]"}],"name":"airdropToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"appleId","type":"uint256"}],"name":"ascensionAppleConsume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"appleId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"badAppleConsume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"consumedAscensionApples","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"forceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdminWalletsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getData","outputs":[{"internalType":"uint256[][]","name":"","type":"uint256[][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintedToTreasuryFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOracleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPresaleState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getTokenClass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_classId","type":"uint256"}],"name":"getTokenClassCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_classId","type":"uint256"}],"name":"getTokenClassSupplyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_classId","type":"uint256"}],"name":"getTokenClassVotingPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTokensMintedAtPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"isAscensionApple","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"isBadApple","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"isTokenClass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"isTokenClassMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleForced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"oracleRescue","outputs":[{"internalType":"uint256[][]","name":"","type":"uint256[][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adminwallets","type":"address"}],"name":"setAdminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxMintedTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTokenMintedByAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setNewTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setRescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setTokenClass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toRescue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261010e600c55600d805460ff199081169091556004600f5561271b6011556132d360125567013fbe85edc900006014557f71eb2b2e3c82409bb024f8b681245d3eea25dcfd0dc7bbe701ee18cf1e8ecbb16015556016805490911660011790553480156200007157600080fd5b50604051620060c7380380620060c78339810160408190526200009491620010dd565b6200009f3362000c8b565b6000805460ff60a01b19169055600180558451620000c590600590602088019062000f3e565b508351620000db90600690602087019062000f3e565b508251620000f190600490602086019062000f3e565b50600280546001600160a01b03199081166001600160a01b038581169182178455600380549093169085161790915560017f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c781905560087fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f557f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea9041929092556113887f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d264558190557f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b855610bb87f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdb556105dc7f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc555600a60209081526107d07fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc7556103e87fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba8557fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa39759839055600460008181527fe1eb2b2161a492c07c5a334e48012567cba93ec021043f53c1955516a3c5a841949094556040805163a09ec3ef60e01b815290516200033f95949363a09ec3ef9383810193919291829003018186803b158015620002fc57600080fd5b505afa15801562000311573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003379190620010b8565b600062000cdb565b600160186000600260009054906101000a90046001600160a01b03166001600160a01b031663a09ec3ef6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039457600080fd5b505afa158015620003a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cf9190620010b8565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825462000400919062001194565b90915550506002546040805163a09ec3ef60e01b815290516001600160a01b039092169163a09ec3ef91600480820192602092909190829003018186803b1580156200044b57600080fd5b505afa15801562000460573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004869190620010b8565b60008080527fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b80546001600160a01b0319166001600160a01b039384161790557f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8190556009602090815260017fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b5560025460408051636528961560e11b815290516200059695929092169263ca512c2a92600480840193829003018186803b1580156200055357600080fd5b505afa15801562000568573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058e9190620010b8565b600162000cdb565b6200062e6000600260009054906101000a90046001600160a01b03166001600160a01b0316636c7162d26040518163ffffffff1660e01b815260040160206040518083038186803b158015620005eb57600080fd5b505afa15801562000600573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006269190620010b8565b600262000cdb565b620006c66000600260009054906101000a90046001600160a01b03166001600160a01b0316631d4e49eb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200068357600080fd5b505afa15801562000698573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006be9190620010b8565b600362000cdb565b600160186000600260009054906101000a90046001600160a01b03166001600160a01b031663ca512c2a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200071b57600080fd5b505afa15801562000730573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007569190620010b8565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825462000787919062001194565b92505081905550600160186000600260009054906101000a90046001600160a01b03166001600160a01b0316636c7162d26040518163ffffffff1660e01b815260040160206040518083038186803b158015620007e357600080fd5b505afa158015620007f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200081e9190620010b8565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546200084f919062001194565b92505081905550600160186000600260009054906101000a90046001600160a01b03166001600160a01b0316631d4e49eb6040518163ffffffff1660e01b815260040160206040518083038186803b158015620008ab57600080fd5b505afa158015620008c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e69190620010b8565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825462000917919062001194565b909155505060025460408051636528961560e11b815290516001600160a01b039092169163ca512c2a91600480820192602092909190829003018186803b1580156200096257600080fd5b505afa15801562000977573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200099d9190620010b8565b6001600052601760209081527ff36d6bc9642eb6fb6ee9998b09ce990566df752ab06e11f8de7ab633bbd57b8f80546001600160a01b0319166001600160a01b0393841617905560025460408051633638b16960e11b815290519190931692636c7162d2926004808301939192829003018186803b15801562000a1f57600080fd5b505afa15801562000a34573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a5a9190620010b8565b60026000819052601760209081527fc52df653038b2ad477d8d97f1ddd63cfd138847b628ad8a7b89c109c3f8782ca80546001600160a01b0319166001600160a01b03948516179055905460408051631d4e49eb60e01b815290519190931692631d4e49eb926004808301939192829003018186803b15801562000add57600080fd5b505afa15801562000af2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b189190620010b8565b6003600052601760209081527fd8b2bced50346359af71f91110b86cdf684b6ab1c6ca64a7583c044d5c24de5c80546001600160a01b0319166001600160a01b0393841617905560025460408051631d4e49eb60e01b815290519190931692631d4e49eb926004808301939192829003018186803b15801562000b9a57600080fd5b505afa15801562000baf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bd59190620010b8565b600460005260176020527f68052a315987b3c92fe6f7df77391bc5a825cabe4950d34f36f8f4e8a6abcb4d80546001600160a01b0319166001600160a01b039290921691909117905560015b6005811162000c51576000818152600760205260409020600190558062000c488162001206565b91505062000c21565b5050600160005250506009602052505060037f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36556200127c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831662000d395762000d3381601d80546000838152601e60205260408120829055600182018355919091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0155565b62000d5f565b816001600160a01b0316836001600160a01b03161462000d5f5762000d5f838262000dd6565b6001600160a01b03821662000d7e5762000d798162000e84565b505050565b826001600160a01b0316826001600160a01b03161462000d79576001600160a01b0391909116600090815260186020908152604080832054601b83528184208185528352818420859055938352601c90915290205550565b6001600160a01b03821660009081526018602052604081205462000dfd90600190620011af565b6000838152601c602052604090205490915080821462000e51576001600160a01b0384166000908152601b602090815260408083208584528252808320548484528184208190558352601c90915290208190555b506000918252601c602090815260408084208490556001600160a01b039094168352601b81528383209183525290812055565b601d5460009062000e9890600190620011af565b6000838152601e6020526040812054601d805493945090928490811062000ec35762000ec362001250565b9060005260206000200154905080601d838154811062000ee75762000ee762001250565b6000918252602080832090910192909255828152601e9091526040808220849055858252812055601d80548062000f225762000f226200123a565b6001900381819060005260206000200160009055905550505050565b82805462000f4c90620011c9565b90600052602060002090601f01602090048101928262000f70576000855562000fbb565b82601f1062000f8b57805160ff191683800117855562000fbb565b8280016001018555821562000fbb579182015b8281111562000fbb57825182559160200191906001019062000f9e565b5062000fc992915062000fcd565b5090565b5b8082111562000fc9576000815560010162000fce565b80516001600160a01b038116811462000ffc57600080fd5b919050565b600082601f8301126200101357600080fd5b81516001600160401b038082111562001030576200103062001266565b604051601f8301601f19908116603f011681019082821181831017156200105b576200105b62001266565b816040528381526020925086838588010111156200107857600080fd5b600091505b838210156200109c57858201830151818301840152908201906200107d565b83821115620010ae5760008385830101525b9695505050505050565b600060208284031215620010cb57600080fd5b620010d68262000fe4565b9392505050565b600080600080600060a08688031215620010f657600080fd5b85516001600160401b03808211156200110e57600080fd5b6200111c89838a0162001001565b965060208801519150808211156200113357600080fd5b6200114189838a0162001001565b955060408801519150808211156200115857600080fd5b50620011678882890162001001565b935050620011786060870162000fe4565b9150620011886080870162000fe4565b90509295509295909350565b60008219821115620011aa57620011aa62001224565b500190565b600082821015620011c457620011c462001224565b500390565b600181811c90821680620011de57607f821691505b602082108114156200120057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200121d576200121d62001224565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b614e3b806200128c6000396000f3fe6080604052600436106104315760003560e01c8063853828b611610229578063c235150d1161012e578063dab5f340116100b6578063e985e9c51161007a578063e985e9c514610d15578063ebf0c71714610d35578063f2a6556714610d4b578063f2fde38b14610d69578063f73841ce14610d8957600080fd5b8063dab5f34014610c92578063e355063214610cb2578063e367099314610cd5578063e643d86414610ceb578063e78c627e14610d0057600080fd5b8063cd3fe6fd116100fd578063cd3fe6fd14610bfe578063d41edb1814610c13578063d4556a0414610c33578063d5be08af14610c52578063d6a714d514610c7257600080fd5b8063c235150d14610b85578063c54e73e314610b9b578063c87b56dd14610bbb578063c955deba14610bdb57600080fd5b80639fa5fa88116101b1578063b18ca2be11610180578063b18ca2be14610af0578063b2dc5dc314610b10578063b7e2f80814610b30578063b88d4fde14610b45578063bd6a4b4e14610b6557600080fd5b80639fa5fa8814610a65578063a22cb46514610a85578063a714e56d14610aa5578063b18b78dd14610ad257600080fd5b80639168f7f9116101f85780639168f7f9146109d057806395d89b41146109f0578063979c7d6514610a055780639dc29fac14610a255780639e6a054314610a4557600080fd5b8063853828b61461095b57806389cba7f7146109705780638da5cb5b146109855780638fa2f9eb146109a357600080fd5b8063438b63001161033a578063641ce140116102c25780637adbf973116102865780637adbf973146108b35780637d8d1667146108d35780637dc0d1d0146108ed578063833891d31461090d57806383b215361461094357600080fd5b8063641ce140146107ff578063659e84901461081257806370a0823114610832578063715018a61461086857806378dd69f71461087d57600080fd5b80634f6ccce7116103095780634f6ccce71461074a57806355f804b31461076a5780635c975abb1461078a578063601ca23f146107a95780636352211e146107c957600080fd5b8063438b6300146106ba578063474e92b5146106e757806349fb340d146106fc5780634f558e791461071257600080fd5b806323b872dd116103bd5780632f745c591161038c5780632f745c591461060057806330f7d71b14610620578063350829331461064d57806338266b221461066d57806342842e0e1461069a57600080fd5b806323b872dd1461058b57806328412d70146105ab5780632872b052146105c05780632e1a7d4d146105e057600080fd5b8063095ea7b311610404578063095ea7b3146104e757806315ed1fd31461050757806318160ddd146105275780632153f88414610546578063217997951461055e57600080fd5b806301ffc9a714610436578063034601ec1461046b57806306fdde031461048d578063081812fc146104af575b600080fd5b34801561044257600080fd5b506104566104513660046146d7565b610da9565b60405190151581526020015b60405180910390f35b34801561047757600080fd5b5061048b6104863660046141ce565b610e16565b005b34801561049957600080fd5b506104a2611112565b60405161046291906149e7565b3480156104bb57600080fd5b506104cf6104ca3660046146be565b6111a4565b6040516001600160a01b039091168152602001610462565b3480156104f357600080fd5b5061048b6105023660046143c5565b611239565b34801561051357600080fd5b5061048b6105223660046146a3565b6113a5565b34801561053357600080fd5b50601d545b604051908152602001610462565b34801561055257600080fd5b50600d5460ff16610456565b34801561056a57600080fd5b506105386105793660046146be565b60009081526009602052604090205490565b34801561059757600080fd5b5061048b6105a6366004614262565b6113e2565b3480156105b757600080fd5b50610538600181565b3480156105cc57600080fd5b5061048b6105db3660046144a6565b611420565b3480156105ec57600080fd5b5061048b6105fb3660046146be565b611688565b34801561060c57600080fd5b5061053861061b3660046143c5565b61182a565b34801561062c57600080fd5b5061053861063b3660046146be565b60009081526007602052604090205490565b34801561065957600080fd5b5061048b610668366004614154565b6118ce565b34801561067957600080fd5b5061068d610688366004614154565b61191a565b604051610462919061498e565b3480156106a657600080fd5b5061048b6106b5366004614262565b611a0d565b3480156106c657600080fd5b506106da6106d5366004614154565b611a7c565b60405161046291906149d4565b3480156106f357600080fd5b50610538600081565b34801561070857600080fd5b50610538600f5481565b34801561071e57600080fd5b5061045661072d3660046146be565b6000908152601760205260409020546001600160a01b0316151590565b34801561075657600080fd5b506105386107653660046146be565b611b33565b34801561077657600080fd5b5061048b610785366004614711565b611bc6565b34801561079657600080fd5b50600054600160a01b900460ff16610456565b3480156107b557600080fd5b506002546104cf906001600160a01b031681565b3480156107d557600080fd5b506104cf6107e43660046146be565b6000908152601760205260409020546001600160a01b031690565b61048b61080d3660046143f1565b611c07565b34801561081e57600080fd5b5061068d61082d3660046146be565b6121b1565b34801561083e57600080fd5b5061053861084d366004614154565b6001600160a01b031660009081526018602052604090205490565b34801561087457600080fd5b5061048b612407565b34801561088957600080fd5b50610538610898366004614154565b6001600160a01b03166000908152600e602052604090205490565b3480156108bf57600080fd5b5061048b6108ce366004614154565b61243d565b3480156108df57600080fd5b50601f546104569060ff1681565b3480156108f957600080fd5b506003546104cf906001600160a01b031681565b34801561091957600080fd5b50610538610928366004614154565b6001600160a01b031660009081526013602052604090205490565b34801561094f57600080fd5b5060165460ff16610456565b34801561096757600080fd5b5061048b612489565b34801561097c57600080fd5b50610538600381565b34801561099157600080fd5b506000546001600160a01b03166104cf565b3480156109af57600080fd5b506105386109be3660046146be565b6000908152600a602052604090205490565b3480156109dc57600080fd5b506104566109eb3660046146be565b6125d0565b3480156109fc57600080fd5b506104a26125e8565b348015610a1157600080fd5b5061048b610a203660046146a3565b6125f7565b348015610a3157600080fd5b5061048b610a403660046143c5565b61263b565b348015610a5157600080fd5b5061048b610a603660046144db565b6127ff565b348015610a7157600080fd5b5061048b610a803660046146be565b612b6d565b348015610a9157600080fd5b5061048b610aa0366004614390565b612bb7565b348015610ab157600080fd5b50610538610ac03660046146be565b60009081526008602052604090205490565b348015610ade57600080fd5b506003546001600160a01b03166104cf565b348015610afc57600080fd5b5061048b610b0b3660046143c5565b612c8c565b348015610b1c57600080fd5b5061048b610b2b366004614341565b612da1565b348015610b3c57600080fd5b50610538600281565b348015610b5157600080fd5b5061048b610b603660046142a3565b613053565b348015610b7157600080fd5b5061048b610b803660046147a5565b6130e9565b348015610b9157600080fd5b50610538600c5481565b348015610ba757600080fd5b5061048b610bb63660046146a3565b6133b7565b348015610bc757600080fd5b506104a2610bd63660046146be565b6133f4565b348015610be757600080fd5b50610456610bf63660046146be565b61271a101590565b348015610c0a57600080fd5b50610538600481565b348015610c1f57600080fd5b5061048b610c2e3660046146be565b613534565b348015610c3f57600080fd5b50601f5461045690610100900460ff1681565b348015610c5e57600080fd5b50610456610c6d3660046146be565b613563565b348015610c7e57600080fd5b5061048b610c8d3660046146be565b61357b565b348015610c9e57600080fd5b5061048b610cad3660046146be565b6135aa565b348015610cbe57600080fd5b50610456610ccd3660046146be565b6138ae101590565b348015610ce157600080fd5b5061053860145481565b348015610cf757600080fd5b50610538600581565b348015610d0c57600080fd5b50610538600681565b348015610d2157600080fd5b50610456610d30366004614195565b6135d9565b348015610d4157600080fd5b5061053860155481565b348015610d5757600080fd5b506002546001600160a01b03166104cf565b348015610d7557600080fd5b5061048b610d84366004614154565b613607565b348015610d9557600080fd5b50610538610da43660046146be565b61369f565b60006001600160e01b0319821663780e9d6360e01b1480610dda57506001600160e01b03198216634aefe8ef60e01b145b80610df557506001600160e01b03198216635b5e139f60e01b145b80610e1057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000543390600160a01b900460ff1615610e4b5760405162461bcd60e51b8152600401610e4290614a4c565b60405180910390fd5b806001600160a01b0316856001600160a01b031614158015610e745750610e7285826135d9565b155b15610ee95760005b82811015610ee757816001600160a01b0316610eaf858584818110610ea357610ea3614d6e565b905060200201356111a4565b6001600160a01b031614610ed55760405162461bcd60e51b8152600401610e4290614b96565b80610edf81614cfd565b915050610e7c565b505b60005b8281101561110a57856001600160a01b031660176000868685818110610f1457610f14614d6e565b60209081029290920135835250810191909152604001600020546001600160a01b031614610f4157600080fd5b610f648686868685818110610f5857610f58614d6e565b905060200201356137d1565b6001600160a01b0386166000908152601860205260408120805460019290610f8d908490614c7f565b90915550506001600160a01b0385166000908152601860205260408120805460019290610fbb908490614c34565b9091555085905060176000868685818110610fd857610fd8614d6e565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083838281811061102357611023614d6e565b90506020020135856001600160a01b0316876001600160a01b0316600080516020614de683398151915260405160405180910390a460006019600086868581811061107057611070614d6e565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506110dc86868686858181106110c0576110c0614d6e565b90506020020135604051806020016040528060008152506138c2565b6110f85760405162461bcd60e51b8152600401610e42906149fa565b8061110281614cfd565b915050610eec565b505050505050565b60606005805461112190614cc2565b80601f016020809104026020016040519081016040528092919081815260200182805461114d90614cc2565b801561119a5780601f1061116f5761010080835404028352916020019161119a565b820191906000526020600020905b81548152906001019060200180831161117d57829003601f168201915b5050505050905090565b6000818152601760205260408120546001600160a01b031661121d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610e42565b506000908152601960205260409020546001600160a01b031690565b6000818152601760205260409020546001600160a01b039081169083168114156112af5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610e42565b336001600160a01b03821614806112cb57506112cb81336135d9565b61133d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610e42565b600082815260196020908152604080832080546001600160a01b0319166001600160a01b038881169182179092556017909352818420549151869492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000546001600160a01b031633146113cf5760405162461bcd60e51b8152600401610e4290614ae3565b601f805460ff1916911515919091179055565b6000543390600160a01b900460ff161561140e5760405162461bcd60e51b8152600401610e4290614a4c565b61141a848483856139d0565b50505050565b3361142a83613563565b6114855760405162461bcd60e51b815260206004820152602660248201527f4572726f723a20746f6b656e2070726f7669646564206973206e6f7420626164604482015265206170706c6560d01b6064820152608401610e42565b6114918261271a101590565b6114e75760405162461bcd60e51b815260206004820152602160248201527f4572726f723a20746f6b656e2070726f766964656420697320616e206170706c6044820152606560f81b6064820152608401610e42565b6000838152601760205260409020546001600160a01b03828116911614806115285750806001600160a01b031661151d846111a4565b6001600160a01b0316145b80611538575061153884826135d9565b6115545760405162461bcd60e51b8152600401610e4290614b96565b61155e848461263b565b611568848361263b565b60056000527f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdb546009602052600080516020614dc6833981519152546115af906001614c34565b11156115cd5760405162461bcd60e51b8152600401610e4290614a8e565b600560009081526009602052600080516020614dc6833981519152546011546115f69190614c34565b9050611604600086836137d1565b600081815260176020908152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526018909152812080546001929061164b908490614c34565b9091555050600560009081526009602052600080516020614dc683398151915280546001929061167c908490614c34565b90915550505050505050565b6000546001600160a01b031633146116b25760405162461bcd60e51b8152600401610e4290614ae3565b600260015414156116d55760405162461bcd60e51b8152600401610e4290614b5f565b600260015547806117185760405162461bcd60e51b815260206004820152600d60248201526c3130b630b731b29034b990181760991b6044820152606401610e42565b8181116117725760405162461bcd60e51b815260206004820152602260248201527f62616c616e6365206d757374206265207375706572696f7220746f20616d6f756044820152611b9d60f21b6064820152608401610e42565b60408051600080825260208201909252339084906040516117939190614906565b60006040518083038185875af1925050503d80600081146117d0576040519150601f19603f3d011682016040523d82523d6000602084013e6117d5565b606091505b50509050806118215760405162461bcd60e51b81526020600482015260186024820152773bb4ba34323930bb9d103a3930b739b332b91032b93937b960411b6044820152606401610e42565b50506001805550565b6001600160a01b03821660009081526018602052604081205482106118a55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610e42565b506001600160a01b03919091166000908152601b60209081526040808320938352929052205490565b6000546001600160a01b031633146118f85760405162461bcd60e51b8152600401610e4290614ae3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b604080516002808252606082810190935260009190816020015b6060815260200190600190039081611934579050509050600061195684611a7c565b6040805160028082526060820183529293506000929091602083019080368337019050509050611985601d5490565b8160008151811061199857611998614d6e565b602002602001018181525050601454816001815181106119ba576119ba614d6e565b60200260200101818152505081836000815181106119da576119da614d6e565b602002602001018190525080836001815181106119f9576119f9614d6e565b602090810291909101015250909392505050565b6000543390600160a01b900460ff1615611a395760405162461bcd60e51b8152600401610e4290614a4c565b611a45848483856139d0565b611a60848484604051806020016040528060008152506138c2565b61141a5760405162461bcd60e51b8152600401610e42906149fa565b60606000611a9f836001600160a01b031660009081526018602052604090205490565b90506000816001600160401b03811115611abb57611abb614d84565b604051908082528060200260200182016040528015611ae4578160200160208202803683370190505b50905060005b82811015611b2b57611afc858261182a565b828281518110611b0e57611b0e614d6e565b602090810291909101015280611b2381614cfd565b915050611aea565b509392505050565b6000611b3e601d5490565b8210611ba15760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610e42565b601d8281548110611bb457611bb4614d6e565b90600052602060002001549050919050565b6000546001600160a01b03163314611bf05760405162461bcd60e51b8152600401610e4290614ae3565b8051611c03906004906020840190614039565b5050565b60026001541415611c2a5760405162461bcd60e51b8152600401610e4290614b5f565b60026001556014543390611c3f908490614c60565b341015611ca25760405162461bcd60e51b815260206004820152602b60248201527f4d616b65207375726520796f752063616e206166666f726420302e303920657460448201526a34103832b9103a37b5b2b760a91b6064820152608401610e42565b6001600160a01b038416611cf85760405162461bcd60e51b815260206004820152601f60248201527f4572726f723a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e42565b600054600160a01b900460ff1615611d225760405162461bcd60e51b8152600401610e4290614a4c565b600d5460ff161515600114611d985760405162461bcd60e51b815260206004820152603660248201527f4572726f723a205761697420756e74696c2061697264726f7070696e6720746f60448201527508151c99585cdd5c9e481a185cc8199a5b9a5cda195960521b6064820152608401610e42565b60165460ff16151560011415611eda576001600160a01b0381166000908152600e6020526040902054600390611dcf908590614c34565b1115611e335760405162461bcd60e51b815260206004820152602d60248201527f4572726f723a20796f752063616e6e6f74206d696e74206d6f726520746f6b6560448201526c6e732061742070726573616c6560981b6064820152608401610e42565b6015546040516bffffffffffffffffffffffff19606084901b166020820152611e7691849160340160405160208183030381529060405280519060200120613b28565b611ed55760405162461bcd60e51b815260206004820152602a60248201527f796f7520617265206e6f7420616c6c6f77656420746f206d696e7420647572696044820152696e672070726573616c6560b01b6064820152608401610e42565b611f5a565b600f546001600160a01b038216600090815260106020526040902054611f01908590614c34565b1115611f5a5760405162461bcd60e51b815260206004820152602260248201527f4572726f723a20796f752063616e6e6f74206d696e74206d6f726520746f6b656044820152616e7360f01b6064820152608401610e42565b6000611f6584613b3e565b9050600081600081518110611f7c57611f7c614d6e565b60200260200101519050600082600181518110611f9b57611f9b614d6e565b6020026020010151905060005b8681101561213257611fd5600089858481518110611fc857611fc8614d6e565b60200260200101516137d1565b8760176000858481518110611fec57611fec614d6e565b6020908102919091018101518252818101929092526040908101600090812080546001600160a01b0319166001600160a01b03958616179055928b16835260189091528120805460019290612042908490614c34565b9250508190555081818151811061205b5761205b614d6e565b60200260200101516007600085848151811061207957612079614d6e565b60200260200101518152602001908152602001600020819055506001600960008484815181106120ab576120ab614d6e565b6020026020010151815260200190815260200160002060008282546120d09190614c34565b925050819055508281815181106120e9576120e9614d6e565b6020026020010151886001600160a01b031660006001600160a01b0316600080516020614de683398151915260405160405180910390a48061212a81614cfd565b915050611fa8565b5060165460ff16151560011415612176576001600160a01b0384166000908152600e60205260408120805488929061216b908490614c34565b909155506121a49050565b6001600160a01b0384166000908152601060205260408120805488929061219e908490614c34565b90915550505b5050600180555050505050565b604080516002808252606082810190935260009190816020015b60608152602001906001900390816121cb5790505090506000836001600160401b038111156121fc576121fc614d84565b604051908082528060200260200182016040528015612225578160200160208202803683370190505b5090506000846001600160401b0381111561224257612242614d84565b60405190808252806020026020018201604052801561226b578160200160208202803683370190505b5090506000808061227d600143614c7f565b4090505b8783146123bd57600061271b4283336040805160208101949094528301919091526bffffffffffffffffffffffff19606091821b1690820152607481018590526094016040516020818303038152906040528051906020012060001c6122e79190614d18565b90506000805b8581101561232d5787818151811061230757612307614d6e565b602002602001015183141561231b57600191505b8061232581614cfd565b9150506122ed565b506000828152601760205260409020546001600160a01b0316158015612351575080155b156123a9578187868151811061236957612369614d6e565b60200260200101818152505061237e8261369f565b86868151811061239057612390614d6e565b60209081029190910101526123a6600186614c34565b94505b6123b4600185614c34565b93505050612281565b84866000815181106123d1576123d1614d6e565b602002602001018190525083866001815181106123f0576123f0614d6e565b602090810291909101015250939695505050505050565b6000546001600160a01b031633146124315760405162461bcd60e51b8152600401610e4290614ae3565b61243b6000613cee565b565b6000546001600160a01b031633146124675760405162461bcd60e51b8152600401610e4290614ae3565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124b35760405162461bcd60e51b8152600401610e4290614ae3565b600260015414156124d65760405162461bcd60e51b8152600401610e4290614b5f565b600260015547806125195760405162461bcd60e51b815260206004820152600d60248201526c3130b630b731b29034b990181760991b6044820152606401610e42565b604080516000808252602082019092523390839060405161253a9190614906565b60006040518083038185875af1925050503d8060008114612577576040519150601f19603f3d011682016040523d82523d6000602084013e61257c565b606091505b50509050806125c85760405162461bcd60e51b81526020600482015260186024820152773bb4ba34323930bb9d103a3930b739b332b91032b93937b960411b6044820152606401610e42565b505060018055565b600061271b8210158015610e105750506132d2101590565b60606006805461112190614cc2565b6000546001600160a01b031633146126215760405162461bcd60e51b8152600401610e4290614ae3565b601f80549115156101000261ff0019909216919091179055565b6000543390600160a01b900460ff16156126675760405162461bcd60e51b8152600401610e4290614a4c565b806001600160a01b0316836001600160a01b031614806126a05750806001600160a01b0316612695836111a4565b6001600160a01b0316145b806126b057506126b083826135d9565b6126cc5760405162461bcd60e51b8152600401610e4290614b96565b6001600160a01b03831661272c5760405162461bcd60e51b815260206004820152602160248201527f4572726f723a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610e42565b6000828152601760205260409020546001600160a01b038481169116146127655760405162461bcd60e51b8152600401610e4290614b18565b612771836000846137d1565b600082815260176020908152604080832080546001600160a01b03191690556001600160a01b0386168352601890915281208054600192906127b4908490614c7f565b909155505060405182906000906001600160a01b03861690600080516020614de6833981519152908390a450600090815260196020526040902080546001600160a01b031916905550565b6000546001600160a01b031633146128295760405162461bcd60e51b8152600401610e4290614ae3565b6002546040805163a09ec3ef60e01b815290516000926001600160a01b03169163a09ec3ef916004808301926020929190829003018186803b15801561286e57600080fd5b505afa158015612882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a69190614178565b600054909150600160a01b900460ff16156128d35760405162461bcd60e51b8152600401610e4290614a4c565b6000826000815181106128e8576128e8614d6e565b6020026020010151905060008360018151811061290757612907614d6e565b60200260200101519050815181511461291f57600080fd5b8151600c54600b54612932908390614c34565b11156129a65760405162461bcd60e51b815260206004820152603b60248201527f4572726f723a20796f752061726520657863656564696e6720746865206d617860448201527f2061697264726f7020616d6f756e7420746f20547265617375727900000000006064820152608401610e42565b60005b8351811015612b34576129ca600086868481518110611fc857611fc8614d6e565b6001600160a01b03851660009081526018602052604081208054600192906129f3908490614c34565b925050819055508460176000868481518110612a1157612a11614d6e565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828181518110612a5d57612a5d614d6e565b602002602001015160076000868481518110612a7b57612a7b614d6e565b6020026020010151815260200190815260200160002081905550600160096000858481518110612aad57612aad614d6e565b602002602001015181526020019081526020016000206000828254612ad29190614c34565b92505081905550838181518110612aeb57612aeb614d6e565b6020026020010151856001600160a01b031660006001600160a01b0316600080516020614de683398151915260405160405180910390a480612b2c81614cfd565b9150506129a9565b5080600b6000828254612b479190614c34565b9091555050600c54600b541415612b6657600d805460ff191660011790555b5050505050565b6000546001600160a01b03163314612b975760405162461bcd60e51b8152600401610e4290614ae3565b600c819055600b54811415612bb457600d805460ff191660011790555b50565b336001600160a01b0383161415612c205760405162461bcd60e51b815260206004820152602760248201527f4572726f723a2073657474696e6720617070726f76616c20737461747573206660448201526637b91039b2b63360c91b6064820152608401610e42565b336000818152601a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b33612c96826125d0565b612cf75760405162461bcd60e51b815260206004820152602c60248201527f4572726f723a20746f6b656e2070726f7669646564206973206e6f742061736360448201526b656e73696f6e206170706c6560a01b6064820152608401610e42565b6000828152601760205260409020546001600160a01b0382811691161480612d385750806001600160a01b0316612d2d836111a4565b6001600160a01b0316145b80612d485750612d4883826135d9565b612d645760405162461bcd60e51b8152600401610e4290614b96565b612d6e838361263b565b6001600160a01b0383166000908152601360205260408120805460019290612d97908490614c34565b9091555050505050565b6000543390600160a01b900460ff1615612dcd5760405162461bcd60e51b8152600401610e4290614a4c565b806001600160a01b0316836001600160a01b031614158015612df65750612df483826135d9565b155b15612e6d5760005b8251811015612e6b57816001600160a01b0316612e33848381518110612e2657612e26614d6e565b60200260200101516111a4565b6001600160a01b031614612e595760405162461bcd60e51b8152600401610e4290614b96565b80612e6381614cfd565b915050612dfe565b505b60005b8251811015612eec57836001600160a01b031660176000858481518110612e9957612e99614d6e565b6020908102919091018101518252810191909152604001600020546001600160a01b031614612eda5760405162461bcd60e51b8152600401610e4290614b18565b80612ee481614cfd565b915050612e70565b5060005b8251811015612fe157612f11846000858481518110611fc857611fc8614d6e565b600060176000858481518110612f2957612f29614d6e565b6020908102919091018101518252818101929092526040908101600090812080546001600160a01b0319166001600160a01b03958616179055928716835260189091528120805460019290612f7f908490614c7f565b92505081905550828181518110612f9857612f98614d6e565b602002602001015160006001600160a01b0316856001600160a01b0316600080516020614de683398151915260405160405180910390a480612fd981614cfd565b915050612ef0565b5060005b825181101561141a5760006019600085848151811061300657613006614d6e565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550808061304b90614cfd565b915050612fe5565b6000543390600160a01b900460ff161561307f5760405162461bcd60e51b8152600401610e4290614a4c565b61308b868683876139d0565b6130cd86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138c292505050565b61110a5760405162461bcd60e51b8152600401610e42906149fa565b6000546001600160a01b031633146131135760405162461bcd60e51b8152600401610e4290614ae3565b828151146131635760405162461bcd60e51b815260206004820152601e60248201527f616d6f756e74206e6f74206567616c20746f206c697374206c656e67746800006044820152606401610e42565b60058214806131725750600682145b6131cd5760405162461bcd60e51b815260206004820152602660248201527f4572726f723a2054686520746f6b656e20636c617373206973206e6f7420616e604482015265206170706c6560d01b6064820152608401610e42565b6000828152600860209081526040808320546009909252909120546131f3908590614c34565b11156132115760405162461bcd60e51b8152600401610e4290614a8e565b6000600583141561324a5760056000526009602052600080516020614dc6833981519152546011546132439190614c34565b9050613286565b600660005260096020527fbb6daa0c283751197dfdc76590680f9005e97d6f23870deb1164ab60b28b9f5f546012546132839190614c34565b90505b60005b825181101561338d57600061329e8284614c34565b90506132c560008584815181106132b7576132b7614d6e565b6020026020010151836137d1565b8382815181106132d7576132d7614d6e565b60200260200101516017600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060016018600086858151811061332e5761332e614d6e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133659190614c34565b909155505060009081526007602052604090208490558061338581614cfd565b915050613289565b50600083815260096020526040812080548692906133ac908490614c34565b909155505050505050565b6000546001600160a01b031633146133e15760405162461bcd60e51b8152600401610e4290614ae3565b6016805460ff1916911515919091179055565b6000818152601760205260409020546060906001600160a01b03166134735760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610e42565b60006004805461348290614cc2565b80601f01602080910402602001604051908101604052809291908181526020018280546134ae90614cc2565b80156134fb5780601f106134d0576101008083540402835291602001916134fb565b820191906000526020600020905b8154815290600101906020018083116134de57829003601f168201915b505050505090508061350c84613d3e565b60405160200161351d929190614922565b604051602081830303815290604052915050919050565b6000546001600160a01b0316331461355e5760405162461bcd60e51b8152600401610e4290614ae3565b601455565b60006132d38210158015610e105750506138ae101590565b6000546001600160a01b031633146135a55760405162461bcd60e51b8152600401610e4290614ae3565b600f55565b6000546001600160a01b031633146135d45760405162461bcd60e51b8152600401610e4290614ae3565b601555565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205460ff1690565b6000546001600160a01b031633146136315760405162461bcd60e51b8152600401610e4290614ae3565b6001600160a01b0381166136965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e42565b612bb481613cee565b6000816136ae57506000919050565b600182101580156136c0575060088211155b156136cd57506001919050565b8160091480156136dd575081600a145b156136ea57506002919050565b600b82101580156136fd57506113928211155b1561370a57506003919050565b611393821015801561371e575061271a8211155b1561372b57506004919050565b61271b821015801561373f57506132d28211155b1561374c57506005919050565b6132d3821015801561376057506138ae8211155b1561376d57506006919050565b60405162461bcd60e51b815260206004820152602e60248201527f5468697320494420646f6573206e6f742062656c6f6e6720746f20612076616c60448201526d696420746f6b656e20636c61737360901b6064820152608401610e42565b919050565b6001600160a01b03831661382c5761382781601d80546000838152601e60205260408120829055600182018355919091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0155565b61384f565b816001600160a01b0316836001600160a01b03161461384f5761384f8382613e3b565b6001600160a01b03821661386b5761386681613ee6565b505050565b826001600160a01b0316826001600160a01b031614613866576001600160a01b0391909116600090815260186020908152604080832054601b83528184208185528352818420859055938352601c90915290205550565b60006001600160a01b0384163b156139c457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613906903390899088908890600401614951565b602060405180830381600087803b15801561392057600080fd5b505af1925050508015613950575060408051601f3d908101601f1916820190925261394d918101906146f4565b60015b6139aa573d80801561397e576040519150601f19603f3d011682016040523d82523d6000602084013e613983565b606091505b5080516139a25760405162461bcd60e51b8152600401610e42906149fa565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506139c8565b5060015b949350505050565b6000818152601760205260409020546001600160a01b038581169116146139f657600080fd5b816001600160a01b0316846001600160a01b03161480613a2f5750816001600160a01b0316613a24826111a4565b6001600160a01b0316145b80613a3f5750613a3f84836135d9565b613a5b5760405162461bcd60e51b8152600401610e4290614b96565b613a668484836137d1565b6001600160a01b0384166000908152601860205260408120805460019290613a8f908490614c7f565b90915550506001600160a01b0383166000908152601860205260408120805460019290613abd908490614c34565b909155505060008181526017602052604080822080546001600160a01b0319166001600160a01b038781169182179092559151849391881691600080516020614de683398151915291a4600090815260196020526040902080546001600160a01b0319169055505050565b600082613b358584613f95565b14949350505050565b601f5460609060ff16158015613b5c5750601f54610100900460ff16155b15613c3857600360009054906101000a90046001600160a01b03166001600160a01b0316634fdc84dc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613bb157600080fd5b505af1925050508015613be657506040513d6000823e601f3d908101601f19168201604052613be39190810190614592565b60015b610e10576000613bf5836121b1565b90507fc36a191bf96c0e51ac78765045a165404afd7594ad423922b0e84d0ee2f39afa814233604051613c2a939291906149a1565b60405180910390a192915050565b601f5460ff16158015613c525750601f54610100900460ff165b15613ce357600360009054906101000a90046001600160a01b03166001600160a01b0316634fdc84dc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca757600080fd5b505af1158015613cbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e109190810190614592565b6000613bf5836121b1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606081613d625750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613d8c5780613d7681614cfd565b9150613d859050600a83614c4c565b9150613d66565b6000816001600160401b03811115613da657613da6614d84565b6040519080825280601f01601f191660200182016040528015613dd0576020820181803683370190505b5090505b84156139c857613de5600183614c7f565b9150613df2600a86614d18565b613dfd906030614c34565b60f81b818381518110613e1257613e12614d6e565b60200101906001600160f81b031916908160001a905350613e34600a86614c4c565b9450613dd4565b6001600160a01b038216600090815260186020526040812054613e6090600190614c7f565b6000838152601c6020526040902054909150808214613eb3576001600160a01b0384166000908152601b602090815260408083208584528252808320548484528184208190558352601c90915290208190555b506000918252601c602090815260408084208490556001600160a01b039094168352601b81528383209183525290812055565b601d54600090613ef890600190614c7f565b6000838152601e6020526040812054601d8054939450909284908110613f2057613f20614d6e565b9060005260206000200154905080601d8381548110613f4157613f41614d6e565b6000918252602080832090910192909255828152601e9091526040808220849055858252812055601d805480613f7957613f79614d58565b6001900381819060005260206000200160009055905550505050565b600081815b8451811015611b2b576000858281518110613fb757613fb7614d6e565b60200260200101519050808311613ff9576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250614026565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061403181614cfd565b915050613f9a565b82805461404590614cc2565b90600052602060002090601f01602090048101928261406757600085556140ad565b82601f1061408057805160ff19168380011785556140ad565b828001600101855582156140ad579182015b828111156140ad578251825591602001919060010190614092565b506140b99291506140bd565b5090565b5b808211156140b957600081556001016140be565b600082601f8301126140e357600080fd5b813560206140f86140f383614c11565b614be1565b80838252828201915082860187848660051b890101111561411857600080fd5b60005b858110156141375781358452928401929084019060010161411b565b5090979650505050505050565b803580151581146137cc57600080fd5b60006020828403121561416657600080fd5b813561417181614d9a565b9392505050565b60006020828403121561418a57600080fd5b815161417181614d9a565b600080604083850312156141a857600080fd5b82356141b381614d9a565b915060208301356141c381614d9a565b809150509250929050565b600080600080606085870312156141e457600080fd5b84356141ef81614d9a565b935060208501356141ff81614d9a565b925060408501356001600160401b038082111561421b57600080fd5b818701915087601f83011261422f57600080fd5b81358181111561423e57600080fd5b8860208260051b850101111561425357600080fd5b95989497505060200194505050565b60008060006060848603121561427757600080fd5b833561428281614d9a565b9250602084013561429281614d9a565b929592945050506040919091013590565b6000806000806000608086880312156142bb57600080fd5b85356142c681614d9a565b945060208601356142d681614d9a565b93506040860135925060608601356001600160401b03808211156142f957600080fd5b818801915088601f83011261430d57600080fd5b81358181111561431c57600080fd5b89602082850101111561432e57600080fd5b9699959850939650602001949392505050565b6000806040838503121561435457600080fd5b823561435f81614d9a565b915060208301356001600160401b0381111561437a57600080fd5b614386858286016140d2565b9150509250929050565b600080604083850312156143a357600080fd5b82356143ae81614d9a565b91506143bc60208401614144565b90509250929050565b600080604083850312156143d857600080fd5b82356143e381614d9a565b946020939093013593505050565b60008060006060848603121561440657600080fd5b833561441181614d9a565b9250602084810135925060408501356001600160401b0381111561443457600080fd5b8501601f8101871361444557600080fd5b80356144536140f382614c11565b8082825284820191508484018a868560051b870101111561447357600080fd5b600094505b83851015614496578035835260019490940193918501918501614478565b5080955050505050509250925092565b6000806000606084860312156144bb57600080fd5b83356144c681614d9a565b95602085013595506040909401359392505050565b600060208083850312156144ee57600080fd5b82356001600160401b038082111561450557600080fd5b818501915085601f83011261451957600080fd5b81356145276140f382614c11565b80828252858201915085850189878560051b880101111561454757600080fd5b6000805b8581101561458257823587811115614561578283fd5b61456f8d8b838c01016140d2565b865250938801939188019160010161454b565b50919a9950505050505050505050565b600060208083850312156145a557600080fd5b82516001600160401b03808211156145bc57600080fd5b818501915085601f8301126145d057600080fd5b81516145de6140f382614c11565b80828252858201915085850189878560051b88010111156145fe57600080fd5b60005b848110156146945781518681111561461857600080fd5b8701603f81018c1361462957600080fd5b888101516146396140f382614c11565b808282528b82019150604084018f60408560051b870101111561465b57600080fd5b600094505b8385101561467e578051835260019490940193918c01918c01614660565b5087525050509287019290870190600101614601565b50909998505050505050505050565b6000602082840312156146b557600080fd5b61417182614144565b6000602082840312156146d057600080fd5b5035919050565b6000602082840312156146e957600080fd5b813561417181614daf565b60006020828403121561470657600080fd5b815161417181614daf565b6000602080838503121561472457600080fd5b82356001600160401b038082111561473b57600080fd5b818501915085601f83011261474f57600080fd5b81358181111561476157614761614d84565b614773601f8201601f19168501614be1565b9150808252868482850101111561478957600080fd5b8084840185840137600090820190930192909252509392505050565b6000806000606084860312156147ba57600080fd5b83359250602080850135925060408501356001600160401b038111156147df57600080fd5b8501601f810187136147f057600080fd5b80356147fe6140f382614c11565b8082825284820191508484018a868560051b870101111561481e57600080fd5b600094505b8385101561449657803561483681614d9a565b835260019490940193918501918501614823565b600081518084526020808501808196508360051b8101915082860160005b8581101561489257828403895261488084835161489f565b98850198935090840190600101614868565b5091979650505050505050565b600081518084526020808501945080840160005b838110156148cf578151875295820195908201906001016148b3565b509495945050505050565b600081518084526148f2816020860160208601614c96565b601f01601f19169290920160200192915050565b60008251614918818460208701614c96565b9190910192915050565b60008351614934818460208801614c96565b835190830190614948818360208801614c96565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614984908301846148da565b9695505050505050565b602081526000614171602083018461484a565b6060815260006149b4606083018661484a565b6020830194909452506001600160a01b0391909116604090910152919050565b602081526000614171602083018461489f565b60208152600061417160208301846148da565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f4572726f723a20746f6b656e207472616e73666572207768696c652070617573604082015261195960f21b606082015260800190565b60208082526035908201527f4572726f723a20596f75206578636565642074686520737570706c792063617060408201527420666f722074686973206170706c6520636c61737360581b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f4572726f723a206163636f756e74206973206e6f74206f776e6572206f6620746040820152661bdad95b881a5960ca1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602b908201527f4572726f723a2063616c6c6572206973206e656974686572206f776e6572206e60408201526a1bdc88185c1c1c9bdd995960aa1b606082015260800190565b604051601f8201601f191681016001600160401b0381118282101715614c0957614c09614d84565b604052919050565b60006001600160401b03821115614c2a57614c2a614d84565b5060051b60200190565b60008219821115614c4757614c47614d2c565b500190565b600082614c5b57614c5b614d42565b500490565b6000816000190483118215151615614c7a57614c7a614d2c565b500290565b600082821015614c9157614c91614d2c565b500390565b60005b83811015614cb1578181015183820152602001614c99565b8381111561141a5750506000910152565b600181811c90821680614cd657607f821691505b60208210811415614cf757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614d1157614d11614d2c565b5060010190565b600082614d2757614d27614d42565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612bb457600080fd5b6001600160e01b031981168114612bb457600080fdfe74b05292d1d4b2b48b65261b07099d24244bcb069f138d9a6bfdcf776becac4cddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f6962069aa3fa14caeae5ea33523e05f6f991abca9f2659833dfad42dc9f28fd64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002ed8143a3684df0167a0030f61bb58d9e5a16cb60000000000000000000000004ee58496dc8eba4811709f51a90a1cb4797c27cc000000000000000000000000000000000000000000000000000000000000000e446976696e6520416e617263687900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024441000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d65654c33357436344e6d6b37514343727465396e32776e3244394d344c6567596d73486f45695a536a5736632f000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106104315760003560e01c8063853828b611610229578063c235150d1161012e578063dab5f340116100b6578063e985e9c51161007a578063e985e9c514610d15578063ebf0c71714610d35578063f2a6556714610d4b578063f2fde38b14610d69578063f73841ce14610d8957600080fd5b8063dab5f34014610c92578063e355063214610cb2578063e367099314610cd5578063e643d86414610ceb578063e78c627e14610d0057600080fd5b8063cd3fe6fd116100fd578063cd3fe6fd14610bfe578063d41edb1814610c13578063d4556a0414610c33578063d5be08af14610c52578063d6a714d514610c7257600080fd5b8063c235150d14610b85578063c54e73e314610b9b578063c87b56dd14610bbb578063c955deba14610bdb57600080fd5b80639fa5fa88116101b1578063b18ca2be11610180578063b18ca2be14610af0578063b2dc5dc314610b10578063b7e2f80814610b30578063b88d4fde14610b45578063bd6a4b4e14610b6557600080fd5b80639fa5fa8814610a65578063a22cb46514610a85578063a714e56d14610aa5578063b18b78dd14610ad257600080fd5b80639168f7f9116101f85780639168f7f9146109d057806395d89b41146109f0578063979c7d6514610a055780639dc29fac14610a255780639e6a054314610a4557600080fd5b8063853828b61461095b57806389cba7f7146109705780638da5cb5b146109855780638fa2f9eb146109a357600080fd5b8063438b63001161033a578063641ce140116102c25780637adbf973116102865780637adbf973146108b35780637d8d1667146108d35780637dc0d1d0146108ed578063833891d31461090d57806383b215361461094357600080fd5b8063641ce140146107ff578063659e84901461081257806370a0823114610832578063715018a61461086857806378dd69f71461087d57600080fd5b80634f6ccce7116103095780634f6ccce71461074a57806355f804b31461076a5780635c975abb1461078a578063601ca23f146107a95780636352211e146107c957600080fd5b8063438b6300146106ba578063474e92b5146106e757806349fb340d146106fc5780634f558e791461071257600080fd5b806323b872dd116103bd5780632f745c591161038c5780632f745c591461060057806330f7d71b14610620578063350829331461064d57806338266b221461066d57806342842e0e1461069a57600080fd5b806323b872dd1461058b57806328412d70146105ab5780632872b052146105c05780632e1a7d4d146105e057600080fd5b8063095ea7b311610404578063095ea7b3146104e757806315ed1fd31461050757806318160ddd146105275780632153f88414610546578063217997951461055e57600080fd5b806301ffc9a714610436578063034601ec1461046b57806306fdde031461048d578063081812fc146104af575b600080fd5b34801561044257600080fd5b506104566104513660046146d7565b610da9565b60405190151581526020015b60405180910390f35b34801561047757600080fd5b5061048b6104863660046141ce565b610e16565b005b34801561049957600080fd5b506104a2611112565b60405161046291906149e7565b3480156104bb57600080fd5b506104cf6104ca3660046146be565b6111a4565b6040516001600160a01b039091168152602001610462565b3480156104f357600080fd5b5061048b6105023660046143c5565b611239565b34801561051357600080fd5b5061048b6105223660046146a3565b6113a5565b34801561053357600080fd5b50601d545b604051908152602001610462565b34801561055257600080fd5b50600d5460ff16610456565b34801561056a57600080fd5b506105386105793660046146be565b60009081526009602052604090205490565b34801561059757600080fd5b5061048b6105a6366004614262565b6113e2565b3480156105b757600080fd5b50610538600181565b3480156105cc57600080fd5b5061048b6105db3660046144a6565b611420565b3480156105ec57600080fd5b5061048b6105fb3660046146be565b611688565b34801561060c57600080fd5b5061053861061b3660046143c5565b61182a565b34801561062c57600080fd5b5061053861063b3660046146be565b60009081526007602052604090205490565b34801561065957600080fd5b5061048b610668366004614154565b6118ce565b34801561067957600080fd5b5061068d610688366004614154565b61191a565b604051610462919061498e565b3480156106a657600080fd5b5061048b6106b5366004614262565b611a0d565b3480156106c657600080fd5b506106da6106d5366004614154565b611a7c565b60405161046291906149d4565b3480156106f357600080fd5b50610538600081565b34801561070857600080fd5b50610538600f5481565b34801561071e57600080fd5b5061045661072d3660046146be565b6000908152601760205260409020546001600160a01b0316151590565b34801561075657600080fd5b506105386107653660046146be565b611b33565b34801561077657600080fd5b5061048b610785366004614711565b611bc6565b34801561079657600080fd5b50600054600160a01b900460ff16610456565b3480156107b557600080fd5b506002546104cf906001600160a01b031681565b3480156107d557600080fd5b506104cf6107e43660046146be565b6000908152601760205260409020546001600160a01b031690565b61048b61080d3660046143f1565b611c07565b34801561081e57600080fd5b5061068d61082d3660046146be565b6121b1565b34801561083e57600080fd5b5061053861084d366004614154565b6001600160a01b031660009081526018602052604090205490565b34801561087457600080fd5b5061048b612407565b34801561088957600080fd5b50610538610898366004614154565b6001600160a01b03166000908152600e602052604090205490565b3480156108bf57600080fd5b5061048b6108ce366004614154565b61243d565b3480156108df57600080fd5b50601f546104569060ff1681565b3480156108f957600080fd5b506003546104cf906001600160a01b031681565b34801561091957600080fd5b50610538610928366004614154565b6001600160a01b031660009081526013602052604090205490565b34801561094f57600080fd5b5060165460ff16610456565b34801561096757600080fd5b5061048b612489565b34801561097c57600080fd5b50610538600381565b34801561099157600080fd5b506000546001600160a01b03166104cf565b3480156109af57600080fd5b506105386109be3660046146be565b6000908152600a602052604090205490565b3480156109dc57600080fd5b506104566109eb3660046146be565b6125d0565b3480156109fc57600080fd5b506104a26125e8565b348015610a1157600080fd5b5061048b610a203660046146a3565b6125f7565b348015610a3157600080fd5b5061048b610a403660046143c5565b61263b565b348015610a5157600080fd5b5061048b610a603660046144db565b6127ff565b348015610a7157600080fd5b5061048b610a803660046146be565b612b6d565b348015610a9157600080fd5b5061048b610aa0366004614390565b612bb7565b348015610ab157600080fd5b50610538610ac03660046146be565b60009081526008602052604090205490565b348015610ade57600080fd5b506003546001600160a01b03166104cf565b348015610afc57600080fd5b5061048b610b0b3660046143c5565b612c8c565b348015610b1c57600080fd5b5061048b610b2b366004614341565b612da1565b348015610b3c57600080fd5b50610538600281565b348015610b5157600080fd5b5061048b610b603660046142a3565b613053565b348015610b7157600080fd5b5061048b610b803660046147a5565b6130e9565b348015610b9157600080fd5b50610538600c5481565b348015610ba757600080fd5b5061048b610bb63660046146a3565b6133b7565b348015610bc757600080fd5b506104a2610bd63660046146be565b6133f4565b348015610be757600080fd5b50610456610bf63660046146be565b61271a101590565b348015610c0a57600080fd5b50610538600481565b348015610c1f57600080fd5b5061048b610c2e3660046146be565b613534565b348015610c3f57600080fd5b50601f5461045690610100900460ff1681565b348015610c5e57600080fd5b50610456610c6d3660046146be565b613563565b348015610c7e57600080fd5b5061048b610c8d3660046146be565b61357b565b348015610c9e57600080fd5b5061048b610cad3660046146be565b6135aa565b348015610cbe57600080fd5b50610456610ccd3660046146be565b6138ae101590565b348015610ce157600080fd5b5061053860145481565b348015610cf757600080fd5b50610538600581565b348015610d0c57600080fd5b50610538600681565b348015610d2157600080fd5b50610456610d30366004614195565b6135d9565b348015610d4157600080fd5b5061053860155481565b348015610d5757600080fd5b506002546001600160a01b03166104cf565b348015610d7557600080fd5b5061048b610d84366004614154565b613607565b348015610d9557600080fd5b50610538610da43660046146be565b61369f565b60006001600160e01b0319821663780e9d6360e01b1480610dda57506001600160e01b03198216634aefe8ef60e01b145b80610df557506001600160e01b03198216635b5e139f60e01b145b80610e1057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000543390600160a01b900460ff1615610e4b5760405162461bcd60e51b8152600401610e4290614a4c565b60405180910390fd5b806001600160a01b0316856001600160a01b031614158015610e745750610e7285826135d9565b155b15610ee95760005b82811015610ee757816001600160a01b0316610eaf858584818110610ea357610ea3614d6e565b905060200201356111a4565b6001600160a01b031614610ed55760405162461bcd60e51b8152600401610e4290614b96565b80610edf81614cfd565b915050610e7c565b505b60005b8281101561110a57856001600160a01b031660176000868685818110610f1457610f14614d6e565b60209081029290920135835250810191909152604001600020546001600160a01b031614610f4157600080fd5b610f648686868685818110610f5857610f58614d6e565b905060200201356137d1565b6001600160a01b0386166000908152601860205260408120805460019290610f8d908490614c7f565b90915550506001600160a01b0385166000908152601860205260408120805460019290610fbb908490614c34565b9091555085905060176000868685818110610fd857610fd8614d6e565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083838281811061102357611023614d6e565b90506020020135856001600160a01b0316876001600160a01b0316600080516020614de683398151915260405160405180910390a460006019600086868581811061107057611070614d6e565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506110dc86868686858181106110c0576110c0614d6e565b90506020020135604051806020016040528060008152506138c2565b6110f85760405162461bcd60e51b8152600401610e42906149fa565b8061110281614cfd565b915050610eec565b505050505050565b60606005805461112190614cc2565b80601f016020809104026020016040519081016040528092919081815260200182805461114d90614cc2565b801561119a5780601f1061116f5761010080835404028352916020019161119a565b820191906000526020600020905b81548152906001019060200180831161117d57829003601f168201915b5050505050905090565b6000818152601760205260408120546001600160a01b031661121d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610e42565b506000908152601960205260409020546001600160a01b031690565b6000818152601760205260409020546001600160a01b039081169083168114156112af5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610e42565b336001600160a01b03821614806112cb57506112cb81336135d9565b61133d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610e42565b600082815260196020908152604080832080546001600160a01b0319166001600160a01b038881169182179092556017909352818420549151869492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000546001600160a01b031633146113cf5760405162461bcd60e51b8152600401610e4290614ae3565b601f805460ff1916911515919091179055565b6000543390600160a01b900460ff161561140e5760405162461bcd60e51b8152600401610e4290614a4c565b61141a848483856139d0565b50505050565b3361142a83613563565b6114855760405162461bcd60e51b815260206004820152602660248201527f4572726f723a20746f6b656e2070726f7669646564206973206e6f7420626164604482015265206170706c6560d01b6064820152608401610e42565b6114918261271a101590565b6114e75760405162461bcd60e51b815260206004820152602160248201527f4572726f723a20746f6b656e2070726f766964656420697320616e206170706c6044820152606560f81b6064820152608401610e42565b6000838152601760205260409020546001600160a01b03828116911614806115285750806001600160a01b031661151d846111a4565b6001600160a01b0316145b80611538575061153884826135d9565b6115545760405162461bcd60e51b8152600401610e4290614b96565b61155e848461263b565b611568848361263b565b60056000527f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdb546009602052600080516020614dc6833981519152546115af906001614c34565b11156115cd5760405162461bcd60e51b8152600401610e4290614a8e565b600560009081526009602052600080516020614dc6833981519152546011546115f69190614c34565b9050611604600086836137d1565b600081815260176020908152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526018909152812080546001929061164b908490614c34565b9091555050600560009081526009602052600080516020614dc683398151915280546001929061167c908490614c34565b90915550505050505050565b6000546001600160a01b031633146116b25760405162461bcd60e51b8152600401610e4290614ae3565b600260015414156116d55760405162461bcd60e51b8152600401610e4290614b5f565b600260015547806117185760405162461bcd60e51b815260206004820152600d60248201526c3130b630b731b29034b990181760991b6044820152606401610e42565b8181116117725760405162461bcd60e51b815260206004820152602260248201527f62616c616e6365206d757374206265207375706572696f7220746f20616d6f756044820152611b9d60f21b6064820152608401610e42565b60408051600080825260208201909252339084906040516117939190614906565b60006040518083038185875af1925050503d80600081146117d0576040519150601f19603f3d011682016040523d82523d6000602084013e6117d5565b606091505b50509050806118215760405162461bcd60e51b81526020600482015260186024820152773bb4ba34323930bb9d103a3930b739b332b91032b93937b960411b6044820152606401610e42565b50506001805550565b6001600160a01b03821660009081526018602052604081205482106118a55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610e42565b506001600160a01b03919091166000908152601b60209081526040808320938352929052205490565b6000546001600160a01b031633146118f85760405162461bcd60e51b8152600401610e4290614ae3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b604080516002808252606082810190935260009190816020015b6060815260200190600190039081611934579050509050600061195684611a7c565b6040805160028082526060820183529293506000929091602083019080368337019050509050611985601d5490565b8160008151811061199857611998614d6e565b602002602001018181525050601454816001815181106119ba576119ba614d6e565b60200260200101818152505081836000815181106119da576119da614d6e565b602002602001018190525080836001815181106119f9576119f9614d6e565b602090810291909101015250909392505050565b6000543390600160a01b900460ff1615611a395760405162461bcd60e51b8152600401610e4290614a4c565b611a45848483856139d0565b611a60848484604051806020016040528060008152506138c2565b61141a5760405162461bcd60e51b8152600401610e42906149fa565b60606000611a9f836001600160a01b031660009081526018602052604090205490565b90506000816001600160401b03811115611abb57611abb614d84565b604051908082528060200260200182016040528015611ae4578160200160208202803683370190505b50905060005b82811015611b2b57611afc858261182a565b828281518110611b0e57611b0e614d6e565b602090810291909101015280611b2381614cfd565b915050611aea565b509392505050565b6000611b3e601d5490565b8210611ba15760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610e42565b601d8281548110611bb457611bb4614d6e565b90600052602060002001549050919050565b6000546001600160a01b03163314611bf05760405162461bcd60e51b8152600401610e4290614ae3565b8051611c03906004906020840190614039565b5050565b60026001541415611c2a5760405162461bcd60e51b8152600401610e4290614b5f565b60026001556014543390611c3f908490614c60565b341015611ca25760405162461bcd60e51b815260206004820152602b60248201527f4d616b65207375726520796f752063616e206166666f726420302e303920657460448201526a34103832b9103a37b5b2b760a91b6064820152608401610e42565b6001600160a01b038416611cf85760405162461bcd60e51b815260206004820152601f60248201527f4572726f723a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e42565b600054600160a01b900460ff1615611d225760405162461bcd60e51b8152600401610e4290614a4c565b600d5460ff161515600114611d985760405162461bcd60e51b815260206004820152603660248201527f4572726f723a205761697420756e74696c2061697264726f7070696e6720746f60448201527508151c99585cdd5c9e481a185cc8199a5b9a5cda195960521b6064820152608401610e42565b60165460ff16151560011415611eda576001600160a01b0381166000908152600e6020526040902054600390611dcf908590614c34565b1115611e335760405162461bcd60e51b815260206004820152602d60248201527f4572726f723a20796f752063616e6e6f74206d696e74206d6f726520746f6b6560448201526c6e732061742070726573616c6560981b6064820152608401610e42565b6015546040516bffffffffffffffffffffffff19606084901b166020820152611e7691849160340160405160208183030381529060405280519060200120613b28565b611ed55760405162461bcd60e51b815260206004820152602a60248201527f796f7520617265206e6f7420616c6c6f77656420746f206d696e7420647572696044820152696e672070726573616c6560b01b6064820152608401610e42565b611f5a565b600f546001600160a01b038216600090815260106020526040902054611f01908590614c34565b1115611f5a5760405162461bcd60e51b815260206004820152602260248201527f4572726f723a20796f752063616e6e6f74206d696e74206d6f726520746f6b656044820152616e7360f01b6064820152608401610e42565b6000611f6584613b3e565b9050600081600081518110611f7c57611f7c614d6e565b60200260200101519050600082600181518110611f9b57611f9b614d6e565b6020026020010151905060005b8681101561213257611fd5600089858481518110611fc857611fc8614d6e565b60200260200101516137d1565b8760176000858481518110611fec57611fec614d6e565b6020908102919091018101518252818101929092526040908101600090812080546001600160a01b0319166001600160a01b03958616179055928b16835260189091528120805460019290612042908490614c34565b9250508190555081818151811061205b5761205b614d6e565b60200260200101516007600085848151811061207957612079614d6e565b60200260200101518152602001908152602001600020819055506001600960008484815181106120ab576120ab614d6e565b6020026020010151815260200190815260200160002060008282546120d09190614c34565b925050819055508281815181106120e9576120e9614d6e565b6020026020010151886001600160a01b031660006001600160a01b0316600080516020614de683398151915260405160405180910390a48061212a81614cfd565b915050611fa8565b5060165460ff16151560011415612176576001600160a01b0384166000908152600e60205260408120805488929061216b908490614c34565b909155506121a49050565b6001600160a01b0384166000908152601060205260408120805488929061219e908490614c34565b90915550505b5050600180555050505050565b604080516002808252606082810190935260009190816020015b60608152602001906001900390816121cb5790505090506000836001600160401b038111156121fc576121fc614d84565b604051908082528060200260200182016040528015612225578160200160208202803683370190505b5090506000846001600160401b0381111561224257612242614d84565b60405190808252806020026020018201604052801561226b578160200160208202803683370190505b5090506000808061227d600143614c7f565b4090505b8783146123bd57600061271b4283336040805160208101949094528301919091526bffffffffffffffffffffffff19606091821b1690820152607481018590526094016040516020818303038152906040528051906020012060001c6122e79190614d18565b90506000805b8581101561232d5787818151811061230757612307614d6e565b602002602001015183141561231b57600191505b8061232581614cfd565b9150506122ed565b506000828152601760205260409020546001600160a01b0316158015612351575080155b156123a9578187868151811061236957612369614d6e565b60200260200101818152505061237e8261369f565b86868151811061239057612390614d6e565b60209081029190910101526123a6600186614c34565b94505b6123b4600185614c34565b93505050612281565b84866000815181106123d1576123d1614d6e565b602002602001018190525083866001815181106123f0576123f0614d6e565b602090810291909101015250939695505050505050565b6000546001600160a01b031633146124315760405162461bcd60e51b8152600401610e4290614ae3565b61243b6000613cee565b565b6000546001600160a01b031633146124675760405162461bcd60e51b8152600401610e4290614ae3565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124b35760405162461bcd60e51b8152600401610e4290614ae3565b600260015414156124d65760405162461bcd60e51b8152600401610e4290614b5f565b600260015547806125195760405162461bcd60e51b815260206004820152600d60248201526c3130b630b731b29034b990181760991b6044820152606401610e42565b604080516000808252602082019092523390839060405161253a9190614906565b60006040518083038185875af1925050503d8060008114612577576040519150601f19603f3d011682016040523d82523d6000602084013e61257c565b606091505b50509050806125c85760405162461bcd60e51b81526020600482015260186024820152773bb4ba34323930bb9d103a3930b739b332b91032b93937b960411b6044820152606401610e42565b505060018055565b600061271b8210158015610e105750506132d2101590565b60606006805461112190614cc2565b6000546001600160a01b031633146126215760405162461bcd60e51b8152600401610e4290614ae3565b601f80549115156101000261ff0019909216919091179055565b6000543390600160a01b900460ff16156126675760405162461bcd60e51b8152600401610e4290614a4c565b806001600160a01b0316836001600160a01b031614806126a05750806001600160a01b0316612695836111a4565b6001600160a01b0316145b806126b057506126b083826135d9565b6126cc5760405162461bcd60e51b8152600401610e4290614b96565b6001600160a01b03831661272c5760405162461bcd60e51b815260206004820152602160248201527f4572726f723a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610e42565b6000828152601760205260409020546001600160a01b038481169116146127655760405162461bcd60e51b8152600401610e4290614b18565b612771836000846137d1565b600082815260176020908152604080832080546001600160a01b03191690556001600160a01b0386168352601890915281208054600192906127b4908490614c7f565b909155505060405182906000906001600160a01b03861690600080516020614de6833981519152908390a450600090815260196020526040902080546001600160a01b031916905550565b6000546001600160a01b031633146128295760405162461bcd60e51b8152600401610e4290614ae3565b6002546040805163a09ec3ef60e01b815290516000926001600160a01b03169163a09ec3ef916004808301926020929190829003018186803b15801561286e57600080fd5b505afa158015612882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a69190614178565b600054909150600160a01b900460ff16156128d35760405162461bcd60e51b8152600401610e4290614a4c565b6000826000815181106128e8576128e8614d6e565b6020026020010151905060008360018151811061290757612907614d6e565b60200260200101519050815181511461291f57600080fd5b8151600c54600b54612932908390614c34565b11156129a65760405162461bcd60e51b815260206004820152603b60248201527f4572726f723a20796f752061726520657863656564696e6720746865206d617860448201527f2061697264726f7020616d6f756e7420746f20547265617375727900000000006064820152608401610e42565b60005b8351811015612b34576129ca600086868481518110611fc857611fc8614d6e565b6001600160a01b03851660009081526018602052604081208054600192906129f3908490614c34565b925050819055508460176000868481518110612a1157612a11614d6e565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828181518110612a5d57612a5d614d6e565b602002602001015160076000868481518110612a7b57612a7b614d6e565b6020026020010151815260200190815260200160002081905550600160096000858481518110612aad57612aad614d6e565b602002602001015181526020019081526020016000206000828254612ad29190614c34565b92505081905550838181518110612aeb57612aeb614d6e565b6020026020010151856001600160a01b031660006001600160a01b0316600080516020614de683398151915260405160405180910390a480612b2c81614cfd565b9150506129a9565b5080600b6000828254612b479190614c34565b9091555050600c54600b541415612b6657600d805460ff191660011790555b5050505050565b6000546001600160a01b03163314612b975760405162461bcd60e51b8152600401610e4290614ae3565b600c819055600b54811415612bb457600d805460ff191660011790555b50565b336001600160a01b0383161415612c205760405162461bcd60e51b815260206004820152602760248201527f4572726f723a2073657474696e6720617070726f76616c20737461747573206660448201526637b91039b2b63360c91b6064820152608401610e42565b336000818152601a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b33612c96826125d0565b612cf75760405162461bcd60e51b815260206004820152602c60248201527f4572726f723a20746f6b656e2070726f7669646564206973206e6f742061736360448201526b656e73696f6e206170706c6560a01b6064820152608401610e42565b6000828152601760205260409020546001600160a01b0382811691161480612d385750806001600160a01b0316612d2d836111a4565b6001600160a01b0316145b80612d485750612d4883826135d9565b612d645760405162461bcd60e51b8152600401610e4290614b96565b612d6e838361263b565b6001600160a01b0383166000908152601360205260408120805460019290612d97908490614c34565b9091555050505050565b6000543390600160a01b900460ff1615612dcd5760405162461bcd60e51b8152600401610e4290614a4c565b806001600160a01b0316836001600160a01b031614158015612df65750612df483826135d9565b155b15612e6d5760005b8251811015612e6b57816001600160a01b0316612e33848381518110612e2657612e26614d6e565b60200260200101516111a4565b6001600160a01b031614612e595760405162461bcd60e51b8152600401610e4290614b96565b80612e6381614cfd565b915050612dfe565b505b60005b8251811015612eec57836001600160a01b031660176000858481518110612e9957612e99614d6e565b6020908102919091018101518252810191909152604001600020546001600160a01b031614612eda5760405162461bcd60e51b8152600401610e4290614b18565b80612ee481614cfd565b915050612e70565b5060005b8251811015612fe157612f11846000858481518110611fc857611fc8614d6e565b600060176000858481518110612f2957612f29614d6e565b6020908102919091018101518252818101929092526040908101600090812080546001600160a01b0319166001600160a01b03958616179055928716835260189091528120805460019290612f7f908490614c7f565b92505081905550828181518110612f9857612f98614d6e565b602002602001015160006001600160a01b0316856001600160a01b0316600080516020614de683398151915260405160405180910390a480612fd981614cfd565b915050612ef0565b5060005b825181101561141a5760006019600085848151811061300657613006614d6e565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550808061304b90614cfd565b915050612fe5565b6000543390600160a01b900460ff161561307f5760405162461bcd60e51b8152600401610e4290614a4c565b61308b868683876139d0565b6130cd86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138c292505050565b61110a5760405162461bcd60e51b8152600401610e42906149fa565b6000546001600160a01b031633146131135760405162461bcd60e51b8152600401610e4290614ae3565b828151146131635760405162461bcd60e51b815260206004820152601e60248201527f616d6f756e74206e6f74206567616c20746f206c697374206c656e67746800006044820152606401610e42565b60058214806131725750600682145b6131cd5760405162461bcd60e51b815260206004820152602660248201527f4572726f723a2054686520746f6b656e20636c617373206973206e6f7420616e604482015265206170706c6560d01b6064820152608401610e42565b6000828152600860209081526040808320546009909252909120546131f3908590614c34565b11156132115760405162461bcd60e51b8152600401610e4290614a8e565b6000600583141561324a5760056000526009602052600080516020614dc6833981519152546011546132439190614c34565b9050613286565b600660005260096020527fbb6daa0c283751197dfdc76590680f9005e97d6f23870deb1164ab60b28b9f5f546012546132839190614c34565b90505b60005b825181101561338d57600061329e8284614c34565b90506132c560008584815181106132b7576132b7614d6e565b6020026020010151836137d1565b8382815181106132d7576132d7614d6e565b60200260200101516017600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060016018600086858151811061332e5761332e614d6e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133659190614c34565b909155505060009081526007602052604090208490558061338581614cfd565b915050613289565b50600083815260096020526040812080548692906133ac908490614c34565b909155505050505050565b6000546001600160a01b031633146133e15760405162461bcd60e51b8152600401610e4290614ae3565b6016805460ff1916911515919091179055565b6000818152601760205260409020546060906001600160a01b03166134735760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610e42565b60006004805461348290614cc2565b80601f01602080910402602001604051908101604052809291908181526020018280546134ae90614cc2565b80156134fb5780601f106134d0576101008083540402835291602001916134fb565b820191906000526020600020905b8154815290600101906020018083116134de57829003601f168201915b505050505090508061350c84613d3e565b60405160200161351d929190614922565b604051602081830303815290604052915050919050565b6000546001600160a01b0316331461355e5760405162461bcd60e51b8152600401610e4290614ae3565b601455565b60006132d38210158015610e105750506138ae101590565b6000546001600160a01b031633146135a55760405162461bcd60e51b8152600401610e4290614ae3565b600f55565b6000546001600160a01b031633146135d45760405162461bcd60e51b8152600401610e4290614ae3565b601555565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205460ff1690565b6000546001600160a01b031633146136315760405162461bcd60e51b8152600401610e4290614ae3565b6001600160a01b0381166136965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e42565b612bb481613cee565b6000816136ae57506000919050565b600182101580156136c0575060088211155b156136cd57506001919050565b8160091480156136dd575081600a145b156136ea57506002919050565b600b82101580156136fd57506113928211155b1561370a57506003919050565b611393821015801561371e575061271a8211155b1561372b57506004919050565b61271b821015801561373f57506132d28211155b1561374c57506005919050565b6132d3821015801561376057506138ae8211155b1561376d57506006919050565b60405162461bcd60e51b815260206004820152602e60248201527f5468697320494420646f6573206e6f742062656c6f6e6720746f20612076616c60448201526d696420746f6b656e20636c61737360901b6064820152608401610e42565b919050565b6001600160a01b03831661382c5761382781601d80546000838152601e60205260408120829055600182018355919091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0155565b61384f565b816001600160a01b0316836001600160a01b03161461384f5761384f8382613e3b565b6001600160a01b03821661386b5761386681613ee6565b505050565b826001600160a01b0316826001600160a01b031614613866576001600160a01b0391909116600090815260186020908152604080832054601b83528184208185528352818420859055938352601c90915290205550565b60006001600160a01b0384163b156139c457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613906903390899088908890600401614951565b602060405180830381600087803b15801561392057600080fd5b505af1925050508015613950575060408051601f3d908101601f1916820190925261394d918101906146f4565b60015b6139aa573d80801561397e576040519150601f19603f3d011682016040523d82523d6000602084013e613983565b606091505b5080516139a25760405162461bcd60e51b8152600401610e42906149fa565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506139c8565b5060015b949350505050565b6000818152601760205260409020546001600160a01b038581169116146139f657600080fd5b816001600160a01b0316846001600160a01b03161480613a2f5750816001600160a01b0316613a24826111a4565b6001600160a01b0316145b80613a3f5750613a3f84836135d9565b613a5b5760405162461bcd60e51b8152600401610e4290614b96565b613a668484836137d1565b6001600160a01b0384166000908152601860205260408120805460019290613a8f908490614c7f565b90915550506001600160a01b0383166000908152601860205260408120805460019290613abd908490614c34565b909155505060008181526017602052604080822080546001600160a01b0319166001600160a01b038781169182179092559151849391881691600080516020614de683398151915291a4600090815260196020526040902080546001600160a01b0319169055505050565b600082613b358584613f95565b14949350505050565b601f5460609060ff16158015613b5c5750601f54610100900460ff16155b15613c3857600360009054906101000a90046001600160a01b03166001600160a01b0316634fdc84dc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613bb157600080fd5b505af1925050508015613be657506040513d6000823e601f3d908101601f19168201604052613be39190810190614592565b60015b610e10576000613bf5836121b1565b90507fc36a191bf96c0e51ac78765045a165404afd7594ad423922b0e84d0ee2f39afa814233604051613c2a939291906149a1565b60405180910390a192915050565b601f5460ff16158015613c525750601f54610100900460ff165b15613ce357600360009054906101000a90046001600160a01b03166001600160a01b0316634fdc84dc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca757600080fd5b505af1158015613cbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e109190810190614592565b6000613bf5836121b1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606081613d625750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613d8c5780613d7681614cfd565b9150613d859050600a83614c4c565b9150613d66565b6000816001600160401b03811115613da657613da6614d84565b6040519080825280601f01601f191660200182016040528015613dd0576020820181803683370190505b5090505b84156139c857613de5600183614c7f565b9150613df2600a86614d18565b613dfd906030614c34565b60f81b818381518110613e1257613e12614d6e565b60200101906001600160f81b031916908160001a905350613e34600a86614c4c565b9450613dd4565b6001600160a01b038216600090815260186020526040812054613e6090600190614c7f565b6000838152601c6020526040902054909150808214613eb3576001600160a01b0384166000908152601b602090815260408083208584528252808320548484528184208190558352601c90915290208190555b506000918252601c602090815260408084208490556001600160a01b039094168352601b81528383209183525290812055565b601d54600090613ef890600190614c7f565b6000838152601e6020526040812054601d8054939450909284908110613f2057613f20614d6e565b9060005260206000200154905080601d8381548110613f4157613f41614d6e565b6000918252602080832090910192909255828152601e9091526040808220849055858252812055601d805480613f7957613f79614d58565b6001900381819060005260206000200160009055905550505050565b600081815b8451811015611b2b576000858281518110613fb757613fb7614d6e565b60200260200101519050808311613ff9576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250614026565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061403181614cfd565b915050613f9a565b82805461404590614cc2565b90600052602060002090601f01602090048101928261406757600085556140ad565b82601f1061408057805160ff19168380011785556140ad565b828001600101855582156140ad579182015b828111156140ad578251825591602001919060010190614092565b506140b99291506140bd565b5090565b5b808211156140b957600081556001016140be565b600082601f8301126140e357600080fd5b813560206140f86140f383614c11565b614be1565b80838252828201915082860187848660051b890101111561411857600080fd5b60005b858110156141375781358452928401929084019060010161411b565b5090979650505050505050565b803580151581146137cc57600080fd5b60006020828403121561416657600080fd5b813561417181614d9a565b9392505050565b60006020828403121561418a57600080fd5b815161417181614d9a565b600080604083850312156141a857600080fd5b82356141b381614d9a565b915060208301356141c381614d9a565b809150509250929050565b600080600080606085870312156141e457600080fd5b84356141ef81614d9a565b935060208501356141ff81614d9a565b925060408501356001600160401b038082111561421b57600080fd5b818701915087601f83011261422f57600080fd5b81358181111561423e57600080fd5b8860208260051b850101111561425357600080fd5b95989497505060200194505050565b60008060006060848603121561427757600080fd5b833561428281614d9a565b9250602084013561429281614d9a565b929592945050506040919091013590565b6000806000806000608086880312156142bb57600080fd5b85356142c681614d9a565b945060208601356142d681614d9a565b93506040860135925060608601356001600160401b03808211156142f957600080fd5b818801915088601f83011261430d57600080fd5b81358181111561431c57600080fd5b89602082850101111561432e57600080fd5b9699959850939650602001949392505050565b6000806040838503121561435457600080fd5b823561435f81614d9a565b915060208301356001600160401b0381111561437a57600080fd5b614386858286016140d2565b9150509250929050565b600080604083850312156143a357600080fd5b82356143ae81614d9a565b91506143bc60208401614144565b90509250929050565b600080604083850312156143d857600080fd5b82356143e381614d9a565b946020939093013593505050565b60008060006060848603121561440657600080fd5b833561441181614d9a565b9250602084810135925060408501356001600160401b0381111561443457600080fd5b8501601f8101871361444557600080fd5b80356144536140f382614c11565b8082825284820191508484018a868560051b870101111561447357600080fd5b600094505b83851015614496578035835260019490940193918501918501614478565b5080955050505050509250925092565b6000806000606084860312156144bb57600080fd5b83356144c681614d9a565b95602085013595506040909401359392505050565b600060208083850312156144ee57600080fd5b82356001600160401b038082111561450557600080fd5b818501915085601f83011261451957600080fd5b81356145276140f382614c11565b80828252858201915085850189878560051b880101111561454757600080fd5b6000805b8581101561458257823587811115614561578283fd5b61456f8d8b838c01016140d2565b865250938801939188019160010161454b565b50919a9950505050505050505050565b600060208083850312156145a557600080fd5b82516001600160401b03808211156145bc57600080fd5b818501915085601f8301126145d057600080fd5b81516145de6140f382614c11565b80828252858201915085850189878560051b88010111156145fe57600080fd5b60005b848110156146945781518681111561461857600080fd5b8701603f81018c1361462957600080fd5b888101516146396140f382614c11565b808282528b82019150604084018f60408560051b870101111561465b57600080fd5b600094505b8385101561467e578051835260019490940193918c01918c01614660565b5087525050509287019290870190600101614601565b50909998505050505050505050565b6000602082840312156146b557600080fd5b61417182614144565b6000602082840312156146d057600080fd5b5035919050565b6000602082840312156146e957600080fd5b813561417181614daf565b60006020828403121561470657600080fd5b815161417181614daf565b6000602080838503121561472457600080fd5b82356001600160401b038082111561473b57600080fd5b818501915085601f83011261474f57600080fd5b81358181111561476157614761614d84565b614773601f8201601f19168501614be1565b9150808252868482850101111561478957600080fd5b8084840185840137600090820190930192909252509392505050565b6000806000606084860312156147ba57600080fd5b83359250602080850135925060408501356001600160401b038111156147df57600080fd5b8501601f810187136147f057600080fd5b80356147fe6140f382614c11565b8082825284820191508484018a868560051b870101111561481e57600080fd5b600094505b8385101561449657803561483681614d9a565b835260019490940193918501918501614823565b600081518084526020808501808196508360051b8101915082860160005b8581101561489257828403895261488084835161489f565b98850198935090840190600101614868565b5091979650505050505050565b600081518084526020808501945080840160005b838110156148cf578151875295820195908201906001016148b3565b509495945050505050565b600081518084526148f2816020860160208601614c96565b601f01601f19169290920160200192915050565b60008251614918818460208701614c96565b9190910192915050565b60008351614934818460208801614c96565b835190830190614948818360208801614c96565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614984908301846148da565b9695505050505050565b602081526000614171602083018461484a565b6060815260006149b4606083018661484a565b6020830194909452506001600160a01b0391909116604090910152919050565b602081526000614171602083018461489f565b60208152600061417160208301846148da565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f4572726f723a20746f6b656e207472616e73666572207768696c652070617573604082015261195960f21b606082015260800190565b60208082526035908201527f4572726f723a20596f75206578636565642074686520737570706c792063617060408201527420666f722074686973206170706c6520636c61737360581b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f4572726f723a206163636f756e74206973206e6f74206f776e6572206f6620746040820152661bdad95b881a5960ca1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602b908201527f4572726f723a2063616c6c6572206973206e656974686572206f776e6572206e60408201526a1bdc88185c1c1c9bdd995960aa1b606082015260800190565b604051601f8201601f191681016001600160401b0381118282101715614c0957614c09614d84565b604052919050565b60006001600160401b03821115614c2a57614c2a614d84565b5060051b60200190565b60008219821115614c4757614c47614d2c565b500190565b600082614c5b57614c5b614d42565b500490565b6000816000190483118215151615614c7a57614c7a614d2c565b500290565b600082821015614c9157614c91614d2c565b500390565b60005b83811015614cb1578181015183820152602001614c99565b8381111561141a5750506000910152565b600181811c90821680614cd657607f821691505b60208210811415614cf757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614d1157614d11614d2c565b5060010190565b600082614d2757614d27614d42565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612bb457600080fd5b6001600160e01b031981168114612bb457600080fdfe74b05292d1d4b2b48b65261b07099d24244bcb069f138d9a6bfdcf776becac4cddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f6962069aa3fa14caeae5ea33523e05f6f991abca9f2659833dfad42dc9f28fd64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002ed8143a3684df0167a0030f61bb58d9e5a16cb60000000000000000000000004ee58496dc8eba4811709f51a90a1cb4797c27cc000000000000000000000000000000000000000000000000000000000000000e446976696e6520416e617263687900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024441000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d65654c33357436344e6d6b37514343727465396e32776e3244394d344c6567596d73486f45695a536a5736632f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Divine Anarchy
Arg [1] : symbol_ (string): DA
Arg [2] : baseURI_ (string): https://gateway.pinata.cloud/ipfs/QmeeL35t64Nmk7QCCrte9n2wn2D9M4LegYmsHoEiZSjW6c/
Arg [3] : _adminwallets (address): 0x2Ed8143a3684Df0167a0030f61bb58d9e5A16cB6
Arg [4] : _oracle (address): 0x4eE58496DC8EBa4811709F51A90a1CB4797c27cC

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000002ed8143a3684df0167a0030f61bb58d9e5a16cb6
Arg [4] : 0000000000000000000000004ee58496dc8eba4811709f51a90a1cb4797c27cc
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [6] : 446976696e6520416e6172636879000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 4441000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [10] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [11] : 732f516d65654c33357436344e6d6b37514343727465396e32776e3244394d34
Arg [12] : 4c6567596d73486f45695a536a5736632f000000000000000000000000000000


Deployed Bytecode Sourcemap

8213:29026:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28954:368;;;;;;;;;;-1:-1:-1;28954:368:0;;;;;:::i;:::-;;:::i;:::-;;;17435:14:1;;17428:22;17410:41;;17398:2;17383:18;28954:368:0;;;;;;;;22376:1019;;;;;;;;;;-1:-1:-1;22376:1019:0;;;;;:::i;:::-;;:::i;:::-;;12931:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16738:221::-;;;;;;;;;;-1:-1:-1;16738:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;15647:32:1;;;15629:51;;15617:2;15602:18;16738:221:0;15483:203:1;16269:461:0;;;;;;;;;;-1:-1:-1;16269:461:0;;;;;:::i;:::-;;:::i;35936:87::-;;;;;;;;;;-1:-1:-1;35936:87:0;;;;;:::i;:::-;;:::i;29583:105::-;;;;;;;;;;-1:-1:-1;29663:10:0;:17;29583:105;;;17608:25:1;;;17596:2;17581:18;29583:105:0;17462:177:1;17446:119:0;;;;;;;;;;-1:-1:-1;17529:28:0;;;;17446:119;;14828:154;;;;;;;;;;-1:-1:-1;14828:154:0;;;;;:::i;:::-;14913:7;14940:34;;;:24;:34;;;;;;;14828:154;20646:263;;;;;;;;;;-1:-1:-1;20646:263:0;;;;;:::i;:::-;;:::i;8614:32::-;;;;;;;;;;;;8645:1;8614:32;;26942:1079;;;;;;;;;;-1:-1:-1;26942:1079:0;;;;;:::i;:::-;;:::i;33471:387::-;;;;;;;;;;-1:-1:-1;33471:387:0;;;;;:::i;:::-;;:::i;29334:241::-;;;;;;;;;;-1:-1:-1;29334:241:0;;;;;:::i;:::-;;:::i;13779:118::-;;;;;;;;;;-1:-1:-1;13779:118:0;;;;;:::i;:::-;13846:7;13873:16;;;:11;:16;;;;;;;13779:118;34429:128;;;;;;;;;;-1:-1:-1;34429:128:0;;;;;:::i;:::-;;:::i;32705:432::-;;;;;;;;;;-1:-1:-1;32705:432:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20917:::-;;;;;;;;;;-1:-1:-1;20917:432:0;;;;;:::i;:::-;;:::i;32353:340::-;;;;;;;;;;-1:-1:-1;32353:340:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8568:39::-;;;;;;;;;;;;8606:1;8568:39;;9435:47;;;;;;;;;;;;;;;;28058:124;;;;;;;;;;-1:-1:-1;28058:124:0;;;;;:::i;:::-;28120:4;28144:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28144:16:0;:30;;;28058:124;29696:208;;;;;;;;;;-1:-1:-1;29696:208:0;;;;;:::i;:::-;;:::i;13139:101::-;;;;;;;;;;-1:-1:-1;13139:101:0;;;;;:::i;:::-;;:::i;3110:86::-;;;;;;;;;;-1:-1:-1;3157:4:0;3181:7;-1:-1:-1;;;3181:7:0;;;;3110:86;;8410:33;;;;;;;;;;-1:-1:-1;8410:33:0;;;;-1:-1:-1;;;;;8410:33:0;;;15968:97;;;;;;;;;;-1:-1:-1;15968:97:0;;;;;:::i;:::-;16018:7;16045:12;;;:7;:12;;;;;;-1:-1:-1;;;;;16045:12:0;;15968:97;18806:1832;;;;;;:::i;:::-;;:::i;34569:1355::-;;;;;;;;;;-1:-1:-1;34569:1355:0;;;;;:::i;:::-;;:::i;15851:109::-;;;;;;;;;;-1:-1:-1;15851:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;15934:18:0;15907:7;15934:18;;;:9;:18;;;;;;;15851:109;5811:103;;;;;;;;;;;;;:::i;15148:157::-;;;;;;;;;;-1:-1:-1;15148:157:0;;;;;:::i;:::-;-1:-1:-1;;;;;15257:40:0;15230:7;15257:40;;;:31;:40;;;;;;;15148:157;34319:98;;;;;;;;;;-1:-1:-1;34319:98:0;;;;;:::i;:::-;;:::i;10632:20::-;;;;;;;;;;-1:-1:-1;10632:20:0;;;;;;;;8450:21;;;;;;;;;;-1:-1:-1;8450:21:0;;;;-1:-1:-1;;;;;8450:21:0;;;16073:147;;;;;;;;;;-1:-1:-1;16073:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;16179:33:0;16152:7;16179:33;;;:24;:33;;;;;;;16073:147;37132:94;;;;;;;;;;-1:-1:-1;37203:15:0;;;;37132:94;;33149:314;;;;;;;;;;;;;:::i;8696:38::-;;;;;;;;;;;;8733:1;8696:38;;5584:87;;;;;;;;;;-1:-1:-1;5630:7:0;5657:6;-1:-1:-1;;;;;5657:6:0;5584:87;;14990:150;;;;;;;;;;-1:-1:-1;14990:150:0;;;;;:::i;:::-;15073:7;15100:32;;;:22;:32;;;;;;;14990:150;15581:130;;;;;;;;;;-1:-1:-1;15581:130:0;;;;;:::i;:::-;;:::i;13033:98::-;;;;;;;;;;;;;:::i;36035:93::-;;;;;;;;;;-1:-1:-1;36035:93:0;;;;;:::i;:::-;;:::i;23407:796::-;;;;;;;;;;-1:-1:-1;23407:796:0;;;;;:::i;:::-;;:::i;17608:1186::-;;;;;;;;;;-1:-1:-1;17608:1186:0;;;;;:::i;:::-;;:::i;34068:245::-;;;;;;;;;;-1:-1:-1;34068:245:0;;;;;:::i;:::-;;:::i;16967:303::-;;;;;;;;;;-1:-1:-1;16967:303:0;;;;;:::i;:::-;;:::i;14674:146::-;;;;;;;;;;-1:-1:-1;14674:146:0;;;;;:::i;:::-;14755:7;14782:30;;;:20;:30;;;;;;;14674:146;13673:98;;;;;;;;;;-1:-1:-1;13756:6:0;;-1:-1:-1;;;;;13756:6:0;13673:98;;26463:471;;;;;;;;;;-1:-1:-1;26463:471:0;;;;;:::i;:::-;;:::i;24211:1080::-;;;;;;;;;;-1:-1:-1;24211:1080:0;;;;;:::i;:::-;;:::i;8653:36::-;;;;;;;;;;;;8688:1;8653:36;;21357:475;;;;;;;;;;-1:-1:-1;21357:475:0;;;;;:::i;:::-;;:::i;25299:1156::-;;;;;;;;;;-1:-1:-1;25299:1156:0;;;;;:::i;:::-;;:::i;9177:44::-;;;;;;;;;;;;;;;;33870:92;;;;;;;;;;-1:-1:-1;33870:92:0;;;;;:::i;:::-;;:::i;13248:299::-;;;;;;;;;;-1:-1:-1;13248:299:0;;;;;:::i;:::-;;:::i;15443:130::-;;;;;;;;;;-1:-1:-1;15443:130:0;;;;;:::i;:::-;15559:5;-1:-1:-1;15552:12:0;;15443:130;8741:41;;;;;;;;;;;;8781:1;8741:41;;37010:110;;;;;;;;;;-1:-1:-1;37010:110:0;;;;;:::i;:::-;;:::i;10659:24::-;;;;;;;;;;-1:-1:-1;10659:24:0;;;;;;;;;;;15719:124;;;;;;;;;;-1:-1:-1;15719:124:0;;;;;:::i;:::-;;:::i;36870:128::-;;;;;;;;;;-1:-1:-1;36870:128:0;;;;;:::i;:::-;;:::i;33974:82::-;;;;;;;;;;-1:-1:-1;33974:82:0;;;;;:::i;:::-;;:::i;15313:122::-;;;;;;;;;;-1:-1:-1;15313:122:0;;;;;:::i;:::-;15421:5;-1:-1:-1;15414:12:0;;15313:122;9719:45;;;;;;;;;;;;;;;;8790:43;;;;;;;;;;;;8832:1;8790:43;;8840:37;;;;;;;;;;;;8876:1;8840:37;;17278:160;;;;;;;;;;-1:-1:-1;17278:160:0;;;;;:::i;:::-;;:::i;9777:88::-;;;;;;;;;;;;;;;;13555:110;;;;;;;;;;-1:-1:-1;13644:12:0;;-1:-1:-1;;;;;13644:12:0;13555:110;;5925:201;;;;;;;;;;-1:-1:-1;5925:201:0;;;;;:::i;:::-;;:::i;13905:761::-;;;;;;;;;;-1:-1:-1;13905:761:0;;;;;:::i;:::-;;:::i;28954:368::-;29056:4;-1:-1:-1;;;;;;29089:50:0;;-1:-1:-1;;;29089:50:0;;:107;;-1:-1:-1;;;;;;;29156:40:0;;-1:-1:-1;;;29156:40:0;29089:107;:172;;;-1:-1:-1;;;;;;;29213:48:0;;-1:-1:-1;;;29213:48:0;29089:172;:225;;;-1:-1:-1;;;;;;;;;;2701:40:0;;;29278:36;29073:241;28954:368;-1:-1:-1;;28954:368:0:o;22376:1019::-;22508:16;3181:7;2869:10;;-1:-1:-1;;;3181:7:0;;;;22558:9;22550:56;;;;-1:-1:-1;;;22550:56:0;;;;;;;:::i;:::-;;;;;;;;;22631:8;-1:-1:-1;;;;;22623:16:0;:4;-1:-1:-1;;;;;22623:16:0;;;:61;;;;;22643:32;22660:4;22666:8;22643:16;:32::i;:::-;:41;22623:61;22619:256;;;22706:9;22701:163;22721:14;;;22701:163;;;22792:8;-1:-1:-1;;;;;22769:31:0;:19;22781:3;;22785:1;22781:6;;;;;;;:::i;:::-;;;;;;;22769:11;:19::i;:::-;-1:-1:-1;;;;;22769:31:0;;22761:87;;;;-1:-1:-1;;;22761:87:0;;;;;;;:::i;:::-;22737:3;;;;:::i;:::-;;;;22701:163;;;;22619:256;22914:9;22909:479;22929:14;;;22909:479;;;22992:4;-1:-1:-1;;;;;22973:23:0;:7;:15;22981:3;;22985:1;22981:6;;;;;;;:::i;:::-;;;;;;;;;;22973:15;;-1:-1:-1;22973:15:0;;;;;;;;-1:-1:-1;22973:15:0;;-1:-1:-1;;;;;22973:15:0;:23;22965:32;;;;;;23012:38;23033:4;23039:2;23043:3;;23047:1;23043:6;;;;;;;:::i;:::-;;;;;;;23012:20;:38::i;:::-;-1:-1:-1;;;;;23065:15:0;;;;;;:9;:15;;;;;:20;;23084:1;;23065:15;:20;;23084:1;;23065:20;:::i;:::-;;;;-1:-1:-1;;;;;;;23100:13:0;;;;;;:9;:13;;;;;:18;;23117:1;;23100:13;:18;;23117:1;;23100:18;:::i;:::-;;;;-1:-1:-1;23151:2:0;;-1:-1:-1;23133:7:0;:15;23141:3;;23145:1;23141:6;;;;;;;:::i;:::-;;;;;;;23133:15;;;;;;;;;;;;:20;;;;;-1:-1:-1;;;;;23133:20:0;;;;;-1:-1:-1;;;;;23133:20:0;;;;;;23194:3;;23198:1;23194:6;;;;;;;:::i;:::-;;;;;;;23190:2;-1:-1:-1;;;;;23175:26:0;23184:4;-1:-1:-1;;;;;23175:26:0;-1:-1:-1;;;;;;;;;;;23175:26:0;;;;;;;;;23250:1;23216:15;:23;23232:3;;23236:1;23232:6;;;;;;;:::i;:::-;;;;;;;23216:23;;;;;;;;;;;;:36;;;;;-1:-1:-1;;;;;23216:36:0;;;;;-1:-1:-1;;;;;23216:36:0;;;;;;23277:44;23300:4;23306:2;23310:3;;23314:1;23310:6;;;;;;;:::i;:::-;;;;;;;23277:44;;;;;;;;;;;;:22;:44::i;:::-;23269:107;;;;-1:-1:-1;;;23269:107:0;;;;;;;:::i;:::-;22945:3;;;;:::i;:::-;;;;22909:479;;;;22464:931;22376:1019;;;;:::o;12931:94::-;12979:13;13012:5;13005:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12931:94;:::o;16738:221::-;16806:16;28144;;;:7;:16;;;;;;-1:-1:-1;;;;;28144:16:0;16835:72;;;;-1:-1:-1;;;16835:72:0;;25740:2:1;16835:72:0;;;25722:21:1;25779:2;25759:18;;;25752:30;25818:34;25798:18;;;25791:62;-1:-1:-1;;;25869:18:1;;;25862:42;25921:19;;16835:72:0;25538:408:1;16835:72:0;-1:-1:-1;16927:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;16927:24:0;;16738:221::o;16269:461::-;16344:13;16045:12;;;:7;:12;;;;;;-1:-1:-1;;;;;16045:12:0;;;;16395:11;;;;;16387:57;;;;-1:-1:-1;;;16387:57:0;;27358:2:1;16387:57:0;;;27340:21:1;27397:2;27377:18;;;27370:30;27436:34;27416:18;;;27409:62;-1:-1:-1;;;27487:18:1;;;27480:31;27528:19;;16387:57:0;27156:397:1;16387:57:0;2869:10;-1:-1:-1;;;;;16479:21:0;;;;:62;;-1:-1:-1;16504:37:0;16521:5;2869:10;17278:160;:::i;16504:37::-;16457:168;;;;-1:-1:-1;;;16457:168:0;;23037:2:1;16457:168:0;;;23019:21:1;23076:2;23056:18;;;23049:30;23115:34;23095:18;;;23088:62;23186:26;23166:18;;;23159:54;23230:19;;16457:168:0;22835:420:1;16457:168:0;16638:24;;;;:15;:24;;;;;;;;:29;;-1:-1:-1;;;;;;16638:29:0;-1:-1:-1;;;;;16638:29:0;;;;;;;;;16045:7;:12;;;;;;;16683:39;;16638:24;;16045:12;;;;;16683:39;;;16333:397;16269:461;;:::o;35936:87::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;35998:8:::1;:17:::0;;-1:-1:-1;;35998:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35936:87::o;20646:263::-;20757:16;3181:7;2869:10;;-1:-1:-1;;;3181:7:0;;;;20807:9;20799:56;;;;-1:-1:-1;;;20799:56:0;;;;;;;:::i;:::-;20868:33;20878:4;20884:2;20888:8;20898:2;20868:9;:33::i;:::-;20713:196;20646:263;;;:::o;26942:1079::-;2869:10;27090:19;27101:7;27090:10;:19::i;:::-;27082:70;;;;-1:-1:-1;;;27082:70:0;;28162:2:1;27082:70:0;;;28144:21:1;28201:2;28181:18;;;28174:30;28240:34;28220:18;;;28213:62;-1:-1:-1;;;28291:18:1;;;28284:36;28337:19;;27082:70:0;27960:402:1;27082:70:0;27171:29;27192:7;15559:5;-1:-1:-1;15552:12:0;;15443:130;27171:29;27163:75;;;;-1:-1:-1;;;27163:75:0;;27760:2:1;27163:75:0;;;27742:21:1;27799:2;27779:18;;;27772:30;27838:34;27818:18;;;27811:62;-1:-1:-1;;;27889:18:1;;;27882:31;27930:19;;27163:75:0;27558:397:1;27163:75:0;27259:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;27259:28:0;;;:16;;:28;;:64;;;27315:8;-1:-1:-1;;;;;27291:32:0;:20;27303:7;27291:11;:20::i;:::-;-1:-1:-1;;;;;27291:32:0;;27259:64;:103;;;;27327:35;27344:7;27353:8;27327:16;:35::i;:::-;27251:159;;;;-1:-1:-1;;;27251:159:0;;;;;;;:::i;:::-;27423:22;27428:7;27437;27423:4;:22::i;:::-;27456;27461:7;27470;27456:4;:22::i;:::-;8832:1;27594:37;;;;27545:24;27594:37;27545:41;-1:-1:-1;;;;;;;;;;;27545:41:0;:45;;27589:1;27545:45;:::i;:::-;:86;;27537:152;;;;-1:-1:-1;;;27537:152:0;;;;;;;:::i;:::-;8832:1;27702:24;27751:41;;;:24;:41;;-1:-1:-1;;;;;;;;;;;27751:41:0;27729:19;;:63;;27751:41;27729:63;:::i;:::-;27702:90;;27817:59;27846:1;27850:7;27859:16;27817:20;:59::i;:::-;27887:25;;;;:7;:25;;;;;;;;:35;;-1:-1:-1;;;;;;27887:35:0;-1:-1:-1;;;;;27887:35:0;;;;;;;;27933:18;;:9;:18;;;;;:23;;-1:-1:-1;;27887:25:0;27933:23;;-1:-1:-1;;27933:23:0;:::i;:::-;;;;-1:-1:-1;;8832:1:0;27967:41;;;;:24;:41;;-1:-1:-1;;;;;;;;;;;27967:46:0;;28012:1;;27967:41;:46;;28012:1;;27967:46;:::i;:::-;;;;-1:-1:-1;;;;;;;26942:1079:0:o;33471:387::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;6463:1:::1;6605:7;;:19;;6597:63;;;;-1:-1:-1::0;;;6597:63:0::1;;;;;;;:::i;:::-;6463:1;6671:7;:18:::0;33566:21:::2;33606:11:::0;33598:37:::2;;;::::0;-1:-1:-1;;;33598:37:0;;25398:2:1;33598:37:0::2;::::0;::::2;25380:21:1::0;25437:2;25417:18;;;25410:30;-1:-1:-1;;;25456:18:1;;;25449:43;25509:18;;33598:37:0::2;25196:337:1::0;33598:37:0::2;33664:7;33654;:17;33646:64;;;::::0;-1:-1:-1;;;33646:64:0;;24995:2:1;33646:64:0::2;::::0;::::2;24977:21:1::0;25034:2;25014:18;;;25007:30;25073:34;25053:18;;;25046:62;-1:-1:-1;;;25124:18:1;;;25117:32;25166:19;;33646:64:0::2;24793:398:1::0;33646:64:0::2;33780:12;::::0;;33722::::2;33780::::0;;;::::2;::::0;::::2;::::0;;;33747:10:::2;::::0;33771:7;;33739:54:::2;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33721:72;;;33808:7;33804:46;;33816:34;::::0;-1:-1:-1;;;33816:34:0;;24234:2:1;33816:34:0::2;::::0;::::2;24216:21:1::0;24273:2;24253:18;;;24246:30;-1:-1:-1;;;24292:18:1;;;24285:54;24356:18;;33816:34:0::2;24032:348:1::0;33804:46:0::2;-1:-1:-1::0;;6419:1:0::1;6712:22:::0;;-1:-1:-1;33471:387:0:o;29334:241::-;-1:-1:-1;;;;;15934:18:0;;29423:7;15934:18;;;:9;:18;;;;;;29451:5;:24;29443:80;;;;-1:-1:-1;;;29443:80:0;;20560:2:1;29443:80:0;;;20542:21:1;20599:2;20579:18;;;20572:30;20638:34;20618:18;;;20611:62;-1:-1:-1;;;20689:18:1;;;20682:41;20740:19;;29443:80:0;20358:407:1;29443:80:0;-1:-1:-1;;;;;;29541:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;29334:241::o;34429:128::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;34506:12:::1;:43:::0;;-1:-1:-1;;;;;;34506:43:0::1;-1:-1:-1::0;;;;;34506:43:0;;;::::1;::::0;;;::::1;::::0;;34429:128::o;32705:432::-;32817:18;;;32833:1;32817:18;;;32761;32817;;;;;;32791:23;;32817:18;;;;;;;;;;;;;;;;;;;;;32791:44;;32846:30;32879:23;32893:8;32879:13;:23::i;:::-;32943:16;;;32957:1;32943:16;;;;;;;;32846:56;;-1:-1:-1;32913:27:0;;32943:16;;;;;;;;;;;;-1:-1:-1;32943:16:0;32913:46;;32986:13;29663:10;:17;;29583:105;32986:13;32970:10;32981:1;32970:13;;;;;;;;:::i;:::-;;;;;;:29;;;;;33026:16;;33010:10;33021:1;33010:13;;;;;;;;:::i;:::-;;;;;;:32;;;;;33063:13;33053:4;33058:1;33053:7;;;;;;;;:::i;:::-;;;;;;:23;;;;33097:10;33087:4;33092:1;33087:7;;;;;;;;:::i;:::-;;;;;;;;;;:20;-1:-1:-1;33125:4:0;;32705:432;-1:-1:-1;;;32705:432:0:o;20917:::-;21033:16;3181:7;2869:10;;-1:-1:-1;;;3181:7:0;;;;21083:9;21075:56;;;;-1:-1:-1;;;21075:56:0;;;;;;;:::i;:::-;21144:33;21154:4;21160:2;21164:8;21174:2;21144:9;:33::i;:::-;21246:40;21269:4;21275:2;21279;21246:40;;;;;;;;;;;;:22;:40::i;:::-;21238:103;;;;-1:-1:-1;;;21238:103:0;;;;;;;:::i;32353:340::-;32413:16;32442:18;32463:17;32473:6;-1:-1:-1;;;;;15934:18:0;15907:7;15934:18;;;:9;:18;;;;;;;15851:109;32463:17;32442:38;;32491:23;32531:10;-1:-1:-1;;;;;32517:25:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32517:25:0;;32491:51;;32557:9;32553:109;32576:10;32572:1;:14;32553:109;;;32620:30;32640:6;32648:1;32620:19;:30::i;:::-;32608:6;32615:1;32608:9;;;;;;;;:::i;:::-;;;;;;;;;;:42;32588:3;;;;:::i;:::-;;;;32553:109;;;-1:-1:-1;32679:6:0;32353:340;-1:-1:-1;;;32353:340:0:o;29696:208::-;29763:7;29799:13;29663:10;:17;;29583:105;29799:13;29791:5;:21;29783:78;;;;-1:-1:-1;;;29783:78:0;;28981:2:1;29783:78:0;;;28963:21:1;29020:2;29000:18;;;28993:30;29059:34;29039:18;;;29032:62;-1:-1:-1;;;29110:18:1;;;29103:42;29162:19;;29783:78:0;28779:408:1;29783:78:0;29879:10;29890:5;29879:17;;;;;;;;:::i;:::-;;;;;;;;;29872:24;;29696:208;;;:::o;13139:101::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;13213:19;;::::1;::::0;:8:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;:::-;;13139:101:::0;:::o;18806:1832::-;6463:1;6605:7;;:19;;6597:63;;;;-1:-1:-1;;;6597:63:0;;;;;;;:::i;:::-;6463:1;6671:7;:18;19015:16:::1;::::0;2869:10;;19015:25:::1;::::0;19034:6;;19015:25:::1;:::i;:::-;19002:9;:38;;18994:94;;;::::0;-1:-1:-1;;;18994:94:0;;28569:2:1;18994:94:0::1;::::0;::::1;28551:21:1::0;28608:2;28588:18;;;28581:30;28647:34;28627:18;;;28620:62;-1:-1:-1;;;28698:18:1;;;28691:41;28749:19;;18994:94:0::1;28367:407:1::0;18994:94:0::1;-1:-1:-1::0;;;;;19107:21:0;::::1;19099:65;;;::::0;-1:-1:-1;;;19099:65:0;;30225:2:1;19099:65:0::1;::::0;::::1;30207:21:1::0;30264:2;30244:18;;;30237:30;30303:33;30283:18;;;30276:61;30354:18;;19099:65:0::1;30023:355:1::0;19099:65:0::1;3157:4:::0;3181:7;-1:-1:-1;;;3181:7:0;;;;19183:9:::1;19175:56;;;;-1:-1:-1::0;;;19175:56:0::1;;;;;;;:::i;:::-;19250:28;::::0;::::1;;:36;;:28:::0;:36:::1;19242:103;;;::::0;-1:-1:-1;;;19242:103:0;;29802:2:1;19242:103:0::1;::::0;::::1;29784:21:1::0;29841:2;29821:18;;;29814:30;29880:34;29860:18;;;29853:62;-1:-1:-1;;;29931:18:1;;;29924:52;29993:19;;19242:103:0::1;29600:418:1::0;19242:103:0::1;19360:15;::::0;::::1;;:23;;:15:::0;:23:::1;19356:497;;;-1:-1:-1::0;;;;;19408:41:0;::::1;;::::0;;;:31:::1;:41;::::0;;;;;9351:1:::1;::::0;19408:50:::1;::::0;19452:6;;19408:50:::1;:::i;:::-;:90;;19400:148;;;::::0;-1:-1:-1;;;19400:148:0;;22201:2:1;19400:148:0::1;::::0;::::1;22183:21:1::0;22240:2;22220:18;;;22213:30;22279:34;22259:18;;;22252:62;-1:-1:-1;;;22330:18:1;;;22323:43;22383:19;;19400:148:0::1;21999:409:1::0;19400:148:0::1;19597:4;::::0;19613:26:::1;::::0;-1:-1:-1;;13962:2:1;13958:15;;;13954:53;19613:26:0::1;::::0;::::1;13942:66:1::0;19571:70:0::1;::::0;19590:5;;14024:12:1;;19613:26:0::1;;;;;;;;;;;;19603:37;;;;;;19571:18;:70::i;:::-;19563:125;;;::::0;-1:-1:-1;;;19563:125:0;;19332:2:1;19563:125:0::1;::::0;::::1;19314:21:1::0;19371:2;19351:18;;;19344:30;19410:34;19390:18;;;19383:62;-1:-1:-1;;;19461:18:1;;;19454:40;19511:19;;19563:125:0::1;19130:406:1::0;19563:125:0::1;19356:497;;;19774:28;::::0;-1:-1:-1;;;;;19729:32:0;::::1;;::::0;;;:22:::1;:32;::::0;;;;;:41:::1;::::0;19764:6;;19729:41:::1;:::i;:::-;:73;;19721:120;;;::::0;-1:-1:-1;;;19721:120:0;;18929:2:1;19721:120:0::1;::::0;::::1;18911:21:1::0;18968:2;18948:18;;;18941:30;19007:34;18987:18;;;18980:62;-1:-1:-1;;;19058:18:1;;;19051:32;19100:19;;19721:120:0::1;18727:398:1::0;19721:120:0::1;19865:29;19897:15;19905:6;19897:7;:15::i;:::-;19865:47;;19923:26;19952:10;19963:1;19952:13;;;;;;;;:::i;:::-;;;;;;;19923:42;;19976:25;20004:10;20015:1;20004:13;;;;;;;;:::i;:::-;;;;;;;19976:41;;20035:9;20030:381;20054:6;20050:1;:10;20030:381;;;20082:55;20111:1;20115:7;20124:9;20134:1;20124:12;;;;;;;;:::i;:::-;;;;;;;20082:20;:55::i;:::-;20178:7;20154;:21;20162:9;20172:1;20162:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;20154:21;;;;::::1;::::0;;;;;;;;-1:-1:-1;20154:21:0;;;:31;;-1:-1:-1;;;;;;20154:31:0::1;-1:-1:-1::0;;;;;20154:31:0;;::::1;;::::0;;20200:18;;::::1;::::0;;:9:::1;:18:::0;;;;;:23;;-1:-1:-1;;;20200:23:0::1;::::0;-1:-1:-1;;20200:23:0::1;:::i;:::-;;;;;;;;20266:8;20275:1;20266:11;;;;;;;;:::i;:::-;;;;;;;20238;:25;20250:9;20260:1;20250:12;;;;;;;;:::i;:::-;;;;;;;20238:25;;;;;;;;;;;:39;;;;20333:1;20292:24;:37;20317:8;20326:1;20317:11;;;;;;;;:::i;:::-;;;;;;;20292:37;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;20386:9;20396:1;20386:12;;;;;;;;:::i;:::-;;;;;;;20377:7;-1:-1:-1::0;;;;;20356:43:0::1;20373:1;-1:-1:-1::0;;;;;20356:43:0::1;-1:-1:-1::0;;;;;;;;;;;20356:43:0::1;;;;;;;;;20062:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20030:381;;;-1:-1:-1::0;20453:15:0::1;::::0;::::1;;:23;;:15:::0;:23:::1;20449:182;;;-1:-1:-1::0;;;;;20493:41:0;::::1;;::::0;;;:31:::1;:41;::::0;;;;:51;;20538:6;;20493:41;:51:::1;::::0;20538:6;;20493:51:::1;:::i;:::-;::::0;;;-1:-1:-1;20449:182:0::1;::::0;-1:-1:-1;20449:182:0::1;;-1:-1:-1::0;;;;;20577:32:0;::::1;;::::0;;;:22:::1;:32;::::0;;;;:42;;20613:6;;20577:32;:42:::1;::::0;20613:6;;20577:42:::1;:::i;:::-;::::0;;;-1:-1:-1;;20449:182:0::1;-1:-1:-1::0;;6419:1:0;6712:22;;-1:-1:-1;;;;;18806:1832:0:o;34569:1355::-;34685:18;;;34701:1;34685:18;;;34628:17;34685:18;;;;;;34658:24;;34685:18;;;;;;;;;;;;;;;;;;;;;34658:45;;34714:25;34756:7;-1:-1:-1;;;;;34742:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34742:22:0;;34714:50;;34775:25;34817:7;-1:-1:-1;;;;;34803:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34803:22:0;-1:-1:-1;34775:50:0;-1:-1:-1;34836:16:0;;;34920;34935:1;34920:12;:16;:::i;:::-;34910:27;34894:43;;34950:879;34968:7;34956:8;:19;34950:879;;34991:20;35357:5;35153:15;35200:5;2869:10;35106:206;;;;;;15266:19:1;;;;15301:12;;15294:28;;;;-1:-1:-1;;15360:2:1;15356:15;;;15352:53;15338:12;;;15331:75;15422:12;;;15415:28;;;15459:13;;35106:206:0;;;;;;;;;;;;35070:265;;;;;;35040:314;;:322;;;;:::i;:::-;34991:386;-1:-1:-1;35392:12:0;;35419:157;35440:8;35438:1;:10;35419:157;;;35492:8;35501:1;35492:11;;;;;;;;:::i;:::-;;;;;;;35476:12;:27;35473:88;;;35537:4;35527:14;;35473:88;35450:3;;;;:::i;:::-;;;;35419:157;;;-1:-1:-1;28120:4:0;28144:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28144:16:0;:30;;;35593:33;;;35619:7;35618:8;35593:33;35590:204;;;35667:12;35646:8;35655;35646:18;;;;;;;;:::i;:::-;;;;;;:33;;;;;35719:27;35733:12;35719:13;:27::i;:::-;35698:8;35707;35698:18;;;;;;;;:::i;:::-;;;;;;;;;;:48;35765:13;35777:1;35765:13;;:::i;:::-;;;35590:204;35808:9;35816:1;35808:9;;:::i;:::-;;;34976:853;;34950:879;;;35850:8;35839:5;35845:1;35839:8;;;;;;;;:::i;:::-;;;;;;:19;;;;35880:8;35869:5;35875:1;35869:8;;;;;;;;:::i;:::-;;;;;;;;;;:19;-1:-1:-1;35902:5:0;;34569:1355;-1:-1:-1;;;;;;34569:1355:0:o;5811:103::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;5876:30:::1;5903:1;5876:18;:30::i;:::-;5811:103::o:0;34319:98::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;34384:6:::1;:25:::0;;-1:-1:-1;;;;;;34384:25:0::1;-1:-1:-1::0;;;;;34384:25:0;;;::::1;::::0;;;::::1;::::0;;34319:98::o;33149:314::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;6463:1:::1;6605:7;;:19;;6597:63;;;;-1:-1:-1::0;;;6597:63:0::1;;;;;;;:::i;:::-;6463:1;6671:7;:18:::0;33232:21:::2;33272:11:::0;33264:37:::2;;;::::0;-1:-1:-1;;;33264:37:0;;25398:2:1;33264:37:0::2;::::0;::::2;25380:21:1::0;25437:2;25417:18;;;25410:30;-1:-1:-1;;;25456:18:1;;;25449:43;25509:18;;33264:37:0::2;25196:337:1::0;33264:37:0::2;33371:12;::::0;;33313::::2;33371::::0;;;::::2;::::0;::::2;::::0;;;33338:10:::2;::::0;33362:7;;33330:54:::2;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33312:72;;;33399:7;33395:46;;33407:34;::::0;-1:-1:-1;;;33407:34:0;;24234:2:1;33407:34:0::2;::::0;::::2;24216:21:1::0;24273:2;24253:18;;;24246:30;-1:-1:-1;;;24292:18:1;;;24285:54;24356:18;;33407:34:0::2;24032:348:1::0;33395:46:0::2;-1:-1:-1::0;;6419:1:0::1;6712:22:::0;;33149:314::o;15581:130::-;15649:4;15681:5;15674:3;:12;;:28;;;;-1:-1:-1;;15697:5:0;-1:-1:-1;15690:12:0;;15581:130::o;13033:98::-;13083:13;13116:7;13109:14;;;;;:::i;36035:93::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;36099:12:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;36099:21:0;;::::1;::::0;;;::::1;::::0;;36035:93::o;23407:796::-;23500:16;3181:7;2869:10;;-1:-1:-1;;;3181:7:0;;;;23550:9;23542:56;;;;-1:-1:-1;;;23542:56:0;;;;;;;:::i;:::-;23630:8;-1:-1:-1;;;;;23619:19:0;:7;-1:-1:-1;;;;;23619:19:0;;:50;;;;23661:8;-1:-1:-1;;;;;23642:27:0;:15;23654:2;23642:11;:15::i;:::-;-1:-1:-1;;;;;23642:27:0;;23619:50;:89;;;;23673:35;23690:7;23699:8;23673:16;:35::i;:::-;23611:145;;;;-1:-1:-1;;;23611:145:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23775:21:0;;23767:67;;;;-1:-1:-1;;;23767:67:0;;20158:2:1;23767:67:0;;;20140:21:1;20197:2;20177:18;;;20170:30;20236:34;20216:18;;;20209:62;-1:-1:-1;;;20287:18:1;;;20280:31;20328:19;;23767:67:0;19956:397:1;23767:67:0;23853:11;;;;:7;:11;;;;;;-1:-1:-1;;;;;23853:22:0;;;:11;;:22;23845:74;;;;-1:-1:-1;;;23845:74:0;;;;;;;:::i;:::-;23931:45;23952:7;23969:1;23973:2;23931:20;:45::i;:::-;24037:1;24015:11;;;:7;:11;;;;;;;;:24;;-1:-1:-1;;;;;;24015:24:0;;;-1:-1:-1;;;;;24050:18:0;;;;:9;:18;;;;;:23;;24015:24;;24037:1;24050:23;;24015:24;;24050:23;:::i;:::-;;;;-1:-1:-1;;24091:33:0;;24121:2;;24117:1;;-1:-1:-1;;;;;24091:33:0;;;-1:-1:-1;;;;;;;;;;;24091:33:0;24117:1;;24091:33;-1:-1:-1;24193:1:0;24163:19;;;:15;:19;;;;;:32;;-1:-1:-1;;;;;;24163:32:0;;;-1:-1:-1;23407:796:0:o;17608:1186::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;17731:12:::1;::::0;:38:::1;::::0;;-1:-1:-1;;;17731:38:0;;;;17700:28:::1;::::0;-1:-1:-1;;;;;17731:12:0::1;::::0;:36:::1;::::0;:38:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:12;:38;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3157:4:::0;3181:7;17700:69;;-1:-1:-1;;;;3181:7:0;;;;17788:9:::1;17780:56;;;;-1:-1:-1::0;;;17780:56:0::1;;;;;;;:::i;:::-;17847:25;17875:14;17890:1;17875:17;;;;;;;;:::i;:::-;;;;;;;17847:45;;17903:25;17931:14;17946:1;17931:17;;;;;;;;:::i;:::-;;;;;;;17903:45;;17986:8;:15;17967:8;:15;:34;17959:43;;;::::0;::::1;;18030:15:::0;;18094:22:::1;::::0;18064:17:::1;::::0;:26:::1;::::0;18030:15;;18064:26:::1;:::i;:::-;:52;;18056:124;;;::::0;-1:-1:-1;;;18056:124:0;;26930:2:1;18056:124:0::1;::::0;::::1;26912:21:1::0;26969:2;26949:18;;;26942:30;27008:34;26988:18;;;26981:62;27079:29;27059:18;;;27052:57;27126:19;;18056:124:0::1;26728:423:1::0;18056:124:0::1;18196:9;18191:434;18215:8;:15;18211:1;:19;18191:434;;;18252:67;18281:1;18285:20;18307:8;18316:1;18307:11;;;;;;;;:::i;18252:67::-;-1:-1:-1::0;;;;;18334:31:0;::::1;;::::0;;;:9:::1;:31;::::0;;;;:36;;18369:1:::1;::::0;18334:31;:36:::1;::::0;18369:1;;18334:36:::1;:::i;:::-;;;;;;;;18408:20;18385:7;:20;18393:8;18402:1;18393:11;;;;;;;;:::i;:::-;;;;;;;18385:20;;;;;;;;;;;;:43;;;;;-1:-1:-1::0;;;;;18385:43:0::1;;;;;-1:-1:-1::0;;;;;18385:43:0::1;;;;;;18470:8;18479:1;18470:11;;;;;;;;:::i;:::-;;;;;;;18443;:24;18455:8;18464:1;18455:11;;;;;;;;:::i;:::-;;;;;;;18443:24;;;;;;;;;;;:38;;;;18537:1;18496:24;:37;18521:8;18530:1;18521:11;;;;;;;;:::i;:::-;;;;;;;18496:37;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;18601:8;18610:1;18601:11;;;;;;;;:::i;:::-;;;;;;;18579:20;-1:-1:-1::0;;;;;18558:55:0::1;18575:1;-1:-1:-1::0;;;;;18558:55:0::1;-1:-1:-1::0;;;;;;;;;;;18558:55:0::1;;;;;;;;;18232:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18191:434;;;;18658:6;18637:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;18701:22:0::1;::::0;18680:17:::1;::::0;:43:::1;18677:110;;;18740:28;:35:::0;;-1:-1:-1;;18740:35:0::1;18771:4;18740:35;::::0;;18677:110:::1;17689:1105;;;;17608:1186:::0;:::o;34068:245::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;34145:22:::1;:32:::0;;;34199:17:::1;::::0;:43;::::1;34196:110;;;34259:28;:35:::0;;-1:-1:-1;;34259:35:0::1;34290:4;34259:35;::::0;;34196:110:::1;34068:245:::0;:::o;16967:303::-;2869:10;-1:-1:-1;;;;;17064:24:0;;;;17056:76;;;;-1:-1:-1;;;17056:76:0;;24587:2:1;17056:76:0;;;24569:21:1;24626:2;24606:18;;;24599:30;24665:34;24645:18;;;24638:62;-1:-1:-1;;;24716:18:1;;;24709:37;24763:19;;17056:76:0;24385:403:1;17056:76:0;2869:10;17145:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;17145:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;17145:53:0;;;;;;;;;;17214:48;;17410:41:1;;;17145:42:0;;2869:10;17214:48;;17383:18:1;17214:48:0;;;;;;;16967:303;;:::o;26463:471::-;2869:10;26600:25;26617:7;26600:16;:25::i;:::-;26592:82;;;;-1:-1:-1;;;26592:82:0;;23821:2:1;26592:82:0;;;23803:21:1;23860:2;23840:18;;;23833:30;23899:34;23879:18;;;23872:62;-1:-1:-1;;;23950:18:1;;;23943:42;24002:19;;26592:82:0;23619:408:1;26592:82:0;26693:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;26693:28:0;;;:16;;:28;;:64;;;26749:8;-1:-1:-1;;;;;26725:32:0;:20;26737:7;26725:11;:20::i;:::-;-1:-1:-1;;;;;26725:32:0;;26693:64;:103;;;;26761:35;26778:7;26787:8;26761:16;:35::i;:::-;26685:159;;;;-1:-1:-1;;;26685:159:0;;;;;;;:::i;:::-;26855:22;26860:7;26869;26855:4;:22::i;:::-;-1:-1:-1;;;;;26888:33:0;;;;;;:24;:33;;;;;:38;;26925:1;;26888:33;:38;;26925:1;;26888:38;:::i;:::-;;;;-1:-1:-1;;;;;26463:471:0:o;24211:1080::-;24319:16;3181:7;2869:10;;-1:-1:-1;;;3181:7:0;;;;24369:9;24361:56;;;;-1:-1:-1;;;24361:56:0;;;;;;;:::i;:::-;24445:8;-1:-1:-1;;;;;24434:19:0;:7;-1:-1:-1;;;;;24434:19:0;;;:67;;;;;24457:35;24474:7;24483:8;24457:16;:35::i;:::-;:44;24434:67;24430:262;;;24523:9;24518:163;24542:3;:10;24538:1;:14;24518:163;;;24609:8;-1:-1:-1;;;;;24586:31:0;:19;24598:3;24602:1;24598:6;;;;;;;;:::i;:::-;;;;;;;24586:11;:19::i;:::-;-1:-1:-1;;;;;24586:31:0;;24578:87;;;;-1:-1:-1;;;24578:87:0;;;;;;;:::i;:::-;24554:3;;;;:::i;:::-;;;;24518:163;;;;24430:262;24710:9;24705:146;24729:3;:10;24725:1;:14;24705:146;;;24788:7;-1:-1:-1;;;;;24769:26:0;:7;:15;24777:3;24781:1;24777:6;;;;;;;;:::i;:::-;;;;;;;;;;;;24769:15;;;;;;;;;;-1:-1:-1;24769:15:0;;-1:-1:-1;;;;;24769:15:0;:26;24761:78;;;;-1:-1:-1;;;24761:78:0;;;;;;;:::i;:::-;24741:3;;;;:::i;:::-;;;;24705:146;;;;24894:9;24889:255;24913:3;:10;24909:1;:14;24889:255;;;24945:49;24966:7;24983:1;24987:3;24991:1;24987:6;;;;;;;;:::i;24945:49::-;25035:1;25009:7;:15;25017:3;25021:1;25017:6;;;;;;;;:::i;:::-;;;;;;;;;;;;25009:15;;;;;;;;;;;;;-1:-1:-1;25009:15:0;;;:28;;-1:-1:-1;;;;;;25009:28:0;-1:-1:-1;;;;;25009:28:0;;;;;;25052:18;;;;;:9;:18;;;;;:23;;-1:-1:-1;;;25052:23:0;;-1:-1:-1;;25052:23:0;:::i;:::-;;;;;;;;25125:3;25129:1;25125:6;;;;;;;;:::i;:::-;;;;;;;25121:1;-1:-1:-1;;;;;25095:37:0;25104:7;-1:-1:-1;;;;;25095:37:0;-1:-1:-1;;;;;;;;;;;25095:37:0;;;;;;;;;24925:3;;;;:::i;:::-;;;;24889:255;;;;25187:9;25182:102;25204:3;:10;25200:1;:14;25182:102;;;25270:1;25236:15;:23;25252:3;25256:1;25252:6;;;;;;;;:::i;:::-;;;;;;;25236:23;;;;;;;;;;;;:36;;;;;-1:-1:-1;;;;;25236:36:0;;;;;-1:-1:-1;;;;;25236:36:0;;;;;;25216:3;;;;;:::i;:::-;;;;25182:102;;21357:475;21494:16;3181:7;2869:10;;-1:-1:-1;;;3181:7:0;;;;21544:9;21536:56;;;;-1:-1:-1;;;21536:56:0;;;;;;;:::i;:::-;21605:33;21615:4;21621:2;21625:8;21635:2;21605:9;:33::i;:::-;21725:42;21748:4;21754:2;21758;21762:4;;21725:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21725:22:0;;-1:-1:-1;;;21725:42:0:i;:::-;21717:105;;;;-1:-1:-1;;;21717:105:0;;;;;;;:::i;25299:1156::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;25459:6:::1;25440:8;:15;:25;25432:68;;;::::0;-1:-1:-1;;;25432:68:0;;23462:2:1;25432:68:0::1;::::0;::::1;23444:21:1::0;23501:2;23481:18;;;23474:30;23540:32;23520:18;;;23513:60;23590:18;;25432:68:0::1;23260:354:1::0;25432:68:0::1;8832:1;25519:10;:29;:56;;;;8876:1;25552:10;:23;25519:56;25511:107;;;::::0;-1:-1:-1;;;25511:107:0;;18522:2:1;25511:107:0::1;::::0;::::1;18504:21:1::0;18561:2;18541:18;;;18534:30;18600:34;18580:18;;;18573:62;-1:-1:-1;;;18651:18:1;;;18644:36;18697:19;;25511:107:0::1;18320:402:1::0;25511:107:0::1;25686:32;::::0;;;:20:::1;:32;::::0;;;;;;;;25637:24:::1;:36:::0;;;;;;;:45:::1;::::0;25676:6;;25637:45:::1;:::i;:::-;:81;;25629:147;;;;-1:-1:-1::0;;;25629:147:0::1;;;;;;;:::i;:::-;25789:21;8832:1;25827:10;:29;25823:241;;;8832:1;25911:41;::::0;:24:::1;:41;::::0;-1:-1:-1;;;;;;;;;;;25911:41:0;25889:19:::1;::::0;:63:::1;::::0;25911:41;25889:63:::1;:::i;:::-;25873:79;;25823:241;;;8876:1;26017:35;::::0;:24:::1;:35;::::0;;;26001:13:::1;::::0;:51:::1;::::0;26017:35;26001:51:::1;:::i;:::-;25985:67;;25823:241;26081:9;26076:312;26100:8;:15;26096:1;:19;26076:312;;;26137:15;26155:17;26171:1:::0;26155:13;:17:::1;:::i;:::-;26137:35;;26187:54;26216:1;26220:8;26229:1;26220:11;;;;;;;;:::i;:::-;;;;;;;26233:7;26187:20;:54::i;:::-;26275:8;26284:1;26275:11;;;;;;;;:::i;:::-;;;;;;;26256:7;:16;26264:7;26256:16;;;;;;;;;;;;:30;;;;;-1:-1:-1::0;;;;;26256:30:0::1;;;;;-1:-1:-1::0;;;;;26256:30:0::1;;;;;;26327:1;26301:9;:22;26311:8;26320:1;26311:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;26301:22:0::1;-1:-1:-1::0;;;;;26301:22:0::1;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26343:20:0::1;::::0;;;:11:::1;:20;::::0;;;;:33;;;26117:3;::::1;::::0;::::1;:::i;:::-;;;;26076:312;;;-1:-1:-1::0;26401:36:0::1;::::0;;;:24:::1;:36;::::0;;;;:46;;26441:6;;26401:36;:46:::1;::::0;26441:6;;26401:46:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;25299:1156:0:o;33870:92::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;33931:15:::1;:23:::0;;-1:-1:-1;;33931:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33870:92::o;13248:299::-;28120:4;28144:16;;;:7;:16;;;;;;13315:13;;-1:-1:-1;;;;;28144:16:0;13341:75;;;;-1:-1:-1;;;13341:75:0;;26514:2:1;13341:75:0;;;26496:21:1;26553:2;26533:18;;;26526:30;26592:34;26572:18;;;26565:62;-1:-1:-1;;;26643:18:1;;;26636:45;26698:19;;13341:75:0;26312:411:1;13341:75:0;13429:21;13453:8;13429:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13503:7;13512:25;13529:7;13512:16;:25::i;:::-;13486:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13472:67;;;13248:299;;;:::o;37010:110::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;37084:16:::1;:28:::0;37010:110::o;15719:124::-;15781:4;15813:5;15806:3;:12;;:28;;;;-1:-1:-1;;15829:5:0;-1:-1:-1;15822:12:0;;15719:124::o;36870:128::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;36952:28:::1;:38:::0;36870:128::o;33974:82::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;34036:4:::1;:12:::0;33974:82::o;17278:160::-;-1:-1:-1;;;;;17393:27:0;;;17369:4;17393:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;17278:160::o;5925:201::-;5630:7;5657:6;-1:-1:-1;;;;;5657:6:0;2869:10;5719:23;5711:68;;;;-1:-1:-1;;;5711:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6014:22:0;::::1;6006:73;;;::::0;-1:-1:-1;;;6006:73:0;;21391:2:1;6006:73:0::1;::::0;::::1;21373:21:1::0;21430:2;21410:18;;;21403:30;21469:34;21449:18;;;21442:62;-1:-1:-1;;;21520:18:1;;;21513:36;21566:19;;6006:73:0::1;21189:402:1::0;6006:73:0::1;6090:28;6109:8;6090:18;:28::i;13905:761::-:0;13958:7;14031:8;14027:632;;-1:-1:-1;8606:1:0;;13905:761;-1:-1:-1;13905:761:0:o;14027:632::-;14104:1;14097:3;:8;;:20;;;;;14116:1;14109:3;:8;;14097:20;14093:566;;;-1:-1:-1;8645:1:0;;13905:761;-1:-1:-1;13905:761:0:o;14093:566::-;14167:3;14174:1;14167:8;:21;;;;;14179:3;14186:2;14179:9;14167:21;14163:496;;;-1:-1:-1;8688:1:0;;13905:761;-1:-1:-1;13905:761:0:o;14163:496::-;14249:2;14242:3;:9;;:24;;;;;14262:4;14255:3;:11;;14242:24;14238:421;;;-1:-1:-1;8733:1:0;;13905:761;-1:-1:-1;13905:761:0:o;14238:421::-;14329:4;14322:3;:11;;:27;;;;;14344:5;14337:3;:12;;14322:27;14318:341;;;-1:-1:-1;8781:1:0;;13905:761;-1:-1:-1;13905:761:0:o;14318:341::-;14415:5;14408:3;:12;;:28;;;;;14431:5;14424:3;:12;;14408:28;14404:255;;;-1:-1:-1;8832:1:0;;13905:761;-1:-1:-1;13905:761:0:o;14404:255::-;14504:5;14497:3;:12;;:28;;;;;14520:5;14513:3;:12;;14497:28;14493:166;;;-1:-1:-1;8876:1:0;;13905:761;-1:-1:-1;13905:761:0:o;14493:166::-;14591:56;;-1:-1:-1;;;14591:56:0;;19743:2:1;14591:56:0;;;19725:21:1;19782:2;19762:18;;;19755:30;19821:34;19801:18;;;19794:62;-1:-1:-1;;;19872:18:1;;;19865:44;19926:19;;14591:56:0;19541:410:1;14493:166:0;13905:761;;;:::o;29919:516::-;-1:-1:-1;;;;;30052:18:0;;30048:187;;30087:40;30119:7;30769:10;:17;;30742:24;;;;:15;:24;;;;;:44;;;30797:24;;;;;;;;;;;;30665:164;30087:40;30048:187;;;30157:2;-1:-1:-1;;;;;30149:10:0;:4;-1:-1:-1;;;;;30149:10:0;;30145:90;;30176:47;30209:4;30215:7;30176:32;:47::i;:::-;-1:-1:-1;;;;;30249:16:0;;30245:183;;30282:45;30319:7;30282:36;:45::i;:::-;29919:516;;;:::o;30245:183::-;30355:4;-1:-1:-1;;;;;30349:10:0;:2;-1:-1:-1;;;;;30349:10:0;;30345:83;;-1:-1:-1;;;;;15934:18:0;;;;30528:14;15934:18;;;:9;:18;;;;;;;;;30569:12;:16;;;;;:24;;;;;;;;:34;;;30614:26;;;:17;:26;;;;;:35;-1:-1:-1;29919:516:0:o;28190:756::-;28302:4;-1:-1:-1;;;;;28323:13:0;;5269:20;5317:8;28319:620;;28359:72;;-1:-1:-1;;;28359:72:0;;-1:-1:-1;;;;;28359:36:0;;;;;:72;;2869:10;;28410:4;;28416:7;;28425:5;;28359:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28359:72:0;;;;;;;;-1:-1:-1;;28359:72:0;;;;;;;;;;;;:::i;:::-;;;28355:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28601:13:0;;28597:272;;28644:60;;-1:-1:-1;;;28644:60:0;;;;;;;:::i;28597:272::-;28819:6;28813:13;28804:6;28800:2;28796:15;28789:38;28355:529;-1:-1:-1;;;;;;28482:51:0;-1:-1:-1;;;28482:51:0;;-1:-1:-1;28475:58:0;;28319:620;-1:-1:-1;28923:4:0;28319:620;28190:756;;;;;;:::o;21840:528::-;21951:11;;;;:7;:11;;;;;;-1:-1:-1;;;;;21951:19:0;;;:11;;:19;21943:28;;;;;;21998:8;-1:-1:-1;;;;;21990:16:0;:4;-1:-1:-1;;;;;21990:16:0;;:47;;;;22029:8;-1:-1:-1;;;;;22010:27:0;:15;22022:2;22010:11;:15::i;:::-;-1:-1:-1;;;;;22010:27:0;;21990:47;:83;;;;22041:32;22058:4;22064:8;22041:16;:32::i;:::-;21982:139;;;;-1:-1:-1;;;21982:139:0;;;;;;;:::i;:::-;22132:34;22153:4;22159:2;22163;22132:20;:34::i;:::-;-1:-1:-1;;;;;22201:15:0;;;;;;:9;:15;;;;;:20;;22220:1;;22201:15;:20;;22220:1;;22201:20;:::i;:::-;;;;-1:-1:-1;;;;;;;22232:13:0;;;;;;:9;:13;;;;;:18;;22249:1;;22232:13;:18;;22249:1;;22232:18;:::i;:::-;;;;-1:-1:-1;;22261:11:0;;;;:7;:11;;;;;;:16;;-1:-1:-1;;;;;;22261:16:0;-1:-1:-1;;;;;22261:16:0;;;;;;;;;22295:22;;22261:11;;22295:22;;;;-1:-1:-1;;;;;;;;;;;22295:22:0;;22358:1;22328:19;;;:15;:19;;;;;:32;;-1:-1:-1;;;;;;22328:32:0;;;-1:-1:-1;;;21840:528:0:o;6782:190::-;6907:4;6960;6931:25;6944:5;6951:4;6931:12;:25::i;:::-;:33;;6782:190;-1:-1:-1;;;;6782:190:0:o;36140:718::-;36226:8;;36191:18;;36226:8;;36225:9;:26;;;;-1:-1:-1;36239:12:0;;;;;;;36238:13;36225:26;36222:629;;;36271:6;;;;;;;;;-1:-1:-1;;;;;36271:6:0;-1:-1:-1;;;;;36271:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36271:25:0;;;;;;;;;;;;:::i;:::-;;;36267:300;;36405:22;36430:21;36443:7;36430:12;:21::i;:::-;36405:46;;36475:47;36489:3;36494:15;36511:10;36475:47;;;;;;;;:::i;:::-;;;;;;;;36548:3;36140:718;-1:-1:-1;;36140:718:0:o;36222:629::-;36588:8;;;;36587:9;:25;;;;-1:-1:-1;36600:12:0;;;;;;;36587:25;36584:267;;;36635:6;;;;;;;;;-1:-1:-1;;;;;36635:6:0;-1:-1:-1;;;;;36635:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36635:25:0;;;;;;;;;;;;:::i;36584:267::-;36693:22;36718:21;36731:7;36718:12;:21::i;6138:191::-;6212:16;6231:6;;-1:-1:-1;;;;;6248:17:0;;;-1:-1:-1;;;;;;6248:17:0;;;;;;6281:40;;6231:6;;;;;;;6281:40;;6212:16;6281:40;6201:128;6138:191;:::o;3751:532::-;3807:13;3837:10;3833:53;;-1:-1:-1;;3864:10:0;;;;;;;;;;;;-1:-1:-1;;;3864:10:0;;;;;3751:532::o;3833:53::-;3911:5;3896:12;3952:78;3959:9;;3952:78;;3985:8;;;;:::i;:::-;;-1:-1:-1;4008:10:0;;-1:-1:-1;4016:2:0;4008:10;;:::i;:::-;;;3952:78;;;4040:19;4072:6;-1:-1:-1;;;;;4062:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4062:17:0;;4040:39;;4090:154;4097:10;;4090:154;;4124:11;4134:1;4124:11;;:::i;:::-;;-1:-1:-1;4193:10:0;4201:2;4193:5;:10;:::i;:::-;4180:24;;:2;:24;:::i;:::-;4167:39;;4150:6;4157;4150:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;4150:56:0;;;;;;;;-1:-1:-1;4221:11:0;4230:2;4221:11;;:::i;:::-;;;4090:154;;30837:981;-1:-1:-1;;;;;15934:18:0;;31103:22;15934:18;;;:9;:18;;;;;;31128:19;;31146:1;;31128:19;:::i;:::-;31158:18;31179:26;;;:17;:26;;;;;;31103:44;;-1:-1:-1;31312:28:0;;;31308:328;;-1:-1:-1;;;;;31379:18:0;;31357:19;31379:18;;;:12;:18;;;;;;;;:34;;;;;;;;;31430:30;;;;;;:44;;;31547:30;;:17;:30;;;;;:43;;;31308:328;-1:-1:-1;31732:26:0;;;;:17;:26;;;;;;;;31725:33;;;-1:-1:-1;;;;;31776:18:0;;;;;:12;:18;;;;;:34;;;;;;;31769:41;30837:981::o;31826:515::-;31933:10;:17;31908:22;;31933:21;;31953:1;;31933:21;:::i;:::-;31965:18;31986:24;;;:15;:24;;;;;;32043:10;:26;;31908:46;;-1:-1:-1;31986:24:0;;31908:46;;32043:26;;;;;;:::i;:::-;;;;;;;;;32021:48;;32107:11;32082:10;32093;32082:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;32187:28;;;:15;:28;;;;;;;:41;;;32282:24;;;;;32275:31;32317:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31897:444;;;31826:515;:::o;6986:701::-;7069:7;7112:4;7069:7;7127:523;7151:5;:12;7147:1;:16;7127:523;;;7185:20;7208:5;7214:1;7208:8;;;;;;;;:::i;:::-;;;;;;;7185:31;;7251:12;7235;:28;7231:408;;7388:44;;;;;;14204:19:1;;;14239:12;;;14232:28;;;14276:12;;7388:44:0;;;;;;;;;;;;7378:55;;;;;;7363:70;;7231:408;;;7578:44;;;;;;14204:19:1;;;14239:12;;;14232:28;;;14276:12;;7578:44:0;;;;;;;;;;;;7568:55;;;;;;7553:70;;7231:408;-1:-1:-1;7165:3:0;;;;:::i;:::-;;;;7127:523;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:673:1;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:1;;14:673;-1:-1:-1;;;;;;;14:673:1:o;692:160::-;757:20;;813:13;;806:21;796:32;;786:60;;842:1;839;832:12;857:247;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;1024:9;1011:23;1043:31;1068:5;1043:31;:::i;:::-;1093:5;857:247;-1:-1:-1;;;857:247:1:o;1109:251::-;1179:6;1232:2;1220:9;1211:7;1207:23;1203:32;1200:52;;;1248:1;1245;1238:12;1200:52;1280:9;1274:16;1299:31;1324:5;1299:31;:::i;1365:388::-;1433:6;1441;1494:2;1482:9;1473:7;1469:23;1465:32;1462:52;;;1510:1;1507;1500:12;1462:52;1549:9;1536:23;1568:31;1593:5;1568:31;:::i;:::-;1618:5;-1:-1:-1;1675:2:1;1660:18;;1647:32;1688:33;1647:32;1688:33;:::i;:::-;1740:7;1730:17;;;1365:388;;;;;:::o;1758:891::-;1862:6;1870;1878;1886;1939:2;1927:9;1918:7;1914:23;1910:32;1907:52;;;1955:1;1952;1945:12;1907:52;1994:9;1981:23;2013:31;2038:5;2013:31;:::i;:::-;2063:5;-1:-1:-1;2120:2:1;2105:18;;2092:32;2133:33;2092:32;2133:33;:::i;:::-;2185:7;-1:-1:-1;2243:2:1;2228:18;;2215:32;-1:-1:-1;;;;;2296:14:1;;;2293:34;;;2323:1;2320;2313:12;2293:34;2361:6;2350:9;2346:22;2336:32;;2406:7;2399:4;2395:2;2391:13;2387:27;2377:55;;2428:1;2425;2418:12;2377:55;2468:2;2455:16;2494:2;2486:6;2483:14;2480:34;;;2510:1;2507;2500:12;2480:34;2563:7;2558:2;2548:6;2545:1;2541:14;2537:2;2533:23;2529:32;2526:45;2523:65;;;2584:1;2581;2574:12;2523:65;1758:891;;;;-1:-1:-1;;2615:2:1;2607:11;;-1:-1:-1;;;1758:891:1:o;2654:456::-;2731:6;2739;2747;2800:2;2788:9;2779:7;2775:23;2771:32;2768:52;;;2816:1;2813;2806:12;2768:52;2855:9;2842:23;2874:31;2899:5;2874:31;:::i;:::-;2924:5;-1:-1:-1;2981:2:1;2966:18;;2953:32;2994:33;2953:32;2994:33;:::i;:::-;2654:456;;3046:7;;-1:-1:-1;;;3100:2:1;3085:18;;;;3072:32;;2654:456::o;3115:936::-;3212:6;3220;3228;3236;3244;3297:3;3285:9;3276:7;3272:23;3268:33;3265:53;;;3314:1;3311;3304:12;3265:53;3353:9;3340:23;3372:31;3397:5;3372:31;:::i;:::-;3422:5;-1:-1:-1;3479:2:1;3464:18;;3451:32;3492:33;3451:32;3492:33;:::i;:::-;3544:7;-1:-1:-1;3598:2:1;3583:18;;3570:32;;-1:-1:-1;3653:2:1;3638:18;;3625:32;-1:-1:-1;;;;;3706:14:1;;;3703:34;;;3733:1;3730;3723:12;3703:34;3771:6;3760:9;3756:22;3746:32;;3816:7;3809:4;3805:2;3801:13;3797:27;3787:55;;3838:1;3835;3828:12;3787:55;3878:2;3865:16;3904:2;3896:6;3893:14;3890:34;;;3920:1;3917;3910:12;3890:34;3965:7;3960:2;3951:6;3947:2;3943:15;3939:24;3936:37;3933:57;;;3986:1;3983;3976:12;3933:57;3115:936;;;;-1:-1:-1;3115:936:1;;-1:-1:-1;4017:2:1;4009:11;;4039:6;3115:936;-1:-1:-1;;;3115:936:1:o;4056:483::-;4149:6;4157;4210:2;4198:9;4189:7;4185:23;4181:32;4178:52;;;4226:1;4223;4216:12;4178:52;4265:9;4252:23;4284:31;4309:5;4284:31;:::i;:::-;4334:5;-1:-1:-1;4390:2:1;4375:18;;4362:32;-1:-1:-1;;;;;4406:30:1;;4403:50;;;4449:1;4446;4439:12;4403:50;4472:61;4525:7;4516:6;4505:9;4501:22;4472:61;:::i;:::-;4462:71;;;4056:483;;;;;:::o;4544:315::-;4609:6;4617;4670:2;4658:9;4649:7;4645:23;4641:32;4638:52;;;4686:1;4683;4676:12;4638:52;4725:9;4712:23;4744:31;4769:5;4744:31;:::i;:::-;4794:5;-1:-1:-1;4818:35:1;4849:2;4834:18;;4818:35;:::i;:::-;4808:45;;4544:315;;;;;:::o;4864:::-;4932:6;4940;4993:2;4981:9;4972:7;4968:23;4964:32;4961:52;;;5009:1;5006;4999:12;4961:52;5048:9;5035:23;5067:31;5092:5;5067:31;:::i;:::-;5117:5;5169:2;5154:18;;;;5141:32;;-1:-1:-1;;;4864:315:1:o;5184:1105::-;5286:6;5294;5302;5355:2;5343:9;5334:7;5330:23;5326:32;5323:52;;;5371:1;5368;5361:12;5323:52;5410:9;5397:23;5429:31;5454:5;5429:31;:::i;:::-;5479:5;-1:-1:-1;5503:2:1;5537:18;;;5524:32;;-1:-1:-1;5607:2:1;5592:18;;5579:32;-1:-1:-1;;;;;5623:30:1;;5620:50;;;5666:1;5663;5656:12;5620:50;5689:22;;5742:4;5734:13;;5730:27;-1:-1:-1;5720:55:1;;5771:1;5768;5761:12;5720:55;5807:2;5794:16;5830:60;5846:43;5886:2;5846:43;:::i;5830:60::-;5912:3;5936:2;5931:3;5924:15;5964:2;5959:3;5955:12;5948:19;;5995:2;5991;5987:11;6043:7;6038:2;6032;6029:1;6025:10;6021:2;6017:19;6013:28;6010:41;6007:61;;;6064:1;6061;6054:12;6007:61;6086:1;6077:10;;6096:163;6110:2;6107:1;6104:9;6096:163;;;6167:17;;6155:30;;6128:1;6121:9;;;;;6205:12;;;;6237;;6096:163;;;6100:3;6278:5;6268:15;;;;;;;5184:1105;;;;;:::o;6294:383::-;6371:6;6379;6387;6440:2;6428:9;6419:7;6415:23;6411:32;6408:52;;;6456:1;6453;6446:12;6408:52;6495:9;6482:23;6514:31;6539:5;6514:31;:::i;:::-;6564:5;6616:2;6601:18;;6588:32;;-1:-1:-1;6667:2:1;6652:18;;;6639:32;;6294:383;-1:-1:-1;;;6294:383:1:o;6682:1127::-;6791:6;6822:2;6865;6853:9;6844:7;6840:23;6836:32;6833:52;;;6881:1;6878;6871:12;6833:52;6921:9;6908:23;-1:-1:-1;;;;;6991:2:1;6983:6;6980:14;6977:34;;;7007:1;7004;6997:12;6977:34;7045:6;7034:9;7030:22;7020:32;;7090:7;7083:4;7079:2;7075:13;7071:27;7061:55;;7112:1;7109;7102:12;7061:55;7148:2;7135:16;7171:60;7187:43;7227:2;7187:43;:::i;7171:60::-;7253:3;7277:2;7272:3;7265:15;7305:2;7300:3;7296:12;7289:19;;7336:2;7332;7328:11;7384:7;7379:2;7373;7370:1;7366:10;7362:2;7358:19;7354:28;7351:41;7348:61;;;7405:1;7402;7395:12;7348:61;7427:1;7448;7458:321;7474:2;7469:3;7466:11;7458:321;;;7555:3;7542:17;7591:2;7578:11;7575:19;7572:39;;;7607:1;7604;7597:12;7572:39;7636:68;7696:7;7691:2;7677:11;7673:2;7669:20;7665:29;7636:68;:::i;:::-;7624:81;;-1:-1:-1;7725:12:1;;;;7757;;;;7496:1;7487:11;7458:321;;;-1:-1:-1;7798:5:1;;6682:1127;-1:-1:-1;;;;;;;;;;6682:1127:1:o;7814:1703::-;7934:6;7965:2;8008;7996:9;7987:7;7983:23;7979:32;7976:52;;;8024:1;8021;8014:12;7976:52;8057:9;8051:16;-1:-1:-1;;;;;8127:2:1;8119:6;8116:14;8113:34;;;8143:1;8140;8133:12;8113:34;8181:6;8170:9;8166:22;8156:32;;8226:7;8219:4;8215:2;8211:13;8207:27;8197:55;;8248:1;8245;8238:12;8197:55;8277:2;8271:9;8300:60;8316:43;8356:2;8316:43;:::i;8300:60::-;8382:3;8406:2;8401:3;8394:15;8434:2;8429:3;8425:12;8418:19;;8465:2;8461;8457:11;8513:7;8508:2;8502;8499:1;8495:10;8491:2;8487:19;8483:28;8480:41;8477:61;;;8534:1;8531;8524:12;8477:61;8556:1;8566:921;8580:2;8577:1;8574:9;8566:921;;;8650:3;8644:10;8686:2;8673:11;8670:19;8667:39;;;8702:1;8699;8692:12;8667:39;8729:20;;8784:2;8776:11;;8772:25;-1:-1:-1;8762:53:1;;8811:1;8808;8801:12;8762:53;8852:2;8848;8844:11;8838:18;8882:60;8898:43;8938:2;8898:43;:::i;8882:60::-;8968:5;9000:2;8993:5;8986:17;9036:2;9029:5;9025:14;9016:23;;9073:2;9069;9065:11;9125:7;9120:2;9114;9111:1;9107:10;9103:2;9099:19;9095:28;9092:41;9089:61;;;9146:1;9143;9136:12;9089:61;9174:1;9163:12;;9188:194;9204:2;9199:3;9196:11;9188:194;;;9275:12;;9261:27;;9226:1;9217:11;;;;;9314:14;;;;9354;;9188:194;;;-1:-1:-1;9395:18:1;;-1:-1:-1;;;9433:12:1;;;;9465;;;;8598:1;8591:9;8566:921;;;-1:-1:-1;9506:5:1;;7814:1703;-1:-1:-1;;;;;;;;;7814:1703:1:o;9522:180::-;9578:6;9631:2;9619:9;9610:7;9606:23;9602:32;9599:52;;;9647:1;9644;9637:12;9599:52;9670:26;9686:9;9670:26;:::i;9707:180::-;9766:6;9819:2;9807:9;9798:7;9794:23;9790:32;9787:52;;;9835:1;9832;9825:12;9787:52;-1:-1:-1;9858:23:1;;9707:180;-1:-1:-1;9707:180:1:o;9892:245::-;9950:6;10003:2;9991:9;9982:7;9978:23;9974:32;9971:52;;;10019:1;10016;10009:12;9971:52;10058:9;10045:23;10077:30;10101:5;10077:30;:::i;10142:249::-;10211:6;10264:2;10252:9;10243:7;10239:23;10235:32;10232:52;;;10280:1;10277;10270:12;10232:52;10312:9;10306:16;10331:30;10355:5;10331:30;:::i;10396:764::-;10465:6;10496:2;10539;10527:9;10518:7;10514:23;10510:32;10507:52;;;10555:1;10552;10545:12;10507:52;10595:9;10582:23;-1:-1:-1;;;;;10665:2:1;10657:6;10654:14;10651:34;;;10681:1;10678;10671:12;10651:34;10719:6;10708:9;10704:22;10694:32;;10764:7;10757:4;10753:2;10749:13;10745:27;10735:55;;10786:1;10783;10776:12;10735:55;10822:2;10809:16;10844:2;10840;10837:10;10834:36;;;10850:18;;:::i;:::-;10892:53;10935:2;10916:13;;-1:-1:-1;;10912:27:1;10908:36;;10892:53;:::i;:::-;10879:66;;10968:2;10961:5;10954:17;11008:7;11003:2;10998;10994;10990:11;10986:20;10983:33;10980:53;;;11029:1;11026;11019:12;10980:53;11084:2;11079;11075;11071:11;11066:2;11059:5;11055:14;11042:45;11128:1;11107:14;;;11103:23;;;11096:34;;;;-1:-1:-1;11111:5:1;10396:764;-1:-1:-1;;;10396:764:1:o;11350:1113::-;11452:6;11460;11468;11521:2;11509:9;11500:7;11496:23;11492:32;11489:52;;;11537:1;11534;11527:12;11489:52;11573:9;11560:23;11550:33;;11602:2;11651;11640:9;11636:18;11623:32;11613:42;;11706:2;11695:9;11691:18;11678:32;-1:-1:-1;;;;;11725:6:1;11722:30;11719:50;;;11765:1;11762;11755:12;11719:50;11788:22;;11841:4;11833:13;;11829:27;-1:-1:-1;11819:55:1;;11870:1;11867;11860:12;11819:55;11906:2;11893:16;11929:60;11945:43;11985:2;11945:43;:::i;11929:60::-;12011:3;12035:2;12030:3;12023:15;12063:2;12058:3;12054:12;12047:19;;12094:2;12090;12086:11;12142:7;12137:2;12131;12128:1;12124:10;12120:2;12116:19;12112:28;12109:41;12106:61;;;12163:1;12160;12153:12;12106:61;12185:1;12176:10;;12195:238;12209:2;12206:1;12203:9;12195:238;;;12280:3;12267:17;12297:31;12322:5;12297:31;:::i;:::-;12341:18;;12227:1;12220:9;;;;;12379:12;;;;12411;;12195:238;;12468:638;12531:3;12569:5;12563:12;12596:6;12591:3;12584:19;12622:4;12663:2;12658:3;12654:12;12688:11;12715;12708:18;;12765:6;12762:1;12758:14;12751:5;12747:26;12735:38;;12807:2;12800:5;12796:14;12828:1;12838:242;12852:6;12849:1;12846:13;12838:242;;;12923:5;12917:4;12913:16;12908:3;12901:29;12951:49;12995:4;12986:6;12980:13;12951:49;:::i;:::-;13058:12;;;;12943:57;-1:-1:-1;13023:15:1;;;;12874:1;12867:9;12838:242;;;-1:-1:-1;13096:4:1;;12468:638;-1:-1:-1;;;;;;;12468:638:1:o;13111:435::-;13164:3;13202:5;13196:12;13229:6;13224:3;13217:19;13255:4;13284:2;13279:3;13275:12;13268:19;;13321:2;13314:5;13310:14;13342:1;13352:169;13366:6;13363:1;13360:13;13352:169;;;13427:13;;13415:26;;13461:12;;;;13496:15;;;;13388:1;13381:9;13352:169;;;-1:-1:-1;13537:3:1;;13111:435;-1:-1:-1;;;;;13111:435:1:o;13551:257::-;13592:3;13630:5;13624:12;13657:6;13652:3;13645:19;13673:63;13729:6;13722:4;13717:3;13713:14;13706:4;13699:5;13695:16;13673:63;:::i;:::-;13790:2;13769:15;-1:-1:-1;;13765:29:1;13756:39;;;;13797:4;13752:50;;13551:257;-1:-1:-1;;13551:257:1:o;14299:274::-;14428:3;14466:6;14460:13;14482:53;14528:6;14523:3;14516:4;14508:6;14504:17;14482:53;:::i;:::-;14551:16;;;;;14299:274;-1:-1:-1;;14299:274:1:o;14578:470::-;14757:3;14795:6;14789:13;14811:53;14857:6;14852:3;14845:4;14837:6;14833:17;14811:53;:::i;:::-;14927:13;;14886:16;;;;14949:57;14927:13;14886:16;14983:4;14971:17;;14949:57;:::i;:::-;15022:20;;14578:470;-1:-1:-1;;;;14578:470:1:o;15691:488::-;-1:-1:-1;;;;;15960:15:1;;;15942:34;;16012:15;;16007:2;15992:18;;15985:43;16059:2;16044:18;;16037:34;;;16107:3;16102:2;16087:18;;16080:31;;;15885:4;;16128:45;;16153:19;;16145:6;16128:45;:::i;:::-;16120:53;15691:488;-1:-1:-1;;;;;;15691:488:1:o;16184:321::-;16413:2;16402:9;16395:21;16376:4;16433:66;16495:2;16484:9;16480:18;16472:6;16433:66;:::i;16510:489::-;16795:2;16784:9;16777:21;16758:4;16815:66;16877:2;16866:9;16862:18;16854:6;16815:66;:::i;:::-;16912:2;16897:18;;16890:34;;;;-1:-1:-1;;;;;;16960:32:1;;;;16955:2;16940:18;;;16933:60;16807:74;16510:489;-1:-1:-1;16510:489:1:o;17004:261::-;17183:2;17172:9;17165:21;17146:4;17203:56;17255:2;17244:9;17240:18;17232:6;17203:56;:::i;18096:219::-;18245:2;18234:9;18227:21;18208:4;18265:44;18305:2;18294:9;18290:18;18282:6;18265:44;:::i;20770:414::-;20972:2;20954:21;;;21011:2;20991:18;;;20984:30;21050:34;21045:2;21030:18;;21023:62;-1:-1:-1;;;21116:2:1;21101:18;;21094:48;21174:3;21159:19;;20770:414::o;21596:398::-;21798:2;21780:21;;;21837:2;21817:18;;;21810:30;21876:34;21871:2;21856:18;;21849:62;-1:-1:-1;;;21942:2:1;21927:18;;21920:32;21984:3;21969:19;;21596:398::o;22413:417::-;22615:2;22597:21;;;22654:2;22634:18;;;22627:30;22693:34;22688:2;22673:18;;22666:62;-1:-1:-1;;;22759:2:1;22744:18;;22737:51;22820:3;22805:19;;22413:417::o;25951:356::-;26153:2;26135:21;;;26172:18;;;26165:30;26231:34;26226:2;26211:18;;26204:62;26298:2;26283:18;;25951:356::o;29192:403::-;29394:2;29376:21;;;29433:2;29413:18;;;29406:30;29472:34;29467:2;29452:18;;29445:62;-1:-1:-1;;;29538:2:1;29523:18;;29516:37;29585:3;29570:19;;29192:403::o;30383:355::-;30585:2;30567:21;;;30624:2;30604:18;;;30597:30;30663:33;30658:2;30643:18;;30636:61;30729:2;30714:18;;30383:355::o;30743:407::-;30945:2;30927:21;;;30984:2;30964:18;;;30957:30;31023:34;31018:2;31003:18;;30996:62;-1:-1:-1;;;31089:2:1;31074:18;;31067:41;31140:3;31125:19;;30743:407::o;31337:275::-;31408:2;31402:9;31473:2;31454:13;;-1:-1:-1;;31450:27:1;31438:40;;-1:-1:-1;;;;;31493:34:1;;31529:22;;;31490:62;31487:88;;;31555:18;;:::i;:::-;31591:2;31584:22;31337:275;;-1:-1:-1;31337:275:1:o;31617:183::-;31677:4;-1:-1:-1;;;;;31702:6:1;31699:30;31696:56;;;31732:18;;:::i;:::-;-1:-1:-1;31777:1:1;31773:14;31789:4;31769:25;;31617:183::o;31805:128::-;31845:3;31876:1;31872:6;31869:1;31866:13;31863:39;;;31882:18;;:::i;:::-;-1:-1:-1;31918:9:1;;31805:128::o;31938:120::-;31978:1;32004;31994:35;;32009:18;;:::i;:::-;-1:-1:-1;32043:9:1;;31938:120::o;32063:168::-;32103:7;32169:1;32165;32161:6;32157:14;32154:1;32151:21;32146:1;32139:9;32132:17;32128:45;32125:71;;;32176:18;;:::i;:::-;-1:-1:-1;32216:9:1;;32063:168::o;32236:125::-;32276:4;32304:1;32301;32298:8;32295:34;;;32309:18;;:::i;:::-;-1:-1:-1;32346:9:1;;32236:125::o;32366:258::-;32438:1;32448:113;32462:6;32459:1;32456:13;32448:113;;;32538:11;;;32532:18;32519:11;;;32512:39;32484:2;32477:10;32448:113;;;32579:6;32576:1;32573:13;32570:48;;;-1:-1:-1;;32614:1:1;32596:16;;32589:27;32366:258::o;32629:380::-;32708:1;32704:12;;;;32751;;;32772:61;;32826:4;32818:6;32814:17;32804:27;;32772:61;32879:2;32871:6;32868:14;32848:18;32845:38;32842:161;;;32925:10;32920:3;32916:20;32913:1;32906:31;32960:4;32957:1;32950:15;32988:4;32985:1;32978:15;32842:161;;32629:380;;;:::o;33014:135::-;33053:3;-1:-1:-1;;33074:17:1;;33071:43;;;33094:18;;:::i;:::-;-1:-1:-1;33141:1:1;33130:13;;33014:135::o;33154:112::-;33186:1;33212;33202:35;;33217:18;;:::i;:::-;-1:-1:-1;33251:9:1;;33154:112::o;33271:127::-;33332:10;33327:3;33323:20;33320:1;33313:31;33363:4;33360:1;33353:15;33387:4;33384:1;33377:15;33403:127;33464:10;33459:3;33455:20;33452:1;33445:31;33495:4;33492:1;33485:15;33519:4;33516:1;33509:15;33535:127;33596:10;33591:3;33587:20;33584:1;33577:31;33627:4;33624:1;33617:15;33651:4;33648:1;33641:15;33667:127;33728:10;33723:3;33719:20;33716:1;33709:31;33759:4;33756:1;33749:15;33783:4;33780:1;33773:15;33799:127;33860:10;33855:3;33851:20;33848:1;33841:31;33891:4;33888:1;33881:15;33915:4;33912:1;33905:15;33931:131;-1:-1:-1;;;;;34006:31:1;;33996:42;;33986:70;;34052:1;34049;34042:12;34067:131;-1:-1:-1;;;;;;34141:32:1;;34131:43;;34121:71;;34188:1;34185;34178:12

Swarm Source

ipfs://f6962069aa3fa14caeae5ea33523e05f6f991abca9f2659833dfad42dc9f28fd
Loading...
Loading
Loading...
Loading
[ 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.