ETH Price: $3,476.99 (+5.12%)

Brazilian GP. The 50 years collection (DRIVER)
 

Overview

TokenID

127

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BrazilianGP50

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-09
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
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) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }
    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256){
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
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);
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
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);
    }
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return
            functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
interface IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
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 balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    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);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) 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 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);
}
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;
    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }
    struct AddressData {
        uint128 balance; uint128 numberMinted;
    }
    uint256 private currentIndex = 1;
    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;
    string private _name;
    string private _symbol;
    mapping(uint256 => TokenOwnership) private _ownerships;
    mapping(address => AddressData) private _addressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_) {
        require(collectionSize_ > 0, "ERC721A: collection must have a nonzero supply");
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }
    function totalSupply() public view override returns (uint256) {
        return currentIndex - 1;
    }
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), "ERC721A: global index out of bounds");
        return index;
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view override returns (uint256) {
        require(owner != address(0), "ERC721A: balance query for the zero address");
        return uint256(_addressData[owner].balance);
    }
    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), "ERC721A: number minted query for the zero address");
        return uint256(_addressData[owner].numberMinted);
    }
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");
        uint256 lowestTokenToCheck;
        if (tokenId >= maxBatchSize) {
            lowestTokenToCheck = tokenId - maxBatchSize + 1;
        }
        for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }
        revert("ERC721A: unable to determine the owner of token");
    }
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), _getUriExtension())) : "";
    }
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    function _getUriExtension() internal view virtual returns (string memory) {
        return "";
    }
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A: approval to current owner");
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all");
        _approve(to, tokenId, owner);
    }
    function getApproved(uint256 tokenId) public view override returns (address) {
        require(_exists(tokenId), "ERC721A: approved query for nonexistent token");
        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), "ERC721A: approve to caller");
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool){
        return _operatorApprovals[owner][operator];
    }
    function transferFrom(address from, address to, uint256 tokenId) public override {
        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(address from, address to, uint256 tokenId) public override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public override {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer");
    }
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }
    function _safeMint( address to, uint256 quantity, bytes memory _data) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(!_exists(startTokenId), "ERC721A: token already minted");
        require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");
        _beforeTokenTransfers(address(0), to, startTokenId, quantity);
        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));
        uint256 updatedIndex = startTokenId;
        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            require(_checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer");
            updatedIndex++;
        }
        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }
    function _transfer(address from, address to, uint256 tokenId) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);
        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); 
        require(isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved");
        require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner");
        require(to != address(0), "ERC721A: transfer to the zero address");
        _beforeTokenTransfers(from, to, tokenId, 1);
        _approve(address(0), tokenId, prevOwnership.addr);
        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }
        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }
    function _approve(address to, uint256 tokenId, address owner) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }
    uint256 public nextOwnerToExplicitlySet = 0;
    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(
                    ownership.addr,
                    ownership.startTimestamp
                );
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }
    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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {}
    function _afterTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {}
}

contract BrazilianGP50 is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;
    using SafeMath for uint256;
    bytes32 public merkleRoot = 0x9f7c6aa3d9a3082a927337c7295a93738156a8a4af020884050b486bc4bd540f;
    uint16  public maxPerTransaction = 10; 
    uint16  public maxPerWallet      = 10;
    uint256 public price          = 1.000000000000000000 ether;
    uint256 public priceIncrement = 1.000000000000000000 ether; 
    uint16  public constant maxSupply = 5050;
    bool    public isPaused          = false;
    bool    public isOnlyWhitelisted = true;
    string  private baseTokenURI;
    constructor() ERC721A("Brazilian GP. The 50 years collection", "DRIVER", 20, maxSupply) { 
        setBaseURI("https://gpsp.sfo3.digitaloceanspaces.com/gpsp/public/metadata/"); 
    }
    modifier mintCompliance(uint16 quantity) {
        require(totalSupply() + quantity <= maxSupply, "reached max supply");
        require(quantity <= maxPerTransaction, "cannot mint this many");
        require(quantity > 0, "cannot mint less than 1");
        require((numberMinted(msg.sender) + quantity <= maxPerWallet),"Quantity exceeds allowed Mints");
        _;
    }
    function supportsInterface(bytes4 interfaceId) public view override(ERC721A) returns (bool) {
        return interfaceId == 0x2a55205a || super.supportsInterface(interfaceId);
    }
    function mint(uint16 quantity) public mintCompliance(quantity) payable {
        require(!isPaused, "mint is paused");
        require(!isOnlyWhitelisted, "mint only for whitelisted");

        require(msg.value >= price * quantity, "insufficient funds");
        
        mintBatchPriceLogic(quantity);
    }
    function mintForAddress(uint16 quantity, address receiver) public mintCompliance(quantity) onlyOwner {
        _safeMint(receiver, quantity);
    }
    function whitelistMint(uint16 quantity, bytes32[] calldata _merkleProof) mintCompliance(quantity) public payable{  
        require(isOnlyWhitelisted, "Whitelist mint is closed");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Wallet not whitelisted");
        require(msg.value >= price * quantity, "insufficient funds");

        mintBatchPriceLogic(quantity);
    }
    function mintBatchPriceLogic(uint16 quantity) internal {
        if((totalSupply()+quantity)%1010 < quantity){
            require(msg.value >= (price * quantity + (totalSupply()+quantity)%1010 * priceIncrement), "insufficient funds (batch)");
            _safeMint(msg.sender, quantity);
            batchPriceChange();
        }
        else{
            _safeMint(msg.sender, quantity);
        }
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ""; 
    }
    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }
    function batchPriceChange() internal {
        price = price + priceIncrement;
    }
    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }
    function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) {
        return ownershipOf(tokenId);
    }
    function setPrice(uint256 _newPrice) public onlyOwner {
        price = _newPrice;
    }
    function setPriceIncrement(uint256 _newPriceIncrement) public onlyOwner {
        priceIncrement = _newPriceIncrement;
    }
    function setMaxPerTransaction(uint16 q) public onlyOwner {
        maxPerTransaction = q;
    }
    function setMaxPerWallet(uint16 q) public onlyOwner {
        maxPerWallet = q;
    }
    function isPause(bool _state) public onlyOwner {
        isPaused = _state;
    }
    function giveaway(address a, uint256 q) public onlyOwner {
        _safeMint(a, q);
    }
    function setIsOnlyWhitelisted(bool _state) public onlyOwner {
        isOnlyWhitelisted = _state;
    }
    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }
    function withdraw() public onlyOwner nonReentrant {
        (bool os, ) = payable(0xF77DcD04C23266A8a002A80A48fb9557f9277CB4).call{value: address(this).balance}("");
        require(os);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":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"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"q","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOnlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"isPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"quantity","type":"uint16"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","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":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceIncrement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","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":"bool","name":"_state","type":"bool"}],"name":"setIsOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"q","type":"uint16"}],"name":"setMaxPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"q","type":"uint16"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPriceIncrement","type":"uint256"}],"name":"setPriceIncrement","outputs":[],"stateMutability":"nonpayable","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":[{"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":"tokenId","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":"uint16","name":"quantity","type":"uint16"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001805560006008557f9f7c6aa3d9a3082a927337c7295a93738156a8a4af020884050b486bc4bd540f60001b600a55600a600b60006101000a81548161ffff021916908361ffff160217905550600a600b60026101000a81548161ffff021916908361ffff160217905550670de0b6b3a7640000600c55670de0b6b3a7640000600d556000600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff021916908315150217905550348015620000cb57600080fd5b50604051806060016040528060258152602001620060eb602591396040518060400160405280600681526020017f445249564552000000000000000000000000000000000000000000000000000081525060146113ba61ffff1662000145620001396200024f60201b60201c565b6200025760201b60201c565b600081116200018b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001829062000558565b60405180910390fd5b60008211620001d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c89062000514565b60405180910390fd5b8360029080519060200190620001e9929190620003ef565b50826003908051906020019062000202929190620003ef565b508160a081815250508060808181525050505050506001600981905550620002496040518060600160405280603e815260200162006110603e91396200031b60201b60201c565b620006b7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200032b6200024f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000351620003c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a19062000536565b60405180910390fd5b80600f9080519060200190620003c2929190620003ef565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003fd906200058b565b90600052602060002090601f0160209004810192826200042157600085556200046d565b82601f106200043c57805160ff19168380011785556200046d565b828001600101855582156200046d579182015b828111156200046c5782518255916020019190600101906200044f565b5b5090506200047c919062000480565b5090565b5b808211156200049b57600081600090555060010162000481565b5090565b6000620004ae6027836200057a565b9150620004bb82620005f0565b604082019050919050565b6000620004d56020836200057a565b9150620004e2826200063f565b602082019050919050565b6000620004fc602e836200057a565b9150620005098262000668565b604082019050919050565b600060208201905081810360008301526200052f816200049f565b9050919050565b600060208201905081810360008301526200055181620004c6565b9050919050565b600060208201905081810360008301526200057381620004ed565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620005a457607f821691505b60208210811415620005bb57620005ba620005c1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a051615a03620006e860003960008181612cc601528181612cef01526134ef015260005050615a036000f3fe60806040526004361061025c5760003560e01c806370a0823111610144578063af23ee33116100b6578063d5abeb011161007a578063d5abeb01146108c6578063d7224ba0146108f1578063dc33e6811461091c578063e54b57dd14610959578063e985e9c514610982578063f2fde38b146109bf5761025c565b8063af23ee33146107f0578063b182e81814610819578063b187bd2614610835578063b88d4fde14610860578063c87b56dd146108895761025c565b80639231ab2a116101085780639231ab2a146106e0578063936196fb1461071d57806395d89b41146107465780639c7cbec614610771578063a035b1fe1461079c578063a22cb465146107c75761025c565b806370a082311461060f578063715018a61461064c5780637cb64759146106635780638da5cb5b1461068c57806391b7f5ed146106b75761025c565b80632f745c59116101dd5780634b980d67116101a15780634b980d67146104ef5780634f6ccce71461051a57806355f804b3146105575780635bce67131461058057806362aa5ae4146105a95780636352211e146105d25761025c565b80632f745c591461041e5780633ccfd60b1461045b57806342842e0e14610472578063453c23101461049b5780634905269c146104c65761025c565b806318160ddd1161022457806318160ddd1461035857806323b872dd1461038357806323cf0a22146103ac578063280d62ac146103c85780632eb4a7ab146103f35761025c565b806301ffc9a714610261578063050225ea1461029e57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613e93565b6109e8565b60405161029591906146ee565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613df9565b610a2a565b005b3480156102d357600080fd5b506102dc610ab4565b6040516102e99190614724565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190614003565b610b46565b6040516103269190614687565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613df9565b610bcb565b005b34801561036457600080fd5b5061036d610ce4565b60405161037a9190614b7c565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613ce3565b610cf9565b005b6103c660048036038101906103c19190613f36565b610d09565b005b3480156103d457600080fd5b506103dd610f7a565b6040516103ea9190614b7c565b60405180910390f35b3480156103ff57600080fd5b50610408610f80565b6040516104159190614709565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190613df9565b610f86565b6040516104529190614b7c565b60405180910390f35b34801561046757600080fd5b50610470611184565b005b34801561047e57600080fd5b5061049960048036038101906104949190613ce3565b6112e3565b005b3480156104a757600080fd5b506104b0611303565b6040516104bd9190614b61565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190614003565b611317565b005b3480156104fb57600080fd5b5061050461139d565b6040516105119190614b61565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614003565b6113b1565b60405161054e9190614b7c565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190613eed565b611404565b005b34801561058c57600080fd5b506105a760048036038101906105a29190613f63565b61149a565b005b3480156105b557600080fd5b506105d060048036038101906105cb9190613e39565b611699565b005b3480156105de57600080fd5b506105f960048036038101906105f49190614003565b611732565b6040516106069190614687565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190613c76565b611748565b6040516106439190614b7c565b60405180910390f35b34801561065857600080fd5b50610661611831565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613e66565b6118b9565b005b34801561069857600080fd5b506106a161193f565b6040516106ae9190614687565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d99190614003565b611968565b005b3480156106ec57600080fd5b5061070760048036038101906107029190614003565b6119ee565b6040516107149190614b46565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190613f36565b611a06565b005b34801561075257600080fd5b5061075b611aa2565b6040516107689190614724565b60405180910390f35b34801561077d57600080fd5b50610786611b34565b60405161079391906146ee565b60405180910390f35b3480156107a857600080fd5b506107b1611b47565b6040516107be9190614b7c565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190613db9565b611b4d565b005b3480156107fc57600080fd5b5061081760048036038101906108129190613f36565b611cce565b005b610833600480360381019061082e9190613fa3565b611d6a565b005b34801561084157600080fd5b5061084a612045565b60405161085791906146ee565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613d36565b612058565b005b34801561089557600080fd5b506108b060048036038101906108ab9190614003565b6120b4565b6040516108bd9190614724565b60405180910390f35b3480156108d257600080fd5b506108db61215b565b6040516108e89190614b61565b60405180910390f35b3480156108fd57600080fd5b50610906612161565b6040516109139190614b7c565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e9190613c76565b612167565b6040516109509190614b7c565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190613e39565b612179565b005b34801561098e57600080fd5b506109a960048036038101906109a49190613ca3565b612212565b6040516109b691906146ee565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e19190613c76565b6122a6565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a235750610a228261239e565b5b9050919050565b610a326124e8565b73ffffffffffffffffffffffffffffffffffffffff16610a5061193f565b73ffffffffffffffffffffffffffffffffffffffff1614610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90614906565b60405180910390fd5b610ab082826124f0565b5050565b606060028054610ac390614f23565b80601f0160208091040260200160405190810160405280929190818152602001828054610aef90614f23565b8015610b3c5780601f10610b1157610100808354040283529160200191610b3c565b820191906000526020600020905b815481529060010190602001808311610b1f57829003601f168201915b5050505050905090565b6000610b518261250e565b610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790614b06565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bd682611732565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e906149a6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c666124e8565b73ffffffffffffffffffffffffffffffffffffffff161480610c955750610c9481610c8f6124e8565b612212565b5b610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90614846565b60405180910390fd5b610cdf83838361251c565b505050565b600060018054610cf49190614dc7565b905090565b610d048383836125ce565b505050565b806113ba61ffff168161ffff16610d1e610ce4565b610d289190614cb2565b1115610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d60906148c6565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff168161ffff161115610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90614986565b60405180910390fd5b60008161ffff1611610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e02906147a6565b60405180910390fd5b600b60029054906101000a900461ffff1661ffff168161ffff16610e2e33612167565b610e389190614cb2565b1115610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090614866565b60405180910390fd5b600e60009054906101000a900460ff1615610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090614ae6565b60405180910390fd5b600e60019054906101000a900460ff1615610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090614886565b60405180910390fd5b8161ffff16600c54610f2b9190614d39565b341015610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f64906149c6565b60405180910390fd5b610f7682612b87565b5050565b600d5481565b600a5481565b6000610f9183611748565b8210610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990614746565b60405180910390fd5b6000610fdc610ce4565b905060008060005b83811015611142576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146110d657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561112e578684141561111f57819550505050505061117e565b838061112a90614f86565b9450505b50808061113a90614f86565b915050610fe4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590614a86565b60405180910390fd5b92915050565b61118c6124e8565b73ffffffffffffffffffffffffffffffffffffffff166111aa61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790614906565b60405180910390fd5b60026009541415611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90614aa6565b60405180910390fd5b6002600981905550600073f77dcd04c23266a8a002a80a48fb9557f9277cb473ffffffffffffffffffffffffffffffffffffffff164760405161128890614672565b60006040518083038185875af1925050503d80600081146112c5576040519150601f19603f3d011682016040523d82523d6000602084013e6112ca565b606091505b50509050806112d857600080fd5b506001600981905550565b6112fe83838360405180602001604052806000815250612058565b505050565b600b60029054906101000a900461ffff1681565b61131f6124e8565b73ffffffffffffffffffffffffffffffffffffffff1661133d61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614906565b60405180910390fd5b80600d8190555050565b600b60009054906101000a900461ffff1681565b60006113bb610ce4565b82106113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f3906147c6565b60405180910390fd5b819050919050565b61140c6124e8565b73ffffffffffffffffffffffffffffffffffffffff1661142a61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614906565b60405180910390fd5b80600f90805190602001906114969291906139d0565b5050565b816113ba61ffff168161ffff166114af610ce4565b6114b99190614cb2565b11156114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f1906148c6565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff168161ffff161115611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90614986565b60405180910390fd5b60008161ffff161161159c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611593906147a6565b60405180910390fd5b600b60029054906101000a900461ffff1661ffff168161ffff166115bf33612167565b6115c99190614cb2565b111561160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190614866565b60405180910390fd5b6116126124e8565b73ffffffffffffffffffffffffffffffffffffffff1661163061193f565b73ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90614906565b60405180910390fd5b611694828461ffff166124f0565b505050565b6116a16124e8565b73ffffffffffffffffffffffffffffffffffffffff166116bf61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90614906565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600061173d82612c72565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b0906148a6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6118396124e8565b73ffffffffffffffffffffffffffffffffffffffff1661185761193f565b73ffffffffffffffffffffffffffffffffffffffff16146118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490614906565b60405180910390fd5b6118b76000612e75565b565b6118c16124e8565b73ffffffffffffffffffffffffffffffffffffffff166118df61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c90614906565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119706124e8565b73ffffffffffffffffffffffffffffffffffffffff1661198e61193f565b73ffffffffffffffffffffffffffffffffffffffff16146119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90614906565b60405180910390fd5b80600c8190555050565b6119f6613a56565b6119ff82612c72565b9050919050565b611a0e6124e8565b73ffffffffffffffffffffffffffffffffffffffff16611a2c61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990614906565b60405180910390fd5b80600b60006101000a81548161ffff021916908361ffff16021790555050565b606060038054611ab190614f23565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90614f23565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050905090565b600e60019054906101000a900460ff1681565b600c5481565b611b556124e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba90614946565b60405180910390fd5b8060076000611bd06124e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c7d6124e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc291906146ee565b60405180910390a35050565b611cd66124e8565b73ffffffffffffffffffffffffffffffffffffffff16611cf461193f565b73ffffffffffffffffffffffffffffffffffffffff1614611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190614906565b60405180910390fd5b80600b60026101000a81548161ffff021916908361ffff16021790555050565b826113ba61ffff168161ffff16611d7f610ce4565b611d899190614cb2565b1115611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc1906148c6565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff168161ffff161115611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614986565b60405180910390fd5b60008161ffff1611611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906147a6565b60405180910390fd5b600b60029054906101000a900461ffff1661ffff168161ffff16611e8f33612167565b611e999190614cb2565b1115611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190614866565b60405180910390fd5b600e60019054906101000a900460ff16611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090614a26565b60405180910390fd5b600033604051602001611f3c9190614628565b604051602081830303815290604052805190602001209050611fa2848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483612f39565b611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614a66565b60405180910390fd5b8461ffff16600c54611ff39190614d39565b341015612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c906149c6565b60405180910390fd5b61203e85612b87565b5050505050565b600e60009054906101000a900460ff1681565b6120638484846125ce565b61206f84848484612f50565b6120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a5906149e6565b60405180910390fd5b50505050565b60606120bf8261250e565b6120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590614926565b60405180910390fd5b60006121086130e7565b905060008151116121285760405180602001604052806000815250612153565b8061213284613179565b604051602001612143929190614643565b6040516020818303038152906040525b915050919050565b6113ba81565b60085481565b6000612172826132da565b9050919050565b6121816124e8565b73ffffffffffffffffffffffffffffffffffffffff1661219f61193f565b73ffffffffffffffffffffffffffffffffffffffff16146121f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ec90614906565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122ae6124e8565b73ffffffffffffffffffffffffffffffffffffffff166122cc61193f565b73ffffffffffffffffffffffffffffffffffffffff1614612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990614906565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238990614766565b60405180910390fd5b61239b81612e75565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061246957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124d157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124e157506124e0826133c3565b5b9050919050565b600033905090565b61250a82826040518060200160405280600081525061342d565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006125d982612c72565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166126006124e8565b73ffffffffffffffffffffffffffffffffffffffff16148061265c57506126256124e8565b73ffffffffffffffffffffffffffffffffffffffff1661264484610b46565b73ffffffffffffffffffffffffffffffffffffffff16145b80612678575061267782600001516126726124e8565b612212565b5b9050806126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190614966565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461272c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612723906148e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561279c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612793906147e6565b60405180910390fd5b6127a9858585600161390d565b6127b9600084846000015161251c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128279190614d93565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128cb9190614c6c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846129d19190614cb2565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b1757612a478161250e565b15612b16576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b7f8686866001613913565b505050505050565b8061ffff166103f28261ffff16612b9c610ce4565b612ba69190614cb2565b612bb09190614ff3565b1015612c6057600d546103f28261ffff16612bc9610ce4565b612bd39190614cb2565b612bdd9190614ff3565b612be79190614d39565b8161ffff16600c54612bf99190614d39565b612c039190614cb2565b341015612c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3c90614826565b60405180910390fd5b612c53338261ffff166124f0565b612c5b613919565b612c6f565b612c6e338261ffff166124f0565b5b50565b612c7a613a56565b612c838261250e565b612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614786565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612d265760017f000000000000000000000000000000000000000000000000000000000000000084612d199190614dc7565b612d239190614cb2565b90505b60008390505b818110612e34576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e2057809350505050612e70565b508080612e2c90614ef9565b915050612d2c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6790614ac6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082612f468584613931565b1490509392505050565b6000612f718473ffffffffffffffffffffffffffffffffffffffff166139a6565b156130da578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f9a6124e8565b8786866040518563ffffffff1660e01b8152600401612fbc94939291906146a2565b602060405180830381600087803b158015612fd657600080fd5b505af192505050801561300757506040513d601f19601f820116820180604052508101906130049190613ec0565b60015b61308a573d8060008114613037576040519150601f19603f3d011682016040523d82523d6000602084013e61303c565b606091505b50600081511415613082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613079906149e6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130df565b600190505b949350505050565b6060600f80546130f690614f23565b80601f016020809104026020016040519081016040528092919081815260200182805461312290614f23565b801561316f5780601f106131445761010080835404028352916020019161316f565b820191906000526020600020905b81548152906001019060200180831161315257829003601f168201915b5050505050905090565b606060008214156131c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d5565b600082905060005b600082146131f35780806131dc90614f86565b915050600a826131ec9190614d08565b91506131c9565b60008167ffffffffffffffff81111561320f5761320e6150e0565b5b6040519080825280601f01601f1916602001820160405280156132415781602001600182028036833780820191505090505b5090505b600085146132ce5760018261325a9190614dc7565b9150600a856132699190614ff3565b60306132759190614cb2565b60f81b81838151811061328b5761328a6150b1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132c79190614d08565b9450613245565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561334b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334290614806565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349b90614a46565b60405180910390fd5b6134ad8161250e565b156134ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e490614a06565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354790614b26565b60405180910390fd5b61355d600085838661390d565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161365a9190614c6c565b6fffffffffffffffffffffffffffffffff1681526020018583602001516136819190614c6c565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156138f057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138906000888488612f50565b6138cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c6906149e6565b60405180910390fd5b81806138da90614f86565b92505080806138e890614f86565b91505061381f565b50806001819055506139056000878588613913565b505050505050565b50505050565b50505050565b600d54600c546139299190614cb2565b600c81905550565b60008082905060005b845181101561399b576000858281518110613958576139576150b1565b5b6020026020010151905080831161397a5761397383826139b9565b9250613987565b61398481846139b9565b92505b50808061399390614f86565b91505061393a565b508091505092915050565b600080823b905060008111915050919050565b600082600052816020526040600020905092915050565b8280546139dc90614f23565b90600052602060002090601f0160209004810192826139fe5760008555613a45565b82601f10613a1757805160ff1916838001178555613a45565b82800160010185558215613a45579182015b82811115613a44578251825591602001919060010190613a29565b5b509050613a529190613a90565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613aa9576000816000905550600101613a91565b5090565b6000613ac0613abb84614bbc565b614b97565b905082815260208101848484011115613adc57613adb61511e565b5b613ae7848285614eb7565b509392505050565b6000613b02613afd84614bed565b614b97565b905082815260208101848484011115613b1e57613b1d61511e565b5b613b29848285614eb7565b509392505050565b600081359050613b4081615943565b92915050565b60008083601f840112613b5c57613b5b615114565b5b8235905067ffffffffffffffff811115613b7957613b7861510f565b5b602083019150836020820283011115613b9557613b94615119565b5b9250929050565b600081359050613bab8161595a565b92915050565b600081359050613bc081615971565b92915050565b600081359050613bd581615988565b92915050565b600081519050613bea81615988565b92915050565b600082601f830112613c0557613c04615114565b5b8135613c15848260208601613aad565b91505092915050565b600082601f830112613c3357613c32615114565b5b8135613c43848260208601613aef565b91505092915050565b600081359050613c5b8161599f565b92915050565b600081359050613c70816159b6565b92915050565b600060208284031215613c8c57613c8b615128565b5b6000613c9a84828501613b31565b91505092915050565b60008060408385031215613cba57613cb9615128565b5b6000613cc885828601613b31565b9250506020613cd985828601613b31565b9150509250929050565b600080600060608486031215613cfc57613cfb615128565b5b6000613d0a86828701613b31565b9350506020613d1b86828701613b31565b9250506040613d2c86828701613c61565b9150509250925092565b60008060008060808587031215613d5057613d4f615128565b5b6000613d5e87828801613b31565b9450506020613d6f87828801613b31565b9350506040613d8087828801613c61565b925050606085013567ffffffffffffffff811115613da157613da0615123565b5b613dad87828801613bf0565b91505092959194509250565b60008060408385031215613dd057613dcf615128565b5b6000613dde85828601613b31565b9250506020613def85828601613b9c565b9150509250929050565b60008060408385031215613e1057613e0f615128565b5b6000613e1e85828601613b31565b9250506020613e2f85828601613c61565b9150509250929050565b600060208284031215613e4f57613e4e615128565b5b6000613e5d84828501613b9c565b91505092915050565b600060208284031215613e7c57613e7b615128565b5b6000613e8a84828501613bb1565b91505092915050565b600060208284031215613ea957613ea8615128565b5b6000613eb784828501613bc6565b91505092915050565b600060208284031215613ed657613ed5615128565b5b6000613ee484828501613bdb565b91505092915050565b600060208284031215613f0357613f02615128565b5b600082013567ffffffffffffffff811115613f2157613f20615123565b5b613f2d84828501613c1e565b91505092915050565b600060208284031215613f4c57613f4b615128565b5b6000613f5a84828501613c4c565b91505092915050565b60008060408385031215613f7a57613f79615128565b5b6000613f8885828601613c4c565b9250506020613f9985828601613b31565b9150509250929050565b600080600060408486031215613fbc57613fbb615128565b5b6000613fca86828701613c4c565b935050602084013567ffffffffffffffff811115613feb57613fea615123565b5b613ff786828701613b46565b92509250509250925092565b60006020828403121561401957614018615128565b5b600061402784828501613c61565b91505092915050565b61403981614dfb565b82525050565b61404881614dfb565b82525050565b61405f61405a82614dfb565b614fcf565b82525050565b61406e81614e0d565b82525050565b61407d81614e19565b82525050565b600061408e82614c1e565b6140988185614c34565b93506140a8818560208601614ec6565b6140b18161512d565b840191505092915050565b60006140c782614c29565b6140d18185614c50565b93506140e1818560208601614ec6565b6140ea8161512d565b840191505092915050565b600061410082614c29565b61410a8185614c61565b935061411a818560208601614ec6565b80840191505092915050565b6000614133602283614c50565b915061413e8261514b565b604082019050919050565b6000614156602683614c50565b91506141618261519a565b604082019050919050565b6000614179602a83614c50565b9150614184826151e9565b604082019050919050565b600061419c601783614c50565b91506141a782615238565b602082019050919050565b60006141bf602383614c50565b91506141ca82615261565b604082019050919050565b60006141e2602583614c50565b91506141ed826152b0565b604082019050919050565b6000614205603183614c50565b9150614210826152ff565b604082019050919050565b6000614228601a83614c50565b91506142338261534e565b602082019050919050565b600061424b603983614c50565b915061425682615377565b604082019050919050565b600061426e601e83614c50565b9150614279826153c6565b602082019050919050565b6000614291601983614c50565b915061429c826153ef565b602082019050919050565b60006142b4602b83614c50565b91506142bf82615418565b604082019050919050565b60006142d7601283614c50565b91506142e282615467565b602082019050919050565b60006142fa602683614c50565b915061430582615490565b604082019050919050565b600061431d600583614c61565b9150614328826154df565b600582019050919050565b6000614340602083614c50565b915061434b82615508565b602082019050919050565b6000614363602f83614c50565b915061436e82615531565b604082019050919050565b6000614386601a83614c50565b915061439182615580565b602082019050919050565b60006143a9603283614c50565b91506143b4826155a9565b604082019050919050565b60006143cc601583614c50565b91506143d7826155f8565b602082019050919050565b60006143ef602283614c50565b91506143fa82615621565b604082019050919050565b6000614412600083614c45565b915061441d82615670565b600082019050919050565b6000614435601283614c50565b915061444082615673565b602082019050919050565b6000614458603383614c50565b91506144638261569c565b604082019050919050565b600061447b601d83614c50565b9150614486826156eb565b602082019050919050565b600061449e601883614c50565b91506144a982615714565b602082019050919050565b60006144c1602183614c50565b91506144cc8261573d565b604082019050919050565b60006144e4601683614c50565b91506144ef8261578c565b602082019050919050565b6000614507602e83614c50565b9150614512826157b5565b604082019050919050565b600061452a601f83614c50565b915061453582615804565b602082019050919050565b600061454d602f83614c50565b91506145588261582d565b604082019050919050565b6000614570600e83614c50565b915061457b8261587c565b602082019050919050565b6000614593602d83614c50565b915061459e826158a5565b604082019050919050565b60006145b6602283614c50565b91506145c1826158f4565b604082019050919050565b6040820160008201516145e26000850182614030565b5060208201516145f56020850182614619565b50505050565b61460481614e6b565b82525050565b61461381614e99565b82525050565b61462281614ea3565b82525050565b6000614634828461404e565b60148201915081905092915050565b600061464f82856140f5565b915061465b82846140f5565b915061466682614310565b91508190509392505050565b600061467d82614405565b9150819050919050565b600060208201905061469c600083018461403f565b92915050565b60006080820190506146b7600083018761403f565b6146c4602083018661403f565b6146d1604083018561460a565b81810360608301526146e38184614083565b905095945050505050565b60006020820190506147036000830184614065565b92915050565b600060208201905061471e6000830184614074565b92915050565b6000602082019050818103600083015261473e81846140bc565b905092915050565b6000602082019050818103600083015261475f81614126565b9050919050565b6000602082019050818103600083015261477f81614149565b9050919050565b6000602082019050818103600083015261479f8161416c565b9050919050565b600060208201905081810360008301526147bf8161418f565b9050919050565b600060208201905081810360008301526147df816141b2565b9050919050565b600060208201905081810360008301526147ff816141d5565b9050919050565b6000602082019050818103600083015261481f816141f8565b9050919050565b6000602082019050818103600083015261483f8161421b565b9050919050565b6000602082019050818103600083015261485f8161423e565b9050919050565b6000602082019050818103600083015261487f81614261565b9050919050565b6000602082019050818103600083015261489f81614284565b9050919050565b600060208201905081810360008301526148bf816142a7565b9050919050565b600060208201905081810360008301526148df816142ca565b9050919050565b600060208201905081810360008301526148ff816142ed565b9050919050565b6000602082019050818103600083015261491f81614333565b9050919050565b6000602082019050818103600083015261493f81614356565b9050919050565b6000602082019050818103600083015261495f81614379565b9050919050565b6000602082019050818103600083015261497f8161439c565b9050919050565b6000602082019050818103600083015261499f816143bf565b9050919050565b600060208201905081810360008301526149bf816143e2565b9050919050565b600060208201905081810360008301526149df81614428565b9050919050565b600060208201905081810360008301526149ff8161444b565b9050919050565b60006020820190508181036000830152614a1f8161446e565b9050919050565b60006020820190508181036000830152614a3f81614491565b9050919050565b60006020820190508181036000830152614a5f816144b4565b9050919050565b60006020820190508181036000830152614a7f816144d7565b9050919050565b60006020820190508181036000830152614a9f816144fa565b9050919050565b60006020820190508181036000830152614abf8161451d565b9050919050565b60006020820190508181036000830152614adf81614540565b9050919050565b60006020820190508181036000830152614aff81614563565b9050919050565b60006020820190508181036000830152614b1f81614586565b9050919050565b60006020820190508181036000830152614b3f816145a9565b9050919050565b6000604082019050614b5b60008301846145cc565b92915050565b6000602082019050614b7660008301846145fb565b92915050565b6000602082019050614b91600083018461460a565b92915050565b6000614ba1614bb2565b9050614bad8282614f55565b919050565b6000604051905090565b600067ffffffffffffffff821115614bd757614bd66150e0565b5b614be08261512d565b9050602081019050919050565b600067ffffffffffffffff821115614c0857614c076150e0565b5b614c118261512d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c7782614e4f565b9150614c8283614e4f565b9250826fffffffffffffffffffffffffffffffff03821115614ca757614ca6615024565b5b828201905092915050565b6000614cbd82614e99565b9150614cc883614e99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cfd57614cfc615024565b5b828201905092915050565b6000614d1382614e99565b9150614d1e83614e99565b925082614d2e57614d2d615053565b5b828204905092915050565b6000614d4482614e99565b9150614d4f83614e99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8857614d87615024565b5b828202905092915050565b6000614d9e82614e4f565b9150614da983614e4f565b925082821015614dbc57614dbb615024565b5b828203905092915050565b6000614dd282614e99565b9150614ddd83614e99565b925082821015614df057614def615024565b5b828203905092915050565b6000614e0682614e79565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614ee4578082015181840152602081019050614ec9565b83811115614ef3576000848401525b50505050565b6000614f0482614e99565b91506000821415614f1857614f17615024565b5b600182039050919050565b60006002820490506001821680614f3b57607f821691505b60208210811415614f4f57614f4e615082565b5b50919050565b614f5e8261512d565b810181811067ffffffffffffffff82111715614f7d57614f7c6150e0565b5b80604052505050565b6000614f9182614e99565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fc457614fc3615024565b5b600182019050919050565b6000614fda82614fe1565b9050919050565b6000614fec8261513e565b9050919050565b6000614ffe82614e99565b915061500983614e99565b92508261501957615018615053565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e74206c657373207468616e2031000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f696e73756666696369656e742066756e64732028626174636829000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f6d696e74206f6e6c7920666f722077686974656c697374656400000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f63616e6e6f74206d696e742074686973206d616e790000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f57686974656c697374206d696e7420697320636c6f7365640000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c6574206e6f742077686974656c697374656400000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6d696e7420697320706175736564000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61594c81614dfb565b811461595757600080fd5b50565b61596381614e0d565b811461596e57600080fd5b50565b61597a81614e19565b811461598557600080fd5b50565b61599181614e23565b811461599c57600080fd5b50565b6159a881614e6b565b81146159b357600080fd5b50565b6159bf81614e99565b81146159ca57600080fd5b5056fea264697066735822122088ed8ea7bd1a93ae56f2bc18f7f0a341650d8a834d65603c87a2d95205dbb4ec64736f6c634300080700334272617a696c69616e2047502e2054686520353020796561727320636f6c6c656374696f6e68747470733a2f2f677073702e73666f332e6469676974616c6f6365616e7370616365732e636f6d2f677073702f7075626c69632f6d657461646174612f

Deployed Bytecode

0x60806040526004361061025c5760003560e01c806370a0823111610144578063af23ee33116100b6578063d5abeb011161007a578063d5abeb01146108c6578063d7224ba0146108f1578063dc33e6811461091c578063e54b57dd14610959578063e985e9c514610982578063f2fde38b146109bf5761025c565b8063af23ee33146107f0578063b182e81814610819578063b187bd2614610835578063b88d4fde14610860578063c87b56dd146108895761025c565b80639231ab2a116101085780639231ab2a146106e0578063936196fb1461071d57806395d89b41146107465780639c7cbec614610771578063a035b1fe1461079c578063a22cb465146107c75761025c565b806370a082311461060f578063715018a61461064c5780637cb64759146106635780638da5cb5b1461068c57806391b7f5ed146106b75761025c565b80632f745c59116101dd5780634b980d67116101a15780634b980d67146104ef5780634f6ccce71461051a57806355f804b3146105575780635bce67131461058057806362aa5ae4146105a95780636352211e146105d25761025c565b80632f745c591461041e5780633ccfd60b1461045b57806342842e0e14610472578063453c23101461049b5780634905269c146104c65761025c565b806318160ddd1161022457806318160ddd1461035857806323b872dd1461038357806323cf0a22146103ac578063280d62ac146103c85780632eb4a7ab146103f35761025c565b806301ffc9a714610261578063050225ea1461029e57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613e93565b6109e8565b60405161029591906146ee565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613df9565b610a2a565b005b3480156102d357600080fd5b506102dc610ab4565b6040516102e99190614724565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190614003565b610b46565b6040516103269190614687565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613df9565b610bcb565b005b34801561036457600080fd5b5061036d610ce4565b60405161037a9190614b7c565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613ce3565b610cf9565b005b6103c660048036038101906103c19190613f36565b610d09565b005b3480156103d457600080fd5b506103dd610f7a565b6040516103ea9190614b7c565b60405180910390f35b3480156103ff57600080fd5b50610408610f80565b6040516104159190614709565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190613df9565b610f86565b6040516104529190614b7c565b60405180910390f35b34801561046757600080fd5b50610470611184565b005b34801561047e57600080fd5b5061049960048036038101906104949190613ce3565b6112e3565b005b3480156104a757600080fd5b506104b0611303565b6040516104bd9190614b61565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190614003565b611317565b005b3480156104fb57600080fd5b5061050461139d565b6040516105119190614b61565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614003565b6113b1565b60405161054e9190614b7c565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190613eed565b611404565b005b34801561058c57600080fd5b506105a760048036038101906105a29190613f63565b61149a565b005b3480156105b557600080fd5b506105d060048036038101906105cb9190613e39565b611699565b005b3480156105de57600080fd5b506105f960048036038101906105f49190614003565b611732565b6040516106069190614687565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190613c76565b611748565b6040516106439190614b7c565b60405180910390f35b34801561065857600080fd5b50610661611831565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613e66565b6118b9565b005b34801561069857600080fd5b506106a161193f565b6040516106ae9190614687565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d99190614003565b611968565b005b3480156106ec57600080fd5b5061070760048036038101906107029190614003565b6119ee565b6040516107149190614b46565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190613f36565b611a06565b005b34801561075257600080fd5b5061075b611aa2565b6040516107689190614724565b60405180910390f35b34801561077d57600080fd5b50610786611b34565b60405161079391906146ee565b60405180910390f35b3480156107a857600080fd5b506107b1611b47565b6040516107be9190614b7c565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190613db9565b611b4d565b005b3480156107fc57600080fd5b5061081760048036038101906108129190613f36565b611cce565b005b610833600480360381019061082e9190613fa3565b611d6a565b005b34801561084157600080fd5b5061084a612045565b60405161085791906146ee565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613d36565b612058565b005b34801561089557600080fd5b506108b060048036038101906108ab9190614003565b6120b4565b6040516108bd9190614724565b60405180910390f35b3480156108d257600080fd5b506108db61215b565b6040516108e89190614b61565b60405180910390f35b3480156108fd57600080fd5b50610906612161565b6040516109139190614b7c565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e9190613c76565b612167565b6040516109509190614b7c565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190613e39565b612179565b005b34801561098e57600080fd5b506109a960048036038101906109a49190613ca3565b612212565b6040516109b691906146ee565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e19190613c76565b6122a6565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a235750610a228261239e565b5b9050919050565b610a326124e8565b73ffffffffffffffffffffffffffffffffffffffff16610a5061193f565b73ffffffffffffffffffffffffffffffffffffffff1614610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90614906565b60405180910390fd5b610ab082826124f0565b5050565b606060028054610ac390614f23565b80601f0160208091040260200160405190810160405280929190818152602001828054610aef90614f23565b8015610b3c5780601f10610b1157610100808354040283529160200191610b3c565b820191906000526020600020905b815481529060010190602001808311610b1f57829003601f168201915b5050505050905090565b6000610b518261250e565b610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790614b06565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bd682611732565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e906149a6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c666124e8565b73ffffffffffffffffffffffffffffffffffffffff161480610c955750610c9481610c8f6124e8565b612212565b5b610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90614846565b60405180910390fd5b610cdf83838361251c565b505050565b600060018054610cf49190614dc7565b905090565b610d048383836125ce565b505050565b806113ba61ffff168161ffff16610d1e610ce4565b610d289190614cb2565b1115610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d60906148c6565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff168161ffff161115610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90614986565b60405180910390fd5b60008161ffff1611610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e02906147a6565b60405180910390fd5b600b60029054906101000a900461ffff1661ffff168161ffff16610e2e33612167565b610e389190614cb2565b1115610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090614866565b60405180910390fd5b600e60009054906101000a900460ff1615610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090614ae6565b60405180910390fd5b600e60019054906101000a900460ff1615610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090614886565b60405180910390fd5b8161ffff16600c54610f2b9190614d39565b341015610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f64906149c6565b60405180910390fd5b610f7682612b87565b5050565b600d5481565b600a5481565b6000610f9183611748565b8210610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990614746565b60405180910390fd5b6000610fdc610ce4565b905060008060005b83811015611142576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146110d657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561112e578684141561111f57819550505050505061117e565b838061112a90614f86565b9450505b50808061113a90614f86565b915050610fe4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590614a86565b60405180910390fd5b92915050565b61118c6124e8565b73ffffffffffffffffffffffffffffffffffffffff166111aa61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790614906565b60405180910390fd5b60026009541415611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90614aa6565b60405180910390fd5b6002600981905550600073f77dcd04c23266a8a002a80a48fb9557f9277cb473ffffffffffffffffffffffffffffffffffffffff164760405161128890614672565b60006040518083038185875af1925050503d80600081146112c5576040519150601f19603f3d011682016040523d82523d6000602084013e6112ca565b606091505b50509050806112d857600080fd5b506001600981905550565b6112fe83838360405180602001604052806000815250612058565b505050565b600b60029054906101000a900461ffff1681565b61131f6124e8565b73ffffffffffffffffffffffffffffffffffffffff1661133d61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614906565b60405180910390fd5b80600d8190555050565b600b60009054906101000a900461ffff1681565b60006113bb610ce4565b82106113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f3906147c6565b60405180910390fd5b819050919050565b61140c6124e8565b73ffffffffffffffffffffffffffffffffffffffff1661142a61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614906565b60405180910390fd5b80600f90805190602001906114969291906139d0565b5050565b816113ba61ffff168161ffff166114af610ce4565b6114b99190614cb2565b11156114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f1906148c6565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff168161ffff161115611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90614986565b60405180910390fd5b60008161ffff161161159c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611593906147a6565b60405180910390fd5b600b60029054906101000a900461ffff1661ffff168161ffff166115bf33612167565b6115c99190614cb2565b111561160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190614866565b60405180910390fd5b6116126124e8565b73ffffffffffffffffffffffffffffffffffffffff1661163061193f565b73ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90614906565b60405180910390fd5b611694828461ffff166124f0565b505050565b6116a16124e8565b73ffffffffffffffffffffffffffffffffffffffff166116bf61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90614906565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600061173d82612c72565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b0906148a6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6118396124e8565b73ffffffffffffffffffffffffffffffffffffffff1661185761193f565b73ffffffffffffffffffffffffffffffffffffffff16146118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490614906565b60405180910390fd5b6118b76000612e75565b565b6118c16124e8565b73ffffffffffffffffffffffffffffffffffffffff166118df61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c90614906565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119706124e8565b73ffffffffffffffffffffffffffffffffffffffff1661198e61193f565b73ffffffffffffffffffffffffffffffffffffffff16146119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90614906565b60405180910390fd5b80600c8190555050565b6119f6613a56565b6119ff82612c72565b9050919050565b611a0e6124e8565b73ffffffffffffffffffffffffffffffffffffffff16611a2c61193f565b73ffffffffffffffffffffffffffffffffffffffff1614611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990614906565b60405180910390fd5b80600b60006101000a81548161ffff021916908361ffff16021790555050565b606060038054611ab190614f23565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90614f23565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050905090565b600e60019054906101000a900460ff1681565b600c5481565b611b556124e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba90614946565b60405180910390fd5b8060076000611bd06124e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c7d6124e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc291906146ee565b60405180910390a35050565b611cd66124e8565b73ffffffffffffffffffffffffffffffffffffffff16611cf461193f565b73ffffffffffffffffffffffffffffffffffffffff1614611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190614906565b60405180910390fd5b80600b60026101000a81548161ffff021916908361ffff16021790555050565b826113ba61ffff168161ffff16611d7f610ce4565b611d899190614cb2565b1115611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc1906148c6565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff168161ffff161115611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614986565b60405180910390fd5b60008161ffff1611611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906147a6565b60405180910390fd5b600b60029054906101000a900461ffff1661ffff168161ffff16611e8f33612167565b611e999190614cb2565b1115611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190614866565b60405180910390fd5b600e60019054906101000a900460ff16611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090614a26565b60405180910390fd5b600033604051602001611f3c9190614628565b604051602081830303815290604052805190602001209050611fa2848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483612f39565b611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614a66565b60405180910390fd5b8461ffff16600c54611ff39190614d39565b341015612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c906149c6565b60405180910390fd5b61203e85612b87565b5050505050565b600e60009054906101000a900460ff1681565b6120638484846125ce565b61206f84848484612f50565b6120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a5906149e6565b60405180910390fd5b50505050565b60606120bf8261250e565b6120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590614926565b60405180910390fd5b60006121086130e7565b905060008151116121285760405180602001604052806000815250612153565b8061213284613179565b604051602001612143929190614643565b6040516020818303038152906040525b915050919050565b6113ba81565b60085481565b6000612172826132da565b9050919050565b6121816124e8565b73ffffffffffffffffffffffffffffffffffffffff1661219f61193f565b73ffffffffffffffffffffffffffffffffffffffff16146121f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ec90614906565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122ae6124e8565b73ffffffffffffffffffffffffffffffffffffffff166122cc61193f565b73ffffffffffffffffffffffffffffffffffffffff1614612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990614906565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238990614766565b60405180910390fd5b61239b81612e75565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061246957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124d157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124e157506124e0826133c3565b5b9050919050565b600033905090565b61250a82826040518060200160405280600081525061342d565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006125d982612c72565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166126006124e8565b73ffffffffffffffffffffffffffffffffffffffff16148061265c57506126256124e8565b73ffffffffffffffffffffffffffffffffffffffff1661264484610b46565b73ffffffffffffffffffffffffffffffffffffffff16145b80612678575061267782600001516126726124e8565b612212565b5b9050806126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190614966565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461272c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612723906148e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561279c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612793906147e6565b60405180910390fd5b6127a9858585600161390d565b6127b9600084846000015161251c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128279190614d93565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128cb9190614c6c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846129d19190614cb2565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b1757612a478161250e565b15612b16576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b7f8686866001613913565b505050505050565b8061ffff166103f28261ffff16612b9c610ce4565b612ba69190614cb2565b612bb09190614ff3565b1015612c6057600d546103f28261ffff16612bc9610ce4565b612bd39190614cb2565b612bdd9190614ff3565b612be79190614d39565b8161ffff16600c54612bf99190614d39565b612c039190614cb2565b341015612c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3c90614826565b60405180910390fd5b612c53338261ffff166124f0565b612c5b613919565b612c6f565b612c6e338261ffff166124f0565b5b50565b612c7a613a56565b612c838261250e565b612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614786565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612d265760017f000000000000000000000000000000000000000000000000000000000000001484612d199190614dc7565b612d239190614cb2565b90505b60008390505b818110612e34576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e2057809350505050612e70565b508080612e2c90614ef9565b915050612d2c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6790614ac6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082612f468584613931565b1490509392505050565b6000612f718473ffffffffffffffffffffffffffffffffffffffff166139a6565b156130da578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f9a6124e8565b8786866040518563ffffffff1660e01b8152600401612fbc94939291906146a2565b602060405180830381600087803b158015612fd657600080fd5b505af192505050801561300757506040513d601f19601f820116820180604052508101906130049190613ec0565b60015b61308a573d8060008114613037576040519150601f19603f3d011682016040523d82523d6000602084013e61303c565b606091505b50600081511415613082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613079906149e6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130df565b600190505b949350505050565b6060600f80546130f690614f23565b80601f016020809104026020016040519081016040528092919081815260200182805461312290614f23565b801561316f5780601f106131445761010080835404028352916020019161316f565b820191906000526020600020905b81548152906001019060200180831161315257829003601f168201915b5050505050905090565b606060008214156131c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d5565b600082905060005b600082146131f35780806131dc90614f86565b915050600a826131ec9190614d08565b91506131c9565b60008167ffffffffffffffff81111561320f5761320e6150e0565b5b6040519080825280601f01601f1916602001820160405280156132415781602001600182028036833780820191505090505b5090505b600085146132ce5760018261325a9190614dc7565b9150600a856132699190614ff3565b60306132759190614cb2565b60f81b81838151811061328b5761328a6150b1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132c79190614d08565b9450613245565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561334b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334290614806565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349b90614a46565b60405180910390fd5b6134ad8161250e565b156134ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e490614a06565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000014831115613550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354790614b26565b60405180910390fd5b61355d600085838661390d565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161365a9190614c6c565b6fffffffffffffffffffffffffffffffff1681526020018583602001516136819190614c6c565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156138f057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138906000888488612f50565b6138cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c6906149e6565b60405180910390fd5b81806138da90614f86565b92505080806138e890614f86565b91505061381f565b50806001819055506139056000878588613913565b505050505050565b50505050565b50505050565b600d54600c546139299190614cb2565b600c81905550565b60008082905060005b845181101561399b576000858281518110613958576139576150b1565b5b6020026020010151905080831161397a5761397383826139b9565b9250613987565b61398481846139b9565b92505b50808061399390614f86565b91505061393a565b508091505092915050565b600080823b905060008111915050919050565b600082600052816020526040600020905092915050565b8280546139dc90614f23565b90600052602060002090601f0160209004810192826139fe5760008555613a45565b82601f10613a1757805160ff1916838001178555613a45565b82800160010185558215613a45579182015b82811115613a44578251825591602001919060010190613a29565b5b509050613a529190613a90565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613aa9576000816000905550600101613a91565b5090565b6000613ac0613abb84614bbc565b614b97565b905082815260208101848484011115613adc57613adb61511e565b5b613ae7848285614eb7565b509392505050565b6000613b02613afd84614bed565b614b97565b905082815260208101848484011115613b1e57613b1d61511e565b5b613b29848285614eb7565b509392505050565b600081359050613b4081615943565b92915050565b60008083601f840112613b5c57613b5b615114565b5b8235905067ffffffffffffffff811115613b7957613b7861510f565b5b602083019150836020820283011115613b9557613b94615119565b5b9250929050565b600081359050613bab8161595a565b92915050565b600081359050613bc081615971565b92915050565b600081359050613bd581615988565b92915050565b600081519050613bea81615988565b92915050565b600082601f830112613c0557613c04615114565b5b8135613c15848260208601613aad565b91505092915050565b600082601f830112613c3357613c32615114565b5b8135613c43848260208601613aef565b91505092915050565b600081359050613c5b8161599f565b92915050565b600081359050613c70816159b6565b92915050565b600060208284031215613c8c57613c8b615128565b5b6000613c9a84828501613b31565b91505092915050565b60008060408385031215613cba57613cb9615128565b5b6000613cc885828601613b31565b9250506020613cd985828601613b31565b9150509250929050565b600080600060608486031215613cfc57613cfb615128565b5b6000613d0a86828701613b31565b9350506020613d1b86828701613b31565b9250506040613d2c86828701613c61565b9150509250925092565b60008060008060808587031215613d5057613d4f615128565b5b6000613d5e87828801613b31565b9450506020613d6f87828801613b31565b9350506040613d8087828801613c61565b925050606085013567ffffffffffffffff811115613da157613da0615123565b5b613dad87828801613bf0565b91505092959194509250565b60008060408385031215613dd057613dcf615128565b5b6000613dde85828601613b31565b9250506020613def85828601613b9c565b9150509250929050565b60008060408385031215613e1057613e0f615128565b5b6000613e1e85828601613b31565b9250506020613e2f85828601613c61565b9150509250929050565b600060208284031215613e4f57613e4e615128565b5b6000613e5d84828501613b9c565b91505092915050565b600060208284031215613e7c57613e7b615128565b5b6000613e8a84828501613bb1565b91505092915050565b600060208284031215613ea957613ea8615128565b5b6000613eb784828501613bc6565b91505092915050565b600060208284031215613ed657613ed5615128565b5b6000613ee484828501613bdb565b91505092915050565b600060208284031215613f0357613f02615128565b5b600082013567ffffffffffffffff811115613f2157613f20615123565b5b613f2d84828501613c1e565b91505092915050565b600060208284031215613f4c57613f4b615128565b5b6000613f5a84828501613c4c565b91505092915050565b60008060408385031215613f7a57613f79615128565b5b6000613f8885828601613c4c565b9250506020613f9985828601613b31565b9150509250929050565b600080600060408486031215613fbc57613fbb615128565b5b6000613fca86828701613c4c565b935050602084013567ffffffffffffffff811115613feb57613fea615123565b5b613ff786828701613b46565b92509250509250925092565b60006020828403121561401957614018615128565b5b600061402784828501613c61565b91505092915050565b61403981614dfb565b82525050565b61404881614dfb565b82525050565b61405f61405a82614dfb565b614fcf565b82525050565b61406e81614e0d565b82525050565b61407d81614e19565b82525050565b600061408e82614c1e565b6140988185614c34565b93506140a8818560208601614ec6565b6140b18161512d565b840191505092915050565b60006140c782614c29565b6140d18185614c50565b93506140e1818560208601614ec6565b6140ea8161512d565b840191505092915050565b600061410082614c29565b61410a8185614c61565b935061411a818560208601614ec6565b80840191505092915050565b6000614133602283614c50565b915061413e8261514b565b604082019050919050565b6000614156602683614c50565b91506141618261519a565b604082019050919050565b6000614179602a83614c50565b9150614184826151e9565b604082019050919050565b600061419c601783614c50565b91506141a782615238565b602082019050919050565b60006141bf602383614c50565b91506141ca82615261565b604082019050919050565b60006141e2602583614c50565b91506141ed826152b0565b604082019050919050565b6000614205603183614c50565b9150614210826152ff565b604082019050919050565b6000614228601a83614c50565b91506142338261534e565b602082019050919050565b600061424b603983614c50565b915061425682615377565b604082019050919050565b600061426e601e83614c50565b9150614279826153c6565b602082019050919050565b6000614291601983614c50565b915061429c826153ef565b602082019050919050565b60006142b4602b83614c50565b91506142bf82615418565b604082019050919050565b60006142d7601283614c50565b91506142e282615467565b602082019050919050565b60006142fa602683614c50565b915061430582615490565b604082019050919050565b600061431d600583614c61565b9150614328826154df565b600582019050919050565b6000614340602083614c50565b915061434b82615508565b602082019050919050565b6000614363602f83614c50565b915061436e82615531565b604082019050919050565b6000614386601a83614c50565b915061439182615580565b602082019050919050565b60006143a9603283614c50565b91506143b4826155a9565b604082019050919050565b60006143cc601583614c50565b91506143d7826155f8565b602082019050919050565b60006143ef602283614c50565b91506143fa82615621565b604082019050919050565b6000614412600083614c45565b915061441d82615670565b600082019050919050565b6000614435601283614c50565b915061444082615673565b602082019050919050565b6000614458603383614c50565b91506144638261569c565b604082019050919050565b600061447b601d83614c50565b9150614486826156eb565b602082019050919050565b600061449e601883614c50565b91506144a982615714565b602082019050919050565b60006144c1602183614c50565b91506144cc8261573d565b604082019050919050565b60006144e4601683614c50565b91506144ef8261578c565b602082019050919050565b6000614507602e83614c50565b9150614512826157b5565b604082019050919050565b600061452a601f83614c50565b915061453582615804565b602082019050919050565b600061454d602f83614c50565b91506145588261582d565b604082019050919050565b6000614570600e83614c50565b915061457b8261587c565b602082019050919050565b6000614593602d83614c50565b915061459e826158a5565b604082019050919050565b60006145b6602283614c50565b91506145c1826158f4565b604082019050919050565b6040820160008201516145e26000850182614030565b5060208201516145f56020850182614619565b50505050565b61460481614e6b565b82525050565b61461381614e99565b82525050565b61462281614ea3565b82525050565b6000614634828461404e565b60148201915081905092915050565b600061464f82856140f5565b915061465b82846140f5565b915061466682614310565b91508190509392505050565b600061467d82614405565b9150819050919050565b600060208201905061469c600083018461403f565b92915050565b60006080820190506146b7600083018761403f565b6146c4602083018661403f565b6146d1604083018561460a565b81810360608301526146e38184614083565b905095945050505050565b60006020820190506147036000830184614065565b92915050565b600060208201905061471e6000830184614074565b92915050565b6000602082019050818103600083015261473e81846140bc565b905092915050565b6000602082019050818103600083015261475f81614126565b9050919050565b6000602082019050818103600083015261477f81614149565b9050919050565b6000602082019050818103600083015261479f8161416c565b9050919050565b600060208201905081810360008301526147bf8161418f565b9050919050565b600060208201905081810360008301526147df816141b2565b9050919050565b600060208201905081810360008301526147ff816141d5565b9050919050565b6000602082019050818103600083015261481f816141f8565b9050919050565b6000602082019050818103600083015261483f8161421b565b9050919050565b6000602082019050818103600083015261485f8161423e565b9050919050565b6000602082019050818103600083015261487f81614261565b9050919050565b6000602082019050818103600083015261489f81614284565b9050919050565b600060208201905081810360008301526148bf816142a7565b9050919050565b600060208201905081810360008301526148df816142ca565b9050919050565b600060208201905081810360008301526148ff816142ed565b9050919050565b6000602082019050818103600083015261491f81614333565b9050919050565b6000602082019050818103600083015261493f81614356565b9050919050565b6000602082019050818103600083015261495f81614379565b9050919050565b6000602082019050818103600083015261497f8161439c565b9050919050565b6000602082019050818103600083015261499f816143bf565b9050919050565b600060208201905081810360008301526149bf816143e2565b9050919050565b600060208201905081810360008301526149df81614428565b9050919050565b600060208201905081810360008301526149ff8161444b565b9050919050565b60006020820190508181036000830152614a1f8161446e565b9050919050565b60006020820190508181036000830152614a3f81614491565b9050919050565b60006020820190508181036000830152614a5f816144b4565b9050919050565b60006020820190508181036000830152614a7f816144d7565b9050919050565b60006020820190508181036000830152614a9f816144fa565b9050919050565b60006020820190508181036000830152614abf8161451d565b9050919050565b60006020820190508181036000830152614adf81614540565b9050919050565b60006020820190508181036000830152614aff81614563565b9050919050565b60006020820190508181036000830152614b1f81614586565b9050919050565b60006020820190508181036000830152614b3f816145a9565b9050919050565b6000604082019050614b5b60008301846145cc565b92915050565b6000602082019050614b7660008301846145fb565b92915050565b6000602082019050614b91600083018461460a565b92915050565b6000614ba1614bb2565b9050614bad8282614f55565b919050565b6000604051905090565b600067ffffffffffffffff821115614bd757614bd66150e0565b5b614be08261512d565b9050602081019050919050565b600067ffffffffffffffff821115614c0857614c076150e0565b5b614c118261512d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c7782614e4f565b9150614c8283614e4f565b9250826fffffffffffffffffffffffffffffffff03821115614ca757614ca6615024565b5b828201905092915050565b6000614cbd82614e99565b9150614cc883614e99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cfd57614cfc615024565b5b828201905092915050565b6000614d1382614e99565b9150614d1e83614e99565b925082614d2e57614d2d615053565b5b828204905092915050565b6000614d4482614e99565b9150614d4f83614e99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8857614d87615024565b5b828202905092915050565b6000614d9e82614e4f565b9150614da983614e4f565b925082821015614dbc57614dbb615024565b5b828203905092915050565b6000614dd282614e99565b9150614ddd83614e99565b925082821015614df057614def615024565b5b828203905092915050565b6000614e0682614e79565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614ee4578082015181840152602081019050614ec9565b83811115614ef3576000848401525b50505050565b6000614f0482614e99565b91506000821415614f1857614f17615024565b5b600182039050919050565b60006002820490506001821680614f3b57607f821691505b60208210811415614f4f57614f4e615082565b5b50919050565b614f5e8261512d565b810181811067ffffffffffffffff82111715614f7d57614f7c6150e0565b5b80604052505050565b6000614f9182614e99565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fc457614fc3615024565b5b600182019050919050565b6000614fda82614fe1565b9050919050565b6000614fec8261513e565b9050919050565b6000614ffe82614e99565b915061500983614e99565b92508261501957615018615053565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e74206c657373207468616e2031000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f696e73756666696369656e742066756e64732028626174636829000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f6d696e74206f6e6c7920666f722077686974656c697374656400000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f63616e6e6f74206d696e742074686973206d616e790000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f57686974656c697374206d696e7420697320636c6f7365640000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c6574206e6f742077686974656c697374656400000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6d696e7420697320706175736564000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61594c81614dfb565b811461595757600080fd5b50565b61596381614e0d565b811461596e57600080fd5b50565b61597a81614e19565b811461598557600080fd5b50565b61599181614e23565b811461599c57600080fd5b50565b6159a881614e6b565b81146159b357600080fd5b50565b6159bf81614e99565b81146159ca57600080fd5b5056fea264697066735822122088ed8ea7bd1a93ae56f2bc18f7f0a341650d8a834d65603c87a2d95205dbb4ec64736f6c63430008070033

Deployed Bytecode Sourcemap

22920:4712:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24124:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27116:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15579:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16739:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16361:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12879:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17418:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24313:316;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23307:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23052:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13182:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27434:195;;;;;;;;;;;;;:::i;:::-;;17552:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23198:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26699:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23153:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12989:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26025:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24635:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27027:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15449:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14337:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5815:103;;;;;;;;;;;;;:::i;:::-;;27324:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5596:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26603:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26462:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26831:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15685:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23467:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23242:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16957:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26934:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24790:461;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23420:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17701:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25677:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23373:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20827:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26343:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27213:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17249:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5924:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24124:183;24210:4;24249:10;24234:25;;:11;:25;;;;:65;;;;24263:36;24287:11;24263:23;:36::i;:::-;24234:65;24227:72;;24124:183;;;:::o;27116:91::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27184:15:::1;27194:1;27197;27184:9;:15::i;:::-;27116:91:::0;;:::o;15579:100::-;15633:13;15666:5;15659:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15579:100;:::o;16739:212::-;16807:7;16835:16;16843:7;16835;:16::i;:::-;16827:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16919:15;:24;16935:7;16919:24;;;;;;;;;;;;;;;;;;;;;16912:31;;16739:212;;;:::o;16361:372::-;16434:13;16450:24;16466:7;16450:15;:24::i;:::-;16434:40;;16499:5;16493:11;;:2;:11;;;;16485:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16578:5;16562:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;16587:37;16604:5;16611:12;:10;:12::i;:::-;16587:16;:37::i;:::-;16562:62;16554:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;16697:28;16706:2;16710:7;16719:5;16697:8;:28::i;:::-;16423:310;16361:372;;:::o;12879:104::-;12932:7;12974:1;12959:12;;:16;;;;:::i;:::-;12952:23;;12879:104;:::o;17418:128::-;17510:28;17520:4;17526:2;17530:7;17510:9;:28::i;:::-;17418:128;;;:::o;24313:316::-;24366:8;23409:4;23799:37;;23815:8;23799:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;23791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23890:17;;;;;;;;;;;23878:29;;:8;:29;;;;23870:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23963:1;23952:8;:12;;;23944:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24051:12;;;;;;;;;;;24012:51;;24039:8;24012:35;;:24;24025:10;24012:12;:24::i;:::-;:35;;;;:::i;:::-;:51;;24003:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;24404:8:::1;;;;;;;;;;;24403:9;24395:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;24451:17;;;;;;;;;;;24450:18;24442:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24540:8;24532:16;;:5;;:16;;;;:::i;:::-;24519:9;:29;;24511:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24592:29;24612:8;24592:19;:29::i;:::-;24313:316:::0;;:::o;23307:58::-;;;;:::o;23052:94::-;;;;:::o;13182:823::-;13271:7;13307:16;13317:5;13307:9;:16::i;:::-;13299:5;:24;13291:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13373:22;13398:13;:11;:13::i;:::-;13373:38;;13422:19;13456:25;13510:9;13505:426;13529:14;13525:1;:18;13505:426;;;13565:31;13599:11;:14;13611:1;13599:14;;;;;;;;;;;13565:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13658:1;13632:28;;:9;:14;;;:28;;;13628:103;;13701:9;:14;;;13681:34;;13628:103;13770:5;13749:26;;:17;:26;;;13745:175;;;13815:5;13800:11;:20;13796:77;;;13852:1;13845:8;;;;;;;;;13796:77;13891:13;;;;;:::i;:::-;;;;13745:175;13550:381;13545:3;;;;;:::i;:::-;;;;13505:426;;;;13941:56;;;;;;;;;;:::i;:::-;;;;;;;;13182:823;;;;;:::o;27434:195::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;183:1:::1;325:7;;:19;;317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;183:1;391:7;:18;;;;27496:7:::2;27517:42;27509:56;;27573:21;27509:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27495:104;;;27618:2;27610:11;;;::::0;::::2;;27484:145;139:1:::1;432:7;:22;;;;27434:195::o:0;17552:143::-;17648:39;17665:4;17671:2;17675:7;17648:39;;;;;;;;;;;;:16;:39::i;:::-;17552:143;;;:::o;23198:37::-;;;;;;;;;;;;;:::o;26699:126::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26799:18:::1;26782:14;:35;;;;26699:126:::0;:::o;23153:37::-;;;;;;;;;;;;;:::o;12989:187::-;13056:7;13092:13;:11;:13::i;:::-;13084:5;:21;13076:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;13163:5;13156:12;;12989:187;;;:::o;26025:101::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26111:7:::1;26096:12;:22;;;;;;;;;;;;:::i;:::-;;26025:101:::0;:::o;24635:149::-;24716:8;23409:4;23799:37;;23815:8;23799:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;23791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23890:17;;;;;;;;;;;23878:29;;:8;:29;;;;23870:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23963:1;23952:8;:12;;;23944:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24051:12;;;;;;;;;;;24012:51;;24039:8;24012:35;;:24;24025:10;24012:12;:24::i;:::-;:35;;;;:::i;:::-;:51;;24003:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;5740:12:::1;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24747:29:::2;24757:8;24767;24747:29;;:9;:29::i;:::-;24635:149:::0;;;:::o;27027:83::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27096:6:::1;27085:8;;:17;;;;;;;;;;;;;;;;;;27027:83:::0;:::o;15449:124::-;15513:7;15540:20;15552:7;15540:11;:20::i;:::-;:25;;;15533:32;;15449:124;;;:::o;14337:221::-;14401:7;14446:1;14429:19;;:5;:19;;;;14421:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;14522:12;:19;14535:5;14522:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;14514:36;;14507:43;;14337:221;;;:::o;5815:103::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5880:30:::1;5907:1;5880:18;:30::i;:::-;5815:103::o:0;27324:104::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27409:11:::1;27396:10;:24;;;;27324:104:::0;:::o;5596:87::-;5642:7;5669:6;;;;;;;;;;;5662:13;;5596:87;:::o;26603:90::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26676:9:::1;26668:5;:17;;;;26603:90:::0;:::o;26462:135::-;26528:21;;:::i;:::-;26569:20;26581:7;26569:11;:20::i;:::-;26562:27;;26462:135;;;:::o;26831:97::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26919:1:::1;26899:17;;:21;;;;;;;;;;;;;;;;;;26831:97:::0;:::o;15685:104::-;15741:13;15774:7;15767:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15685:104;:::o;23467:39::-;;;;;;;;;;;;;:::o;23242:58::-;;;;:::o;16957:286::-;17064:12;:10;:12::i;:::-;17052:24;;:8;:24;;;;17044:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;17163:8;17118:18;:32;17137:12;:10;:12::i;:::-;17118:32;;;;;;;;;;;;;;;:42;17151:8;17118:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;17216:8;17187:48;;17202:12;:10;:12::i;:::-;17187:48;;;17226:8;17187:48;;;;;;:::i;:::-;;;;;;;;16957:286;;:::o;26934:87::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27012:1:::1;26997:12;;:16;;;;;;;;;;;;;;;;;;26934:87:::0;:::o;24790:461::-;24878:8;23409:4;23799:37;;23815:8;23799:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;23791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23890:17;;;;;;;;;;;23878:29;;:8;:29;;;;23870:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23963:1;23952:8;:12;;;23944:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24051:12;;;;;;;;;;;24012:51;;24039:8;24012:35;;:24;24025:10;24012:12;:24::i;:::-;:35;;;;:::i;:::-;:51;;24003:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;24923:17:::1;;;;;;;;;;;24915:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24980:12;25022:10;25005:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;24995:39;;;;;;24980:54;;25053:50;25072:12;;25053:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25086:10;;25098:4;25053:18;:50::i;:::-;25045:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25170:8;25162:16;;:5;;:16;;;;:::i;:::-;25149:9;:29;;25141:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25214:29;25234:8;25214:19;:29::i;:::-;24902:349;24790:461:::0;;;;:::o;23420:40::-;;;;;;;;;;;;;:::o;17701:275::-;17817:28;17827:4;17833:2;17837:7;17817:9;:28::i;:::-;17864:48;17887:4;17893:2;17897:7;17906:5;17864:22;:48::i;:::-;17856:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;17701:275;;;;:::o;25677:342::-;25750:13;25784:16;25792:7;25784;:16::i;:::-;25776:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25863:21;25887:10;:8;:10::i;:::-;25863:34;;25939:1;25921:7;25915:21;:25;:95;;;;;;;;;;;;;;;;;25967:7;25976:18;:7;:16;:18::i;:::-;25950:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25915:95;25908:102;;;25677:342;;;:::o;23373:40::-;23409:4;23373:40;:::o;20827:43::-;;;;:::o;26343:113::-;26401:7;26428:20;26442:5;26428:13;:20::i;:::-;26421:27;;26343:113;;;:::o;27213:105::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27304:6:::1;27284:17;;:26;;;;;;;;;;;;;;;;;;27213:105:::0;:::o;17249:163::-;17346:4;17369:18;:25;17388:5;17369:25;;;;;;;;;;;;;;;:35;17395:8;17369:35;;;;;;;;;;;;;;;;;;;;;;;;;17362:42;;17249:163;;;;:::o;5924:201::-;5740:12;:10;:12::i;:::-;5729:23;;:7;:5;:7::i;:::-;:23;;;5721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6033:1:::1;6013:22;;:8;:22;;;;6005:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6089:28;6108:8;6089:18;:28::i;:::-;5924:201:::0;:::o;14011:320::-;14113:4;14152:25;14137:40;;;:11;:40;;;;:92;;;;14196:33;14181:48;;;:11;:48;;;;14137:92;:146;;;;14248:35;14233:50;;;:11;:50;;;;14137:146;:186;;;;14287:36;14311:11;14287:23;:36::i;:::-;14137:186;14130:193;;14011:320;;;:::o;5151:98::-;5204:7;5231:10;5224:17;;5151:98;:::o;18099:104::-;18168:27;18178:2;18182:8;18168:27;;;;;;;;;;;;:9;:27::i;:::-;18099:104;;:::o;17982:111::-;18039:4;18073:12;;18063:7;:22;18056:29;;17982:111;;;:::o;20659:162::-;20767:2;20740:15;:24;20756:7;20740:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;20805:7;20801:2;20785:28;;20794:5;20785:28;;;;;;;;;;;;20659:162;;;:::o;19371:1282::-;19452:35;19490:20;19502:7;19490:11;:20::i;:::-;19452:58;;19521:22;19563:13;:18;;;19547:34;;:12;:10;:12::i;:::-;:34;;;:74;;;;19609:12;:10;:12::i;:::-;19585:36;;:20;19597:7;19585:11;:20::i;:::-;:36;;;19547:74;:128;;;;19625:50;19642:13;:18;;;19662:12;:10;:12::i;:::-;19625:16;:50::i;:::-;19547:128;19521:155;;19696:17;19688:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;19810:4;19788:26;;:13;:18;;;:26;;;19779:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;19890:1;19876:16;;:2;:16;;;;19868:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19945:43;19967:4;19973:2;19977:7;19986:1;19945:21;:43::i;:::-;19999:49;20016:1;20020:7;20029:13;:18;;;19999:8;:49::i;:::-;20089:1;20059:12;:18;20072:4;20059:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20129:1;20101:12;:16;20114:2;20101:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20164:43;;;;;;;;20179:2;20164:43;;;;;;20190:15;20164:43;;;;;20141:11;:20;20153:7;20141:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20218:19;20250:1;20240:7;:11;;;;:::i;:::-;20218:33;;20307:1;20266:43;;:11;:24;20278:11;20266:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;20262:288;;;20330:20;20338:11;20330:7;:20::i;:::-;20326:213;;;20398:125;;;;;;;;20435:13;:18;;;20398:125;;;;;;20476:13;:28;;;20398:125;;;;;20371:11;:24;20383:11;20371:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20326:213;20262:288;20584:7;20580:2;20565:27;;20574:4;20565:27;;;;;;;;;;;;20603:42;20624:4;20630:2;20634:7;20643:1;20603:20;:42::i;:::-;19441:1212;;;19371:1282;;;:::o;25257:414::-;25358:8;25326:40;;25351:4;25341:8;25327:22;;:13;:11;:13::i;:::-;:22;;;;:::i;:::-;25326:29;;;;:::i;:::-;:40;25323:341;;;25455:14;;25448:4;25438:8;25424:22;;:13;:11;:13::i;:::-;:22;;;;:::i;:::-;25423:29;;;;:::i;:::-;:46;;;;:::i;:::-;25412:8;25404:16;;:5;;:16;;;;:::i;:::-;:65;;;;:::i;:::-;25390:9;:80;;25382:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;25516:31;25526:10;25538:8;25516:31;;:9;:31::i;:::-;25562:18;:16;:18::i;:::-;25323:341;;;25621:31;25631:10;25643:8;25621:31;;:9;:31::i;:::-;25323:341;25257:414;:::o;14799:644::-;14860:21;;:::i;:::-;14902:16;14910:7;14902;:16::i;:::-;14894:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14976:26;15028:12;15017:7;:23;15013:103;;15103:1;15088:12;15078:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;15057:47;;15013:103;15131:12;15146:7;15131:22;;15126:242;15163:18;15155:4;:26;15126:242;;15206:31;15240:11;:17;15252:4;15240:17;;;;;;;;;;;15206:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15302:1;15276:28;;:9;:14;;;:28;;;15272:85;;15332:9;15325:16;;;;;;;15272:85;15191:177;15183:6;;;;;:::i;:::-;;;;15126:242;;;;15378:57;;;;;;;;;;:::i;:::-;;;;;;;;14799:644;;;;:::o;6131:191::-;6205:16;6224:6;;;;;;;;;;;6205:25;;6250:8;6241:6;;:17;;;;;;;;;;;;;;;;;;6305:8;6274:40;;6295:8;6274:40;;;;;;;;;;;;6194:128;6131:191;:::o;494:156::-;585:4;638;609:25;622:5;629:4;609:12;:25::i;:::-;:33;602:40;;494:156;;;;;:::o;21728:942::-;21840:4;21861:15;:2;:13;;;:15::i;:::-;21857:806;;;21930:2;21914:36;;;21973:12;:10;:12::i;:::-;22008:4;22035:7;22065:5;21914:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21893:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22293:1;22276:6;:13;:18;22272:321;;;22319:109;;;;;;;;;;:::i;:::-;;;;;;;;22272:321;22543:6;22537:13;22528:6;22524:2;22520:15;22513:38;21893:715;22163:45;;;22153:55;;;:6;:55;;;;22146:62;;;;;21857:806;22647:4;22640:11;;21728:942;;;;;;;:::o;26132:113::-;26192:13;26225:12;26218:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26132:113;:::o;3778:532::-;3834:13;3873:1;3864:5;:10;3860:53;;;3891:10;;;;;;;;;;;;;;;;;;;;;3860:53;3923:12;3938:5;3923:20;;3954:14;3979:78;3994:1;3986:4;:9;3979:78;;4012:8;;;;;:::i;:::-;;;;4043:2;4035:10;;;;;:::i;:::-;;;3979:78;;;4067:19;4099:6;4089:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4067:39;;4117:154;4133:1;4124:5;:10;4117:154;;4161:1;4151:11;;;;;:::i;:::-;;;4228:2;4220:5;:10;;;;:::i;:::-;4207:2;:24;;;;:::i;:::-;4194:39;;4177:6;4184;4177:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4257:2;4248:11;;;;;:::i;:::-;;;4117:154;;;4295:6;4281:21;;;;;3778:532;;;;:::o;14564:229::-;14625:7;14670:1;14653:19;;:5;:19;;;;14645:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;14752:12;:19;14765:5;14752:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;14744:41;;14737:48;;14564:229;;;:::o;9944:157::-;10029:4;10068:25;10053:40;;;:11;:40;;;;10046:47;;9944:157;;;:::o;18209:1156::-;18299:20;18322:12;;18299:35;;18367:1;18353:16;;:2;:16;;;;18345:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18427:21;18435:12;18427:7;:21::i;:::-;18426:22;18418:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18513:12;18501:8;:24;;18493:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18575:61;18605:1;18609:2;18613:12;18627:8;18575:21;:61::i;:::-;18647:30;18680:12;:16;18693:2;18680:16;;;;;;;;;;;;;;;18647:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18726:108;;;;;;;;18768:8;18738:11;:19;;;:39;;;;:::i;:::-;18726:108;;;;;;18814:8;18779:11;:24;;;:44;;;;:::i;:::-;18726:108;;;;;18707:12;:16;18720:2;18707:16;;;;;;;;;;;;;;;:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18873:43;;;;;;;;18888:2;18873:43;;;;;;18899:15;18873:43;;;;;18845:11;:25;18857:12;18845:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18927:20;18950:12;18927:35;;18978:9;18973:276;18997:8;18993:1;:12;18973:276;;;19057:12;19053:2;19032:38;;19049:1;19032:38;;;;;;;;;;;;19093:59;19124:1;19128:2;19132:12;19146:5;19093:22;:59::i;:::-;19085:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;19223:14;;;;;:::i;:::-;;;;19007:3;;;;;:::i;:::-;;;;18973:276;;;;19274:12;19259;:27;;;;19297:60;19326:1;19330:2;19334:12;19348:8;19297:20;:60::i;:::-;18288:1077;;;18209:1156;;;:::o;22676:116::-;;;;;:::o;22798:115::-;;;;;:::o;26251:86::-;26315:14;;26307:5;;:22;;;;:::i;:::-;26299:5;:30;;;;26251:86::o;656:517::-;739:7;759:20;782:4;759:27;;802:9;797:339;821:5;:12;817:1;:16;797:339;;;855:20;878:5;884:1;878:8;;;;;;;;:::i;:::-;;;;;;;;855:31;;921:12;905;:28;901:224;;969:42;984:12;998;969:14;:42::i;:::-;954:57;;901:224;;;1067:42;1082:12;1096;1067:14;:42::i;:::-;1052:57;;901:224;840:296;835:3;;;;;:::i;:::-;;;;797:339;;;;1153:12;1146:19;;;656:517;;;;:::o;6350:196::-;6410:4;6427:12;6494:7;6482:20;6474:28;;6537:1;6530:4;:8;6523:15;;;6350:196;;;:::o;1179:224::-;1247:13;1310:1;1304:4;1297:15;1339:1;1333:4;1326:15;1380:4;1374;1364:21;1355:30;;1179:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:137::-;2913:5;2951:6;2938:20;2929:29;;2967:32;2993:5;2967:32;:::i;:::-;2868:137;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:329::-;3215:6;3264:2;3252:9;3243:7;3239:23;3235:32;3232:119;;;3270:79;;:::i;:::-;3232:119;3390:1;3415:53;3460:7;3451:6;3440:9;3436:22;3415:53;:::i;:::-;3405:63;;3361:117;3156:329;;;;:::o;3491:474::-;3559:6;3567;3616:2;3604:9;3595:7;3591:23;3587:32;3584:119;;;3622:79;;:::i;:::-;3584:119;3742:1;3767:53;3812:7;3803:6;3792:9;3788:22;3767:53;:::i;:::-;3757:63;;3713:117;3869:2;3895:53;3940:7;3931:6;3920:9;3916:22;3895:53;:::i;:::-;3885:63;;3840:118;3491:474;;;;;:::o;3971:619::-;4048:6;4056;4064;4113:2;4101:9;4092:7;4088:23;4084:32;4081:119;;;4119:79;;:::i;:::-;4081:119;4239:1;4264:53;4309:7;4300:6;4289:9;4285:22;4264:53;:::i;:::-;4254:63;;4210:117;4366:2;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4337:118;4494:2;4520:53;4565:7;4556:6;4545:9;4541:22;4520:53;:::i;:::-;4510:63;;4465:118;3971:619;;;;;:::o;4596:943::-;4691:6;4699;4707;4715;4764:3;4752:9;4743:7;4739:23;4735:33;4732:120;;;4771:79;;:::i;:::-;4732:120;4891:1;4916:53;4961:7;4952:6;4941:9;4937:22;4916:53;:::i;:::-;4906:63;;4862:117;5018:2;5044:53;5089:7;5080:6;5069:9;5065:22;5044:53;:::i;:::-;5034:63;;4989:118;5146:2;5172:53;5217:7;5208:6;5197:9;5193:22;5172:53;:::i;:::-;5162:63;;5117:118;5302:2;5291:9;5287:18;5274:32;5333:18;5325:6;5322:30;5319:117;;;5355:79;;:::i;:::-;5319:117;5460:62;5514:7;5505:6;5494:9;5490:22;5460:62;:::i;:::-;5450:72;;5245:287;4596:943;;;;;;;:::o;5545:468::-;5610:6;5618;5667:2;5655:9;5646:7;5642:23;5638:32;5635:119;;;5673:79;;:::i;:::-;5635:119;5793:1;5818:53;5863:7;5854:6;5843:9;5839:22;5818:53;:::i;:::-;5808:63;;5764:117;5920:2;5946:50;5988:7;5979:6;5968:9;5964:22;5946:50;:::i;:::-;5936:60;;5891:115;5545:468;;;;;:::o;6019:474::-;6087:6;6095;6144:2;6132:9;6123:7;6119:23;6115:32;6112:119;;;6150:79;;:::i;:::-;6112:119;6270:1;6295:53;6340:7;6331:6;6320:9;6316:22;6295:53;:::i;:::-;6285:63;;6241:117;6397:2;6423:53;6468:7;6459:6;6448:9;6444:22;6423:53;:::i;:::-;6413:63;;6368:118;6019:474;;;;;:::o;6499:323::-;6555:6;6604:2;6592:9;6583:7;6579:23;6575:32;6572:119;;;6610:79;;:::i;:::-;6572:119;6730:1;6755:50;6797:7;6788:6;6777:9;6773:22;6755:50;:::i;:::-;6745:60;;6701:114;6499:323;;;;:::o;6828:329::-;6887:6;6936:2;6924:9;6915:7;6911:23;6907:32;6904:119;;;6942:79;;:::i;:::-;6904:119;7062:1;7087:53;7132:7;7123:6;7112:9;7108:22;7087:53;:::i;:::-;7077:63;;7033:117;6828:329;;;;:::o;7163:327::-;7221:6;7270:2;7258:9;7249:7;7245:23;7241:32;7238:119;;;7276:79;;:::i;:::-;7238:119;7396:1;7421:52;7465:7;7456:6;7445:9;7441:22;7421:52;:::i;:::-;7411:62;;7367:116;7163:327;;;;:::o;7496:349::-;7565:6;7614:2;7602:9;7593:7;7589:23;7585:32;7582:119;;;7620:79;;:::i;:::-;7582:119;7740:1;7765:63;7820:7;7811:6;7800:9;7796:22;7765:63;:::i;:::-;7755:73;;7711:127;7496:349;;;;:::o;7851:509::-;7920:6;7969:2;7957:9;7948:7;7944:23;7940:32;7937:119;;;7975:79;;:::i;:::-;7937:119;8123:1;8112:9;8108:17;8095:31;8153:18;8145:6;8142:30;8139:117;;;8175:79;;:::i;:::-;8139:117;8280:63;8335:7;8326:6;8315:9;8311:22;8280:63;:::i;:::-;8270:73;;8066:287;7851:509;;;;:::o;8366:327::-;8424:6;8473:2;8461:9;8452:7;8448:23;8444:32;8441:119;;;8479:79;;:::i;:::-;8441:119;8599:1;8624:52;8668:7;8659:6;8648:9;8644:22;8624:52;:::i;:::-;8614:62;;8570:116;8366:327;;;;:::o;8699:472::-;8766:6;8774;8823:2;8811:9;8802:7;8798:23;8794:32;8791:119;;;8829:79;;:::i;:::-;8791:119;8949:1;8974:52;9018:7;9009:6;8998:9;8994:22;8974:52;:::i;:::-;8964:62;;8920:116;9075:2;9101:53;9146:7;9137:6;9126:9;9122:22;9101:53;:::i;:::-;9091:63;;9046:118;8699:472;;;;;:::o;9177:702::-;9271:6;9279;9287;9336:2;9324:9;9315:7;9311:23;9307:32;9304:119;;;9342:79;;:::i;:::-;9304:119;9462:1;9487:52;9531:7;9522:6;9511:9;9507:22;9487:52;:::i;:::-;9477:62;;9433:116;9616:2;9605:9;9601:18;9588:32;9647:18;9639:6;9636:30;9633:117;;;9669:79;;:::i;:::-;9633:117;9782:80;9854:7;9845:6;9834:9;9830:22;9782:80;:::i;:::-;9764:98;;;;9559:313;9177:702;;;;;:::o;9885:329::-;9944:6;9993:2;9981:9;9972:7;9968:23;9964:32;9961:119;;;9999:79;;:::i;:::-;9961:119;10119:1;10144:53;10189:7;10180:6;10169:9;10165:22;10144:53;:::i;:::-;10134:63;;10090:117;9885:329;;;;:::o;10220:108::-;10297:24;10315:5;10297:24;:::i;:::-;10292:3;10285:37;10220:108;;:::o;10334:118::-;10421:24;10439:5;10421:24;:::i;:::-;10416:3;10409:37;10334:118;;:::o;10458:157::-;10563:45;10583:24;10601:5;10583:24;:::i;:::-;10563:45;:::i;:::-;10558:3;10551:58;10458:157;;:::o;10621:109::-;10702:21;10717:5;10702:21;:::i;:::-;10697:3;10690:34;10621:109;;:::o;10736:118::-;10823:24;10841:5;10823:24;:::i;:::-;10818:3;10811:37;10736:118;;:::o;10860:360::-;10946:3;10974:38;11006:5;10974:38;:::i;:::-;11028:70;11091:6;11086:3;11028:70;:::i;:::-;11021:77;;11107:52;11152:6;11147:3;11140:4;11133:5;11129:16;11107:52;:::i;:::-;11184:29;11206:6;11184:29;:::i;:::-;11179:3;11175:39;11168:46;;10950:270;10860:360;;;;:::o;11226:364::-;11314:3;11342:39;11375:5;11342:39;:::i;:::-;11397:71;11461:6;11456:3;11397:71;:::i;:::-;11390:78;;11477:52;11522:6;11517:3;11510:4;11503:5;11499:16;11477:52;:::i;:::-;11554:29;11576:6;11554:29;:::i;:::-;11549:3;11545:39;11538:46;;11318:272;11226:364;;;;:::o;11596:377::-;11702:3;11730:39;11763:5;11730:39;:::i;:::-;11785:89;11867:6;11862:3;11785:89;:::i;:::-;11778:96;;11883:52;11928:6;11923:3;11916:4;11909:5;11905:16;11883:52;:::i;:::-;11960:6;11955:3;11951:16;11944:23;;11706:267;11596:377;;;;:::o;11979:366::-;12121:3;12142:67;12206:2;12201:3;12142:67;:::i;:::-;12135:74;;12218:93;12307:3;12218:93;:::i;:::-;12336:2;12331:3;12327:12;12320:19;;11979:366;;;:::o;12351:::-;12493:3;12514:67;12578:2;12573:3;12514:67;:::i;:::-;12507:74;;12590:93;12679:3;12590:93;:::i;:::-;12708:2;12703:3;12699:12;12692:19;;12351:366;;;:::o;12723:::-;12865:3;12886:67;12950:2;12945:3;12886:67;:::i;:::-;12879:74;;12962:93;13051:3;12962:93;:::i;:::-;13080:2;13075:3;13071:12;13064:19;;12723:366;;;:::o;13095:::-;13237:3;13258:67;13322:2;13317:3;13258:67;:::i;:::-;13251:74;;13334:93;13423:3;13334:93;:::i;:::-;13452:2;13447:3;13443:12;13436:19;;13095:366;;;:::o;13467:::-;13609:3;13630:67;13694:2;13689:3;13630:67;:::i;:::-;13623:74;;13706:93;13795:3;13706:93;:::i;:::-;13824:2;13819:3;13815:12;13808:19;;13467:366;;;:::o;13839:::-;13981:3;14002:67;14066:2;14061:3;14002:67;:::i;:::-;13995:74;;14078:93;14167:3;14078:93;:::i;:::-;14196:2;14191:3;14187:12;14180:19;;13839:366;;;:::o;14211:::-;14353:3;14374:67;14438:2;14433:3;14374:67;:::i;:::-;14367:74;;14450:93;14539:3;14450:93;:::i;:::-;14568:2;14563:3;14559:12;14552:19;;14211:366;;;:::o;14583:::-;14725:3;14746:67;14810:2;14805:3;14746:67;:::i;:::-;14739:74;;14822:93;14911:3;14822:93;:::i;:::-;14940:2;14935:3;14931:12;14924:19;;14583:366;;;:::o;14955:::-;15097:3;15118:67;15182:2;15177:3;15118:67;:::i;:::-;15111:74;;15194:93;15283:3;15194:93;:::i;:::-;15312:2;15307:3;15303:12;15296:19;;14955:366;;;:::o;15327:::-;15469:3;15490:67;15554:2;15549:3;15490:67;:::i;:::-;15483:74;;15566:93;15655:3;15566:93;:::i;:::-;15684:2;15679:3;15675:12;15668:19;;15327:366;;;:::o;15699:::-;15841:3;15862:67;15926:2;15921:3;15862:67;:::i;:::-;15855:74;;15938:93;16027:3;15938:93;:::i;:::-;16056:2;16051:3;16047:12;16040:19;;15699:366;;;:::o;16071:::-;16213:3;16234:67;16298:2;16293:3;16234:67;:::i;:::-;16227:74;;16310:93;16399:3;16310:93;:::i;:::-;16428:2;16423:3;16419:12;16412:19;;16071:366;;;:::o;16443:::-;16585:3;16606:67;16670:2;16665:3;16606:67;:::i;:::-;16599:74;;16682:93;16771:3;16682:93;:::i;:::-;16800:2;16795:3;16791:12;16784:19;;16443:366;;;:::o;16815:::-;16957:3;16978:67;17042:2;17037:3;16978:67;:::i;:::-;16971:74;;17054:93;17143:3;17054:93;:::i;:::-;17172:2;17167:3;17163:12;17156:19;;16815:366;;;:::o;17187:400::-;17347:3;17368:84;17450:1;17445:3;17368:84;:::i;:::-;17361:91;;17461:93;17550:3;17461:93;:::i;:::-;17579:1;17574:3;17570:11;17563:18;;17187:400;;;:::o;17593:366::-;17735:3;17756:67;17820:2;17815:3;17756:67;:::i;:::-;17749:74;;17832:93;17921:3;17832:93;:::i;:::-;17950:2;17945:3;17941:12;17934:19;;17593:366;;;:::o;17965:::-;18107:3;18128:67;18192:2;18187:3;18128:67;:::i;:::-;18121:74;;18204:93;18293:3;18204:93;:::i;:::-;18322:2;18317:3;18313:12;18306:19;;17965:366;;;:::o;18337:::-;18479:3;18500:67;18564:2;18559:3;18500:67;:::i;:::-;18493:74;;18576:93;18665:3;18576:93;:::i;:::-;18694:2;18689:3;18685:12;18678:19;;18337:366;;;:::o;18709:::-;18851:3;18872:67;18936:2;18931:3;18872:67;:::i;:::-;18865:74;;18948:93;19037:3;18948:93;:::i;:::-;19066:2;19061:3;19057:12;19050:19;;18709:366;;;:::o;19081:::-;19223:3;19244:67;19308:2;19303:3;19244:67;:::i;:::-;19237:74;;19320:93;19409:3;19320:93;:::i;:::-;19438:2;19433:3;19429:12;19422:19;;19081:366;;;:::o;19453:::-;19595:3;19616:67;19680:2;19675:3;19616:67;:::i;:::-;19609:74;;19692:93;19781:3;19692:93;:::i;:::-;19810:2;19805:3;19801:12;19794:19;;19453:366;;;:::o;19825:398::-;19984:3;20005:83;20086:1;20081:3;20005:83;:::i;:::-;19998:90;;20097:93;20186:3;20097:93;:::i;:::-;20215:1;20210:3;20206:11;20199:18;;19825:398;;;:::o;20229:366::-;20371:3;20392:67;20456:2;20451:3;20392:67;:::i;:::-;20385:74;;20468:93;20557:3;20468:93;:::i;:::-;20586:2;20581:3;20577:12;20570:19;;20229:366;;;:::o;20601:::-;20743:3;20764:67;20828:2;20823:3;20764:67;:::i;:::-;20757:74;;20840:93;20929:3;20840:93;:::i;:::-;20958:2;20953:3;20949:12;20942:19;;20601:366;;;:::o;20973:::-;21115:3;21136:67;21200:2;21195:3;21136:67;:::i;:::-;21129:74;;21212:93;21301:3;21212:93;:::i;:::-;21330:2;21325:3;21321:12;21314:19;;20973:366;;;:::o;21345:::-;21487:3;21508:67;21572:2;21567:3;21508:67;:::i;:::-;21501:74;;21584:93;21673:3;21584:93;:::i;:::-;21702:2;21697:3;21693:12;21686:19;;21345:366;;;:::o;21717:::-;21859:3;21880:67;21944:2;21939:3;21880:67;:::i;:::-;21873:74;;21956:93;22045:3;21956:93;:::i;:::-;22074:2;22069:3;22065:12;22058:19;;21717:366;;;:::o;22089:::-;22231:3;22252:67;22316:2;22311:3;22252:67;:::i;:::-;22245:74;;22328:93;22417:3;22328:93;:::i;:::-;22446:2;22441:3;22437:12;22430:19;;22089:366;;;:::o;22461:::-;22603:3;22624:67;22688:2;22683:3;22624:67;:::i;:::-;22617:74;;22700:93;22789:3;22700:93;:::i;:::-;22818:2;22813:3;22809:12;22802:19;;22461:366;;;:::o;22833:::-;22975:3;22996:67;23060:2;23055:3;22996:67;:::i;:::-;22989:74;;23072:93;23161:3;23072:93;:::i;:::-;23190:2;23185:3;23181:12;23174:19;;22833:366;;;:::o;23205:::-;23347:3;23368:67;23432:2;23427:3;23368:67;:::i;:::-;23361:74;;23444:93;23533:3;23444:93;:::i;:::-;23562:2;23557:3;23553:12;23546:19;;23205:366;;;:::o;23577:::-;23719:3;23740:67;23804:2;23799:3;23740:67;:::i;:::-;23733:74;;23816:93;23905:3;23816:93;:::i;:::-;23934:2;23929:3;23925:12;23918:19;;23577:366;;;:::o;23949:::-;24091:3;24112:67;24176:2;24171:3;24112:67;:::i;:::-;24105:74;;24188:93;24277:3;24188:93;:::i;:::-;24306:2;24301:3;24297:12;24290:19;;23949:366;;;:::o;24321:::-;24463:3;24484:67;24548:2;24543:3;24484:67;:::i;:::-;24477:74;;24560:93;24649:3;24560:93;:::i;:::-;24678:2;24673:3;24669:12;24662:19;;24321:366;;;:::o;24763:529::-;24924:4;24919:3;24915:14;25011:4;25004:5;25000:16;24994:23;25030:63;25087:4;25082:3;25078:14;25064:12;25030:63;:::i;:::-;24939:164;25195:4;25188:5;25184:16;25178:23;25214:61;25269:4;25264:3;25260:14;25246:12;25214:61;:::i;:::-;25113:172;24893:399;24763:529;;:::o;25298:115::-;25383:23;25400:5;25383:23;:::i;:::-;25378:3;25371:36;25298:115;;:::o;25419:118::-;25506:24;25524:5;25506:24;:::i;:::-;25501:3;25494:37;25419:118;;:::o;25543:105::-;25618:23;25635:5;25618:23;:::i;:::-;25613:3;25606:36;25543:105;;:::o;25654:256::-;25766:3;25781:75;25852:3;25843:6;25781:75;:::i;:::-;25881:2;25876:3;25872:12;25865:19;;25901:3;25894:10;;25654:256;;;;:::o;25916:701::-;26197:3;26219:95;26310:3;26301:6;26219:95;:::i;:::-;26212:102;;26331:95;26422:3;26413:6;26331:95;:::i;:::-;26324:102;;26443:148;26587:3;26443:148;:::i;:::-;26436:155;;26608:3;26601:10;;25916:701;;;;;:::o;26623:379::-;26807:3;26829:147;26972:3;26829:147;:::i;:::-;26822:154;;26993:3;26986:10;;26623:379;;;:::o;27008:222::-;27101:4;27139:2;27128:9;27124:18;27116:26;;27152:71;27220:1;27209:9;27205:17;27196:6;27152:71;:::i;:::-;27008:222;;;;:::o;27236:640::-;27431:4;27469:3;27458:9;27454:19;27446:27;;27483:71;27551:1;27540:9;27536:17;27527:6;27483:71;:::i;:::-;27564:72;27632:2;27621:9;27617:18;27608:6;27564:72;:::i;:::-;27646;27714:2;27703:9;27699:18;27690:6;27646:72;:::i;:::-;27765:9;27759:4;27755:20;27750:2;27739:9;27735:18;27728:48;27793:76;27864:4;27855:6;27793:76;:::i;:::-;27785:84;;27236:640;;;;;;;:::o;27882:210::-;27969:4;28007:2;27996:9;27992:18;27984:26;;28020:65;28082:1;28071:9;28067:17;28058:6;28020:65;:::i;:::-;27882:210;;;;:::o;28098:222::-;28191:4;28229:2;28218:9;28214:18;28206:26;;28242:71;28310:1;28299:9;28295:17;28286:6;28242:71;:::i;:::-;28098:222;;;;:::o;28326:313::-;28439:4;28477:2;28466:9;28462:18;28454:26;;28526:9;28520:4;28516:20;28512:1;28501:9;28497:17;28490:47;28554:78;28627:4;28618:6;28554:78;:::i;:::-;28546:86;;28326:313;;;;:::o;28645:419::-;28811:4;28849:2;28838:9;28834:18;28826:26;;28898:9;28892:4;28888:20;28884:1;28873:9;28869:17;28862:47;28926:131;29052:4;28926:131;:::i;:::-;28918:139;;28645:419;;;:::o;29070:::-;29236:4;29274:2;29263:9;29259:18;29251:26;;29323:9;29317:4;29313:20;29309:1;29298:9;29294:17;29287:47;29351:131;29477:4;29351:131;:::i;:::-;29343:139;;29070:419;;;:::o;29495:::-;29661:4;29699:2;29688:9;29684:18;29676:26;;29748:9;29742:4;29738:20;29734:1;29723:9;29719:17;29712:47;29776:131;29902:4;29776:131;:::i;:::-;29768:139;;29495:419;;;:::o;29920:::-;30086:4;30124:2;30113:9;30109:18;30101:26;;30173:9;30167:4;30163:20;30159:1;30148:9;30144:17;30137:47;30201:131;30327:4;30201:131;:::i;:::-;30193:139;;29920:419;;;:::o;30345:::-;30511:4;30549:2;30538:9;30534:18;30526:26;;30598:9;30592:4;30588:20;30584:1;30573:9;30569:17;30562:47;30626:131;30752:4;30626:131;:::i;:::-;30618:139;;30345:419;;;:::o;30770:::-;30936:4;30974:2;30963:9;30959:18;30951:26;;31023:9;31017:4;31013:20;31009:1;30998:9;30994:17;30987:47;31051:131;31177:4;31051:131;:::i;:::-;31043:139;;30770:419;;;:::o;31195:::-;31361:4;31399:2;31388:9;31384:18;31376:26;;31448:9;31442:4;31438:20;31434:1;31423:9;31419:17;31412:47;31476:131;31602:4;31476:131;:::i;:::-;31468:139;;31195:419;;;:::o;31620:::-;31786:4;31824:2;31813:9;31809:18;31801:26;;31873:9;31867:4;31863:20;31859:1;31848:9;31844:17;31837:47;31901:131;32027:4;31901:131;:::i;:::-;31893:139;;31620:419;;;:::o;32045:::-;32211:4;32249:2;32238:9;32234:18;32226:26;;32298:9;32292:4;32288:20;32284:1;32273:9;32269:17;32262:47;32326:131;32452:4;32326:131;:::i;:::-;32318:139;;32045:419;;;:::o;32470:::-;32636:4;32674:2;32663:9;32659:18;32651:26;;32723:9;32717:4;32713:20;32709:1;32698:9;32694:17;32687:47;32751:131;32877:4;32751:131;:::i;:::-;32743:139;;32470:419;;;:::o;32895:::-;33061:4;33099:2;33088:9;33084:18;33076:26;;33148:9;33142:4;33138:20;33134:1;33123:9;33119:17;33112:47;33176:131;33302:4;33176:131;:::i;:::-;33168:139;;32895:419;;;:::o;33320:::-;33486:4;33524:2;33513:9;33509:18;33501:26;;33573:9;33567:4;33563:20;33559:1;33548:9;33544:17;33537:47;33601:131;33727:4;33601:131;:::i;:::-;33593:139;;33320:419;;;:::o;33745:::-;33911:4;33949:2;33938:9;33934:18;33926:26;;33998:9;33992:4;33988:20;33984:1;33973:9;33969:17;33962:47;34026:131;34152:4;34026:131;:::i;:::-;34018:139;;33745:419;;;:::o;34170:::-;34336:4;34374:2;34363:9;34359:18;34351:26;;34423:9;34417:4;34413:20;34409:1;34398:9;34394:17;34387:47;34451:131;34577:4;34451:131;:::i;:::-;34443:139;;34170:419;;;:::o;34595:::-;34761:4;34799:2;34788:9;34784:18;34776:26;;34848:9;34842:4;34838:20;34834:1;34823:9;34819:17;34812:47;34876:131;35002:4;34876:131;:::i;:::-;34868:139;;34595:419;;;:::o;35020:::-;35186:4;35224:2;35213:9;35209:18;35201:26;;35273:9;35267:4;35263:20;35259:1;35248:9;35244:17;35237:47;35301:131;35427:4;35301:131;:::i;:::-;35293:139;;35020:419;;;:::o;35445:::-;35611:4;35649:2;35638:9;35634:18;35626:26;;35698:9;35692:4;35688:20;35684:1;35673:9;35669:17;35662:47;35726:131;35852:4;35726:131;:::i;:::-;35718:139;;35445:419;;;:::o;35870:::-;36036:4;36074:2;36063:9;36059:18;36051:26;;36123:9;36117:4;36113:20;36109:1;36098:9;36094:17;36087:47;36151:131;36277:4;36151:131;:::i;:::-;36143:139;;35870:419;;;:::o;36295:::-;36461:4;36499:2;36488:9;36484:18;36476:26;;36548:9;36542:4;36538:20;36534:1;36523:9;36519:17;36512:47;36576:131;36702:4;36576:131;:::i;:::-;36568:139;;36295:419;;;:::o;36720:::-;36886:4;36924:2;36913:9;36909:18;36901:26;;36973:9;36967:4;36963:20;36959:1;36948:9;36944:17;36937:47;37001:131;37127:4;37001:131;:::i;:::-;36993:139;;36720:419;;;:::o;37145:::-;37311:4;37349:2;37338:9;37334:18;37326:26;;37398:9;37392:4;37388:20;37384:1;37373:9;37369:17;37362:47;37426:131;37552:4;37426:131;:::i;:::-;37418:139;;37145:419;;;:::o;37570:::-;37736:4;37774:2;37763:9;37759:18;37751:26;;37823:9;37817:4;37813:20;37809:1;37798:9;37794:17;37787:47;37851:131;37977:4;37851:131;:::i;:::-;37843:139;;37570:419;;;:::o;37995:::-;38161:4;38199:2;38188:9;38184:18;38176:26;;38248:9;38242:4;38238:20;38234:1;38223:9;38219:17;38212:47;38276:131;38402:4;38276:131;:::i;:::-;38268:139;;37995:419;;;:::o;38420:::-;38586:4;38624:2;38613:9;38609:18;38601:26;;38673:9;38667:4;38663:20;38659:1;38648:9;38644:17;38637:47;38701:131;38827:4;38701:131;:::i;:::-;38693:139;;38420:419;;;:::o;38845:::-;39011:4;39049:2;39038:9;39034:18;39026:26;;39098:9;39092:4;39088:20;39084:1;39073:9;39069:17;39062:47;39126:131;39252:4;39126:131;:::i;:::-;39118:139;;38845:419;;;:::o;39270:::-;39436:4;39474:2;39463:9;39459:18;39451:26;;39523:9;39517:4;39513:20;39509:1;39498:9;39494:17;39487:47;39551:131;39677:4;39551:131;:::i;:::-;39543:139;;39270:419;;;:::o;39695:::-;39861:4;39899:2;39888:9;39884:18;39876:26;;39948:9;39942:4;39938:20;39934:1;39923:9;39919:17;39912:47;39976:131;40102:4;39976:131;:::i;:::-;39968:139;;39695:419;;;:::o;40120:::-;40286:4;40324:2;40313:9;40309:18;40301:26;;40373:9;40367:4;40363:20;40359:1;40348:9;40344:17;40337:47;40401:131;40527:4;40401:131;:::i;:::-;40393:139;;40120:419;;;:::o;40545:::-;40711:4;40749:2;40738:9;40734:18;40726:26;;40798:9;40792:4;40788:20;40784:1;40773:9;40769:17;40762:47;40826:131;40952:4;40826:131;:::i;:::-;40818:139;;40545:419;;;:::o;40970:::-;41136:4;41174:2;41163:9;41159:18;41151:26;;41223:9;41217:4;41213:20;41209:1;41198:9;41194:17;41187:47;41251:131;41377:4;41251:131;:::i;:::-;41243:139;;40970:419;;;:::o;41395:::-;41561:4;41599:2;41588:9;41584:18;41576:26;;41648:9;41642:4;41638:20;41634:1;41623:9;41619:17;41612:47;41676:131;41802:4;41676:131;:::i;:::-;41668:139;;41395:419;;;:::o;41820:::-;41986:4;42024:2;42013:9;42009:18;42001:26;;42073:9;42067:4;42063:20;42059:1;42048:9;42044:17;42037:47;42101:131;42227:4;42101:131;:::i;:::-;42093:139;;41820:419;;;:::o;42245:350::-;42402:4;42440:2;42429:9;42425:18;42417:26;;42453:135;42585:1;42574:9;42570:17;42561:6;42453:135;:::i;:::-;42245:350;;;;:::o;42601:218::-;42692:4;42730:2;42719:9;42715:18;42707:26;;42743:69;42809:1;42798:9;42794:17;42785:6;42743:69;:::i;:::-;42601:218;;;;:::o;42825:222::-;42918:4;42956:2;42945:9;42941:18;42933:26;;42969:71;43037:1;43026:9;43022:17;43013:6;42969:71;:::i;:::-;42825:222;;;;:::o;43053:129::-;43087:6;43114:20;;:::i;:::-;43104:30;;43143:33;43171:4;43163:6;43143:33;:::i;:::-;43053:129;;;:::o;43188:75::-;43221:6;43254:2;43248:9;43238:19;;43188:75;:::o;43269:307::-;43330:4;43420:18;43412:6;43409:30;43406:56;;;43442:18;;:::i;:::-;43406:56;43480:29;43502:6;43480:29;:::i;:::-;43472:37;;43564:4;43558;43554:15;43546:23;;43269:307;;;:::o;43582:308::-;43644:4;43734:18;43726:6;43723:30;43720:56;;;43756:18;;:::i;:::-;43720:56;43794:29;43816:6;43794:29;:::i;:::-;43786:37;;43878:4;43872;43868:15;43860:23;;43582:308;;;:::o;43896:98::-;43947:6;43981:5;43975:12;43965:22;;43896:98;;;:::o;44000:99::-;44052:6;44086:5;44080:12;44070:22;;44000:99;;;:::o;44105:168::-;44188:11;44222:6;44217:3;44210:19;44262:4;44257:3;44253:14;44238:29;;44105:168;;;;:::o;44279:147::-;44380:11;44417:3;44402:18;;44279:147;;;;:::o;44432:169::-;44516:11;44550:6;44545:3;44538:19;44590:4;44585:3;44581:14;44566:29;;44432:169;;;;:::o;44607:148::-;44709:11;44746:3;44731:18;;44607:148;;;;:::o;44761:273::-;44801:3;44820:20;44838:1;44820:20;:::i;:::-;44815:25;;44854:20;44872:1;44854:20;:::i;:::-;44849:25;;44976:1;44940:34;44936:42;44933:1;44930:49;44927:75;;;44982:18;;:::i;:::-;44927:75;45026:1;45023;45019:9;45012:16;;44761:273;;;;:::o;45040:305::-;45080:3;45099:20;45117:1;45099:20;:::i;:::-;45094:25;;45133:20;45151:1;45133:20;:::i;:::-;45128:25;;45287:1;45219:66;45215:74;45212:1;45209:81;45206:107;;;45293:18;;:::i;:::-;45206:107;45337:1;45334;45330:9;45323:16;;45040:305;;;;:::o;45351:185::-;45391:1;45408:20;45426:1;45408:20;:::i;:::-;45403:25;;45442:20;45460:1;45442:20;:::i;:::-;45437:25;;45481:1;45471:35;;45486:18;;:::i;:::-;45471:35;45528:1;45525;45521:9;45516:14;;45351:185;;;;:::o;45542:348::-;45582:7;45605:20;45623:1;45605:20;:::i;:::-;45600:25;;45639:20;45657:1;45639:20;:::i;:::-;45634:25;;45827:1;45759:66;45755:74;45752:1;45749:81;45744:1;45737:9;45730:17;45726:105;45723:131;;;45834:18;;:::i;:::-;45723:131;45882:1;45879;45875:9;45864:20;;45542:348;;;;:::o;45896:191::-;45936:4;45956:20;45974:1;45956:20;:::i;:::-;45951:25;;45990:20;46008:1;45990:20;:::i;:::-;45985:25;;46029:1;46026;46023:8;46020:34;;;46034:18;;:::i;:::-;46020:34;46079:1;46076;46072:9;46064:17;;45896:191;;;;:::o;46093:::-;46133:4;46153:20;46171:1;46153:20;:::i;:::-;46148:25;;46187:20;46205:1;46187:20;:::i;:::-;46182:25;;46226:1;46223;46220:8;46217:34;;;46231:18;;:::i;:::-;46217:34;46276:1;46273;46269:9;46261:17;;46093:191;;;;:::o;46290:96::-;46327:7;46356:24;46374:5;46356:24;:::i;:::-;46345:35;;46290:96;;;:::o;46392:90::-;46426:7;46469:5;46462:13;46455:21;46444:32;;46392:90;;;:::o;46488:77::-;46525:7;46554:5;46543:16;;46488:77;;;:::o;46571:149::-;46607:7;46647:66;46640:5;46636:78;46625:89;;46571:149;;;:::o;46726:118::-;46763:7;46803:34;46796:5;46792:46;46781:57;;46726:118;;;:::o;46850:89::-;46886:7;46926:6;46919:5;46915:18;46904:29;;46850:89;;;:::o;46945:126::-;46982:7;47022:42;47015:5;47011:54;47000:65;;46945:126;;;:::o;47077:77::-;47114:7;47143:5;47132:16;;47077:77;;;:::o;47160:101::-;47196:7;47236:18;47229:5;47225:30;47214:41;;47160:101;;;:::o;47267:154::-;47351:6;47346:3;47341;47328:30;47413:1;47404:6;47399:3;47395:16;47388:27;47267:154;;;:::o;47427:307::-;47495:1;47505:113;47519:6;47516:1;47513:13;47505:113;;;47604:1;47599:3;47595:11;47589:18;47585:1;47580:3;47576:11;47569:39;47541:2;47538:1;47534:10;47529:15;;47505:113;;;47636:6;47633:1;47630:13;47627:101;;;47716:1;47707:6;47702:3;47698:16;47691:27;47627:101;47476:258;47427:307;;;:::o;47740:171::-;47779:3;47802:24;47820:5;47802:24;:::i;:::-;47793:33;;47848:4;47841:5;47838:15;47835:41;;;47856:18;;:::i;:::-;47835:41;47903:1;47896:5;47892:13;47885:20;;47740:171;;;:::o;47917:320::-;47961:6;47998:1;47992:4;47988:12;47978:22;;48045:1;48039:4;48035:12;48066:18;48056:81;;48122:4;48114:6;48110:17;48100:27;;48056:81;48184:2;48176:6;48173:14;48153:18;48150:38;48147:84;;;48203:18;;:::i;:::-;48147:84;47968:269;47917:320;;;:::o;48243:281::-;48326:27;48348:4;48326:27;:::i;:::-;48318:6;48314:40;48456:6;48444:10;48441:22;48420:18;48408:10;48405:34;48402:62;48399:88;;;48467:18;;:::i;:::-;48399:88;48507:10;48503:2;48496:22;48286:238;48243:281;;:::o;48530:233::-;48569:3;48592:24;48610:5;48592:24;:::i;:::-;48583:33;;48638:66;48631:5;48628:77;48625:103;;;48708:18;;:::i;:::-;48625:103;48755:1;48748:5;48744:13;48737:20;;48530:233;;;:::o;48769:100::-;48808:7;48837:26;48857:5;48837:26;:::i;:::-;48826:37;;48769:100;;;:::o;48875:94::-;48914:7;48943:20;48957:5;48943:20;:::i;:::-;48932:31;;48875:94;;;:::o;48975:176::-;49007:1;49024:20;49042:1;49024:20;:::i;:::-;49019:25;;49058:20;49076:1;49058:20;:::i;:::-;49053:25;;49097:1;49087:35;;49102:18;;:::i;:::-;49087:35;49143:1;49140;49136:9;49131:14;;48975:176;;;;:::o;49157:180::-;49205:77;49202:1;49195:88;49302:4;49299:1;49292:15;49326:4;49323:1;49316:15;49343:180;49391:77;49388:1;49381:88;49488:4;49485:1;49478:15;49512:4;49509:1;49502:15;49529:180;49577:77;49574:1;49567:88;49674:4;49671:1;49664:15;49698:4;49695:1;49688:15;49715:180;49763:77;49760:1;49753:88;49860:4;49857:1;49850:15;49884:4;49881:1;49874:15;49901:180;49949:77;49946:1;49939:88;50046:4;50043:1;50036:15;50070:4;50067:1;50060:15;50087:117;50196:1;50193;50186:12;50210:117;50319:1;50316;50309:12;50333:117;50442:1;50439;50432:12;50456:117;50565:1;50562;50555:12;50579:117;50688:1;50685;50678:12;50702:117;50811:1;50808;50801:12;50825:102;50866:6;50917:2;50913:7;50908:2;50901:5;50897:14;50893:28;50883:38;;50825:102;;;:::o;50933:94::-;50966:8;51014:5;51010:2;51006:14;50985:35;;50933:94;;;:::o;51033:221::-;51173:34;51169:1;51161:6;51157:14;51150:58;51242:4;51237:2;51229:6;51225:15;51218:29;51033:221;:::o;51260:225::-;51400:34;51396:1;51388:6;51384:14;51377:58;51469:8;51464:2;51456:6;51452:15;51445:33;51260:225;:::o;51491:229::-;51631:34;51627:1;51619:6;51615:14;51608:58;51700:12;51695:2;51687:6;51683:15;51676:37;51491:229;:::o;51726:173::-;51866:25;51862:1;51854:6;51850:14;51843:49;51726:173;:::o;51905:222::-;52045:34;52041:1;52033:6;52029:14;52022:58;52114:5;52109:2;52101:6;52097:15;52090:30;51905:222;:::o;52133:224::-;52273:34;52269:1;52261:6;52257:14;52250:58;52342:7;52337:2;52329:6;52325:15;52318:32;52133:224;:::o;52363:236::-;52503:34;52499:1;52491:6;52487:14;52480:58;52572:19;52567:2;52559:6;52555:15;52548:44;52363:236;:::o;52605:176::-;52745:28;52741:1;52733:6;52729:14;52722:52;52605:176;:::o;52787:244::-;52927:34;52923:1;52915:6;52911:14;52904:58;52996:27;52991:2;52983:6;52979:15;52972:52;52787:244;:::o;53037:180::-;53177:32;53173:1;53165:6;53161:14;53154:56;53037:180;:::o;53223:175::-;53363:27;53359:1;53351:6;53347:14;53340:51;53223:175;:::o;53404:230::-;53544:34;53540:1;53532:6;53528:14;53521:58;53613:13;53608:2;53600:6;53596:15;53589:38;53404:230;:::o;53640:168::-;53780:20;53776:1;53768:6;53764:14;53757:44;53640:168;:::o;53814:225::-;53954:34;53950:1;53942:6;53938:14;53931:58;54023:8;54018:2;54010:6;54006:15;53999:33;53814:225;:::o;54045:155::-;54185:7;54181:1;54173:6;54169:14;54162:31;54045:155;:::o;54206:182::-;54346:34;54342:1;54334:6;54330:14;54323:58;54206:182;:::o;54394:234::-;54534:34;54530:1;54522:6;54518:14;54511:58;54603:17;54598:2;54590:6;54586:15;54579:42;54394:234;:::o;54634:176::-;54774:28;54770:1;54762:6;54758:14;54751:52;54634:176;:::o;54816:237::-;54956:34;54952:1;54944:6;54940:14;54933:58;55025:20;55020:2;55012:6;55008:15;55001:45;54816:237;:::o;55059:171::-;55199:23;55195:1;55187:6;55183:14;55176:47;55059:171;:::o;55236:221::-;55376:34;55372:1;55364:6;55360:14;55353:58;55445:4;55440:2;55432:6;55428:15;55421:29;55236:221;:::o;55463:114::-;;:::o;55583:168::-;55723:20;55719:1;55711:6;55707:14;55700:44;55583:168;:::o;55757:238::-;55897:34;55893:1;55885:6;55881:14;55874:58;55966:21;55961:2;55953:6;55949:15;55942:46;55757:238;:::o;56001:179::-;56141:31;56137:1;56129:6;56125:14;56118:55;56001:179;:::o;56186:174::-;56326:26;56322:1;56314:6;56310:14;56303:50;56186:174;:::o;56366:220::-;56506:34;56502:1;56494:6;56490:14;56483:58;56575:3;56570:2;56562:6;56558:15;56551:28;56366:220;:::o;56592:172::-;56732:24;56728:1;56720:6;56716:14;56709:48;56592:172;:::o;56770:233::-;56910:34;56906:1;56898:6;56894:14;56887:58;56979:16;56974:2;56966:6;56962:15;56955:41;56770:233;:::o;57009:181::-;57149:33;57145:1;57137:6;57133:14;57126:57;57009:181;:::o;57196:234::-;57336:34;57332:1;57324:6;57320:14;57313:58;57405:17;57400:2;57392:6;57388:15;57381:42;57196:234;:::o;57436:164::-;57576:16;57572:1;57564:6;57560:14;57553:40;57436:164;:::o;57606:232::-;57746:34;57742:1;57734:6;57730:14;57723:58;57815:15;57810:2;57802:6;57798:15;57791:40;57606:232;:::o;57844:221::-;57984:34;57980:1;57972:6;57968:14;57961:58;58053:4;58048:2;58040:6;58036:15;58029:29;57844:221;:::o;58071:122::-;58144:24;58162:5;58144:24;:::i;:::-;58137:5;58134:35;58124:63;;58183:1;58180;58173:12;58124:63;58071:122;:::o;58199:116::-;58269:21;58284:5;58269:21;:::i;:::-;58262:5;58259:32;58249:60;;58305:1;58302;58295:12;58249:60;58199:116;:::o;58321:122::-;58394:24;58412:5;58394:24;:::i;:::-;58387:5;58384:35;58374:63;;58433:1;58430;58423:12;58374:63;58321:122;:::o;58449:120::-;58521:23;58538:5;58521:23;:::i;:::-;58514:5;58511:34;58501:62;;58559:1;58556;58549:12;58501:62;58449:120;:::o;58575:::-;58647:23;58664:5;58647:23;:::i;:::-;58640:5;58637:34;58627:62;;58685:1;58682;58675:12;58627:62;58575:120;:::o;58701:122::-;58774:24;58792:5;58774:24;:::i;:::-;58767:5;58764:35;58754:63;;58813:1;58810;58803:12;58754:63;58701:122;:::o

Swarm Source

ipfs://88ed8ea7bd1a93ae56f2bc18f7f0a341650d8a834d65603c87a2d95205dbb4ec
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.