POL Price: $0.62525 (-4.15%)
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo300 wei

POL Value

Less Than $0.01 (@ $0.63/POL)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...525617962024-01-20 23:46:52327 days ago1705794412IN
0x7DDc1888...33fC8Cc30
0 POL0.002335950
Mint NFT483153482023-10-04 11:42:36435 days ago1696419756IN
0x7DDc1888...33fC8Cc30
0 POL0.0324836875.66858163
Mint NFT461727532023-08-11 10:34:20489 days ago1691750060IN
0x7DDc1888...33fC8Cc30
0 POL0.06937852168.31726338
Mint NFT458126002023-08-02 8:26:05498 days ago1690964765IN
0x7DDc1888...33fC8Cc30
0 POL0.0413391596.29678934
Sell NFT446324102023-07-03 11:53:47528 days ago1688385227IN
0x7DDc1888...33fC8Cc30
0.5 POL0.01423454143.62951191
List NFT446323882023-07-03 11:53:01528 days ago1688385181IN
0x7DDc1888...33fC8Cc30
0 POL0.01616045136.53988975
Bid Wallet IN445108082023-06-30 9:17:36531 days ago1688116656IN
0x7DDc1888...33fC8Cc30
2.1 POL0.01006674159.31668291
Mint NFT422161952023-05-02 12:50:48590 days ago1683031848IN
0x7DDc1888...33fC8Cc30
0 POL0.09419061219.41072789
List NFT415230712023-04-14 13:16:22608 days ago1681478182IN
0x7DDc1888...33fC8Cc30
0 POL0.01664579135.15910757
Mint NFT415223832023-04-14 12:51:28608 days ago1681476688IN
0x7DDc1888...33fC8Cc30
0 POL0.06931216168.15627382
Mint NFT407158222023-03-24 14:22:21629 days ago1679667741IN
0x7DDc1888...33fC8Cc30
0 POL0.525320191,274.46436214
Mint NFT407154462023-03-24 13:58:55629 days ago1679666335IN
0x7DDc1888...33fC8Cc30
0 POL0.14322316333.62876914
Mint NFT395564012023-02-21 17:21:29660 days ago1677000089IN
0x7DDc1888...33fC8Cc30
0 POL0.08467646197.22060251
Transfer NFT385203402023-01-25 19:25:30687 days ago1674674730IN
0x7DDc1888...33fC8Cc30
1 POL0.0040865342.64630335
Transfer NFT385203152023-01-25 19:24:36687 days ago1674674676IN
0x7DDc1888...33fC8Cc30
1 POL0.004115542.94325384
Transfer NFT385201982023-01-25 19:20:28687 days ago1674674428IN
0x7DDc1888...33fC8Cc30
1 POL0.0035789545.45516192
Transfer NFT385201762023-01-25 19:19:42687 days ago1674674382IN
0x7DDc1888...33fC8Cc30
1 POL0.0046126848.13102596
Transfer NFT385201572023-01-25 19:19:00687 days ago1674674340IN
0x7DDc1888...33fC8Cc30
1 POL0.004672848.75833238
Transfer NFT384369222023-01-23 17:15:04689 days ago1674494104IN
0x7DDc1888...33fC8Cc30
1 POL0.0070595373.66264797
Transfer NFT384360752023-01-23 16:45:03689 days ago1674492303IN
0x7DDc1888...33fC8Cc30
1 POL0.0061886464.57534535
List NFT384154162023-01-23 4:28:36689 days ago1674448116IN
0x7DDc1888...33fC8Cc30
0 POL0.0071781660.64282113
List NFT384013122023-01-22 19:58:57690 days ago1674417537IN
0x7DDc1888...33fC8Cc30
0 POL0.01363634115.20300347
Transfer NFT384010592023-01-22 19:49:59690 days ago1674416999IN
0x7DDc1888...33fC8Cc30
1 POL0.0084036587.68787502
Transfer NFT384009932023-01-22 19:47:39690 days ago1674416859IN
0x7DDc1888...33fC8Cc30
1 POL0.02380595248.40304579
List NFT383622712023-01-21 20:35:01691 days ago1674333301IN
0x7DDc1888...33fC8Cc30
0 POL0.005918450
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
446324102023-07-03 11:53:47528 days ago1688385227
0x7DDc1888...33fC8Cc30
0.01 POL
446324102023-07-03 11:53:47528 days ago1688385227
0x7DDc1888...33fC8Cc30
0.49 POL
445108082023-06-30 9:17:36531 days ago1688116656
0x7DDc1888...33fC8Cc30
2.1 POL
385203402023-01-25 19:25:30687 days ago1674674730
0x7DDc1888...33fC8Cc30
1 POL
385203152023-01-25 19:24:36687 days ago1674674676
0x7DDc1888...33fC8Cc30
1 POL
385201982023-01-25 19:20:28687 days ago1674674428
0x7DDc1888...33fC8Cc30
1 POL
385201762023-01-25 19:19:42687 days ago1674674382
0x7DDc1888...33fC8Cc30
1 POL
385201572023-01-25 19:19:00687 days ago1674674340
0x7DDc1888...33fC8Cc30
1 POL
384369222023-01-23 17:15:04689 days ago1674494104
0x7DDc1888...33fC8Cc30
1 POL
384360752023-01-23 16:45:03689 days ago1674492303
0x7DDc1888...33fC8Cc30
1 POL
384010592023-01-22 19:49:59690 days ago1674416999
0x7DDc1888...33fC8Cc30
1 POL
384009932023-01-22 19:47:39690 days ago1674416859
0x7DDc1888...33fC8Cc30
1 POL
383619322023-01-21 20:22:57691 days ago1674332577
0x7DDc1888...33fC8Cc30
1 POL
383619022023-01-21 20:21:53691 days ago1674332513
0x7DDc1888...33fC8Cc30
1 POL
383618512023-01-21 20:20:05691 days ago1674332405
0x7DDc1888...33fC8Cc30
1 POL
383616962023-01-21 20:14:34691 days ago1674332074
0x7DDc1888...33fC8Cc30
1 POL
383613912023-01-21 20:03:12691 days ago1674331392
0x7DDc1888...33fC8Cc30
1 POL
383612912023-01-21 19:59:08691 days ago1674331148
0x7DDc1888...33fC8Cc30
1 POL
383612432023-01-21 19:57:10691 days ago1674331030
0x7DDc1888...33fC8Cc30
1 POL
375508042023-01-01 18:10:41711 days ago1672596641
0x7DDc1888...33fC8Cc30
5.5 POL
375483582023-01-01 16:35:04711 days ago1672590904
0x7DDc1888...33fC8Cc30
3 POL
375483582023-01-01 16:35:04711 days ago1672590904
0x7DDc1888...33fC8Cc30
147 POL
375483392023-01-01 16:34:22711 days ago1672590862
0x7DDc1888...33fC8Cc30
3 POL
375483392023-01-01 16:34:22711 days ago1672590862
0x7DDc1888...33fC8Cc30
147 POL
375483202023-01-01 16:33:44711 days ago1672590824
0x7DDc1888...33fC8Cc30
3 POL
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x1eb2cF60...56637031A
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
NFTMarketplace

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-08-22
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function 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, bytes calldata data) external;
    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 setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

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

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);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "OZ:1");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "OZ:2");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "OZ:3");
    }
    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, "OZ:4");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "OZ:5");
        require(isContract(target), "OZ:6");
        (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, "OZ:7");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "OZ:8");
        (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, "OZ:9");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "OZ:10");
        (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);
            }
        }
    }
}

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

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;
    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, "OZ:11");
        return string(buffer);
    }
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "OZ:12");
        return _balances[owner];
    }
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "OZ:13");
        return owner;
    }
    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) {
        _requireMinted(tokenId);
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "OZ:14");
        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "OZ:15"
        );
        _approve(to, tokenId);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);
        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "OZ:16");
        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "OZ:17");
        _safeTransfer(from, to, tokenId, data);
    }
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "OZ:18");
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "OZ:19"
        );
    }
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "OZ:20");
        require(!_exists(tokenId), "OZ:21");
        _beforeTokenTransfer(address(0), to, tokenId);
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(address(0), to, tokenId);
        _afterTokenTransfer(address(0), to, tokenId);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
        _beforeTokenTransfer(owner, address(0), tokenId);
        _approve(address(0), tokenId);
        _balances[owner] -= 1;
        delete _owners[tokenId];
        emit Transfer(owner, address(0), tokenId);
        _afterTokenTransfer(owner, address(0), tokenId);
    }
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "OZ:22");
        require(to != address(0), "OZ:23");
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(from, to, tokenId);
        _afterTokenTransfer(from, to, tokenId);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
        require(owner != operator, "OZ:24");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "OZ:25");
    }
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("OZ:26");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
}

library Counters {
    struct Counter {
        uint256 _value;
    }
    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }
    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }
    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "OZ:27");
        unchecked {
            counter._value = value - 1;
        }
    }
    function reset(Counter storage counter) internal {
        counter._value = 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, "OZ:28");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;
    mapping(uint256 => string) private _tokenURIs;
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return super.tokenURI(tokenId);
    }
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "OZ:29");
        _tokenURIs[tokenId] = _tokenURI;
    }
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "OZ:30");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "OZ:31");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract NFTMarketplace is ReentrancyGuard, ERC721URIStorage, Ownable{
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    Counters.Counter public _bidIds;
    address _scAddress;
    string public _tokenName;
    string public _tokenSymbol;
    uint256 private _maxTokenSupply;
    address payable marketOwner;
    mapping (uint256 => string) _tokenIDURI;
    uint256 totalUserMPWalletFunds;
    mapping(address => uint256) private mpWallets;
    struct MarketItem {
        uint256 tokenId;
        address nftContract;
        string uri;
        address payable nftCreator;
        address payable nftOwner;
        uint256 price;
        bool forSale;
    }
    mapping(uint256 => MarketItem) private MarketItemDatabase;
    event MarketItemCreated(
        uint256 indexed tokenId,
        address indexed nftContract,
        string uri,
        address creator,
        address owner,
        uint256 price,
        bool forSale
    );
    constructor(string memory tokenName, string memory tokenSymbol, uint256 gotMaxTokenSupply) ERC721(tokenName, tokenSymbol){
        marketOwner = payable(msg.sender);
        require(gotMaxTokenSupply > 0, "ERR:1");
        _maxTokenSupply = gotMaxTokenSupply;
        _tokenName = tokenName;
        _tokenSymbol = tokenSymbol;
    }
    function marketSetup(address scAddress) public onlyOwner{
        _scAddress = scAddress;
    }
    function totalSupply() public view returns (uint256){
        return (_maxTokenSupply);
    }
    function getNewTokenID() public view returns (uint256){
        return _tokenIds.current();
    }
    function addTokens(uint256 gotNewMaxTokenSupply) public onlyOwner{
        require(msg.sender == marketOwner, "ERR:2");
        require(gotNewMaxTokenSupply > _maxTokenSupply, "ERR:3");
        _maxTokenSupply = gotNewMaxTokenSupply;
    }
    function fetchTokenIDURI(uint256 tokenID) public view returns (string memory){
        bytes memory tempTokenURI = bytes(_tokenIDURI[tokenID]);
        require(tempTokenURI.length > 0, "ERR:4");
        return _tokenIDURI[tokenID];
    }
    function mintNFT(string memory uri) public payable nonReentrant{
        require(_tokenIds.current() != _maxTokenSupply, "ERR:5");
        _tokenIds.increment();
        uint256 newTokenId = _tokenIds.current();
        _mint(msg.sender, newTokenId);
        _setTokenURI(newTokenId, uri);
        _tokenIDURI[newTokenId] = uri;
        MarketItemDatabase[newTokenId] = MarketItem(newTokenId, _scAddress, uri, payable(msg.sender), payable(address(0)), 0, false);
        emit MarketItemCreated(newTokenId, _scAddress, uri, msg.sender, address(0), 0, false);
    }
    function listNFT(uint256 tokenId, uint256 price) public {
        require((msg.sender == MarketItemDatabase[tokenId].nftCreator && MarketItemDatabase[tokenId].nftOwner == address(0)) || msg.sender == MarketItemDatabase[tokenId].nftOwner, "ERR:6");
        setApprovalForAll(_scAddress, true);
        MarketItemDatabase[tokenId].forSale = true;
        MarketItemDatabase[tokenId].price = price;
        IERC721(_scAddress).transferFrom(msg.sender, address(this), tokenId);
    }
    function unlistNFT(uint256 tokenId) public {
        require((msg.sender == MarketItemDatabase[tokenId].nftCreator && MarketItemDatabase[tokenId].nftOwner == address(0)) || msg.sender == MarketItemDatabase[tokenId].nftOwner || msg.sender == marketOwner, "ERR:7");
        require(MarketItemDatabase[tokenId].forSale == true, "ERR:8");
        setApprovalForAll(_scAddress, true);
        MarketItemDatabase[tokenId].forSale = false;
        MarketItemDatabase[tokenId].price = 0;
        if(MarketItemDatabase[tokenId].nftOwner == address(0)){
            IERC721(_scAddress).transferFrom(address(this), MarketItemDatabase[tokenId].nftCreator, tokenId);
        } else{
            IERC721(_scAddress).transferFrom(address(this), MarketItemDatabase[tokenId].nftOwner, tokenId);
        }
    }
    function sellNFT(uint256 tokenId, uint256 marketItemPrice, uint256 sellerGets, uint256 marketOwnerGets) public payable nonReentrant{
        require(msg.sender != marketOwner, "ERR:9");
        require(MarketItemDatabase[tokenId].forSale == true, "ERR:10");
        require(msg.value == marketItemPrice, "ERR:11");
        if(MarketItemDatabase[tokenId].nftOwner == address(0)){
            MarketItemDatabase[tokenId].nftCreator.transfer(sellerGets);
        } else{
            MarketItemDatabase[tokenId].nftOwner.transfer(sellerGets);
        }
        IERC721(_scAddress).transferFrom(address(this), msg.sender, tokenId);
        MarketItemDatabase[tokenId].nftOwner = payable(msg.sender);
        MarketItemDatabase[tokenId].forSale = false;
        MarketItemDatabase[tokenId].price = 0;
        payable(marketOwner).transfer(marketOwnerGets);
    }
    function transferNFT(address recieverAddress, uint256 tokenId, uint256 gotTransferFee) public payable nonReentrant{
        require((msg.sender == MarketItemDatabase[tokenId].nftCreator && MarketItemDatabase[tokenId].nftOwner == address(0)) || msg.sender == MarketItemDatabase[tokenId].nftOwner, "ERR:12");
        require(MarketItemDatabase[tokenId].forSale == false, "ERR:13");
        require(msg.value == gotTransferFee, "ERR:14");
        setApprovalForAll(_scAddress, true);
        MarketItemDatabase[tokenId].nftOwner = payable(recieverAddress);
        payable(marketOwner).transfer(gotTransferFee);
        IERC721(_scAddress).transferFrom(msg.sender, recieverAddress, tokenId);
    }
    function bidWalletIN() public payable nonReentrant returns(bool){
        require(msg.sender != marketOwner, "ERR:15");
        mpWallets[msg.sender] = mpWallets[msg.sender] + msg.value;
        payable(marketOwner).transfer(msg.value);
        totalUserMPWalletFunds = totalUserMPWalletFunds + msg.value;
        return true;
    }
    function bidWalletOUT(address sendTo, uint256 withdrawAmount) public payable nonReentrant onlyOwner{
        require(msg.value == withdrawAmount, "ERR:18");
        require(mpWallets[sendTo] >= withdrawAmount, "ERR:19");
        mpWallets[sendTo] = mpWallets[sendTo] - withdrawAmount;
        totalUserMPWalletFunds = totalUserMPWalletFunds - withdrawAmount;
        payable(sendTo).transfer(withdrawAmount);
    }
    function bidPassCheck(address userWallet, uint256 currBid, uint256 tokenID) public view returns(bool){
        require(mpWallets[userWallet] > 0, "ERR:20");
        require((userWallet == MarketItemDatabase[tokenID].nftCreator && MarketItemDatabase[tokenID].nftOwner != address(0)) || userWallet != MarketItemDatabase[tokenID].nftOwner, "ERR:21");
        if(mpWallets[userWallet] >= currBid){
            return true;
        } else{
            return false;
        }
    }
    function soldBidNFT(address winner, uint256 bidAmount, uint256 nftOwnerGets, uint256 ownerGets, uint256 tokenId) public payable nonReentrant{
        require(MarketItemDatabase[tokenId].forSale == true, "ERR:22");
        require(msg.value == bidAmount, "ERR:23");
        setApprovalForAll(_scAddress, true);
        if(MarketItemDatabase[tokenId].nftOwner == address(0)){
            payable(MarketItemDatabase[tokenId].nftCreator).transfer(nftOwnerGets);
        }
        else {
            payable(MarketItemDatabase[tokenId].nftOwner).transfer(nftOwnerGets);
        }
        IERC721(_scAddress).transferFrom(address(this), winner, tokenId);
        payable(marketOwner).transfer(ownerGets);
        MarketItemDatabase[tokenId].nftOwner = payable(winner);
        MarketItemDatabase[tokenId].forSale == false;
        MarketItemDatabase[tokenId].price = 0;
        totalUserMPWalletFunds-=msg.value;
        mpWallets[winner] = mpWallets[winner] - msg.value;
    }
    function actualOwnerWallet(uint256 altOwnerFund) public view returns (uint256){
        return altOwnerFund-totalUserMPWalletFunds;
    }
    function bidderWallet(address bidderAddress) public view returns (uint256){
            return mpWallets[bidderAddress];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"gotMaxTokenSupply","type":"uint256"}],"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":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":false,"internalType":"string","name":"uri","type":"string"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"bool","name":"forSale","type":"bool"}],"name":"MarketItemCreated","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":[],"name":"_bidIds","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"altOwnerFund","type":"uint256"}],"name":"actualOwnerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gotNewMaxTokenSupply","type":"uint256"}],"name":"addTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userWallet","type":"address"},{"internalType":"uint256","name":"currBid","type":"uint256"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"bidPassCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidWalletIN","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sendTo","type":"address"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"name":"bidWalletOUT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"bidderAddress","type":"address"}],"name":"bidderWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"fetchTokenIDURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewTokenID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"listNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"scAddress","type":"address"}],"name":"marketSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"marketItemPrice","type":"uint256"},{"internalType":"uint256","name":"sellerGets","type":"uint256"},{"internalType":"uint256","name":"marketOwnerGets","type":"uint256"}],"name":"sellNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"bidAmount","type":"uint256"},{"internalType":"uint256","name":"nftOwnerGets","type":"uint256"},{"internalType":"uint256","name":"ownerGets","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"soldBidNFT","outputs":[],"stateMutability":"payable","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":"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":"recieverAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"gotTransferFee","type":"uint256"}],"name":"transferNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unlistNFT","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x6080604052600436106102045760003560e01c80638da5cb5b11610118578063c18d827c116100a0578063e985e9c51161006f578063e985e9c514610755578063ecf35cca14610792578063f2fde38b146107bd578063f598b707146107e6578063fb37e8831461080257610204565b8063c18d827c146106aa578063c6ed8990146106c6578063c87b56dd146106ef578063d2659a771461072c57610204565b80639d25d9a8116100e75780639d25d9a8146105d45780639f0c812514610611578063a22cb4651461063c578063b2e7640614610665578063b88d4fde1461068157610204565b80638da5cb5b1461052c57806394383f141461055757806395d89b4114610580578063961f0944146105ab57610204565b80632b1e092e1161019b5780636352211e1161016a5780636352211e1461043357806370a0823114610470578063715018a6146104ad578063835e43cd146104c4578063874efc241461050157610204565b80632b1e092e1461039357806342842e0e146103b15780634e8a5153146103da5780635beb0a72146103f657610204565b8063095ea7b3116101d7578063095ea7b3146102d95780631096a1371461030257806318160ddd1461033f57806323b872dd1461036a57610204565b806301ffc9a71461020957806305a027d61461024657806306fdde0314610271578063081812fc1461029c575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906145b6565b61081e565b60405161023d9190614e2a565b60405180910390f35b34801561025257600080fd5b5061025b610900565b6040516102689190615381565b60405180910390f35b34801561027d57600080fd5b50610286610911565b6040516102939190614e45565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190614649565b6109a3565b6040516102d09190614d55565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb91906144b4565b6109e9565b005b34801561030e57600080fd5b50610329600480360381019061032491906144f0565b610b01565b6040516103369190614e2a565b60405180910390f35b34801561034b57600080fd5b50610354610d5f565b6040516103619190615381565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c91906143ae565b610d69565b005b61039b610dc9565b6040516103a89190614e2a565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d391906143ae565b610fc4565b005b6103f460048036038101906103ef91906144b4565b610fe4565b005b34801561040257600080fd5b5061041d60048036038101906104189190614349565b6111f3565b60405161042a9190615381565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190614649565b61123c565b6040516104679190614d55565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190614349565b6112ee565b6040516104a49190615381565b60405180910390f35b3480156104b957600080fd5b506104c26113a6565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190614649565b6113ba565b6040516104f89190615381565b60405180910390f35b34801561050d57600080fd5b506105166113d1565b6040516105239190615381565b60405180910390f35b34801561053857600080fd5b506105416113dd565b60405161054e9190614d55565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190614672565b611407565b005b34801561058c57600080fd5b50610595611691565b6040516105a29190614e45565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190614649565b611723565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190614649565b611bdd565b6040516106089190614e45565b60405180910390f35b34801561061d57600080fd5b50610626611d67565b6040516106339190614e45565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614478565b611df5565b005b61067f600480360381019061067a91906144f0565b611e0b565b005b34801561068d57600080fd5b506106a860048036038101906106a391906143fd565b61220c565b005b6106c460048036038101906106bf919061453f565b61226e565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190614649565b612748565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614649565b61282e565b6040516107239190614e45565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190614349565b612941565b005b34801561076157600080fd5b5061077c60048036038101906107779190614372565b61298d565b6040516107899190614e2a565b60405180910390f35b34801561079e57600080fd5b506107a7612a21565b6040516107b49190614e45565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190614349565b612aaf565b005b61080060048036038101906107fb91906146ae565b612b33565b005b61081c60048036038101906108179190614608565b612fd1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108f957506108f882613320565b5b9050919050565b600061090c600961338a565b905090565b6060600180546109209061561f565b80601f016020809104026020016040519081016040528092919081815260200182805461094c9061561f565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b5050505050905090565b60006109ae82613398565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f48261123c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90614f61565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a846133e3565b73ffffffffffffffffffffffffffffffffffffffff161480610ab35750610ab281610aad6133e3565b61298d565b5b610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae990615041565b60405180910390fd5b610afc83836133eb565b505050565b600080601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90614f41565b60405180910390fd5b6013600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610c585750600073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80610cc557506013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90615061565b60405180910390fd5b82601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610d535760019050610d58565b600090505b9392505050565b6000600e54905090565b610d7a610d746133e3565b826134a4565b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090615101565b60405180910390fd5b610dc4838383613539565b505050565b600060026000541415610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890614f21565b60405180910390fd5b6002600081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190615161565b60405180910390fd5b34601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef59190615466565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610fa0573d6000803e3d6000fd5b5034601154610faf9190615466565b60118190555060019050600160008190555090565b610fdf8383836040518060200160405280600081525061220c565b505050565b6002600054141561102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190614f21565b60405180910390fd5b600260008190555061103a6137a0565b80341461107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107390614fc1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590615341565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461114991906154ed565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060115461119a91906154ed565b6011819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111e6573d6000803e3d6000fd5b5060016000819055505050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc90615201565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561135f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611356906152e1565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ae6137a0565b6113b8600061381e565b565b6000601154826113ca91906154ed565b9050919050565b600a8060000154905081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6013600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156114da5750600073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8061154657506013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c906152c1565b60405180910390fd5b6115b2600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611df5565b60016013600084815260200190815260200160002060060160006101000a81548160ff021916908315150217905550806013600084815260200190815260200160002060050181905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161165b93929190614da7565b600060405180830381600087803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b505050505050565b6060600280546116a09061561f565b80601f01602080910402602001604051908101604052809291908181526020018280546116cc9061561f565b80156117195780601f106116ee57610100808354040283529160200191611719565b820191906000526020600020905b8154815290600101906020018083116116fc57829003601f168201915b5050505050905090565b6013600082815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156117f65750600073ffffffffffffffffffffffffffffffffffffffff166013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8061186257506013600082815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806118ba5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090615141565b60405180910390fd5b600115156013600083815260200190815260200160002060060160009054906101000a900460ff16151514611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906150e1565b60405180910390fd5b611990600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611df5565b60006013600083815260200190815260200160002060060160006101000a81548160ff02191690831515021790555060006013600083815260200190815260200160002060050181905550600073ffffffffffffffffffffffffffffffffffffffff166013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b1257600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd306013600085815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611adb93929190614d70565b600060405180830381600087803b158015611af557600080fd5b505af1158015611b09573d6000803e3d6000fd5b50505050611bda565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd306013600085815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611ba793929190614d70565b600060405180830381600087803b158015611bc157600080fd5b505af1158015611bd5573d6000803e3d6000fd5b505050505b50565b60606000601060008481526020019081526020016000208054611bff9061561f565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2b9061561f565b8015611c785780601f10611c4d57610100808354040283529160200191611c78565b820191906000526020600020905b815481529060010190602001808311611c5b57829003601f168201915b505050505090506000815111611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90615241565b60405180910390fd5b601060008481526020019081526020016000208054611ce19061561f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0d9061561f565b8015611d5a5780601f10611d2f57610100808354040283529160200191611d5a565b820191906000526020600020905b815481529060010190602001808311611d3d57829003601f168201915b5050505050915050919050565b600c8054611d749061561f565b80601f0160208091040260200160405190810160405280929190818152602001828054611da09061561f565b8015611ded5780601f10611dc257610100808354040283529160200191611ded565b820191906000526020600020905b815481529060010190602001808311611dd057829003601f168201915b505050505081565b611e07611e006133e3565b83836138e4565b5050565b60026000541415611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890614f21565b60405180910390fd5b60026000819055506013600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611f2c5750600073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611f9857506013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce906150c1565b60405180910390fd5b600015156013600084815260200190815260200160002060060160009054906101000a900460ff16151514612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890615361565b60405180910390fd5b803414612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a906152a1565b60405180910390fd5b6120b0600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611df5565b826013600084815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561216d573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3385856040518463ffffffff1660e01b81526004016121cd93929190614da7565b600060405180830381600087803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050506001600081905550505050565b61221d6122176133e3565b836134a4565b61225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390615001565b60405180910390fd5b61226884848484613a51565b50505050565b600260005414156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab90614f21565b60405180910390fd5b6002600081905550600115156013600083815260200190815260200160002060060160009054906101000a900460ff16151514612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d906151a1565b60405180910390fd5b833414612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90615121565b60405180910390fd5b612395600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611df5565b600073ffffffffffffffffffffffffffffffffffffffff166013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612482576013600082815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561247c573d6000803e3d6000fd5b50612500565b6013600082815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156124fe573d6000803e3d6000fd5b505b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3087846040518463ffffffff1660e01b815260040161255f93929190614da7565b600060405180830381600087803b15801561257957600080fd5b505af115801561258d573d6000803e3d6000fd5b50505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156125f9573d6000803e3d6000fd5b50846013600083815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600015156013600083815260200190815260200160002060060160009054906101000a905050506000601360008381526020019081526020016000206005018190555034601160008282546126a491906154ed565b9250508190555034601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f691906154ed565b601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016000819055505050505050565b6127506137a0565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d790615301565b60405180910390fd5b600e548111612824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281b906150a1565b60405180910390fd5b80600e8190555050565b606061283982613398565b60006007600084815260200190815260200160002080546128599061561f565b80601f01602080910402602001604051908101604052809291908181526020018280546128859061561f565b80156128d25780601f106128a7576101008083540402835291602001916128d2565b820191906000526020600020905b8154815290600101906020018083116128b557829003601f168201915b5050505050905060006128e3613aad565b90506000815114156128f957819250505061293c565b60008251111561292e578082604051602001612916929190614d31565b6040516020818303038152906040529250505061293c565b61293784613ac4565b925050505b919050565b6129496137a0565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d8054612a2e9061561f565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5a9061561f565b8015612aa75780601f10612a7c57610100808354040283529160200191612aa7565b820191906000526020600020905b815481529060010190602001808311612a8a57829003601f168201915b505050505081565b612ab76137a0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90615081565b60405180910390fd5b612b308161381e565b50565b60026000541415612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614f21565b60405180910390fd5b6002600081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0990614fa1565b60405180910390fd5b600115156013600086815260200190815260200160002060060160009054906101000a900460ff16151514612c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7390615281565b60405180910390fd5b823414612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb590614f01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166013600086815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612dab576013600085815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612da5573d6000803e3d6000fd5b50612e29565b6013600085815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612e27573d6000803e3d6000fd5b505b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033876040518463ffffffff1660e01b8152600401612e8893929190614da7565b600060405180830381600087803b158015612ea257600080fd5b505af1158015612eb6573d6000803e3d6000fd5b50505050336013600086815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006013600086815260200190815260200160002060060160006101000a81548160ff02191690831515021790555060006013600086815260200190815260200160002060050181905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612fc2573d6000803e3d6000fd5b50600160008190555050505050565b60026000541415613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300e90614f21565b60405180910390fd5b6002600081905550600e5461302c600961338a565b141561306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490615021565b60405180910390fd5b6130776009613b2c565b6000613083600961338a565b905061308f3382613b42565b6130998183613d1c565b816010600083815260200190815260200160002090805190602001906130c092919061416d565b506040518060e00160405280828152602001600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160001515815250601360008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906131dd92919061416d565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c08201518160060160006101000a81548160ff021916908315150217905550905050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16817f075fb7fd1ecd2e51f3b8d1dc8bfbd3c77c6547ddbd967e194636fcd46d91f9258433600080600060405161330c959493929190614e67565b60405180910390a350600160008190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b6133a181613d90565b6133e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d790614ec1565b60405180910390fd5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661345e8361123c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806134b08361123c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806134f257506134f1818561298d565b5b8061353057508373ffffffffffffffffffffffffffffffffffffffff16613518846109a3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166135598261123c565b73ffffffffffffffffffffffffffffffffffffffff16146135af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a690615181565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561361f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361690615321565b60405180910390fd5b61362a838383613dfc565b6136356000826133eb565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461368591906154ed565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136dc9190615466565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461379b838383613e01565b505050565b6137a86133e3565b73ffffffffffffffffffffffffffffffffffffffff166137c66113dd565b73ffffffffffffffffffffffffffffffffffffffff161461381c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613813906151c1565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394a90615221565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613a449190614e2a565b60405180910390a3505050565b613a5c848484613539565b613a6884848484613e06565b613aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9e90614fe1565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060613acf82613398565b6000613ad9613aad565b90506000815111613af95760405180602001604052806000815250613b24565b80613b0384613f9d565b604051602001613b14929190614d31565b6040516020818303038152906040525b915050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba990614f81565b60405180910390fd5b613bbb81613d90565b15613bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf290615261565b60405180910390fd5b613c0760008383613dfc565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c579190615466565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613d1860008383613e01565b5050565b613d2582613d90565b613d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d5b906151e1565b60405180910390fd5b80600760008481526020019081526020016000209080519060200190613d8b92919061416d565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000613e278473ffffffffffffffffffffffffffffffffffffffff1661414a565b15613f90578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e506133e3565b8786866040518563ffffffff1660e01b8152600401613e729493929190614dde565b602060405180830381600087803b158015613e8c57600080fd5b505af1925050508015613ebd57506040513d601f19601f82011682018060405250810190613eba91906145df565b60015b613f40573d8060008114613eed576040519150601f19603f3d011682016040523d82523d6000602084013e613ef2565b606091505b50600081511415613f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2f90614ee1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613f95565b600190505b949350505050565b60606000821415613fe5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614145565b600082905060005b6000821461401757808061400090615682565b915050600a8261401091906154bc565b9150613fed565b60008167ffffffffffffffff811115614059577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561408b5781602001600182028036833780820191505090505b5090505b6000851461413e576001826140a491906154ed565b9150600a856140b391906156cb565b60306140bf9190615466565b60f81b8183815181106140fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561413791906154bc565b945061408f565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546141799061561f565b90600052602060002090601f01602090048101928261419b57600085556141e2565b82601f106141b457805160ff19168380011785556141e2565b828001600101855582156141e2579182015b828111156141e15782518255916020019190600101906141c6565b5b5090506141ef91906141f3565b5090565b5b8082111561420c5760008160009055506001016141f4565b5090565b600061422361421e846153c1565b61539c565b90508281526020810184848401111561423b57600080fd5b6142468482856155dd565b509392505050565b600061426161425c846153f2565b61539c565b90508281526020810184848401111561427957600080fd5b6142848482856155dd565b509392505050565b60008135905061429b81615ddf565b92915050565b6000813590506142b081615df6565b92915050565b6000813590506142c581615e0d565b92915050565b6000815190506142da81615e0d565b92915050565b600082601f8301126142f157600080fd5b8135614301848260208601614210565b91505092915050565b600082601f83011261431b57600080fd5b813561432b84826020860161424e565b91505092915050565b60008135905061434381615e24565b92915050565b60006020828403121561435b57600080fd5b60006143698482850161428c565b91505092915050565b6000806040838503121561438557600080fd5b60006143938582860161428c565b92505060206143a48582860161428c565b9150509250929050565b6000806000606084860312156143c357600080fd5b60006143d18682870161428c565b93505060206143e28682870161428c565b92505060406143f386828701614334565b9150509250925092565b6000806000806080858703121561441357600080fd5b60006144218782880161428c565b94505060206144328782880161428c565b935050604061444387828801614334565b925050606085013567ffffffffffffffff81111561446057600080fd5b61446c878288016142e0565b91505092959194509250565b6000806040838503121561448b57600080fd5b60006144998582860161428c565b92505060206144aa858286016142a1565b9150509250929050565b600080604083850312156144c757600080fd5b60006144d58582860161428c565b92505060206144e685828601614334565b9150509250929050565b60008060006060848603121561450557600080fd5b60006145138682870161428c565b935050602061452486828701614334565b925050604061453586828701614334565b9150509250925092565b600080600080600060a0868803121561455757600080fd5b60006145658882890161428c565b955050602061457688828901614334565b945050604061458788828901614334565b935050606061459888828901614334565b92505060806145a988828901614334565b9150509295509295909350565b6000602082840312156145c857600080fd5b60006145d6848285016142b6565b91505092915050565b6000602082840312156145f157600080fd5b60006145ff848285016142cb565b91505092915050565b60006020828403121561461a57600080fd5b600082013567ffffffffffffffff81111561463457600080fd5b6146408482850161430a565b91505092915050565b60006020828403121561465b57600080fd5b600061466984828501614334565b91505092915050565b6000806040838503121561468557600080fd5b600061469385828601614334565b92505060206146a485828601614334565b9150509250929050565b600080600080608085870312156146c457600080fd5b60006146d287828801614334565b94505060206146e387828801614334565b93505060406146f487828801614334565b925050606061470587828801614334565b91505092959194509250565b61471a81615595565b82525050565b61472981615521565b82525050565b61473881615533565b82525050565b600061474982615423565b6147538185615439565b93506147638185602086016155ec565b61476c816157b8565b840191505092915050565b614780816155a7565b82525050565b60006147918261542e565b61479b818561544a565b93506147ab8185602086016155ec565b6147b4816157b8565b840191505092915050565b60006147ca8261542e565b6147d4818561545b565b93506147e48185602086016155ec565b80840191505092915050565b60006147fd60058361544a565b9150614808826157c9565b602082019050919050565b600061482060058361544a565b915061482b826157f2565b602082019050919050565b600061484360068361544a565b915061484e8261581b565b602082019050919050565b600061486660058361544a565b915061487182615844565b602082019050919050565b600061488960068361544a565b91506148948261586d565b602082019050919050565b60006148ac60058361544a565b91506148b782615896565b602082019050919050565b60006148cf60058361544a565b91506148da826158bf565b602082019050919050565b60006148f260058361544a565b91506148fd826158e8565b602082019050919050565b600061491560068361544a565b915061492082615911565b602082019050919050565b600061493860058361544a565b91506149438261593a565b602082019050919050565b600061495b60058361544a565b915061496682615963565b602082019050919050565b600061497e60058361544a565b91506149898261598c565b602082019050919050565b60006149a160058361544a565b91506149ac826159b5565b602082019050919050565b60006149c460068361544a565b91506149cf826159de565b602082019050919050565b60006149e760058361544a565b91506149f282615a07565b602082019050919050565b6000614a0a60058361544a565b9150614a1582615a30565b602082019050919050565b6000614a2d60068361544a565b9150614a3882615a59565b602082019050919050565b6000614a5060058361544a565b9150614a5b82615a82565b602082019050919050565b6000614a7360058361544a565b9150614a7e82615aab565b602082019050919050565b6000614a9660068361544a565b9150614aa182615ad4565b602082019050919050565b6000614ab960058361544a565b9150614ac482615afd565b602082019050919050565b6000614adc60068361544a565b9150614ae782615b26565b602082019050919050565b6000614aff60058361544a565b9150614b0a82615b4f565b602082019050919050565b6000614b2260068361544a565b9150614b2d82615b78565b602082019050919050565b6000614b4560058361544a565b9150614b5082615ba1565b602082019050919050565b6000614b6860058361544a565b9150614b7382615bca565b602082019050919050565b6000614b8b60058361544a565b9150614b9682615bf3565b602082019050919050565b6000614bae60058361544a565b9150614bb982615c1c565b602082019050919050565b6000614bd160058361544a565b9150614bdc82615c45565b602082019050919050565b6000614bf460058361544a565b9150614bff82615c6e565b602082019050919050565b6000614c1760068361544a565b9150614c2282615c97565b602082019050919050565b6000614c3a60068361544a565b9150614c4582615cc0565b602082019050919050565b6000614c5d60058361544a565b9150614c6882615ce9565b602082019050919050565b6000614c8060058361544a565b9150614c8b82615d12565b602082019050919050565b6000614ca360058361544a565b9150614cae82615d3b565b602082019050919050565b6000614cc660058361544a565b9150614cd182615d64565b602082019050919050565b6000614ce960068361544a565b9150614cf482615d8d565b602082019050919050565b6000614d0c60068361544a565b9150614d1782615db6565b602082019050919050565b614d2b8161558b565b82525050565b6000614d3d82856147bf565b9150614d4982846147bf565b91508190509392505050565b6000602082019050614d6a6000830184614720565b92915050565b6000606082019050614d856000830186614720565b614d926020830185614711565b614d9f6040830184614d22565b949350505050565b6000606082019050614dbc6000830186614720565b614dc96020830185614720565b614dd66040830184614d22565b949350505050565b6000608082019050614df36000830187614720565b614e006020830186614720565b614e0d6040830185614d22565b8181036060830152614e1f818461473e565b905095945050505050565b6000602082019050614e3f600083018461472f565b92915050565b60006020820190508181036000830152614e5f8184614786565b905092915050565b600060a0820190508181036000830152614e818188614786565b9050614e906020830187614720565b614e9d6040830186614720565b614eaa6060830185614777565b614eb7608083018461472f565b9695505050505050565b60006020820190508181036000830152614eda816147f0565b9050919050565b60006020820190508181036000830152614efa81614813565b9050919050565b60006020820190508181036000830152614f1a81614836565b9050919050565b60006020820190508181036000830152614f3a81614859565b9050919050565b60006020820190508181036000830152614f5a8161487c565b9050919050565b60006020820190508181036000830152614f7a8161489f565b9050919050565b60006020820190508181036000830152614f9a816148c2565b9050919050565b60006020820190508181036000830152614fba816148e5565b9050919050565b60006020820190508181036000830152614fda81614908565b9050919050565b60006020820190508181036000830152614ffa8161492b565b9050919050565b6000602082019050818103600083015261501a8161494e565b9050919050565b6000602082019050818103600083015261503a81614971565b9050919050565b6000602082019050818103600083015261505a81614994565b9050919050565b6000602082019050818103600083015261507a816149b7565b9050919050565b6000602082019050818103600083015261509a816149da565b9050919050565b600060208201905081810360008301526150ba816149fd565b9050919050565b600060208201905081810360008301526150da81614a20565b9050919050565b600060208201905081810360008301526150fa81614a43565b9050919050565b6000602082019050818103600083015261511a81614a66565b9050919050565b6000602082019050818103600083015261513a81614a89565b9050919050565b6000602082019050818103600083015261515a81614aac565b9050919050565b6000602082019050818103600083015261517a81614acf565b9050919050565b6000602082019050818103600083015261519a81614af2565b9050919050565b600060208201905081810360008301526151ba81614b15565b9050919050565b600060208201905081810360008301526151da81614b38565b9050919050565b600060208201905081810360008301526151fa81614b5b565b9050919050565b6000602082019050818103600083015261521a81614b7e565b9050919050565b6000602082019050818103600083015261523a81614ba1565b9050919050565b6000602082019050818103600083015261525a81614bc4565b9050919050565b6000602082019050818103600083015261527a81614be7565b9050919050565b6000602082019050818103600083015261529a81614c0a565b9050919050565b600060208201905081810360008301526152ba81614c2d565b9050919050565b600060208201905081810360008301526152da81614c50565b9050919050565b600060208201905081810360008301526152fa81614c73565b9050919050565b6000602082019050818103600083015261531a81614c96565b9050919050565b6000602082019050818103600083015261533a81614cb9565b9050919050565b6000602082019050818103600083015261535a81614cdc565b9050919050565b6000602082019050818103600083015261537a81614cff565b9050919050565b60006020820190506153966000830184614d22565b92915050565b60006153a66153b7565b90506153b28282615651565b919050565b6000604051905090565b600067ffffffffffffffff8211156153dc576153db615789565b5b6153e5826157b8565b9050602081019050919050565b600067ffffffffffffffff82111561540d5761540c615789565b5b615416826157b8565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006154718261558b565b915061547c8361558b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154b1576154b06156fc565b5b828201905092915050565b60006154c78261558b565b91506154d28361558b565b9250826154e2576154e161572b565b5b828204905092915050565b60006154f88261558b565b91506155038361558b565b925082821015615516576155156156fc565b5b828203905092915050565b600061552c8261556b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006155a0826155b9565b9050919050565b60006155b28261558b565b9050919050565b60006155c4826155cb565b9050919050565b60006155d68261556b565b9050919050565b82818337600083830152505050565b60005b8381101561560a5780820151818401526020810190506155ef565b83811115615619576000848401525b50505050565b6000600282049050600182168061563757607f821691505b6020821081141561564b5761564a61575a565b5b50919050565b61565a826157b8565b810181811067ffffffffffffffff8211171561567957615678615789565b5b80604052505050565b600061568d8261558b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156c0576156bf6156fc565b5b600182019050919050565b60006156d68261558b565b91506156e18361558b565b9250826156f1576156f061572b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f5a3a3235000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3236000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31310000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3238000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32300000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3134000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3230000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a39000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31380000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3138000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3137000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a35000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3135000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32310000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3331000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a33000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31320000000000000000000000000000000000000000000000000000600082015250565b7f4552523a38000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3136000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32330000000000000000000000000000000000000000000000000000600082015250565b7f4552523a37000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31350000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3232000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32320000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3330000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3239000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3133000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3234000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a34000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3231000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31300000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31340000000000000000000000000000000000000000000000000000600082015250565b7f4552523a36000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3132000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3233000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31390000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31330000000000000000000000000000000000000000000000000000600082015250565b615de881615521565b8114615df357600080fd5b50565b615dff81615533565b8114615e0a57600080fd5b50565b615e168161553f565b8114615e2157600080fd5b50565b615e2d8161558b565b8114615e3857600080fd5b5056fea26469706673582212208a08a74c0f6272affa9df6d7917bb9dcd141bde43f60dda4ee88bad8610f7b4864736f6c63430008040033

Deployed Bytecode Sourcemap

16671:8155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7121:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18232:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7818:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8753:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8419:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23066:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18131:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9259:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22296:338;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9524:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22640:420;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24695:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7609:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7432:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16190:103;;;;;;;;;;;;;:::i;:::-;;24550:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16830:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15986:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19411:485;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7924:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19902:804;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18586:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16893:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8928:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21588:702;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9681:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23556:988;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18337:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14813:469;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18028:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9089:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16924:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16299:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20712:870;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18833:572;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7121:305;7223:4;7275:25;7260:40;;;:11;:40;;;;:105;;;;7332:33;7317:48;;;:11;:48;;;;7260:105;:158;;;;7382:36;7406:11;7382:23;:36::i;:::-;7260:158;7240:178;;7121:305;;;:::o;18232:99::-;18278:7;18304:19;:9;:17;:19::i;:::-;18297:26;;18232:99;:::o;7818:100::-;7872:13;7905:5;7898:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7818:100;:::o;8753:169::-;8829:7;8849:23;8864:7;8849:14;:23::i;:::-;8890:15;:24;8906:7;8890:24;;;;;;;;;;;;;;;;;;;;;8883:31;;8753:169;;;:::o;8419:328::-;8500:13;8516:23;8531:7;8516:14;:23::i;:::-;8500:39;;8564:5;8558:11;;:2;:11;;;;8550:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;8628:5;8612:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;8637:37;8654:5;8661:12;:10;:12::i;:::-;8637:16;:37::i;:::-;8612:62;8590:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;8718:21;8727:2;8731:7;8718:8;:21::i;:::-;8419:328;;;:::o;23066:484::-;23162:4;23210:1;23186:9;:21;23196:10;23186:21;;;;;;;;;;;;;;;;:25;23178:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23256:18;:27;23275:7;23256:27;;;;;;;;;;;:38;;;;;;;;;;;;23242:52;;:10;:52;;;:106;;;;;23346:1;23298:50;;:18;:27;23317:7;23298:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;;23242:106;23241:162;;;;23367:18;:27;23386:7;23367:27;;;;;;;;;;;:36;;;;;;;;;;;;23353:50;;:10;:50;;;;23241:162;23233:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;23453:7;23428:9;:21;23438:10;23428:21;;;;;;;;;;;;;;;;:32;23425:118;;23483:4;23476:11;;;;23425:118;23526:5;23519:12;;23066:484;;;;;;:::o;18131:95::-;18175:7;18202:15;;18194:24;;18131:95;:::o;9259:259::-;9420:41;9439:12;:10;:12::i;:::-;9453:7;9420:18;:41::i;:::-;9412:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;9482:28;9492:4;9498:2;9502:7;9482:9;:28::i;:::-;9259:259;;;:::o;22296:338::-;22355:4;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;22393:11:::1;;;;;;;;;;;22379:25;;:10;:25;;;;22371:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;22474:9;22450;:21;22460:10;22450:21;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;22426:9;:21;22436:10;22426:21;;;;;;;;;;;;;;;:57;;;;22502:11;;;;;;;;;;;22494:29;;:40;22524:9;22494:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22595:9;22570:22;;:34;;;;:::i;:::-;22545:22;:59;;;;22622:4;22615:11;;14373:1:::0;14640:7;:22;;;;22296:338;:::o;9524:151::-;9628:39;9645:4;9651:2;9655:7;9628:39;;;;;;;;;;;;:16;:39::i;:::-;9524:151;;;:::o;22640:420::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;15947:13:::1;:11;:13::i;:::-;22771:14:::2;22758:9;:27;22750:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22836:14;22815:9;:17;22825:6;22815:17;;;;;;;;;;;;;;;;:35;;22807:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22912:14;22892:9;:17;22902:6;22892:17;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;22872:9;:17;22882:6;22872:17;;;;;;;;;;;;;;;:54;;;;22987:14;22962:22;;:39;;;;:::i;:::-;22937:22;:64;;;;23020:6;23012:24;;:40;23037:14;23012:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;14373:1:::0;14640:7;:22;;;;22640:420;;:::o;24695:128::-;24761:7;24791:9;:24;24801:13;24791:24;;;;;;;;;;;;;;;;24784:31;;24695:128;;;:::o;7609:203::-;7681:7;7701:13;7717:7;:16;7725:7;7717:16;;;;;;;;;;;;;;;;;;;;;7701:32;;7769:1;7752:19;;:5;:19;;;;7744:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;7799:5;7792:12;;;7609:203;;;:::o;7432:171::-;7504:7;7549:1;7532:19;;:5;:19;;;;7524:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;7579:9;:16;7589:5;7579:16;;;;;;;;;;;;;;;;7572:23;;7432:171;;;:::o;16190:103::-;15947:13;:11;:13::i;:::-;16255:30:::1;16282:1;16255:18;:30::i;:::-;16190:103::o:0;24550:139::-;24620:7;24659:22;;24646:12;:35;;;;:::i;:::-;24639:42;;24550:139;;;:::o;16830:31::-;;;;;;;;;:::o;15986:87::-;16032:7;16059:6;;;;;;;;;;;16052:13;;15986:87;:::o;19411:485::-;19501:18;:27;19520:7;19501:27;;;;;;;;;;;:38;;;;;;;;;;;;19487:52;;:10;:52;;;:106;;;;;19591:1;19543:50;;:18;:27;19562:7;19543:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;19487:106;19486:162;;;;19612:18;:27;19631:7;19612:27;;;;;;;;;;;:36;;;;;;;;;;;;19598:50;;:10;:50;;;19486:162;19478:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;19669:35;19687:10;;;;;;;;;;;19699:4;19669:17;:35::i;:::-;19753:4;19715:18;:27;19734:7;19715:27;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;19804:5;19768:18;:27;19787:7;19768:27;;;;;;;;;;;:33;;:41;;;;19828:10;;;;;;;;;;;19820:32;;;19853:10;19873:4;19880:7;19820:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19411:485;;:::o;7924:104::-;7980:13;8013:7;8006:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7924:104;:::o;19902:804::-;19979:18;:27;19998:7;19979:27;;;;;;;;;;;:38;;;;;;;;;;;;19965:52;;:10;:52;;;:106;;;;;20069:1;20021:50;;:18;:27;20040:7;20021:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;19965:106;19964:162;;;;20090:18;:27;20109:7;20090:27;;;;;;;;;;;:36;;;;;;;;;;;;20076:50;;:10;:50;;;19964:162;:191;;;;20144:11;;;;;;;;;;;20130:25;;:10;:25;;;19964:191;19956:209;;;;;;;;;;;;:::i;:::-;;;;;;;;;20223:4;20184:43;;:18;:27;20203:7;20184:27;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;20176:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20248:35;20266:10;;;;;;;;;;;20278:4;20248:17;:35::i;:::-;20332:5;20294:18;:27;20313:7;20294:27;;;;;;;;;;;:35;;;:43;;;;;;;;;;;;;;;;;;20384:1;20348:18;:27;20367:7;20348:27;;;;;;;;;;;:33;;:37;;;;20447:1;20399:50;;:18;:27;20418:7;20399:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;20396:303;;;20473:10;;;;;;;;;;;20465:32;;;20506:4;20513:18;:27;20532:7;20513:27;;;;;;;;;;;:38;;;;;;;;;;;;20553:7;20465:96;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20396:303;;;20601:10;;;;;;;;;;;20593:32;;;20634:4;20641:18;:27;20660:7;20641:27;;;;;;;;;;;:36;;;;;;;;;;;;20679:7;20593:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20396:303;19902:804;:::o;18586:241::-;18649:13;18674:25;18708:11;:20;18720:7;18708:20;;;;;;;;;;;18674:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18770:1;18748:12;:19;:23;18740:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;18799:11;:20;18811:7;18799:20;;;;;;;;;;;18792:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18586:241;;;:::o;16893:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8928:155::-;9023:52;9042:12;:10;:12::i;:::-;9056:8;9066;9023:18;:52::i;:::-;8928:155;;:::o;21588:702::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;21736::::1;:27;21755:7;21736:27;;;;;;;;;;;:38;;;;;;;;;;;;21722:52;;:10;:52;;;:106;;;;;21826:1;21778:50;;:18;:27;21797:7;21778:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;21722:106;21721:162;;;;21847:18;:27;21866:7;21847:27;;;;;;;;;;;:36;;;;;;;;;;;;21833:50;;:10;:50;;;21721:162;21713:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;21952:5;21913:44;;:18;:27;21932:7;21913:27;;;;;;;;;;;:35;;;;;;;;;;;;:44;;;21905:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22000:14;21987:9;:27;21979:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22036:35;22054:10;;;;;;;;;;;22066:4;22036:17;:35::i;:::-;22129:15;22082:18;:27;22101:7;22082:27;;;;;;;;;;;:36;;;:63;;;;;;;;;;;;;;;;;;22164:11;;;;;;;;;;;22156:29;;:45;22186:14;22156:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22220:10;;;;;;;;;;;22212:32;;;22245:10;22257:15;22274:7;22212:70;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14373:1:::0;14640:7;:22;;;;21588:702;;;:::o;9681:239::-;9812:41;9831:12;:10;:12::i;:::-;9845:7;9812:18;:41::i;:::-;9804:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;9874:38;9888:4;9894:2;9898:7;9907:4;9874:13;:38::i;:::-;9681:239;;;;:::o;23556:988::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;23754:4:::1;23715:43;;:18;:27;23734:7;23715:27;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;23707:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23801:9;23788;:22;23780:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;23832:35;23850:10;;;;;;;;;;;23862:4;23832:17;:35::i;:::-;23929:1;23881:50;;:18;:27;23900:7;23881:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;23878:261;;;23955:18;:27;23974:7;23955:27;;;;;;;;;;;:38;;;;;;;;;;;;23947:56;;:70;24004:12;23947:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23878:261;;;24067:18;:27;24086:7;24067:27;;;;;;;;;;;:36;;;;;;;;;;;;24059:54;;:68;24114:12;24059:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23878:261;24157:10;;;;;;;;;;;24149:32;;;24190:4;24197:6;24205:7;24149:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24232:11;;;;;;;;;;;24224:29;;:40;24254:9;24224:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24322:6;24275:18;:27;24294:7;24275:27;;;;;;;;;;;:36;;;:54;;;;;;;;;;;;;;;;;;24379:5;24340:44;;:18;:27;24359:7;24340:27;;;;;;;;;;;:35;;;;;;;;;::::0;;:44;24431:1:::1;24395:18;:27;24414:7;24395:27;;;;;;;;;;;:33;;:37;;;;24467:9;24443:22;;:33;;;;;;;:::i;:::-;;;;;;;;24527:9;24507;:17;24517:6;24507:17;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;24487:9;:17;24497:6;24487:17;;;;;;;;;;;;;;;:49;;;;14373:1:::0;14640:7;:22;;;;23556:988;;;;;:::o;18337:243::-;15947:13;:11;:13::i;:::-;18435:11:::1;;;;;;;;;;;18421:25;;:10;:25;;;18413:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;18498:15;;18475:20;:38;18467:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18552:20;18534:15;:38;;;;18337:243:::0;:::o;14813:469::-;14886:13;14912:23;14927:7;14912:14;:23::i;:::-;14946;14972:10;:19;14983:7;14972:19;;;;;;;;;;;14946:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15002:18;15023:10;:8;:10::i;:::-;15002:31;;15070:1;15054:4;15048:18;:23;15044:72;;;15095:9;15088:16;;;;;;15044:72;15156:1;15136:9;15130:23;:27;15126:108;;;15205:4;15211:9;15188:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15174:48;;;;;;15126:108;15251:23;15266:7;15251:14;:23::i;:::-;15244:30;;;;14813:469;;;;:::o;18028:97::-;15947:13;:11;:13::i;:::-;18108:9:::1;18095:10;;:22;;;;;;;;;;;;;;;;;;18028:97:::0;:::o;9089:164::-;9186:4;9210:18;:25;9229:5;9210:25;;;;;;;;;;;;;;;:35;9236:8;9210:35;;;;;;;;;;;;;;;;;;;;;;;;;9203:42;;9089:164;;;;:::o;16924:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16299:168::-;15947:13;:11;:13::i;:::-;16408:1:::1;16388:22;;:8;:22;;;;16380:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;16431:28;16450:8;16431:18;:28::i;:::-;16299:168:::0;:::o;20712:870::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;20876:11:::1;;;;;;;;;;;20862:25;;:10;:25;;;;20854:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20955:4;20916:43;;:18;:27;20935:7;20916:27;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;20908:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21002:15;20989:9;:28;20981:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;21090:1;21042:50;;:18;:27;21061:7;21042:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;21039:229;;;21108:18;:27;21127:7;21108:27;;;;;;;;;;;:38;;;;;;;;;;;;:47;;:59;21156:10;21108:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21039:229;;;21199:18;:27;21218:7;21199:27;;;;;;;;;;;:36;;;;;;;;;;;;:45;;:57;21245:10;21199:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21039:229;21286:10;;;;;;;;;;;21278:32;;;21319:4;21326:10;21338:7;21278:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21404:10;21357:18;:27;21376:7;21357:27;;;;;;;;;;;:36;;;:58;;;;;;;;;;;;;;;;;;21464:5;21426:18;:27;21445:7;21426:27;;;;;;;;;;;:35;;;:43;;;;;;;;;;;;;;;;;;21516:1;21480:18;:27;21499:7;21480:27;;;;;;;;;;;:33;;:37;;;;21536:11;;;;;;;;;;;21528:29;;:46;21558:15;21528:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14373:1:::0;14640:7;:22;;;;20712:870;;;;:::o;18833:572::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;18938:15:::1;;18915:19;:9;:17;:19::i;:::-;:38;;18907:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18974:21;:9;:19;:21::i;:::-;19006:18;19027:19;:9;:17;:19::i;:::-;19006:40;;19057:29;19063:10;19075;19057:5;:29::i;:::-;19097;19110:10;19122:3;19097:12;:29::i;:::-;19163:3;19137:11;:23;19149:10;19137:23;;;;;;;;;;;:29;;;;;;;;;;;;:::i;:::-;;19210:91;;;;;;;;19221:10;19210:91;;;;19233:10;;;;;;;;;;;19210:91;;;;;;19245:3;19210:91;;;;19258:10;19210:91;;;;;;19287:1;19210:91;;;;;;19292:1;19210:91;;;;19295:5;19210:91;;;;::::0;19177:18:::1;:30;19196:10;19177:30;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19347:10;;;;;;;;;;;19317:80;;19335:10;19317:80;19359:3;19364:10;19384:1;19388::::0;19391:5:::1;19317:80;;;;;;;;;;:::i;:::-;;;;;;;;14628:1;14373::::0;14640:7;:22;;;;18833:572;:::o;6409:157::-;6494:4;6533:25;6518:40;;;:11;:40;;;;6511:47;;6409:157;;;:::o;13727:114::-;13792:7;13819;:14;;;13812:21;;13727:114;;;:::o;12616:116::-;12698:16;12706:7;12698;:16::i;:::-;12690:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;12616:116;:::o;4544:98::-;4597:7;4624:10;4617:17;;4544:98;:::o;12169:174::-;12271:2;12244:15;:24;12260:7;12244:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12327:7;12323:2;12289:46;;12298:23;12313:7;12298:14;:23::i;:::-;12289:46;;;;;;;;;;;;12169:174;;:::o;10290:264::-;10383:4;10400:13;10416:23;10431:7;10416:14;:23::i;:::-;10400:39;;10469:5;10458:16;;:7;:16;;;:52;;;;10478:32;10495:5;10502:7;10478:16;:32::i;:::-;10458:52;:87;;;;10538:7;10514:31;;:20;10526:7;10514:11;:20::i;:::-;:31;;;10458:87;10450:96;;;10290:264;;;;:::o;11697:466::-;11822:4;11795:31;;:23;11810:7;11795:14;:23::i;:::-;:31;;;11787:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;11869:1;11855:16;;:2;:16;;;;11847:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;11892:39;11913:4;11919:2;11923:7;11892:20;:39::i;:::-;11942:29;11959:1;11963:7;11942:8;:29::i;:::-;12001:1;11982:9;:15;11992:4;11982:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;12030:1;12013:9;:13;12023:2;12013:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;12061:2;12042:7;:16;12050:7;12042:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12098:7;12094:2;12079:27;;12088:4;12079:27;;;;;;;;;;;;12117:38;12137:4;12143:2;12147:7;12117:19;:38::i;:::-;11697:466;;;:::o;16079:105::-;16154:12;:10;:12::i;:::-;16143:23;;:7;:5;:7::i;:::-;:23;;;16135:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;16079:105::o;16473:191::-;16547:16;16566:6;;;;;;;;;;;16547:25;;16592:8;16583:6;;:17;;;;;;;;;;;;;;;;;;16647:8;16616:40;;16637:8;16616:40;;;;;;;;;;;;16473:191;;:::o;12349:261::-;12470:8;12461:17;;:5;:17;;;;12453:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;12537:8;12499:18;:25;12518:5;12499:25;;;;;;;;;;;;;;;:35;12525:8;12499:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12583:8;12561:41;;12576:5;12561:41;;;12593:8;12561:41;;;;;;:::i;:::-;;;;;;;;12349:261;;;:::o;9926:225::-;10039:28;10049:4;10055:2;10059:7;10039:9;:28::i;:::-;10086:47;10109:4;10115:2;10119:7;10128:4;10086:22;:47::i;:::-;10078:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;9926:225;;;;:::o;8319:94::-;8370:13;8396:9;;;;;;;;;;;;;;8319:94;:::o;8034:279::-;8107:13;8133:23;8148:7;8133:14;:23::i;:::-;8167:21;8191:10;:8;:10::i;:::-;8167:34;;8243:1;8225:7;8219:21;:25;:86;;;;;;;;;;;;;;;;;8271:7;8280:18;:7;:16;:18::i;:::-;8254:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8219:86;8212:93;;;8034:279;;;:::o;13847:127::-;13954:1;13936:7;:14;;;:19;;;;;;;;;;;13847:127;:::o;10922:381::-;11016:1;11002:16;;:2;:16;;;;10994:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;11048:16;11056:7;11048;:16::i;:::-;11047:17;11039:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;11085:45;11114:1;11118:2;11122:7;11085:20;:45::i;:::-;11158:1;11141:9;:13;11151:2;11141:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11189:2;11170:7;:16;11178:7;11170:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11232:7;11228:2;11207:33;;11224:1;11207:33;;;;;;;;;;;;11251:44;11279:1;11283:2;11287:7;11251:19;:44::i;:::-;10922:381;;:::o;15288:176::-;15388:16;15396:7;15388;:16::i;:::-;15380:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;15447:9;15425:10;:19;15436:7;15425:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;15288:176;;:::o;10157:127::-;10222:4;10274:1;10246:30;;:7;:16;10254:7;10246:16;;;;;;;;;;;;;;;;;;;;;:30;;;;10239:37;;10157:127;;;:::o;13453:92::-;;;;:::o;13551:91::-;;;;:::o;12738:709::-;12849:4;12870:15;:2;:13;;;:15::i;:::-;12866:574;;;12922:2;12906:36;;;12943:12;:10;:12::i;:::-;12957:4;12963:7;12972:4;12906:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12902:483;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13164:1;13147:6;:13;:18;13143:227;;;13190:15;;;;;;;;;;:::i;:::-;;;;;;;;13143:227;13320:6;13314:13;13305:6;13301:2;13297:15;13290:38;12902:483;13038:41;;;13028:51;;;:6;:51;;;;13021:58;;;;;12866:574;13424:4;13417:11;;12738:709;;;;;;;:::o;4894:532::-;4950:13;4989:1;4980:5;:10;4976:53;;;5007:10;;;;;;;;;;;;;;;;;;;;;4976:53;5039:12;5054:5;5039:20;;5070:14;5095:78;5110:1;5102:4;:9;5095:78;;5128:8;;;;;:::i;:::-;;;;5159:2;5151:10;;;;;:::i;:::-;;;5095:78;;;5183:19;5215:6;5205:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5183:39;;5233:154;5249:1;5240:5;:10;5233:154;;5277:1;5267:11;;;;;:::i;:::-;;;5344:2;5336:5;:10;;;;:::i;:::-;5323:2;:24;;;;:::i;:::-;5310:39;;5293:6;5300;5293:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;5373:2;5364:11;;;;;:::i;:::-;;;5233:154;;;5411:6;5397:21;;;;;4894:532;;;;:::o;1653:115::-;1713:4;1759:1;1737:7;:19;;;:23;1730:30;;1653:115;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:552::-;4960:6;4968;4976;5025:2;5013:9;5004:7;5000:23;4996:32;4993:2;;;5041:1;5038;5031:12;4993:2;5084:1;5109:53;5154:7;5145:6;5134:9;5130:22;5109:53;:::i;:::-;5099:63;;5055:117;5211:2;5237:53;5282:7;5273:6;5262:9;5258:22;5237:53;:::i;:::-;5227:63;;5182:118;5339:2;5365:53;5410:7;5401:6;5390:9;5386:22;5365:53;:::i;:::-;5355:63;;5310:118;4983:452;;;;;:::o;5441:844::-;5536:6;5544;5552;5560;5568;5617:3;5605:9;5596:7;5592:23;5588:33;5585:2;;;5634:1;5631;5624:12;5585:2;5677:1;5702:53;5747:7;5738:6;5727:9;5723:22;5702:53;:::i;:::-;5692:63;;5648:117;5804:2;5830:53;5875:7;5866:6;5855:9;5851:22;5830:53;:::i;:::-;5820:63;;5775:118;5932:2;5958:53;6003:7;5994:6;5983:9;5979:22;5958:53;:::i;:::-;5948:63;;5903:118;6060:2;6086:53;6131:7;6122:6;6111:9;6107:22;6086:53;:::i;:::-;6076:63;;6031:118;6188:3;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6159:119;5575:710;;;;;;;;:::o;6291:260::-;6349:6;6398:2;6386:9;6377:7;6373:23;6369:32;6366:2;;;6414:1;6411;6404:12;6366:2;6457:1;6482:52;6526:7;6517:6;6506:9;6502:22;6482:52;:::i;:::-;6472:62;;6428:116;6356:195;;;;:::o;6557:282::-;6626:6;6675:2;6663:9;6654:7;6650:23;6646:32;6643:2;;;6691:1;6688;6681:12;6643:2;6734:1;6759:63;6814:7;6805:6;6794:9;6790:22;6759:63;:::i;:::-;6749:73;;6705:127;6633:206;;;;:::o;6845:375::-;6914:6;6963:2;6951:9;6942:7;6938:23;6934:32;6931:2;;;6979:1;6976;6969:12;6931:2;7050:1;7039:9;7035:17;7022:31;7080:18;7072:6;7069:30;7066:2;;;7112:1;7109;7102:12;7066:2;7140:63;7195:7;7186:6;7175:9;7171:22;7140:63;:::i;:::-;7130:73;;6993:220;6921:299;;;;:::o;7226:262::-;7285:6;7334:2;7322:9;7313:7;7309:23;7305:32;7302:2;;;7350:1;7347;7340:12;7302:2;7393:1;7418:53;7463:7;7454:6;7443:9;7439:22;7418:53;:::i;:::-;7408:63;;7364:117;7292:196;;;;:::o;7494:407::-;7562:6;7570;7619:2;7607:9;7598:7;7594:23;7590:32;7587:2;;;7635:1;7632;7625:12;7587:2;7678:1;7703:53;7748:7;7739:6;7728:9;7724:22;7703:53;:::i;:::-;7693:63;;7649:117;7805:2;7831:53;7876:7;7867:6;7856:9;7852:22;7831:53;:::i;:::-;7821:63;;7776:118;7577:324;;;;;:::o;7907:698::-;7993:6;8001;8009;8017;8066:3;8054:9;8045:7;8041:23;8037:33;8034:2;;;8083:1;8080;8073:12;8034:2;8126:1;8151:53;8196:7;8187:6;8176:9;8172:22;8151:53;:::i;:::-;8141:63;;8097:117;8253:2;8279:53;8324:7;8315:6;8304:9;8300:22;8279:53;:::i;:::-;8269:63;;8224:118;8381:2;8407:53;8452:7;8443:6;8432:9;8428:22;8407:53;:::i;:::-;8397:63;;8352:118;8509:2;8535:53;8580:7;8571:6;8560:9;8556:22;8535:53;:::i;:::-;8525:63;;8480:118;8024:581;;;;;;;:::o;8611:147::-;8706:45;8745:5;8706:45;:::i;:::-;8701:3;8694:58;8684:74;;:::o;8764:118::-;8851:24;8869:5;8851:24;:::i;:::-;8846:3;8839:37;8829:53;;:::o;8888:109::-;8969:21;8984:5;8969:21;:::i;:::-;8964:3;8957:34;8947:50;;:::o;9003:360::-;9089:3;9117:38;9149:5;9117:38;:::i;:::-;9171:70;9234:6;9229:3;9171:70;:::i;:::-;9164:77;;9250:52;9295:6;9290:3;9283:4;9276:5;9272:16;9250:52;:::i;:::-;9327:29;9349:6;9327:29;:::i;:::-;9322:3;9318:39;9311:46;;9093:270;;;;;:::o;9369:147::-;9464:45;9503:5;9464:45;:::i;:::-;9459:3;9452:58;9442:74;;:::o;9522:364::-;9610:3;9638:39;9671:5;9638:39;:::i;:::-;9693:71;9757:6;9752:3;9693:71;:::i;:::-;9686:78;;9773:52;9818:6;9813:3;9806:4;9799:5;9795:16;9773:52;:::i;:::-;9850:29;9872:6;9850:29;:::i;:::-;9845:3;9841:39;9834:46;;9614:272;;;;;:::o;9892:377::-;9998:3;10026:39;10059:5;10026:39;:::i;:::-;10081:89;10163:6;10158:3;10081:89;:::i;:::-;10074:96;;10179:52;10224:6;10219:3;10212:4;10205:5;10201:16;10179:52;:::i;:::-;10256:6;10251:3;10247:16;10240:23;;10002:267;;;;;:::o;10275:365::-;10417:3;10438:66;10502:1;10497:3;10438:66;:::i;:::-;10431:73;;10513:93;10602:3;10513:93;:::i;:::-;10631:2;10626:3;10622:12;10615:19;;10421:219;;;:::o;10646:365::-;10788:3;10809:66;10873:1;10868:3;10809:66;:::i;:::-;10802:73;;10884:93;10973:3;10884:93;:::i;:::-;11002:2;10997:3;10993:12;10986:19;;10792:219;;;:::o;11017:365::-;11159:3;11180:66;11244:1;11239:3;11180:66;:::i;:::-;11173:73;;11255:93;11344:3;11255:93;:::i;:::-;11373:2;11368:3;11364:12;11357:19;;11163:219;;;:::o;11388:365::-;11530:3;11551:66;11615:1;11610:3;11551:66;:::i;:::-;11544:73;;11626:93;11715:3;11626:93;:::i;:::-;11744:2;11739:3;11735:12;11728:19;;11534:219;;;:::o;11759:365::-;11901:3;11922:66;11986:1;11981:3;11922:66;:::i;:::-;11915:73;;11997:93;12086:3;11997:93;:::i;:::-;12115:2;12110:3;12106:12;12099:19;;11905:219;;;:::o;12130:365::-;12272:3;12293:66;12357:1;12352:3;12293:66;:::i;:::-;12286:73;;12368:93;12457:3;12368:93;:::i;:::-;12486:2;12481:3;12477:12;12470:19;;12276:219;;;:::o;12501:365::-;12643:3;12664:66;12728:1;12723:3;12664:66;:::i;:::-;12657:73;;12739:93;12828:3;12739:93;:::i;:::-;12857:2;12852:3;12848:12;12841:19;;12647:219;;;:::o;12872:365::-;13014:3;13035:66;13099:1;13094:3;13035:66;:::i;:::-;13028:73;;13110:93;13199:3;13110:93;:::i;:::-;13228:2;13223:3;13219:12;13212:19;;13018:219;;;:::o;13243:365::-;13385:3;13406:66;13470:1;13465:3;13406:66;:::i;:::-;13399:73;;13481:93;13570:3;13481:93;:::i;:::-;13599:2;13594:3;13590:12;13583:19;;13389:219;;;:::o;13614:365::-;13756:3;13777:66;13841:1;13836:3;13777:66;:::i;:::-;13770:73;;13852:93;13941:3;13852:93;:::i;:::-;13970:2;13965:3;13961:12;13954:19;;13760:219;;;:::o;13985:365::-;14127:3;14148:66;14212:1;14207:3;14148:66;:::i;:::-;14141:73;;14223:93;14312:3;14223:93;:::i;:::-;14341:2;14336:3;14332:12;14325:19;;14131:219;;;:::o;14356:365::-;14498:3;14519:66;14583:1;14578:3;14519:66;:::i;:::-;14512:73;;14594:93;14683:3;14594:93;:::i;:::-;14712:2;14707:3;14703:12;14696:19;;14502:219;;;:::o;14727:365::-;14869:3;14890:66;14954:1;14949:3;14890:66;:::i;:::-;14883:73;;14965:93;15054:3;14965:93;:::i;:::-;15083:2;15078:3;15074:12;15067:19;;14873:219;;;:::o;15098:365::-;15240:3;15261:66;15325:1;15320:3;15261:66;:::i;:::-;15254:73;;15336:93;15425:3;15336:93;:::i;:::-;15454:2;15449:3;15445:12;15438:19;;15244:219;;;:::o;15469:365::-;15611:3;15632:66;15696:1;15691:3;15632:66;:::i;:::-;15625:73;;15707:93;15796:3;15707:93;:::i;:::-;15825:2;15820:3;15816:12;15809:19;;15615:219;;;:::o;15840:365::-;15982:3;16003:66;16067:1;16062:3;16003:66;:::i;:::-;15996:73;;16078:93;16167:3;16078:93;:::i;:::-;16196:2;16191:3;16187:12;16180:19;;15986:219;;;:::o;16211:365::-;16353:3;16374:66;16438:1;16433:3;16374:66;:::i;:::-;16367:73;;16449:93;16538:3;16449:93;:::i;:::-;16567:2;16562:3;16558:12;16551:19;;16357:219;;;:::o;16582:365::-;16724:3;16745:66;16809:1;16804:3;16745:66;:::i;:::-;16738:73;;16820:93;16909:3;16820:93;:::i;:::-;16938:2;16933:3;16929:12;16922:19;;16728:219;;;:::o;16953:365::-;17095:3;17116:66;17180:1;17175:3;17116:66;:::i;:::-;17109:73;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;17099:219;;;:::o;17324:365::-;17466:3;17487:66;17551:1;17546:3;17487:66;:::i;:::-;17480:73;;17562:93;17651:3;17562:93;:::i;:::-;17680:2;17675:3;17671:12;17664:19;;17470:219;;;:::o;17695:365::-;17837:3;17858:66;17922:1;17917:3;17858:66;:::i;:::-;17851:73;;17933:93;18022:3;17933:93;:::i;:::-;18051:2;18046:3;18042:12;18035:19;;17841:219;;;:::o;18066:365::-;18208:3;18229:66;18293:1;18288:3;18229:66;:::i;:::-;18222:73;;18304:93;18393:3;18304:93;:::i;:::-;18422:2;18417:3;18413:12;18406:19;;18212:219;;;:::o;18437:365::-;18579:3;18600:66;18664:1;18659:3;18600:66;:::i;:::-;18593:73;;18675:93;18764:3;18675:93;:::i;:::-;18793:2;18788:3;18784:12;18777:19;;18583:219;;;:::o;18808:365::-;18950:3;18971:66;19035:1;19030:3;18971:66;:::i;:::-;18964:73;;19046:93;19135:3;19046:93;:::i;:::-;19164:2;19159:3;19155:12;19148:19;;18954:219;;;:::o;19179:365::-;19321:3;19342:66;19406:1;19401:3;19342:66;:::i;:::-;19335:73;;19417:93;19506:3;19417:93;:::i;:::-;19535:2;19530:3;19526:12;19519:19;;19325:219;;;:::o;19550:365::-;19692:3;19713:66;19777:1;19772:3;19713:66;:::i;:::-;19706:73;;19788:93;19877:3;19788:93;:::i;:::-;19906:2;19901:3;19897:12;19890:19;;19696:219;;;:::o;19921:365::-;20063:3;20084:66;20148:1;20143:3;20084:66;:::i;:::-;20077:73;;20159:93;20248:3;20159:93;:::i;:::-;20277:2;20272:3;20268:12;20261:19;;20067:219;;;:::o;20292:365::-;20434:3;20455:66;20519:1;20514:3;20455:66;:::i;:::-;20448:73;;20530:93;20619:3;20530:93;:::i;:::-;20648:2;20643:3;20639:12;20632:19;;20438:219;;;:::o;20663:365::-;20805:3;20826:66;20890:1;20885:3;20826:66;:::i;:::-;20819:73;;20901:93;20990:3;20901:93;:::i;:::-;21019:2;21014:3;21010:12;21003:19;;20809:219;;;:::o;21034:365::-;21176:3;21197:66;21261:1;21256:3;21197:66;:::i;:::-;21190:73;;21272:93;21361:3;21272:93;:::i;:::-;21390:2;21385:3;21381:12;21374:19;;21180:219;;;:::o;21405:365::-;21547:3;21568:66;21632:1;21627:3;21568:66;:::i;:::-;21561:73;;21643:93;21732:3;21643:93;:::i;:::-;21761:2;21756:3;21752:12;21745:19;;21551:219;;;:::o;21776:365::-;21918:3;21939:66;22003:1;21998:3;21939:66;:::i;:::-;21932:73;;22014:93;22103:3;22014:93;:::i;:::-;22132:2;22127:3;22123:12;22116:19;;21922:219;;;:::o;22147:365::-;22289:3;22310:66;22374:1;22369:3;22310:66;:::i;:::-;22303:73;;22385:93;22474:3;22385:93;:::i;:::-;22503:2;22498:3;22494:12;22487:19;;22293:219;;;:::o;22518:365::-;22660:3;22681:66;22745:1;22740:3;22681:66;:::i;:::-;22674:73;;22756:93;22845:3;22756:93;:::i;:::-;22874:2;22869:3;22865:12;22858:19;;22664:219;;;:::o;22889:365::-;23031:3;23052:66;23116:1;23111:3;23052:66;:::i;:::-;23045:73;;23127:93;23216:3;23127:93;:::i;:::-;23245:2;23240:3;23236:12;23229:19;;23035:219;;;:::o;23260:365::-;23402:3;23423:66;23487:1;23482:3;23423:66;:::i;:::-;23416:73;;23498:93;23587:3;23498:93;:::i;:::-;23616:2;23611:3;23607:12;23600:19;;23406:219;;;:::o;23631:365::-;23773:3;23794:66;23858:1;23853:3;23794:66;:::i;:::-;23787:73;;23869:93;23958:3;23869:93;:::i;:::-;23987:2;23982:3;23978:12;23971:19;;23777:219;;;:::o;24002:365::-;24144:3;24165:66;24229:1;24224:3;24165:66;:::i;:::-;24158:73;;24240:93;24329:3;24240:93;:::i;:::-;24358:2;24353:3;24349:12;24342:19;;24148:219;;;:::o;24373:118::-;24460:24;24478:5;24460:24;:::i;:::-;24455:3;24448:37;24438:53;;:::o;24497:435::-;24677:3;24699:95;24790:3;24781:6;24699:95;:::i;:::-;24692:102;;24811:95;24902:3;24893:6;24811:95;:::i;:::-;24804:102;;24923:3;24916:10;;24681:251;;;;;:::o;24938:222::-;25031:4;25069:2;25058:9;25054:18;25046:26;;25082:71;25150:1;25139:9;25135:17;25126:6;25082:71;:::i;:::-;25036:124;;;;:::o;25166:458::-;25323:4;25361:2;25350:9;25346:18;25338:26;;25374:71;25442:1;25431:9;25427:17;25418:6;25374:71;:::i;:::-;25455:80;25531:2;25520:9;25516:18;25507:6;25455:80;:::i;:::-;25545:72;25613:2;25602:9;25598:18;25589:6;25545:72;:::i;:::-;25328:296;;;;;;:::o;25630:442::-;25779:4;25817:2;25806:9;25802:18;25794:26;;25830:71;25898:1;25887:9;25883:17;25874:6;25830:71;:::i;:::-;25911:72;25979:2;25968:9;25964:18;25955:6;25911:72;:::i;:::-;25993;26061:2;26050:9;26046:18;26037:6;25993:72;:::i;:::-;25784:288;;;;;;:::o;26078:640::-;26273:4;26311:3;26300:9;26296:19;26288:27;;26325:71;26393:1;26382:9;26378:17;26369:6;26325:71;:::i;:::-;26406:72;26474:2;26463:9;26459:18;26450:6;26406:72;:::i;:::-;26488;26556:2;26545:9;26541:18;26532:6;26488:72;:::i;:::-;26607:9;26601:4;26597:20;26592:2;26581:9;26577:18;26570:48;26635:76;26706:4;26697:6;26635:76;:::i;:::-;26627:84;;26278:440;;;;;;;:::o;26724:210::-;26811:4;26849:2;26838:9;26834:18;26826:26;;26862:65;26924:1;26913:9;26909:17;26900:6;26862:65;:::i;:::-;26816:118;;;;:::o;26940:313::-;27053:4;27091:2;27080:9;27076:18;27068:26;;27140:9;27134:4;27130:20;27126:1;27115:9;27111:17;27104:47;27168:78;27241:4;27232:6;27168:78;:::i;:::-;27160:86;;27058:195;;;;:::o;27259:759::-;27486:4;27524:3;27513:9;27509:19;27501:27;;27574:9;27568:4;27564:20;27560:1;27549:9;27545:17;27538:47;27602:78;27675:4;27666:6;27602:78;:::i;:::-;27594:86;;27690:72;27758:2;27747:9;27743:18;27734:6;27690:72;:::i;:::-;27772;27840:2;27829:9;27825:18;27816:6;27772:72;:::i;:::-;27854:80;27930:2;27919:9;27915:18;27906:6;27854:80;:::i;:::-;27944:67;28006:3;27995:9;27991:19;27982:6;27944:67;:::i;:::-;27491:527;;;;;;;;:::o;28024:419::-;28190:4;28228:2;28217:9;28213:18;28205:26;;28277:9;28271:4;28267:20;28263:1;28252:9;28248:17;28241:47;28305:131;28431:4;28305:131;:::i;:::-;28297:139;;28195:248;;;:::o;28449:419::-;28615:4;28653:2;28642:9;28638:18;28630:26;;28702:9;28696:4;28692:20;28688:1;28677:9;28673:17;28666:47;28730:131;28856:4;28730:131;:::i;:::-;28722:139;;28620:248;;;:::o;28874:419::-;29040:4;29078:2;29067:9;29063:18;29055:26;;29127:9;29121:4;29117:20;29113:1;29102:9;29098:17;29091:47;29155:131;29281:4;29155:131;:::i;:::-;29147:139;;29045:248;;;:::o;29299:419::-;29465:4;29503:2;29492:9;29488:18;29480:26;;29552:9;29546:4;29542:20;29538:1;29527:9;29523:17;29516:47;29580:131;29706:4;29580:131;:::i;:::-;29572:139;;29470:248;;;:::o;29724:419::-;29890:4;29928:2;29917:9;29913:18;29905:26;;29977:9;29971:4;29967:20;29963:1;29952:9;29948:17;29941:47;30005:131;30131:4;30005:131;:::i;:::-;29997:139;;29895:248;;;:::o;30149:419::-;30315:4;30353:2;30342:9;30338:18;30330:26;;30402:9;30396:4;30392:20;30388:1;30377:9;30373:17;30366:47;30430:131;30556:4;30430:131;:::i;:::-;30422:139;;30320:248;;;:::o;30574:419::-;30740:4;30778:2;30767:9;30763:18;30755:26;;30827:9;30821:4;30817:20;30813:1;30802:9;30798:17;30791:47;30855:131;30981:4;30855:131;:::i;:::-;30847:139;;30745:248;;;:::o;30999:419::-;31165:4;31203:2;31192:9;31188:18;31180:26;;31252:9;31246:4;31242:20;31238:1;31227:9;31223:17;31216:47;31280:131;31406:4;31280:131;:::i;:::-;31272:139;;31170:248;;;:::o;31424:419::-;31590:4;31628:2;31617:9;31613:18;31605:26;;31677:9;31671:4;31667:20;31663:1;31652:9;31648:17;31641:47;31705:131;31831:4;31705:131;:::i;:::-;31697:139;;31595:248;;;:::o;31849:419::-;32015:4;32053:2;32042:9;32038:18;32030:26;;32102:9;32096:4;32092:20;32088:1;32077:9;32073:17;32066:47;32130:131;32256:4;32130:131;:::i;:::-;32122:139;;32020:248;;;:::o;32274:419::-;32440:4;32478:2;32467:9;32463:18;32455:26;;32527:9;32521:4;32517:20;32513:1;32502:9;32498:17;32491:47;32555:131;32681:4;32555:131;:::i;:::-;32547:139;;32445:248;;;:::o;32699:419::-;32865:4;32903:2;32892:9;32888:18;32880:26;;32952:9;32946:4;32942:20;32938:1;32927:9;32923:17;32916:47;32980:131;33106:4;32980:131;:::i;:::-;32972:139;;32870:248;;;:::o;33124:419::-;33290:4;33328:2;33317:9;33313:18;33305:26;;33377:9;33371:4;33367:20;33363:1;33352:9;33348:17;33341:47;33405:131;33531:4;33405:131;:::i;:::-;33397:139;;33295:248;;;:::o;33549:419::-;33715:4;33753:2;33742:9;33738:18;33730:26;;33802:9;33796:4;33792:20;33788:1;33777:9;33773:17;33766:47;33830:131;33956:4;33830:131;:::i;:::-;33822:139;;33720:248;;;:::o;33974:419::-;34140:4;34178:2;34167:9;34163:18;34155:26;;34227:9;34221:4;34217:20;34213:1;34202:9;34198:17;34191:47;34255:131;34381:4;34255:131;:::i;:::-;34247:139;;34145:248;;;:::o;34399:419::-;34565:4;34603:2;34592:9;34588:18;34580:26;;34652:9;34646:4;34642:20;34638:1;34627:9;34623:17;34616:47;34680:131;34806:4;34680:131;:::i;:::-;34672:139;;34570:248;;;:::o;34824:419::-;34990:4;35028:2;35017:9;35013:18;35005:26;;35077:9;35071:4;35067:20;35063:1;35052:9;35048:17;35041:47;35105:131;35231:4;35105:131;:::i;:::-;35097:139;;34995:248;;;:::o;35249:419::-;35415:4;35453:2;35442:9;35438:18;35430:26;;35502:9;35496:4;35492:20;35488:1;35477:9;35473:17;35466:47;35530:131;35656:4;35530:131;:::i;:::-;35522:139;;35420:248;;;:::o;35674:419::-;35840:4;35878:2;35867:9;35863:18;35855:26;;35927:9;35921:4;35917:20;35913:1;35902:9;35898:17;35891:47;35955:131;36081:4;35955:131;:::i;:::-;35947:139;;35845:248;;;:::o;36099:419::-;36265:4;36303:2;36292:9;36288:18;36280:26;;36352:9;36346:4;36342:20;36338:1;36327:9;36323:17;36316:47;36380:131;36506:4;36380:131;:::i;:::-;36372:139;;36270:248;;;:::o;36524:419::-;36690:4;36728:2;36717:9;36713:18;36705:26;;36777:9;36771:4;36767:20;36763:1;36752:9;36748:17;36741:47;36805:131;36931:4;36805:131;:::i;:::-;36797:139;;36695:248;;;:::o;36949:419::-;37115:4;37153:2;37142:9;37138:18;37130:26;;37202:9;37196:4;37192:20;37188:1;37177:9;37173:17;37166:47;37230:131;37356:4;37230:131;:::i;:::-;37222:139;;37120:248;;;:::o;37374:419::-;37540:4;37578:2;37567:9;37563:18;37555:26;;37627:9;37621:4;37617:20;37613:1;37602:9;37598:17;37591:47;37655:131;37781:4;37655:131;:::i;:::-;37647:139;;37545:248;;;:::o;37799:419::-;37965:4;38003:2;37992:9;37988:18;37980:26;;38052:9;38046:4;38042:20;38038:1;38027:9;38023:17;38016:47;38080:131;38206:4;38080:131;:::i;:::-;38072:139;;37970:248;;;:::o;38224:419::-;38390:4;38428:2;38417:9;38413:18;38405:26;;38477:9;38471:4;38467:20;38463:1;38452:9;38448:17;38441:47;38505:131;38631:4;38505:131;:::i;:::-;38497:139;;38395:248;;;:::o;38649:419::-;38815:4;38853:2;38842:9;38838:18;38830:26;;38902:9;38896:4;38892:20;38888:1;38877:9;38873:17;38866:47;38930:131;39056:4;38930:131;:::i;:::-;38922:139;;38820:248;;;:::o;39074:419::-;39240:4;39278:2;39267:9;39263:18;39255:26;;39327:9;39321:4;39317:20;39313:1;39302:9;39298:17;39291:47;39355:131;39481:4;39355:131;:::i;:::-;39347:139;;39245:248;;;:::o;39499:419::-;39665:4;39703:2;39692:9;39688:18;39680:26;;39752:9;39746:4;39742:20;39738:1;39727:9;39723:17;39716:47;39780:131;39906:4;39780:131;:::i;:::-;39772:139;;39670:248;;;:::o;39924:419::-;40090:4;40128:2;40117:9;40113:18;40105:26;;40177:9;40171:4;40167:20;40163:1;40152:9;40148:17;40141:47;40205:131;40331:4;40205:131;:::i;:::-;40197:139;;40095:248;;;:::o;40349:419::-;40515:4;40553:2;40542:9;40538:18;40530:26;;40602:9;40596:4;40592:20;40588:1;40577:9;40573:17;40566:47;40630:131;40756:4;40630:131;:::i;:::-;40622:139;;40520:248;;;:::o;40774:419::-;40940:4;40978:2;40967:9;40963:18;40955:26;;41027:9;41021:4;41017:20;41013:1;41002:9;40998:17;40991:47;41055:131;41181:4;41055:131;:::i;:::-;41047:139;;40945:248;;;:::o;41199:419::-;41365:4;41403:2;41392:9;41388:18;41380:26;;41452:9;41446:4;41442:20;41438:1;41427:9;41423:17;41416:47;41480:131;41606:4;41480:131;:::i;:::-;41472:139;;41370:248;;;:::o;41624:419::-;41790:4;41828:2;41817:9;41813:18;41805:26;;41877:9;41871:4;41867:20;41863:1;41852:9;41848:17;41841:47;41905:131;42031:4;41905:131;:::i;:::-;41897:139;;41795:248;;;:::o;42049:419::-;42215:4;42253:2;42242:9;42238:18;42230:26;;42302:9;42296:4;42292:20;42288:1;42277:9;42273:17;42266:47;42330:131;42456:4;42330:131;:::i;:::-;42322:139;;42220:248;;;:::o;42474:419::-;42640:4;42678:2;42667:9;42663:18;42655:26;;42727:9;42721:4;42717:20;42713:1;42702:9;42698:17;42691:47;42755:131;42881:4;42755:131;:::i;:::-;42747:139;;42645:248;;;:::o;42899:419::-;43065:4;43103:2;43092:9;43088:18;43080:26;;43152:9;43146:4;43142:20;43138:1;43127:9;43123:17;43116:47;43180:131;43306:4;43180:131;:::i;:::-;43172:139;;43070:248;;;:::o;43324:419::-;43490:4;43528:2;43517:9;43513:18;43505:26;;43577:9;43571:4;43567:20;43563:1;43552:9;43548:17;43541:47;43605:131;43731:4;43605:131;:::i;:::-;43597:139;;43495:248;;;:::o;43749:419::-;43915:4;43953:2;43942:9;43938:18;43930:26;;44002:9;43996:4;43992:20;43988:1;43977:9;43973:17;43966:47;44030:131;44156:4;44030:131;:::i;:::-;44022:139;;43920:248;;;:::o;44174:222::-;44267:4;44305:2;44294:9;44290:18;44282:26;;44318:71;44386:1;44375:9;44371:17;44362:6;44318:71;:::i;:::-;44272:124;;;;:::o;44402:129::-;44436:6;44463:20;;:::i;:::-;44453:30;;44492:33;44520:4;44512:6;44492:33;:::i;:::-;44443:88;;;:::o;44537:75::-;44570:6;44603:2;44597:9;44587:19;;44577:35;:::o;44618:307::-;44679:4;44769:18;44761:6;44758:30;44755:2;;;44791:18;;:::i;:::-;44755:2;44829:29;44851:6;44829:29;:::i;:::-;44821:37;;44913:4;44907;44903:15;44895:23;;44684:241;;;:::o;44931:308::-;44993:4;45083:18;45075:6;45072:30;45069:2;;;45105:18;;:::i;:::-;45069:2;45143:29;45165:6;45143:29;:::i;:::-;45135:37;;45227:4;45221;45217:15;45209:23;;44998:241;;;:::o;45245:98::-;45296:6;45330:5;45324:12;45314:22;;45303:40;;;:::o;45349:99::-;45401:6;45435:5;45429:12;45419:22;;45408:40;;;:::o;45454:168::-;45537:11;45571:6;45566:3;45559:19;45611:4;45606:3;45602:14;45587:29;;45549:73;;;;:::o;45628:169::-;45712:11;45746:6;45741:3;45734:19;45786:4;45781:3;45777:14;45762:29;;45724:73;;;;:::o;45803:148::-;45905:11;45942:3;45927:18;;45917:34;;;;:::o;45957:305::-;45997:3;46016:20;46034:1;46016:20;:::i;:::-;46011:25;;46050:20;46068:1;46050:20;:::i;:::-;46045:25;;46204:1;46136:66;46132:74;46129:1;46126:81;46123:2;;;46210:18;;:::i;:::-;46123:2;46254:1;46251;46247:9;46240:16;;46001:261;;;;:::o;46268:185::-;46308:1;46325:20;46343:1;46325:20;:::i;:::-;46320:25;;46359:20;46377:1;46359:20;:::i;:::-;46354:25;;46398:1;46388:2;;46403:18;;:::i;:::-;46388:2;46445:1;46442;46438:9;46433:14;;46310:143;;;;:::o;46459:191::-;46499:4;46519:20;46537:1;46519:20;:::i;:::-;46514:25;;46553:20;46571:1;46553:20;:::i;:::-;46548:25;;46592:1;46589;46586:8;46583:2;;;46597:18;;:::i;:::-;46583:2;46642:1;46639;46635:9;46627:17;;46504:146;;;;:::o;46656:96::-;46693:7;46722:24;46740:5;46722:24;:::i;:::-;46711:35;;46701:51;;;:::o;46758:90::-;46792:7;46835:5;46828:13;46821:21;46810:32;;46800:48;;;:::o;46854:149::-;46890:7;46930:66;46923:5;46919:78;46908:89;;46898:105;;;:::o;47009:126::-;47046:7;47086:42;47079:5;47075:54;47064:65;;47054:81;;;:::o;47141:77::-;47178:7;47207:5;47196:16;;47186:32;;;:::o;47224:134::-;47282:9;47315:37;47346:5;47315:37;:::i;:::-;47302:50;;47292:66;;;:::o;47364:121::-;47422:9;47455:24;47473:5;47455:24;:::i;:::-;47442:37;;47432:53;;;:::o;47491:126::-;47541:9;47574:37;47605:5;47574:37;:::i;:::-;47561:50;;47551:66;;;:::o;47623:113::-;47673:9;47706:24;47724:5;47706:24;:::i;:::-;47693:37;;47683:53;;;:::o;47742:154::-;47826:6;47821:3;47816;47803:30;47888:1;47879:6;47874:3;47870:16;47863:27;47793:103;;;:::o;47902:307::-;47970:1;47980:113;47994:6;47991:1;47988:13;47980:113;;;48079:1;48074:3;48070:11;48064:18;48060:1;48055:3;48051:11;48044:39;48016:2;48013:1;48009:10;48004:15;;47980:113;;;48111:6;48108:1;48105:13;48102:2;;;48191:1;48182:6;48177:3;48173:16;48166:27;48102:2;47951:258;;;;:::o;48215:320::-;48259:6;48296:1;48290:4;48286:12;48276:22;;48343:1;48337:4;48333:12;48364:18;48354:2;;48420:4;48412:6;48408:17;48398:27;;48354:2;48482;48474:6;48471:14;48451:18;48448:38;48445:2;;;48501:18;;:::i;:::-;48445:2;48266:269;;;;:::o;48541:281::-;48624:27;48646:4;48624:27;:::i;:::-;48616:6;48612:40;48754:6;48742:10;48739:22;48718:18;48706:10;48703:34;48700:62;48697:2;;;48765:18;;:::i;:::-;48697:2;48805:10;48801:2;48794:22;48584:238;;;:::o;48828:233::-;48867:3;48890:24;48908:5;48890:24;:::i;:::-;48881:33;;48936:66;48929:5;48926:77;48923:2;;;49006:18;;:::i;:::-;48923:2;49053:1;49046:5;49042:13;49035:20;;48871:190;;;:::o;49067:176::-;49099:1;49116:20;49134:1;49116:20;:::i;:::-;49111:25;;49150:20;49168:1;49150:20;:::i;:::-;49145:25;;49189:1;49179:2;;49194:18;;:::i;:::-;49179:2;49235:1;49232;49228:9;49223:14;;49101:142;;;;:::o;49249:180::-;49297:77;49294:1;49287:88;49394:4;49391:1;49384:15;49418:4;49415:1;49408:15;49435:180;49483:77;49480:1;49473:88;49580:4;49577:1;49570:15;49604:4;49601:1;49594:15;49621:180;49669:77;49666:1;49659:88;49766:4;49763:1;49756:15;49790:4;49787:1;49780:15;49807:180;49855:77;49852:1;49845:88;49952:4;49949:1;49942:15;49976:4;49973:1;49966:15;49993:102;50034:6;50085:2;50081:7;50076:2;50069:5;50065:14;50061:28;50051:38;;50041:54;;;:::o;50101:155::-;50241:7;50237:1;50229:6;50225:14;50218:31;50207:49;:::o;50262:155::-;50402:7;50398:1;50390:6;50386:14;50379:31;50368:49;:::o;50423:156::-;50563:8;50559:1;50551:6;50547:14;50540:32;50529:50;:::o;50585:155::-;50725:7;50721:1;50713:6;50709:14;50702:31;50691:49;:::o;50746:156::-;50886:8;50882:1;50874:6;50870:14;50863:32;50852:50;:::o;50908:155::-;51048:7;51044:1;51036:6;51032:14;51025:31;51014:49;:::o;51069:155::-;51209:7;51205:1;51197:6;51193:14;51186:31;51175:49;:::o;51230:155::-;51370:7;51366:1;51358:6;51354:14;51347:31;51336:49;:::o;51391:156::-;51531:8;51527:1;51519:6;51515:14;51508:32;51497:50;:::o;51553:155::-;51693:7;51689:1;51681:6;51677:14;51670:31;51659:49;:::o;51714:155::-;51854:7;51850:1;51842:6;51838:14;51831:31;51820:49;:::o;51875:155::-;52015:7;52011:1;52003:6;51999:14;51992:31;51981:49;:::o;52036:155::-;52176:7;52172:1;52164:6;52160:14;52153:31;52142:49;:::o;52197:156::-;52337:8;52333:1;52325:6;52321:14;52314:32;52303:50;:::o;52359:155::-;52499:7;52495:1;52487:6;52483:14;52476:31;52465:49;:::o;52520:155::-;52660:7;52656:1;52648:6;52644:14;52637:31;52626:49;:::o;52681:156::-;52821:8;52817:1;52809:6;52805:14;52798:32;52787:50;:::o;52843:155::-;52983:7;52979:1;52971:6;52967:14;52960:31;52949:49;:::o;53004:155::-;53144:7;53140:1;53132:6;53128:14;53121:31;53110:49;:::o;53165:156::-;53305:8;53301:1;53293:6;53289:14;53282:32;53271:50;:::o;53327:155::-;53467:7;53463:1;53455:6;53451:14;53444:31;53433:49;:::o;53488:156::-;53628:8;53624:1;53616:6;53612:14;53605:32;53594:50;:::o;53650:155::-;53790:7;53786:1;53778:6;53774:14;53767:31;53756:49;:::o;53811:156::-;53951:8;53947:1;53939:6;53935:14;53928:32;53917:50;:::o;53973:155::-;54113:7;54109:1;54101:6;54097:14;54090:31;54079:49;:::o;54134:155::-;54274:7;54270:1;54262:6;54258:14;54251:31;54240:49;:::o;54295:155::-;54435:7;54431:1;54423:6;54419:14;54412:31;54401:49;:::o;54456:155::-;54596:7;54592:1;54584:6;54580:14;54573:31;54562:49;:::o;54617:155::-;54757:7;54753:1;54745:6;54741:14;54734:31;54723:49;:::o;54778:155::-;54918:7;54914:1;54906:6;54902:14;54895:31;54884:49;:::o;54939:156::-;55079:8;55075:1;55067:6;55063:14;55056:32;55045:50;:::o;55101:156::-;55241:8;55237:1;55229:6;55225:14;55218:32;55207:50;:::o;55263:155::-;55403:7;55399:1;55391:6;55387:14;55380:31;55369:49;:::o;55424:155::-;55564:7;55560:1;55552:6;55548:14;55541:31;55530:49;:::o;55585:155::-;55725:7;55721:1;55713:6;55709:14;55702:31;55691:49;:::o;55746:155::-;55886:7;55882:1;55874:6;55870:14;55863:31;55852:49;:::o;55907:156::-;56047:8;56043:1;56035:6;56031:14;56024:32;56013:50;:::o;56069:156::-;56209:8;56205:1;56197:6;56193:14;56186:32;56175:50;:::o;56231:122::-;56304:24;56322:5;56304:24;:::i;:::-;56297:5;56294:35;56284:2;;56343:1;56340;56333:12;56284:2;56274:79;:::o;56359:116::-;56429:21;56444:5;56429:21;:::i;:::-;56422:5;56419:32;56409:2;;56465:1;56462;56455:12;56409:2;56399:76;:::o;56481:120::-;56553:23;56570:5;56553:23;:::i;:::-;56546:5;56543:34;56533:2;;56591:1;56588;56581:12;56533:2;56523:78;:::o;56607:122::-;56680:24;56698:5;56680:24;:::i;:::-;56673:5;56670:35;56660:2;;56719:1;56716;56709:12;56660:2;56650:79;:::o

Swarm Source

ipfs://8a08a74c0f6272affa9df6d7917bb9dcd141bde43f60dda4ee88bad8610f7b48

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.