ETH Price: $2,231.66 (-8.90%)

Contract

0xf2f1565a3801742C42286E2C6717460dFB9aE9CD
Transaction Hash
Block
From
To
Emergency Withdr...3102498742025-02-26 23:20:59340 days ago1740612059IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001240.0134
Deposit2037100742024-04-22 16:17:31650 days ago1713802651IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002530.01
Withdraw2036299072024-04-22 10:37:00650 days ago1713782220IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001850.01
Withdraw2036297572024-04-22 10:36:23650 days ago1713782183IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001950.01
Withdraw2028294152024-04-20 2:33:14652 days ago1713580394IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001810.01
Withdraw2028293832024-04-20 2:33:06652 days ago1713580386IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001970.01
Withdraw2028293082024-04-20 2:32:47652 days ago1713580367IN
0xf2f1565a...dFB9aE9CD
0 ETH0.00000220.01
Withdraw2028227762024-04-20 2:05:08652 days ago1713578708IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001820.01
Withdraw2028204022024-04-20 1:55:12652 days ago1713578112IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002390.01
Withdraw2028203112024-04-20 1:54:49652 days ago1713578089IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002560.01
Withdraw2028201592024-04-20 1:54:11652 days ago1713578051IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002560.01
Withdraw2028201032024-04-20 1:53:57652 days ago1713578037IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002330.01
Withdraw2028200572024-04-20 1:53:45652 days ago1713578025IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002560.01
Deposit2028177172024-04-20 1:43:53652 days ago1713577433IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002230.01
Deposit2028176162024-04-20 1:43:27652 days ago1713577407IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002050.01
Deposit2028172002024-04-20 1:41:40652 days ago1713577300IN
0xf2f1565a...dFB9aE9CD
0 ETH0.00000210.01
Deposit2028169842024-04-20 1:40:42652 days ago1713577242IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002090.010199
Deposit2028160812024-04-20 1:36:54652 days ago1713577014IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002060.01
Withdraw2028150112024-04-20 1:32:19652 days ago1713576739IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002050.01
Deposit2028149782024-04-20 1:32:11652 days ago1713576731IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000002060.01
Deposit2028136672024-04-20 1:26:39652 days ago1713576399IN
0xf2f1565a...dFB9aE9CD
0 ETH0.00000210.01
Deposit2028136062024-04-20 1:26:23652 days ago1713576383IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001870.01
Deposit2028133452024-04-20 1:25:18652 days ago1713576318IN
0xf2f1565a...dFB9aE9CD
0 ETH0.00000210.01
Withdraw2028132702024-04-20 1:24:59652 days ago1713576299IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001820.01
Withdraw2028130352024-04-20 1:24:01652 days ago1713576241IN
0xf2f1565a...dFB9aE9CD
0 ETH0.000001840.01
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DBFarms

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-06-23
*/

// SPDX-License-Identifier: AGPL-3.0
pragma solidity =0.8.19;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
library Address {

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function mint(address _to, uint256 _amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
}
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
contract ERC721Holder is IERC721Receiver {
 
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}
interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
interface IERC721 is IERC165 {  
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
contract 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), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        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 {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _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), "ERC721: transfer caller is not owner nor approved");
        _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), "ERC721: transfer to non ERC721Receiver implementer");
    }
    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) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, 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),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _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, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _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, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
  
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
interface Logic {
    function addPool(string memory _name, uint256 _allocPoint, IERC20 _lpToken, bool _isLp) external;
    function setPool(uint256 _pid, uint256 _allocPoint) external;
    function updatePool(uint256 _pid) external;
    function addBooster(uint256 _pid, ERC721 _booster, string memory _boosterMetaData, uint256 _boosterPerc) external;
    function setBooster(uint256 _pid, ERC721 _booster, string memory _boosterMetaData, uint256 _boosterPerc) external;
    function deposit(uint256 _pid, uint256 _amount, address _account) external;
    function withdraw(uint256 _pid, uint256 _amount, address _account) external;
    function emergencyWithdraw(uint256 _pid, address _account) external;
    function boost(uint256 _pid, address _account, ERC721 _booster, uint256 _tokenId) external;
    function unboost(uint256 _pid, address _account, ERC721 _booster, uint256 _tokenId) external;
    function compound(uint256 _pid, address _account) external;
    function zapIn(uint256 _pid, address _account, uint256 _amount, address _token) external payable;

    function pendingRewards(uint256 _pid, address _account) external view returns (uint256);
    function getUserBoostRate(uint256 _pid, address _account) external view returns (uint256);
}

contract DBFarms is Ownable, ERC721Holder {
    using SafeMath for uint256;

    /* ---------- Setup ---------- */
    IERC20 internal rewardToken;
    address internal rewardWallet;
    address internal logicContract;
    uint256 internal totalAllocPoint = 0;
    uint256 internal multiplier = 1000;
    uint256 internal rewardPerSecond = 2500000000000000000;
    uint256 internal maxBoost = 3;

    struct UserInfo {
        uint256 amount;
        uint256 rewardDebt;
        uint256 totalIn;
        uint256 totalOut;
        uint256 totalRewards;
    }
    struct PoolInfo {
        string name;
        IERC20 lpToken;
        bool isLp;
        uint256 allocPoint;
        uint256 lastTimestamp;
        uint256 accPerShare;
        ERC721[] boosters;
        string[] boostersMetaData;
        uint256[] boostersPerc;
    }
    struct UserBoosters {
        ERC721 booster;
        uint256 tokenId;
    }

    PoolInfo[] internal poolInfo;
    mapping(uint => mapping(address => UserInfo)) internal userInfo;
    mapping(uint => mapping(address => UserBoosters[])) internal userBoosters;
    mapping (address => bool) internal Admins;

    event Deposit(address indexed account, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed account, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);

    modifier isAdmin() {
        bool isAnAdmin = false;
        if (owner() == msg.sender) { isAnAdmin = true; }
        if (logicContract == msg.sender) { isAnAdmin = true; }
        if (Admins[msg.sender]) { isAnAdmin = true; }
        require(isAnAdmin == true, "caller is not an admin");
        _;
    }

    constructor(IERC20 _rewardToken, address _rewardWallet) {
        rewardToken = _rewardToken;
        rewardWallet = _rewardWallet;
    }

    /* ---------- AdminFunctions ---------- */
    function addAdmin(address account) isAdmin public {
        Admins[account] = true;
    }
    function removeAdmin(address account) isAdmin public {
        Admins[account] = false;
    }

    /* ---------- ReadFunctions ---------- */
    function getRewardToken() public view returns(IERC20) {
        return rewardToken;
    }
    function getRewardWallet() public view returns(address) {
        return rewardWallet;
    }
    function getLogicContract() public view returns(address) {
        return logicContract;
    }
    function getTotalAllocPoint() public view returns(uint256) {
        return totalAllocPoint;
    }
    function getMultiplier() public view returns(uint256) {
        return multiplier;
    }
    function getRewardPerSecond() public view returns(uint256) {
        return rewardPerSecond;
    }
    function getMaxBoost() public view returns(uint256) {
        return maxBoost;
    }
    function getUser(uint _pid, address _account) public view returns(UserInfo memory) {
        return userInfo[_pid][_account];
    }
    function getUserBoosters(uint _pid, address _account) public view returns(UserBoosters[] memory) {
        return userBoosters[_pid][_account];
    }
    function getPoolInfo() public view returns(PoolInfo[] memory) {
        return poolInfo;
    }
    function getPool(uint _pid) public view returns(PoolInfo memory) {
        return poolInfo[_pid];
    }
    function getTvl(uint _pid) public view returns(uint256) {
        return poolInfo[_pid].lpToken.balanceOf(address(this));
    }
    function getTotalPools() public view returns (uint) {
        return poolInfo.length;
    }
    function admin(address _account) public view returns(bool) {
        bool isAnAdmin = false;
        if (owner() == _account) { isAnAdmin = true; }
        if (logicContract == _account) { isAnAdmin = true; }
        if (Admins[_account]) { isAnAdmin = true; }
        if (address(this) == _account) { isAnAdmin = true; }
        return isAnAdmin;
    }

    /* ---------- WriteFunctions ---------- */
    function setRewardWallet(address _newWallet) public isAdmin {
        rewardWallet = _newWallet;
    }
    function setLogicContract(address _newAddress) public isAdmin {
        logicContract = _newAddress;
    }
    function setTotalAllocPoint(uint256 _newValue) public isAdmin {
        totalAllocPoint = _newValue;
    }
    function setMultiplier(uint256 _newValue) public isAdmin {
        multiplier = _newValue;
    }
    function setMaxBoost(uint256 _newValue) public isAdmin {
        maxBoost = _newValue;
    }
    function setUser(uint _pid, address _account, UserInfo memory _user) public isAdmin {
       userInfo[_pid][_account] = _user;
    }
    function addUserBoosters(uint _pid, address _account, UserBoosters memory _userBoosters) public isAdmin {
        userBoosters[_pid][_account].push(_userBoosters);
    }
    function setUserBoosters(uint _pid, address _account, UserBoosters[] memory _userBoosters) public isAdmin {
        delete userBoosters[_pid][_account];
        for(uint i = 0; i < _userBoosters.length; i++) {
            userBoosters[_pid][_account].push(_userBoosters[i]);
        }
    }
    function removeUserBoosters(uint _pid, address _account, UserBoosters memory _userBoosters) public isAdmin {
        uint id = 0;
        for(uint i = 0; i < userBoosters[_pid][_account].length; i++) {
            if (userBoosters[_pid][_account][i].booster == _userBoosters.booster && userBoosters[_pid][_account][i].tokenId == _userBoosters.tokenId) {
                id = i;
                break;
            }
        }
        delete userBoosters[_pid][_account][id];
        for(uint i = id; i < userBoosters[_pid][_account].length-1; i++){
            userBoosters[_pid][_account][i] = userBoosters[_pid][_account][i+1];      
        }
        userBoosters[_pid][_account].pop();
    }
    function pushToPool(PoolInfo memory pool) public isAdmin {
        poolInfo.push(pool);
    }
    function setPool(uint _pid, PoolInfo memory _pool) public isAdmin {
        poolInfo[_pid] = _pool;
    }
    function recoverToken(address _account, uint256 _amount, IERC20 _token) public isAdmin {
        _token.transfer(_account, _amount);
    }
    function recoverNft(address _account, uint256 _id, ERC721 _nft) public {
        _nft.safeTransferFrom(address(this), _account, _id, "");
    }
    function emitDeposit(address _account, uint256 _pid, uint256 _amount) public isAdmin {
        emit Deposit(_account, _pid, _amount);
    }
    function emitWithdraw(address _account, uint256 _pid, uint256 _amount) public isAdmin {
        emit Withdraw(_account, _pid, _amount);
    }
    function emitEmergencyWithdraw(address _account, uint256 _pid, uint256 _amount) public isAdmin {
        emit EmergencyWithdraw(_account, _pid, _amount);
    }

    /* ---------- PoolManagement ---------- */
    function addPool(string memory _name, uint256 _allocPoint, IERC20 _lpToken, bool _isLp) public isAdmin {
        Logic(logicContract).addPool(_name, _allocPoint, _lpToken, _isLp);
    }
    function setPool(uint256 _pid, uint256 _allocPoint) public isAdmin {
        Logic(logicContract).setPool(_pid, _allocPoint);
    }
    function updatePool(uint256 _pid) public isAdmin {
        Logic(logicContract).updatePool(_pid);
    }
    function addBooster(uint256 _pid, ERC721 _booster, string memory _boosterMetaData, uint256 _boosterPerc) public isAdmin {
        Logic(logicContract).addBooster(_pid, _booster, _boosterMetaData, _boosterPerc);
    }
    function setBooster(uint256 _pid, ERC721 _booster, string memory _boosterMetaData, uint256 _boosterPerc) public isAdmin {
        Logic(logicContract).setBooster(_pid, _booster, _boosterMetaData, _boosterPerc);
    }


    /* ---------- StakingManagement ---------- */
    function deposit(uint256 _pid, uint256 _amount) public {
        Logic(logicContract).deposit(_pid, _amount, msg.sender);
    }
    function withdraw(uint256 _pid, uint256 _amount) public {
        Logic(logicContract).withdraw(_pid, _amount, msg.sender);
    }
    function emergencyWithdraw(uint256 _pid) public {
        Logic(logicContract).emergencyWithdraw(_pid, msg.sender);
    }
    function boost(uint256 _pid, ERC721 _booster, uint256 _tokenId) public {
        Logic(logicContract).boost(_pid, msg.sender, _booster, _tokenId);
    }
    function unboost(uint256 _pid, ERC721 _booster, uint256 _tokenId) public {
        Logic(logicContract).unboost(_pid, msg.sender, _booster, _tokenId);
    }
    function compound(uint256 _pid, address _account) public {
        Logic(logicContract).compound(_pid, _account);
    }
    function zapIn(uint256 _pid, address _account, uint256 _amount, address _token) public payable {
        Logic(logicContract).zapIn{value: msg.value}(_pid, _account, _amount, _token);
    }
    function pendingRewards(uint256 _pid, address _account) public view returns (uint256) {
        return Logic(logicContract).pendingRewards(_pid, _account);
    }
    function getUserBoostRate(uint256 _pid, address _account) public view returns (uint256) {
        return Logic(logicContract).getUserBoostRate(_pid, _account);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_rewardWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","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":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"contract ERC721","name":"_booster","type":"address"},{"internalType":"string","name":"_boosterMetaData","type":"string"},{"internalType":"uint256","name":"_boosterPerc","type":"uint256"}],"name":"addBooster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_isLp","type":"bool"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"},{"components":[{"internalType":"contract ERC721","name":"booster","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct DBFarms.UserBoosters","name":"_userBoosters","type":"tuple"}],"name":"addUserBoosters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"admin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"contract ERC721","name":"_booster","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"boost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emitDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emitEmergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emitWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLogicContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBoost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPool","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"bool","name":"isLp","type":"bool"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"},{"internalType":"uint256","name":"accPerShare","type":"uint256"},{"internalType":"contract ERC721[]","name":"boosters","type":"address[]"},{"internalType":"string[]","name":"boostersMetaData","type":"string[]"},{"internalType":"uint256[]","name":"boostersPerc","type":"uint256[]"}],"internalType":"struct DBFarms.PoolInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolInfo","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"bool","name":"isLp","type":"bool"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"},{"internalType":"uint256","name":"accPerShare","type":"uint256"},{"internalType":"contract ERC721[]","name":"boosters","type":"address[]"},{"internalType":"string[]","name":"boostersMetaData","type":"string[]"},{"internalType":"uint256[]","name":"boostersPerc","type":"uint256[]"}],"internalType":"struct DBFarms.PoolInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getTvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"getUser","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"totalIn","type":"uint256"},{"internalType":"uint256","name":"totalOut","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"}],"internalType":"struct DBFarms.UserInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"getUserBoostRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"getUserBoosters","outputs":[{"components":[{"internalType":"contract ERC721","name":"booster","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct DBFarms.UserBoosters[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"bool","name":"isLp","type":"bool"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"},{"internalType":"uint256","name":"accPerShare","type":"uint256"},{"internalType":"contract ERC721[]","name":"boosters","type":"address[]"},{"internalType":"string[]","name":"boostersMetaData","type":"string[]"},{"internalType":"uint256[]","name":"boostersPerc","type":"uint256[]"}],"internalType":"struct DBFarms.PoolInfo","name":"pool","type":"tuple"}],"name":"pushToPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"contract ERC721","name":"_nft","type":"address"}],"name":"recoverNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"},{"components":[{"internalType":"contract ERC721","name":"booster","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct DBFarms.UserBoosters","name":"_userBoosters","type":"tuple"}],"name":"removeUserBoosters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"contract ERC721","name":"_booster","type":"address"},{"internalType":"string","name":"_boosterMetaData","type":"string"},{"internalType":"uint256","name":"_boosterPerc","type":"uint256"}],"name":"setBooster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setLogicContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMaxBoost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"bool","name":"isLp","type":"bool"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"},{"internalType":"uint256","name":"accPerShare","type":"uint256"},{"internalType":"contract ERC721[]","name":"boosters","type":"address[]"},{"internalType":"string[]","name":"boostersMetaData","type":"string[]"},{"internalType":"uint256[]","name":"boostersPerc","type":"uint256[]"}],"internalType":"struct DBFarms.PoolInfo","name":"_pool","type":"tuple"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setTotalAllocPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"totalIn","type":"uint256"},{"internalType":"uint256","name":"totalOut","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"}],"internalType":"struct DBFarms.UserInfo","name":"_user","type":"tuple"}],"name":"setUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"},{"components":[{"internalType":"contract ERC721","name":"booster","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct DBFarms.UserBoosters[]","name":"_userBoosters","type":"tuple[]"}],"name":"setUserBoosters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"contract ERC721","name":"_booster","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unboost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"zapIn","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260006004556103e86005556722b1c8c1227a000060065560036007553480156200002d57600080fd5b5060405162003b4c38038062003b4c8339810160408190526200005091620000f6565b6200005b336200008d565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905562000135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f357600080fd5b50565b600080604083850312156200010a57600080fd5b82516200011781620000dd565b60208401519092506200012a81620000dd565b809150509250929050565b613a0780620001456000396000f3fe6080604052600436106102c95760003560e01c80637048027511610175578063ca7f3a5d116100dc578063d67dff0111610095578063da5b4ee71161006f578063da5b4ee7146108f0578063e2bbb15814610905578063e89d152b14610925578063f2fde38b1461095257600080fd5b8063d67dff0114610892578063d72dd172146108b0578063d8466121146108d057600080fd5b8063ca7f3a5d146107dd578063ca8e6c03146107fd578063d04323c51461081d578063d18df53c1461083d578063d3ffe67a1461085d578063d642086d1461087257600080fd5b80638f6693891161012e5780638f6693891461072a578063a52454d81461073d578063a69cde9a1461075d578063b2e0df961461077d578063b5b348b61461079d578063b777592b146107bd57600080fd5b80637048027514610679578063715018a61461069957806381b5e05e146106ae5780638227018f146106ce5780638b18c7e3146106ee5780638da5cb5b1461070c57600080fd5b806346430af1116102345780635aa4470f116101ed57806363a846f8116101c757806363a846f8146105d7578063641579a61461060757806369940d79146106275780636a34a03b1461065957600080fd5b80635aa4470f1461057557806360246c881461059557806362cf79b7146105b757600080fd5b806346430af1146104b55780634a9f1326146104d557806351eb05a6146104f55780635290e86e146105155780635312ea8e146105355780635958621e1461055557600080fd5b8063257664a411610286578063257664a4146103d45780632d4c6e8a146104365780633a58b91a1461044b57806340490a90146104605780634142d26714610475578063441a3e701461049557600080fd5b8063026549b5146102ce578063068bcd8d14610301578063150b7a021461032e5780631785f53c146103725780631f8434db146103945780632002ace0146103b4575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612be7565b610972565b6040519081526020015b60405180910390f35b34801561030d57600080fd5b5061032161031c366004612be7565b610a0a565b6040516102f89190612dcb565b34801561033a57600080fd5b50610359610349366004612eb9565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102f8565b34801561037e57600080fd5b5061039261038d366004612f38565b610d08565b005b3480156103a057600080fd5b506103926103af366004612f55565b610db0565b3480156103c057600080fd5b506103926103cf36600461323f565b610e77565b3480156103e057600080fd5b506103f46103ef36600461327b565b610fea565b6040516102f89190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561044257600080fd5b506007546102ee565b34801561045757600080fd5b506004546102ee565b34801561046c57600080fd5b506005546102ee565b34801561048157600080fd5b506103926104903660046132ab565b61107d565b3480156104a157600080fd5b506103926104b0366004613316565b611169565b3480156104c157600080fd5b506103926104d0366004613316565b6111d9565b3480156104e157600080fd5b506103926104f0366004613338565b6112c1565b34801561050157600080fd5b50610392610510366004612be7565b61141a565b34801561052157600080fd5b506102ee61053036600461327b565b6114c8565b34801561054157600080fd5b50610392610550366004612be7565b611546565b34801561056157600080fd5b50610392610570366004612f38565b6115a6565b34801561058157600080fd5b50610392610590366004612f38565b611646565b3480156105a157600080fd5b506105aa6116e6565b6040516102f8919061337e565b3480156105c357600080fd5b506103926105d2366004612f55565b6119b6565b3480156105e357600080fd5b506105f76105f2366004612f38565b611a6f565b60405190151581526020016102f8565b34801561061357600080fd5b50610392610622366004612be7565b611af7565b34801561063357600080fd5b506001546001600160a01b03165b6040516001600160a01b0390911681526020016102f8565b34801561066557600080fd5b506103926106743660046133e0565b611b7a565b34801561068557600080fd5b50610392610694366004612f38565b611bc0565b3480156106a557600080fd5b50610392611c62565b3480156106ba57600080fd5b506103926106c9366004613418565b611cc8565b3480156106da57600080fd5b506103926106e93660046133e0565b611d11565b3480156106fa57600080fd5b506003546001600160a01b0316610641565b34801561071857600080fd5b506000546001600160a01b0316610641565b61039261073836600461345a565b611d57565b34801561074957600080fd5b50610392610758366004613499565b611db5565b34801561076957600080fd5b506103926107783660046134f9565b611e68565b34801561078957600080fd5b50610392610798366004612be7565b611f37565b3480156107a957600080fd5b506103926107b8366004612f55565b611fba565b3480156107c957600080fd5b506103926107d83660046135ef565b612073565b3480156107e957600080fd5b506103926107f836600461362e565b6123a3565b34801561080957600080fd5b50610392610818366004612be7565b6124e8565b34801561082957600080fd5b50610392610838366004613418565b61256b565b34801561084957600080fd5b506102ee61085836600461327b565b61265b565b34801561086957600080fd5b506008546102ee565b34801561087e57600080fd5b5061039261088d3660046135ef565b612695565b34801561089e57600080fd5b506002546001600160a01b0316610641565b3480156108bc57600080fd5b506103926108cb366004613499565b61276a565b3480156108dc57600080fd5b506103926108eb36600461327b565b61281d565b3480156108fc57600080fd5b506006546102ee565b34801561091157600080fd5b50610392610920366004613316565b612856565b34801561093157600080fd5b5061094561094036600461327b565b612894565b6040516102f891906136e6565b34801561095e57600080fd5b5061039261096d366004612f38565b612927565b60006008828154811061098757610987613731565b60009182526020909120600890910201600101546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a049190613747565b92915050565b610a646040518061012001604052806060815260200160006001600160a01b031681526020016000151581526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b60088281548110610a7757610a77613731565b906000526020600020906008020160405180610120016040529081600082018054610aa190613760565b80601f0160208091040260200160405190810160405280929190818152602001828054610acd90613760565b8015610b1a5780601f10610aef57610100808354040283529160200191610b1a565b820191906000526020600020905b815481529060010190602001808311610afd57829003601f168201915b505050918352505060018201546001600160a01b038116602080840191909152600160a01b90910460ff1615156040808401919091526002840154606084015260038401546080840152600484015460a084015260058401805482518185028101850190935280835260c0909401939192909190830182828015610bc757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ba9575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020016000905b82821015610ca1578382906000526020600020018054610c1490613760565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4090613760565b8015610c8d5780601f10610c6257610100808354040283529160200191610c8d565b820191906000526020600020905b815481529060010190602001808311610c7057829003601f168201915b505050505081526020019060010190610bf5565b50505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610cf857602002820191906000526020600020905b815481526020019060010190808311610ce4575b5050505050815250509050919050565b600033610d1d6000546001600160a01b031690565b6001600160a01b031603610d2f575060015b600354336001600160a01b0390911603610d47575060015b336000908152600b602052604090205460ff1615610d63575060015b600181151514610d8e5760405162461bcd60e51b8152600401610d859061379a565b60405180910390fd5b506001600160a01b03166000908152600b60205260409020805460ff19169055565b600033610dc56000546001600160a01b031690565b6001600160a01b031603610dd7575060015b600354336001600160a01b0390911603610def575060015b336000908152600b602052604090205460ff1615610e0b575060015b600181151514610e2d5760405162461bcd60e51b8152600401610d859061379a565b82846001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56884604051610e6991815260200190565b60405180910390a350505050565b600033610e8c6000546001600160a01b031690565b6001600160a01b031603610e9e575060015b600354336001600160a01b0390911603610eb6575060015b336000908152600b602052604090205460ff1615610ed2575060015b600181151514610ef45760405162461bcd60e51b8152600401610d859061379a565b60088054600181018255600082905283518492919091027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301908190610f3a9082613815565b5060208281015160018301805460408601511515600160a01b026001600160a81b03199091166001600160a01b0390931692909217919091179055606083015160028301556080830151600383015560a0830151600483015560c08301518051610faa9260058501920190612a42565b5060e08201518051610fc6916006840191602090910190612aa7565b506101008201518051610fe3916007840191602090910190612af9565b5050505050565b61101c6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b5060009182526009602090815260408084206001600160a01b0393909316845291815291819020815160a081018352815481526001820154938101939093526002810154918301919091526003810154606083015260040154608082015290565b6000336110926000546001600160a01b031690565b6001600160a01b0316036110a4575060015b600354336001600160a01b03909116036110bc575060015b336000908152600b602052604090205460ff16156110d8575060015b6001811515146110fa5760405162461bcd60e51b8152600401610d859061379a565b600354604051634142d26760e01b81526001600160a01b0390911690634142d267906111309088908890889088906004016138d4565b600060405180830381600087803b15801561114a57600080fd5b505af115801561115e573d6000803e3d6000fd5b505050505050505050565b600354604051630ad58d2f60e01b815260048101849052602481018390523360448201526001600160a01b0390911690630ad58d2f906064015b600060405180830381600087803b1580156111bd57600080fd5b505af11580156111d1573d6000803e3d6000fd5b505050505050565b6000336111ee6000546001600160a01b031690565b6001600160a01b031603611200575060015b600354336001600160a01b0390911603611218575060015b336000908152600b602052604090205460ff1615611234575060015b6001811515146112565760405162461bcd60e51b8152600401610d859061379a565b6003546040516346430af160e01b815260048101859052602481018490526001600160a01b03909116906346430af1906044015b600060405180830381600087803b1580156112a457600080fd5b505af11580156112b8573d6000803e3d6000fd5b50505050505050565b6000336112d66000546001600160a01b031690565b6001600160a01b0316036112e8575060015b600354336001600160a01b0390911603611300575060015b336000908152600b602052604090205460ff161561131c575060015b60018115151461133e5760405162461bcd60e51b8152600401610d859061379a565b816008848154811061135257611352613731565b6000918252602090912082516008909202019081906113719082613815565b5060208281015160018301805460408601511515600160a01b026001600160a81b03199091166001600160a01b0390931692909217919091179055606083015160028301556080830151600383015560a0830151600483015560c083015180516113e19260058501920190612a42565b5060e082015180516113fd916006840191602090910190612aa7565b5061010082015180516111d1916007840191602090910190612af9565b60003361142f6000546001600160a01b031690565b6001600160a01b031603611441575060015b600354336001600160a01b0390911603611459575060015b336000908152600b602052604090205460ff1615611475575060015b6001811515146114975760405162461bcd60e51b8152600401610d859061379a565b6003546040516328f582d360e11b8152600481018490526001600160a01b03909116906351eb05a6906024016111a3565b600354604051632948743760e11b8152600481018490526001600160a01b0383811660248301526000921690635290e86e906044015b602060405180830381865afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190613747565b9392505050565b6003546040516302f940c760e41b8152600481018390523360248201526001600160a01b0390911690632f940c7090604401600060405180830381600087803b15801561159257600080fd5b505af1158015610fe3573d6000803e3d6000fd5b6000336115bb6000546001600160a01b031690565b6001600160a01b0316036115cd575060015b600354336001600160a01b03909116036115e5575060015b336000908152600b602052604090205460ff1615611601575060015b6001811515146116235760405162461bcd60e51b8152600401610d859061379a565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b60003361165b6000546001600160a01b031690565b6001600160a01b03160361166d575060015b600354336001600160a01b0390911603611685575060015b336000908152600b602052604090205460ff16156116a1575060015b6001811515146116c35760405162461bcd60e51b8152600401610d859061379a565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b60606008805480602002602001604051908101604052809291908181526020016000905b828210156119ad57838290600052602060002090600802016040518061012001604052908160008201805461173e90613760565b80601f016020809104026020016040519081016040528092919081815260200182805461176a90613760565b80156117b75780601f1061178c576101008083540402835291602001916117b7565b820191906000526020600020905b81548152906001019060200180831161179a57829003601f168201915b505050918352505060018201546001600160a01b038116602080840191909152600160a01b90910460ff1615156040808401919091526002840154606084015260038401546080840152600484015460a084015260058401805482518185028101850190935280835260c090940193919290919083018282801561186457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611846575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020016000905b8282101561193e5783829060005260206000200180546118b190613760565b80601f01602080910402602001604051908101604052809291908181526020018280546118dd90613760565b801561192a5780601f106118ff5761010080835404028352916020019161192a565b820191906000526020600020905b81548152906001019060200180831161190d57829003601f168201915b505050505081526020019060010190611892565b5050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561199557602002820191906000526020600020905b815481526020019060010190808311611981575b5050505050815250508152602001906001019061170a565b50505050905090565b6000336119cb6000546001600160a01b031690565b6001600160a01b0316036119dd575060015b600354336001600160a01b03909116036119f5575060015b336000908152600b602052604090205460ff1615611a11575060015b600181151514611a335760405162461bcd60e51b8152600401610d859061379a565b82846001600160a01b03167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae059584604051610e6991815260200190565b6000806001600160a01b038316611a8e6000546001600160a01b031690565b6001600160a01b031603611aa0575060015b6003546001600160a01b03808516911603611ab9575060015b6001600160a01b0383166000908152600b602052604090205460ff1615611ade575060015b6001600160a01b0383163003610a045750600192915050565b600033611b0c6000546001600160a01b031690565b6001600160a01b031603611b1e575060015b600354336001600160a01b0390911603611b36575060015b336000908152600b602052604090205460ff1615611b52575060015b600181151514611b745760405162461bcd60e51b8152600401610d859061379a565b50600555565b600354604051633134c11360e11b8152600481018590523360248201526001600160a01b038481166044830152606482018490529091169063626982269060840161128a565b600033611bd56000546001600160a01b031690565b6001600160a01b031603611be7575060015b600354336001600160a01b0390911603611bff575060015b336000908152600b602052604090205460ff1615611c1b575060015b600181151514611c3d5760405162461bcd60e51b8152600401610d859061379a565b506001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611cbc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d85565b611cc660006129f2565b565b604051635c46a7ef60e11b81523060048201526001600160a01b03848116602483015260448201849052608060648301526000608483015282169063b88d4fde9060a40161128a565b60035460405163882af3ef60e01b8152600481018590523360248201526001600160a01b038481166044830152606482018490529091169063882af3ef9060840161128a565b600354604051638f66938960e01b8152600481018690526001600160a01b03858116602483015260448201859052838116606483015290911690638f6693899034906084016000604051808303818588803b15801561114a57600080fd5b600033611dca6000546001600160a01b031690565b6001600160a01b031603611ddc575060015b600354336001600160a01b0390911603611df4575060015b336000908152600b602052604090205460ff1615611e10575060015b600181151514611e325760405162461bcd60e51b8152600401610d859061379a565b6003546040516314a48a9b60e31b81526001600160a01b039091169063a52454d89061113090889088908890889060040161390e565b600033611e7d6000546001600160a01b031690565b6001600160a01b031603611e8f575060015b600354336001600160a01b0390911603611ea7575060015b336000908152600b602052604090205460ff1615611ec3575060015b600181151514611ee55760405162461bcd60e51b8152600401610d859061379a565b5060009283526009602090815260408085206001600160a01b03909416855292815292829020815181559281015160018401559081015160028301556060810151600383015560800151600490910155565b600033611f4c6000546001600160a01b031690565b6001600160a01b031603611f5e575060015b600354336001600160a01b0390911603611f76575060015b336000908152600b602052604090205460ff1615611f92575060015b600181151514611fb45760405162461bcd60e51b8152600401610d859061379a565b50600755565b600033611fcf6000546001600160a01b031690565b6001600160a01b031603611fe1575060015b600354336001600160a01b0390911603611ff9575060015b336000908152600b602052604090205460ff1615612015575060015b6001811515146120375760405162461bcd60e51b8152600401610d859061379a565b82846001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1584604051610e6991815260200190565b6000336120886000546001600160a01b031690565b6001600160a01b03160361209a575060015b600354336001600160a01b03909116036120b2575060015b336000908152600b602052604090205460ff16156120ce575060015b6001811515146120f05760405162461bcd60e51b8152600401610d859061379a565b6000805b6000868152600a602090815260408083206001600160a01b03891684529091529020548110156121e95783516000878152600a602090815260408083206001600160a01b038a81168552925290912080549190921691908390811061215b5761215b613731565b60009182526020909120600290910201546001600160a01b03161480156121ca57506020808501516000888152600a835260408082206001600160a01b038a168352909352919091208054839081106121b6576121b6613731565b906000526020600020906002020160010154145b156121d7578091506121e9565b806121e18161395f565b9150506120f4565b506000858152600a602090815260408083206001600160a01b0388168452909152902080548290811061221e5761221e613731565b60009182526020822060029091020180546001600160a01b031916815560010155805b6000868152600a602090815260408083206001600160a01b038916845290915290205461227090600190613978565b811015612341576000868152600a602090815260408083206001600160a01b038916845290915290206122a482600161398b565b815481106122b4576122b4613731565b60009182526020808320898452600a825260408085206001600160a01b038b1686529092529220805460029092029092019190839081106122f7576122f7613731565b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b03909216919091178155600191820154910155806123398161395f565b915050612241565b506000858152600a602090815260408083206001600160a01b038816845290915290208054806123735761237361399e565b60008281526020812060026000199093019283020180546001600160a01b03191681556001015590555050505050565b6000336123b86000546001600160a01b031690565b6001600160a01b0316036123ca575060015b600354336001600160a01b03909116036123e2575060015b336000908152600b602052604090205460ff16156123fe575060015b6001811515146124205760405162461bcd60e51b8152600401610d859061379a565b6000848152600a602090815260408083206001600160a01b0387168452909152812061244b91612b34565b60005b8251811015610fe3576000858152600a602090815260408083206001600160a01b03881684529091529020835184908390811061248d5761248d613731565b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b03909216919091178155910151910155806124e08161395f565b91505061244e565b6000336124fd6000546001600160a01b031690565b6001600160a01b03160361250f575060015b600354336001600160a01b0390911603612527575060015b336000908152600b602052604090205460ff1615612543575060015b6001811515146125655760405162461bcd60e51b8152600401610d859061379a565b50600455565b6000336125806000546001600160a01b031690565b6001600160a01b031603612592575060015b600354336001600160a01b03909116036125aa575060015b336000908152600b602052604090205460ff16156125c6575060015b6001811515146125e85760405162461bcd60e51b8152600401610d859061379a565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905283169063a9059cbb906044016020604051808303816000875af1158015612637573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe391906139b4565b6003546040516334637d4f60e21b8152600481018490526001600160a01b038381166024830152600092169063d18df53c906044016114fe565b6000336126aa6000546001600160a01b031690565b6001600160a01b0316036126bc575060015b600354336001600160a01b03909116036126d4575060015b336000908152600b602052604090205460ff16156126f0575060015b6001811515146127125760405162461bcd60e51b8152600401610d859061379a565b506000928352600a602090815260408085206001600160a01b0394851686528252842080546001808201835591865294829020835160029096020180546001600160a01b031916959094169490941783550151910155565b60003361277f6000546001600160a01b031690565b6001600160a01b031603612791575060015b600354336001600160a01b03909116036127a9575060015b336000908152600b602052604090205460ff16156127c5575060015b6001811515146127e75760405162461bcd60e51b8152600401610d859061379a565b600354604051636b96e8b960e11b81526001600160a01b039091169063d72dd1729061113090889088908890889060040161390e565b60035460405163d846612160e01b8152600481018490526001600160a01b0383811660248301529091169063d8466121906044016111a3565b600354604051638dbdbe6d60e01b815260048101849052602481018390523360448201526001600160a01b0390911690638dbdbe6d906064016111a3565b6000828152600a602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b8282101561291b576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016128d3565b50505050905092915050565b6000546001600160a01b031633146129815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d85565b6001600160a01b0381166129e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d85565b6129ef816129f2565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215612a97579160200282015b82811115612a9757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612a62565b50612aa3929150612b55565b5090565b828054828255906000526020600020908101928215612aed579160200282015b82811115612aed5782518290612add9082613815565b5091602001919060010190612ac7565b50612aa3929150612b6a565b828054828255906000526020600020908101928215612a97579160200282015b82811115612a97578251825591602001919060010190612b19565b50805460008255600202906000526020600020908101906129ef9190612b87565b5b80821115612aa35760008155600101612b56565b80821115612aa3576000612b7e8282612bad565b50600101612b6a565b5b80821115612aa35780546001600160a01b031916815560006001820155600201612b88565b508054612bb990613760565b6000825580601f10612bc9575050565b601f0160209004906000526020600020908101906129ef9190612b55565b600060208284031215612bf957600080fd5b5035919050565b6000815180845260005b81811015612c2657602081850181015186830182015201612c0a565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015612c7f5781516001600160a01b031687529582019590820190600101612c5a565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015612cd2578284038952612cc0848351612c00565b98850198935090840190600101612ca8565b5091979650505050505050565b600081518084526020808501945080840160005b83811015612c7f57815187529582019590820190600101612cf3565b60006101208251818552612d2582860182612c00565b9150506020830151612d4260208601826001600160a01b03169052565b506040830151612d56604086018215159052565b50606083015160608501526080830151608085015260a083015160a085015260c083015184820360c0860152612d8c8282612c46565b91505060e083015184820360e0860152612da68282612c8a565b9150506101008084015185830382870152612dc18382612cdf565b9695505050505050565b60208152600061153f6020830184612d0f565b6001600160a01b03811681146129ef57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612e2c57612e2c612df3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612e5a57612e5a612df3565b604052919050565b60006001600160401b03831115612e7b57612e7b612df3565b612e8e601f8401601f1916602001612e32565b9050828152838383011115612ea257600080fd5b828260208301376000602084830101529392505050565b60008060008060808587031215612ecf57600080fd5b8435612eda81612dde565b93506020850135612eea81612dde565b92506040850135915060608501356001600160401b03811115612f0c57600080fd5b8501601f81018713612f1d57600080fd5b612f2c87823560208401612e62565b91505092959194509250565b600060208284031215612f4a57600080fd5b813561153f81612dde565b600080600060608486031215612f6a57600080fd5b8335612f7581612dde565b95602085013595506040909401359392505050565b600082601f830112612f9b57600080fd5b61153f83833560208501612e62565b8035612fb581612dde565b919050565b80151581146129ef57600080fd5b8035612fb581612fba565b60006001600160401b03821115612fec57612fec612df3565b5060051b60200190565b600082601f83011261300757600080fd5b8135602061301c61301783612fd3565b612e32565b82815260059290921b8401810191818101908684111561303b57600080fd5b8286015b8481101561305f57803561305281612dde565b835291830191830161303f565b509695505050505050565b600082601f83011261307b57600080fd5b8135602061308b61301783612fd3565b82815260059290921b840181019181810190868411156130aa57600080fd5b8286015b8481101561305f5780356001600160401b038111156130cd5760008081fd5b6130db8986838b0101612f8a565b8452509183019183016130ae565b600082601f8301126130fa57600080fd5b8135602061310a61301783612fd3565b82815260059290921b8401810191818101908684111561312957600080fd5b8286015b8481101561305f578035835291830191830161312d565b6000610120828403121561315757600080fd5b61315f612e09565b905081356001600160401b038082111561317857600080fd5b61318485838601612f8a565b835261319260208501612faa565b60208401526131a360408501612fc8565b6040840152606084013560608401526080840135608084015260a084013560a084015260c08401359150808211156131da57600080fd5b6131e685838601612ff6565b60c084015260e08401359150808211156131ff57600080fd5b61320b8583860161306a565b60e08401526101009150818401358181111561322657600080fd5b613232868287016130e9565b8385015250505092915050565b60006020828403121561325157600080fd5b81356001600160401b0381111561326757600080fd5b61327384828501613144565b949350505050565b6000806040838503121561328e57600080fd5b8235915060208301356132a081612dde565b809150509250929050565b600080600080608085870312156132c157600080fd5b84356001600160401b038111156132d757600080fd5b6132e387828801612f8a565b9450506020850135925060408501356132fb81612dde565b9150606085013561330b81612fba565b939692955090935050565b6000806040838503121561332957600080fd5b50508035926020909101359150565b6000806040838503121561334b57600080fd5b8235915060208301356001600160401b0381111561336857600080fd5b61337485828601613144565b9150509250929050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156133d357603f198886030184526133c1858351612d0f565b945092850192908501906001016133a5565b5092979650505050505050565b6000806000606084860312156133f557600080fd5b83359250602084013561340781612dde565b929592945050506040919091013590565b60008060006060848603121561342d57600080fd5b833561343881612dde565b925060208401359150604084013561344f81612dde565b809150509250925092565b6000806000806080858703121561347057600080fd5b84359350602085013561348281612dde565b925060408501359150606085013561330b81612dde565b600080600080608085870312156134af57600080fd5b8435935060208501356134c181612dde565b925060408501356001600160401b038111156134dc57600080fd5b6134e887828801612f8a565b949793965093946060013593505050565b600080600083850360e081121561350f57600080fd5b84359350602085013561352181612dde565b925060a0603f198201121561353557600080fd5b5060405160a081018181106001600160401b038211171561355857613558612df3565b806040525060408501358152606085013560208201526080850135604082015260a0850135606082015260c08501356080820152809150509250925092565b6000604082840312156135a957600080fd5b604051604081018181106001600160401b03821117156135cb576135cb612df3565b60405290508082356135dc81612dde565b8152602092830135920191909152919050565b60008060006080848603121561360457600080fd5b83359250602084013561361681612dde565b91506136258560408601613597565b90509250925092565b60008060006060848603121561364357600080fd5b8335925060208085013561365681612dde565b92506040858101356001600160401b0381111561367257600080fd5b8601601f8101881361368357600080fd5b803561369161301782612fd3565b81815260069190911b8201840190848101908a8311156136b057600080fd5b928501925b828410156136d6576136c78b85613597565b825292840192908501906136b5565b8096505050505050509250925092565b602080825282518282018190526000919060409081850190868401855b82811015612cd257815180516001600160a01b03168552860151868501529284019290850190600101613703565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561375957600080fd5b5051919050565b600181811c9082168061377457607f821691505b60208210810361379457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526016908201527531b0b63632b91034b9903737ba1030b71030b236b4b760511b604082015260600190565b601f82111561381057600081815260208120601f850160051c810160208610156137f15750805b601f850160051c820191505b818110156111d1578281556001016137fd565b505050565b81516001600160401b0381111561382e5761382e612df3565b6138428161383c8454613760565b846137ca565b602080601f831160018114613877576000841561385f5750858301515b600019600386901b1c1916600185901b1785556111d1565b600085815260208120601f198616915b828110156138a657888601518255948401946001909101908401613887565b50858210156138c45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080815260006138e76080830187612c00565b6020830195909552506001600160a01b039290921660408301521515606090910152919050565b8481526001600160a01b038416602082015260806040820181905260009061393890830185612c00565b905082606083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161397157613971613949565b5060010190565b81810381811115610a0457610a04613949565b80820180821115610a0457610a04613949565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156139c657600080fd5b815161153f81612fba56fea2646970667358221220a33b2cc144eeee5c1a1dfc16a5b44dbcfad0aae7d4d00ea722ade087f00cdab064736f6c634300081300330000000000000000000000000b257fe969d8782facb4ec790682c1d4d3df1551000000000000000000000000b6b72f2a5ff537c0f0b21580b2bd644325411094

Deployed Bytecode

0x6080604052600436106102c95760003560e01c80637048027511610175578063ca7f3a5d116100dc578063d67dff0111610095578063da5b4ee71161006f578063da5b4ee7146108f0578063e2bbb15814610905578063e89d152b14610925578063f2fde38b1461095257600080fd5b8063d67dff0114610892578063d72dd172146108b0578063d8466121146108d057600080fd5b8063ca7f3a5d146107dd578063ca8e6c03146107fd578063d04323c51461081d578063d18df53c1461083d578063d3ffe67a1461085d578063d642086d1461087257600080fd5b80638f6693891161012e5780638f6693891461072a578063a52454d81461073d578063a69cde9a1461075d578063b2e0df961461077d578063b5b348b61461079d578063b777592b146107bd57600080fd5b80637048027514610679578063715018a61461069957806381b5e05e146106ae5780638227018f146106ce5780638b18c7e3146106ee5780638da5cb5b1461070c57600080fd5b806346430af1116102345780635aa4470f116101ed57806363a846f8116101c757806363a846f8146105d7578063641579a61461060757806369940d79146106275780636a34a03b1461065957600080fd5b80635aa4470f1461057557806360246c881461059557806362cf79b7146105b757600080fd5b806346430af1146104b55780634a9f1326146104d557806351eb05a6146104f55780635290e86e146105155780635312ea8e146105355780635958621e1461055557600080fd5b8063257664a411610286578063257664a4146103d45780632d4c6e8a146104365780633a58b91a1461044b57806340490a90146104605780634142d26714610475578063441a3e701461049557600080fd5b8063026549b5146102ce578063068bcd8d14610301578063150b7a021461032e5780631785f53c146103725780631f8434db146103945780632002ace0146103b4575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612be7565b610972565b6040519081526020015b60405180910390f35b34801561030d57600080fd5b5061032161031c366004612be7565b610a0a565b6040516102f89190612dcb565b34801561033a57600080fd5b50610359610349366004612eb9565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102f8565b34801561037e57600080fd5b5061039261038d366004612f38565b610d08565b005b3480156103a057600080fd5b506103926103af366004612f55565b610db0565b3480156103c057600080fd5b506103926103cf36600461323f565b610e77565b3480156103e057600080fd5b506103f46103ef36600461327b565b610fea565b6040516102f89190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561044257600080fd5b506007546102ee565b34801561045757600080fd5b506004546102ee565b34801561046c57600080fd5b506005546102ee565b34801561048157600080fd5b506103926104903660046132ab565b61107d565b3480156104a157600080fd5b506103926104b0366004613316565b611169565b3480156104c157600080fd5b506103926104d0366004613316565b6111d9565b3480156104e157600080fd5b506103926104f0366004613338565b6112c1565b34801561050157600080fd5b50610392610510366004612be7565b61141a565b34801561052157600080fd5b506102ee61053036600461327b565b6114c8565b34801561054157600080fd5b50610392610550366004612be7565b611546565b34801561056157600080fd5b50610392610570366004612f38565b6115a6565b34801561058157600080fd5b50610392610590366004612f38565b611646565b3480156105a157600080fd5b506105aa6116e6565b6040516102f8919061337e565b3480156105c357600080fd5b506103926105d2366004612f55565b6119b6565b3480156105e357600080fd5b506105f76105f2366004612f38565b611a6f565b60405190151581526020016102f8565b34801561061357600080fd5b50610392610622366004612be7565b611af7565b34801561063357600080fd5b506001546001600160a01b03165b6040516001600160a01b0390911681526020016102f8565b34801561066557600080fd5b506103926106743660046133e0565b611b7a565b34801561068557600080fd5b50610392610694366004612f38565b611bc0565b3480156106a557600080fd5b50610392611c62565b3480156106ba57600080fd5b506103926106c9366004613418565b611cc8565b3480156106da57600080fd5b506103926106e93660046133e0565b611d11565b3480156106fa57600080fd5b506003546001600160a01b0316610641565b34801561071857600080fd5b506000546001600160a01b0316610641565b61039261073836600461345a565b611d57565b34801561074957600080fd5b50610392610758366004613499565b611db5565b34801561076957600080fd5b506103926107783660046134f9565b611e68565b34801561078957600080fd5b50610392610798366004612be7565b611f37565b3480156107a957600080fd5b506103926107b8366004612f55565b611fba565b3480156107c957600080fd5b506103926107d83660046135ef565b612073565b3480156107e957600080fd5b506103926107f836600461362e565b6123a3565b34801561080957600080fd5b50610392610818366004612be7565b6124e8565b34801561082957600080fd5b50610392610838366004613418565b61256b565b34801561084957600080fd5b506102ee61085836600461327b565b61265b565b34801561086957600080fd5b506008546102ee565b34801561087e57600080fd5b5061039261088d3660046135ef565b612695565b34801561089e57600080fd5b506002546001600160a01b0316610641565b3480156108bc57600080fd5b506103926108cb366004613499565b61276a565b3480156108dc57600080fd5b506103926108eb36600461327b565b61281d565b3480156108fc57600080fd5b506006546102ee565b34801561091157600080fd5b50610392610920366004613316565b612856565b34801561093157600080fd5b5061094561094036600461327b565b612894565b6040516102f891906136e6565b34801561095e57600080fd5b5061039261096d366004612f38565b612927565b60006008828154811061098757610987613731565b60009182526020909120600890910201600101546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a049190613747565b92915050565b610a646040518061012001604052806060815260200160006001600160a01b031681526020016000151581526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b60088281548110610a7757610a77613731565b906000526020600020906008020160405180610120016040529081600082018054610aa190613760565b80601f0160208091040260200160405190810160405280929190818152602001828054610acd90613760565b8015610b1a5780601f10610aef57610100808354040283529160200191610b1a565b820191906000526020600020905b815481529060010190602001808311610afd57829003601f168201915b505050918352505060018201546001600160a01b038116602080840191909152600160a01b90910460ff1615156040808401919091526002840154606084015260038401546080840152600484015460a084015260058401805482518185028101850190935280835260c0909401939192909190830182828015610bc757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ba9575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020016000905b82821015610ca1578382906000526020600020018054610c1490613760565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4090613760565b8015610c8d5780601f10610c6257610100808354040283529160200191610c8d565b820191906000526020600020905b815481529060010190602001808311610c7057829003601f168201915b505050505081526020019060010190610bf5565b50505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610cf857602002820191906000526020600020905b815481526020019060010190808311610ce4575b5050505050815250509050919050565b600033610d1d6000546001600160a01b031690565b6001600160a01b031603610d2f575060015b600354336001600160a01b0390911603610d47575060015b336000908152600b602052604090205460ff1615610d63575060015b600181151514610d8e5760405162461bcd60e51b8152600401610d859061379a565b60405180910390fd5b506001600160a01b03166000908152600b60205260409020805460ff19169055565b600033610dc56000546001600160a01b031690565b6001600160a01b031603610dd7575060015b600354336001600160a01b0390911603610def575060015b336000908152600b602052604090205460ff1615610e0b575060015b600181151514610e2d5760405162461bcd60e51b8152600401610d859061379a565b82846001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56884604051610e6991815260200190565b60405180910390a350505050565b600033610e8c6000546001600160a01b031690565b6001600160a01b031603610e9e575060015b600354336001600160a01b0390911603610eb6575060015b336000908152600b602052604090205460ff1615610ed2575060015b600181151514610ef45760405162461bcd60e51b8152600401610d859061379a565b60088054600181018255600082905283518492919091027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301908190610f3a9082613815565b5060208281015160018301805460408601511515600160a01b026001600160a81b03199091166001600160a01b0390931692909217919091179055606083015160028301556080830151600383015560a0830151600483015560c08301518051610faa9260058501920190612a42565b5060e08201518051610fc6916006840191602090910190612aa7565b506101008201518051610fe3916007840191602090910190612af9565b5050505050565b61101c6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b5060009182526009602090815260408084206001600160a01b0393909316845291815291819020815160a081018352815481526001820154938101939093526002810154918301919091526003810154606083015260040154608082015290565b6000336110926000546001600160a01b031690565b6001600160a01b0316036110a4575060015b600354336001600160a01b03909116036110bc575060015b336000908152600b602052604090205460ff16156110d8575060015b6001811515146110fa5760405162461bcd60e51b8152600401610d859061379a565b600354604051634142d26760e01b81526001600160a01b0390911690634142d267906111309088908890889088906004016138d4565b600060405180830381600087803b15801561114a57600080fd5b505af115801561115e573d6000803e3d6000fd5b505050505050505050565b600354604051630ad58d2f60e01b815260048101849052602481018390523360448201526001600160a01b0390911690630ad58d2f906064015b600060405180830381600087803b1580156111bd57600080fd5b505af11580156111d1573d6000803e3d6000fd5b505050505050565b6000336111ee6000546001600160a01b031690565b6001600160a01b031603611200575060015b600354336001600160a01b0390911603611218575060015b336000908152600b602052604090205460ff1615611234575060015b6001811515146112565760405162461bcd60e51b8152600401610d859061379a565b6003546040516346430af160e01b815260048101859052602481018490526001600160a01b03909116906346430af1906044015b600060405180830381600087803b1580156112a457600080fd5b505af11580156112b8573d6000803e3d6000fd5b50505050505050565b6000336112d66000546001600160a01b031690565b6001600160a01b0316036112e8575060015b600354336001600160a01b0390911603611300575060015b336000908152600b602052604090205460ff161561131c575060015b60018115151461133e5760405162461bcd60e51b8152600401610d859061379a565b816008848154811061135257611352613731565b6000918252602090912082516008909202019081906113719082613815565b5060208281015160018301805460408601511515600160a01b026001600160a81b03199091166001600160a01b0390931692909217919091179055606083015160028301556080830151600383015560a0830151600483015560c083015180516113e19260058501920190612a42565b5060e082015180516113fd916006840191602090910190612aa7565b5061010082015180516111d1916007840191602090910190612af9565b60003361142f6000546001600160a01b031690565b6001600160a01b031603611441575060015b600354336001600160a01b0390911603611459575060015b336000908152600b602052604090205460ff1615611475575060015b6001811515146114975760405162461bcd60e51b8152600401610d859061379a565b6003546040516328f582d360e11b8152600481018490526001600160a01b03909116906351eb05a6906024016111a3565b600354604051632948743760e11b8152600481018490526001600160a01b0383811660248301526000921690635290e86e906044015b602060405180830381865afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190613747565b9392505050565b6003546040516302f940c760e41b8152600481018390523360248201526001600160a01b0390911690632f940c7090604401600060405180830381600087803b15801561159257600080fd5b505af1158015610fe3573d6000803e3d6000fd5b6000336115bb6000546001600160a01b031690565b6001600160a01b0316036115cd575060015b600354336001600160a01b03909116036115e5575060015b336000908152600b602052604090205460ff1615611601575060015b6001811515146116235760405162461bcd60e51b8152600401610d859061379a565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b60003361165b6000546001600160a01b031690565b6001600160a01b03160361166d575060015b600354336001600160a01b0390911603611685575060015b336000908152600b602052604090205460ff16156116a1575060015b6001811515146116c35760405162461bcd60e51b8152600401610d859061379a565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b60606008805480602002602001604051908101604052809291908181526020016000905b828210156119ad57838290600052602060002090600802016040518061012001604052908160008201805461173e90613760565b80601f016020809104026020016040519081016040528092919081815260200182805461176a90613760565b80156117b75780601f1061178c576101008083540402835291602001916117b7565b820191906000526020600020905b81548152906001019060200180831161179a57829003601f168201915b505050918352505060018201546001600160a01b038116602080840191909152600160a01b90910460ff1615156040808401919091526002840154606084015260038401546080840152600484015460a084015260058401805482518185028101850190935280835260c090940193919290919083018282801561186457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611846575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020016000905b8282101561193e5783829060005260206000200180546118b190613760565b80601f01602080910402602001604051908101604052809291908181526020018280546118dd90613760565b801561192a5780601f106118ff5761010080835404028352916020019161192a565b820191906000526020600020905b81548152906001019060200180831161190d57829003601f168201915b505050505081526020019060010190611892565b5050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561199557602002820191906000526020600020905b815481526020019060010190808311611981575b5050505050815250508152602001906001019061170a565b50505050905090565b6000336119cb6000546001600160a01b031690565b6001600160a01b0316036119dd575060015b600354336001600160a01b03909116036119f5575060015b336000908152600b602052604090205460ff1615611a11575060015b600181151514611a335760405162461bcd60e51b8152600401610d859061379a565b82846001600160a01b03167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae059584604051610e6991815260200190565b6000806001600160a01b038316611a8e6000546001600160a01b031690565b6001600160a01b031603611aa0575060015b6003546001600160a01b03808516911603611ab9575060015b6001600160a01b0383166000908152600b602052604090205460ff1615611ade575060015b6001600160a01b0383163003610a045750600192915050565b600033611b0c6000546001600160a01b031690565b6001600160a01b031603611b1e575060015b600354336001600160a01b0390911603611b36575060015b336000908152600b602052604090205460ff1615611b52575060015b600181151514611b745760405162461bcd60e51b8152600401610d859061379a565b50600555565b600354604051633134c11360e11b8152600481018590523360248201526001600160a01b038481166044830152606482018490529091169063626982269060840161128a565b600033611bd56000546001600160a01b031690565b6001600160a01b031603611be7575060015b600354336001600160a01b0390911603611bff575060015b336000908152600b602052604090205460ff1615611c1b575060015b600181151514611c3d5760405162461bcd60e51b8152600401610d859061379a565b506001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611cbc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d85565b611cc660006129f2565b565b604051635c46a7ef60e11b81523060048201526001600160a01b03848116602483015260448201849052608060648301526000608483015282169063b88d4fde9060a40161128a565b60035460405163882af3ef60e01b8152600481018590523360248201526001600160a01b038481166044830152606482018490529091169063882af3ef9060840161128a565b600354604051638f66938960e01b8152600481018690526001600160a01b03858116602483015260448201859052838116606483015290911690638f6693899034906084016000604051808303818588803b15801561114a57600080fd5b600033611dca6000546001600160a01b031690565b6001600160a01b031603611ddc575060015b600354336001600160a01b0390911603611df4575060015b336000908152600b602052604090205460ff1615611e10575060015b600181151514611e325760405162461bcd60e51b8152600401610d859061379a565b6003546040516314a48a9b60e31b81526001600160a01b039091169063a52454d89061113090889088908890889060040161390e565b600033611e7d6000546001600160a01b031690565b6001600160a01b031603611e8f575060015b600354336001600160a01b0390911603611ea7575060015b336000908152600b602052604090205460ff1615611ec3575060015b600181151514611ee55760405162461bcd60e51b8152600401610d859061379a565b5060009283526009602090815260408085206001600160a01b03909416855292815292829020815181559281015160018401559081015160028301556060810151600383015560800151600490910155565b600033611f4c6000546001600160a01b031690565b6001600160a01b031603611f5e575060015b600354336001600160a01b0390911603611f76575060015b336000908152600b602052604090205460ff1615611f92575060015b600181151514611fb45760405162461bcd60e51b8152600401610d859061379a565b50600755565b600033611fcf6000546001600160a01b031690565b6001600160a01b031603611fe1575060015b600354336001600160a01b0390911603611ff9575060015b336000908152600b602052604090205460ff1615612015575060015b6001811515146120375760405162461bcd60e51b8152600401610d859061379a565b82846001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1584604051610e6991815260200190565b6000336120886000546001600160a01b031690565b6001600160a01b03160361209a575060015b600354336001600160a01b03909116036120b2575060015b336000908152600b602052604090205460ff16156120ce575060015b6001811515146120f05760405162461bcd60e51b8152600401610d859061379a565b6000805b6000868152600a602090815260408083206001600160a01b03891684529091529020548110156121e95783516000878152600a602090815260408083206001600160a01b038a81168552925290912080549190921691908390811061215b5761215b613731565b60009182526020909120600290910201546001600160a01b03161480156121ca57506020808501516000888152600a835260408082206001600160a01b038a168352909352919091208054839081106121b6576121b6613731565b906000526020600020906002020160010154145b156121d7578091506121e9565b806121e18161395f565b9150506120f4565b506000858152600a602090815260408083206001600160a01b0388168452909152902080548290811061221e5761221e613731565b60009182526020822060029091020180546001600160a01b031916815560010155805b6000868152600a602090815260408083206001600160a01b038916845290915290205461227090600190613978565b811015612341576000868152600a602090815260408083206001600160a01b038916845290915290206122a482600161398b565b815481106122b4576122b4613731565b60009182526020808320898452600a825260408085206001600160a01b038b1686529092529220805460029092029092019190839081106122f7576122f7613731565b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b03909216919091178155600191820154910155806123398161395f565b915050612241565b506000858152600a602090815260408083206001600160a01b038816845290915290208054806123735761237361399e565b60008281526020812060026000199093019283020180546001600160a01b03191681556001015590555050505050565b6000336123b86000546001600160a01b031690565b6001600160a01b0316036123ca575060015b600354336001600160a01b03909116036123e2575060015b336000908152600b602052604090205460ff16156123fe575060015b6001811515146124205760405162461bcd60e51b8152600401610d859061379a565b6000848152600a602090815260408083206001600160a01b0387168452909152812061244b91612b34565b60005b8251811015610fe3576000858152600a602090815260408083206001600160a01b03881684529091529020835184908390811061248d5761248d613731565b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b03909216919091178155910151910155806124e08161395f565b91505061244e565b6000336124fd6000546001600160a01b031690565b6001600160a01b03160361250f575060015b600354336001600160a01b0390911603612527575060015b336000908152600b602052604090205460ff1615612543575060015b6001811515146125655760405162461bcd60e51b8152600401610d859061379a565b50600455565b6000336125806000546001600160a01b031690565b6001600160a01b031603612592575060015b600354336001600160a01b03909116036125aa575060015b336000908152600b602052604090205460ff16156125c6575060015b6001811515146125e85760405162461bcd60e51b8152600401610d859061379a565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905283169063a9059cbb906044016020604051808303816000875af1158015612637573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe391906139b4565b6003546040516334637d4f60e21b8152600481018490526001600160a01b038381166024830152600092169063d18df53c906044016114fe565b6000336126aa6000546001600160a01b031690565b6001600160a01b0316036126bc575060015b600354336001600160a01b03909116036126d4575060015b336000908152600b602052604090205460ff16156126f0575060015b6001811515146127125760405162461bcd60e51b8152600401610d859061379a565b506000928352600a602090815260408085206001600160a01b0394851686528252842080546001808201835591865294829020835160029096020180546001600160a01b031916959094169490941783550151910155565b60003361277f6000546001600160a01b031690565b6001600160a01b031603612791575060015b600354336001600160a01b03909116036127a9575060015b336000908152600b602052604090205460ff16156127c5575060015b6001811515146127e75760405162461bcd60e51b8152600401610d859061379a565b600354604051636b96e8b960e11b81526001600160a01b039091169063d72dd1729061113090889088908890889060040161390e565b60035460405163d846612160e01b8152600481018490526001600160a01b0383811660248301529091169063d8466121906044016111a3565b600354604051638dbdbe6d60e01b815260048101849052602481018390523360448201526001600160a01b0390911690638dbdbe6d906064016111a3565b6000828152600a602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b8282101561291b576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016128d3565b50505050905092915050565b6000546001600160a01b031633146129815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d85565b6001600160a01b0381166129e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d85565b6129ef816129f2565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215612a97579160200282015b82811115612a9757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612a62565b50612aa3929150612b55565b5090565b828054828255906000526020600020908101928215612aed579160200282015b82811115612aed5782518290612add9082613815565b5091602001919060010190612ac7565b50612aa3929150612b6a565b828054828255906000526020600020908101928215612a97579160200282015b82811115612a97578251825591602001919060010190612b19565b50805460008255600202906000526020600020908101906129ef9190612b87565b5b80821115612aa35760008155600101612b56565b80821115612aa3576000612b7e8282612bad565b50600101612b6a565b5b80821115612aa35780546001600160a01b031916815560006001820155600201612b88565b508054612bb990613760565b6000825580601f10612bc9575050565b601f0160209004906000526020600020908101906129ef9190612b55565b600060208284031215612bf957600080fd5b5035919050565b6000815180845260005b81811015612c2657602081850181015186830182015201612c0a565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015612c7f5781516001600160a01b031687529582019590820190600101612c5a565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015612cd2578284038952612cc0848351612c00565b98850198935090840190600101612ca8565b5091979650505050505050565b600081518084526020808501945080840160005b83811015612c7f57815187529582019590820190600101612cf3565b60006101208251818552612d2582860182612c00565b9150506020830151612d4260208601826001600160a01b03169052565b506040830151612d56604086018215159052565b50606083015160608501526080830151608085015260a083015160a085015260c083015184820360c0860152612d8c8282612c46565b91505060e083015184820360e0860152612da68282612c8a565b9150506101008084015185830382870152612dc18382612cdf565b9695505050505050565b60208152600061153f6020830184612d0f565b6001600160a01b03811681146129ef57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612e2c57612e2c612df3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612e5a57612e5a612df3565b604052919050565b60006001600160401b03831115612e7b57612e7b612df3565b612e8e601f8401601f1916602001612e32565b9050828152838383011115612ea257600080fd5b828260208301376000602084830101529392505050565b60008060008060808587031215612ecf57600080fd5b8435612eda81612dde565b93506020850135612eea81612dde565b92506040850135915060608501356001600160401b03811115612f0c57600080fd5b8501601f81018713612f1d57600080fd5b612f2c87823560208401612e62565b91505092959194509250565b600060208284031215612f4a57600080fd5b813561153f81612dde565b600080600060608486031215612f6a57600080fd5b8335612f7581612dde565b95602085013595506040909401359392505050565b600082601f830112612f9b57600080fd5b61153f83833560208501612e62565b8035612fb581612dde565b919050565b80151581146129ef57600080fd5b8035612fb581612fba565b60006001600160401b03821115612fec57612fec612df3565b5060051b60200190565b600082601f83011261300757600080fd5b8135602061301c61301783612fd3565b612e32565b82815260059290921b8401810191818101908684111561303b57600080fd5b8286015b8481101561305f57803561305281612dde565b835291830191830161303f565b509695505050505050565b600082601f83011261307b57600080fd5b8135602061308b61301783612fd3565b82815260059290921b840181019181810190868411156130aa57600080fd5b8286015b8481101561305f5780356001600160401b038111156130cd5760008081fd5b6130db8986838b0101612f8a565b8452509183019183016130ae565b600082601f8301126130fa57600080fd5b8135602061310a61301783612fd3565b82815260059290921b8401810191818101908684111561312957600080fd5b8286015b8481101561305f578035835291830191830161312d565b6000610120828403121561315757600080fd5b61315f612e09565b905081356001600160401b038082111561317857600080fd5b61318485838601612f8a565b835261319260208501612faa565b60208401526131a360408501612fc8565b6040840152606084013560608401526080840135608084015260a084013560a084015260c08401359150808211156131da57600080fd5b6131e685838601612ff6565b60c084015260e08401359150808211156131ff57600080fd5b61320b8583860161306a565b60e08401526101009150818401358181111561322657600080fd5b613232868287016130e9565b8385015250505092915050565b60006020828403121561325157600080fd5b81356001600160401b0381111561326757600080fd5b61327384828501613144565b949350505050565b6000806040838503121561328e57600080fd5b8235915060208301356132a081612dde565b809150509250929050565b600080600080608085870312156132c157600080fd5b84356001600160401b038111156132d757600080fd5b6132e387828801612f8a565b9450506020850135925060408501356132fb81612dde565b9150606085013561330b81612fba565b939692955090935050565b6000806040838503121561332957600080fd5b50508035926020909101359150565b6000806040838503121561334b57600080fd5b8235915060208301356001600160401b0381111561336857600080fd5b61337485828601613144565b9150509250929050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156133d357603f198886030184526133c1858351612d0f565b945092850192908501906001016133a5565b5092979650505050505050565b6000806000606084860312156133f557600080fd5b83359250602084013561340781612dde565b929592945050506040919091013590565b60008060006060848603121561342d57600080fd5b833561343881612dde565b925060208401359150604084013561344f81612dde565b809150509250925092565b6000806000806080858703121561347057600080fd5b84359350602085013561348281612dde565b925060408501359150606085013561330b81612dde565b600080600080608085870312156134af57600080fd5b8435935060208501356134c181612dde565b925060408501356001600160401b038111156134dc57600080fd5b6134e887828801612f8a565b949793965093946060013593505050565b600080600083850360e081121561350f57600080fd5b84359350602085013561352181612dde565b925060a0603f198201121561353557600080fd5b5060405160a081018181106001600160401b038211171561355857613558612df3565b806040525060408501358152606085013560208201526080850135604082015260a0850135606082015260c08501356080820152809150509250925092565b6000604082840312156135a957600080fd5b604051604081018181106001600160401b03821117156135cb576135cb612df3565b60405290508082356135dc81612dde565b8152602092830135920191909152919050565b60008060006080848603121561360457600080fd5b83359250602084013561361681612dde565b91506136258560408601613597565b90509250925092565b60008060006060848603121561364357600080fd5b8335925060208085013561365681612dde565b92506040858101356001600160401b0381111561367257600080fd5b8601601f8101881361368357600080fd5b803561369161301782612fd3565b81815260069190911b8201840190848101908a8311156136b057600080fd5b928501925b828410156136d6576136c78b85613597565b825292840192908501906136b5565b8096505050505050509250925092565b602080825282518282018190526000919060409081850190868401855b82811015612cd257815180516001600160a01b03168552860151868501529284019290850190600101613703565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561375957600080fd5b5051919050565b600181811c9082168061377457607f821691505b60208210810361379457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526016908201527531b0b63632b91034b9903737ba1030b71030b236b4b760511b604082015260600190565b601f82111561381057600081815260208120601f850160051c810160208610156137f15750805b601f850160051c820191505b818110156111d1578281556001016137fd565b505050565b81516001600160401b0381111561382e5761382e612df3565b6138428161383c8454613760565b846137ca565b602080601f831160018114613877576000841561385f5750858301515b600019600386901b1c1916600185901b1785556111d1565b600085815260208120601f198616915b828110156138a657888601518255948401946001909101908401613887565b50858210156138c45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080815260006138e76080830187612c00565b6020830195909552506001600160a01b039290921660408301521515606090910152919050565b8481526001600160a01b038416602082015260806040820181905260009061393890830185612c00565b905082606083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161397157613971613949565b5060010190565b81810381811115610a0457610a04613949565b80820180821115610a0457610a04613949565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156139c657600080fd5b815161153f81612fba56fea2646970667358221220a33b2cc144eeee5c1a1dfc16a5b44dbcfad0aae7d4d00ea722ade087f00cdab064736f6c63430008130033

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

0000000000000000000000000b257fe969d8782facb4ec790682c1d4d3df1551000000000000000000000000b6b72f2a5ff537c0f0b21580b2bd644325411094

-----Decoded View---------------
Arg [0] : _rewardToken (address): 0x0b257fe969d8782fAcb4ec790682C1d4d3dF1551
Arg [1] : _rewardWallet (address): 0xb6B72F2a5FF537C0F0B21580B2BD644325411094

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000b257fe969d8782facb4ec790682c1d4d3df1551
Arg [1] : 000000000000000000000000b6b72f2a5ff537c0f0b21580b2bd644325411094


Deployed Bytecode Sourcemap

20621:9296:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24036:129;;;;;;;;;;-1:-1:-1;24036:129:0;;;;;:::i;:::-;;:::i;:::-;;;345:25:1;;;333:2;318:18;24036:129:0;;;;;;;;23925:105;;;;;;;;;;-1:-1:-1;23925:105:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9348:207::-;;;;;;;;;;-1:-1:-1;9348:207:0;;;;;:::i;:::-;-1:-1:-1;;;9348:207:0;;;;;;;;;;-1:-1:-1;;;;;;6180:33:1;;;6162:52;;6150:2;6135:18;9348:207:0;6018:202:1;22678:95:0;;;;;;;;;;-1:-1:-1;22678:95:0;;;;;:::i;:::-;;:::i;:::-;;27217:143;;;;;;;;;;-1:-1:-1;27217:143:0;;;;;:::i;:::-;;:::i;26559:95::-;;;;;;;;;;-1:-1:-1;26559:95:0;;;;;:::i;:::-;;:::i;23527:133::-;;;;;;;;;;-1:-1:-1;23527:133:0;;;;;:::i;:::-;;:::i;:::-;;;;;;12175:4:1;12217:3;12206:9;12202:19;12194:27;;12254:6;12248:13;12237:9;12230:32;12318:4;12310:6;12306:17;12300:24;12293:4;12282:9;12278:20;12271:54;12381:4;12373:6;12369:17;12363:24;12356:4;12345:9;12341:20;12334:54;12444:4;12436:6;12432:17;12426:24;12419:4;12408:9;12404:20;12397:54;12507:4;12499:6;12495:17;12489:24;12482:4;12471:9;12467:20;12460:54;12031:489;;;;;23435:86:0;;;;;;;;;;-1:-1:-1;23505:8:0;;23435:86;;23127:100;;;;;;;;;;-1:-1:-1;23204:15:0;;23127:100;;23233:90;;;;;;;;;;-1:-1:-1;23305:10:0;;23233:90;;27583:187;;;;;;;;;;-1:-1:-1;27583:187:0;;;;;:::i;:::-;;:::i;28664:131::-;;;;;;;;;;-1:-1:-1;28664:131:0;;;;;:::i;:::-;;:::i;27776:133::-;;;;;;;;;;-1:-1:-1;27776:133:0;;;;;:::i;:::-;;:::i;26660:107::-;;;;;;;;;;-1:-1:-1;26660:107:0;;;;;:::i;:::-;;:::i;27915:105::-;;;;;;;;;;-1:-1:-1;27915:105:0;;;;;:::i;:::-;;:::i;29747:167::-;;;;;;;;;;-1:-1:-1;29747:167:0;;;;;:::i;:::-;;:::i;28801:123::-;;;;;;;;;;-1:-1:-1;28801:123:0;;;;;:::i;:::-;;:::i;24686:104::-;;;;;;;;;;-1:-1:-1;24686:104:0;;;;;:::i;:::-;;:::i;24796:108::-;;;;;;;;;;-1:-1:-1;24796:108:0;;;;;:::i;:::-;;:::i;23823:96::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27366:161::-;;;;;;;;;;-1:-1:-1;27366:161:0;;;;;:::i;:::-;;:::i;24270:360::-;;;;;;;;;;-1:-1:-1;24270:360:0;;;;;:::i;:::-;;:::i;:::-;;;14892:14:1;;14885:22;14867:41;;14855:2;14840:18;24270:360:0;14727:187:1;25024:98:0;;;;;;;;;;-1:-1:-1;25024:98:0;;;;;:::i;:::-;;:::i;22828:91::-;;;;;;;;;;-1:-1:-1;22900:11:0;;-1:-1:-1;;;;;22900:11:0;22828:91;;;-1:-1:-1;;;;;15097:32:1;;;15079:51;;15067:2;15052:18;22828:91:0;14919:217:1;28930:154:0;;;;;;;;;;-1:-1:-1;28930:154:0;;;;;:::i;:::-;;:::i;22581:91::-;;;;;;;;;;-1:-1:-1;22581:91:0;;;;;:::i;:::-;;:::i;772:103::-;;;;;;;;;;;;;:::i;26919:145::-;;;;;;;;;;-1:-1:-1;26919:145:0;;;;;:::i;:::-;;:::i;29090:158::-;;;;;;;;;;-1:-1:-1;29090:158:0;;;;;:::i;:::-;;:::i;23025:96::-;;;;;;;;;;-1:-1:-1;23100:13:0;;-1:-1:-1;;;;;23100:13:0;23025:96;;549:87;;;;;;;;;;-1:-1:-1;595:7:0;622:6;-1:-1:-1;;;;;622:6:0;549:87;;29381:191;;;;;;:::i;:::-;;:::i;28250:218::-;;;;;;;;;;-1:-1:-1;28250:218:0;;;;;:::i;:::-;;:::i;25228:134::-;;;;;;;;;;-1:-1:-1;25228:134:0;;;;;:::i;:::-;;:::i;25128:94::-;;;;;;;;;;-1:-1:-1;25128:94:0;;;;;:::i;:::-;;:::i;27070:141::-;;;;;;;;;;-1:-1:-1;27070:141:0;;;;;:::i;:::-;;:::i;25846:707::-;;;;;;;;;;-1:-1:-1;25846:707:0;;;;;:::i;:::-;;:::i;25545:295::-;;;;;;;;;;-1:-1:-1;25545:295:0;;;;;:::i;:::-;;:::i;24910:108::-;;;;;;;;;;-1:-1:-1;24910:108:0;;;;;:::i;:::-;;:::i;26773:140::-;;;;;;;;;;-1:-1:-1;26773:140:0;;;;;:::i;:::-;;:::i;29578:163::-;;;;;;;;;;-1:-1:-1;29578:163:0;;;;;:::i;:::-;;:::i;24171:93::-;;;;;;;;;;-1:-1:-1;24241:8:0;:15;24171:93;;25368:171;;;;;;;;;;-1:-1:-1;25368:171:0;;;;;:::i;:::-;;:::i;22925:94::-;;;;;;;;;;-1:-1:-1;22999:12:0;;-1:-1:-1;;;;;22999:12:0;22925:94;;28026:218;;;;;;;;;;-1:-1:-1;28026:218:0;;;;;:::i;:::-;;:::i;29254:121::-;;;;;;;;;;-1:-1:-1;29254:121:0;;;;;:::i;:::-;;:::i;23329:100::-;;;;;;;;;;-1:-1:-1;23406:15:0;;23329:100;;28529:129;;;;;;;;;;-1:-1:-1;28529:129:0;;;;;:::i;:::-;;:::i;23666:151::-;;;;;;;;;;-1:-1:-1;23666:151:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;883:201::-;;;;;;;;;;-1:-1:-1;883:201:0;;;;;:::i;:::-;;:::i;24036:129::-;24083:7;24110:8;24119:4;24110:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;;;:47;;-1:-1:-1;;;24110:47:0;;24151:4;24110:47;;;15079:51:1;-1:-1:-1;;;;;24110:22:0;;;;:32;;15052:18:1;;24110:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24103:54;24036:129;-1:-1:-1;;24036:129:0:o;23925:105::-;23973:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23973:15:0;24008:8;24017:4;24008:14;;;;;;;;:::i;:::-;;;;;;;;;;;24001:21;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24001:21:0;;;-1:-1:-1;;24001:21:0;;;;-1:-1:-1;;;;;24001:21:0;;;;;;;;;;-1:-1:-1;;;24001:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24001:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23925:105;;;:::o;22678:95::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;22742:15:0::1;22760:5;22742:15:::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;22742:23:0::1;::::0;;22678:95::o;27217:143::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;27338:4:::1;27328:8;-1:-1:-1::0;;;;;27319:33:0::1;;27344:7;27319:33;;;;345:25:1::0;;333:2;318:18;;199:177;27319:33:0::1;;;;;;;;22084:293:::0;27217:143;;;:::o;26559:95::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;26627:8:::1;:19:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;26627:19:0;;;;;26641:4;;26627:19;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;26627:19:0::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;;-1:-1:-1::0;;;26627:19:0::1;-1:-1:-1::0;;;;;;26627:19:0;;;-1:-1:-1;;;;;26627:19:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;26627:19:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;26627:19:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;22084:293:::0;26559:95;:::o;23527:133::-;23593:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23593:15:0;-1:-1:-1;23628:14:0;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;23628:24:0;;;;;;;;;;;;;23621:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23527:133::o;27583:187::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;27703:13:::1;::::0;27697:65:::1;::::0;-1:-1:-1;;;27697:65:0;;-1:-1:-1;;;;;27703:13:0;;::::1;::::0;27697:28:::1;::::0;:65:::1;::::0;27726:5;;27733:11;;27746:8;;27756:5;;27697:65:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22084:293:::0;27583:187;;;;:::o;28664:131::-;28737:13;;28731:56;;-1:-1:-1;;;28731:56:0;;;;;25815:25:1;;;25856:18;;;25849:34;;;28776:10:0;25899:18:1;;;25892:60;-1:-1:-1;;;;;28737:13:0;;;;28731:29;;25788:18:1;;28731:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28664:131;;:::o;27776:133::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;27860:13:::1;::::0;27854:47:::1;::::0;-1:-1:-1;;;27854:47:0;;::::1;::::0;::::1;26137:25:1::0;;;26178:18;;;26171:34;;;-1:-1:-1;;;;;27860:13:0;;::::1;::::0;27854:28:::1;::::0;26110:18:1;;27854:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22084:293:::0;27776:133;;:::o;26660:107::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;26754:5:::1;26737:8;26746:4;26737:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:22;;:14:::1;::::0;;::::1;;::::0;;;:22:::1;::::0;:14;:22:::1;:::i;:::-;-1:-1:-1::0;26737:22:0::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;;-1:-1:-1::0;;;26737:22:0::1;-1:-1:-1::0;;;;;;26737:22:0;;;-1:-1:-1;;;;;26737:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;26737:22:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;26737:22:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;27915:105::-:0;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;27981:13:::1;::::0;27975:37:::1;::::0;-1:-1:-1;;;27975:37:0;;::::1;::::0;::::1;345:25:1::0;;;-1:-1:-1;;;;;27981:13:0;;::::1;::::0;27975:31:::1;::::0;318:18:1;;27975:37:0::1;199:177:1::0;29747:167:0;29859:13;;29853:53;;-1:-1:-1;;;29853:53:0;;;;;26390:25:1;;;-1:-1:-1;;;;;26451:32:1;;;26431:18;;;26424:60;29826:7:0;;29859:13;;29853:37;;26363:18:1;;29853:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29846:60;29747:167;-1:-1:-1;;;29747:167:0:o;28801:123::-;28866:13;;28860:56;;-1:-1:-1;;;28860:56:0;;;;;26390:25:1;;;28905:10:0;26431:18:1;;;26424:60;-1:-1:-1;;;;;28866:13:0;;;;28860:38;;26363:18:1;;28860:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24686:104;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;-1:-1:-1;24757:12:0::1;:25:::0;;-1:-1:-1;;;;;;24757:25:0::1;-1:-1:-1::0;;;;;24757:25:0;;;::::1;::::0;;;::::1;::::0;;24686:104::o;24796:108::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;-1:-1:-1;24869:13:0::1;:27:::0;;-1:-1:-1;;;;;;24869:27:0::1;-1:-1:-1::0;;;;;24869:27:0;;;::::1;::::0;;;::::1;::::0;;24796:108::o;23823:96::-;23866:17;23903:8;23896:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23896:15:0;;;-1:-1:-1;;23896:15:0;;;;-1:-1:-1;;;;;23896:15:0;;;;;;;;;;-1:-1:-1;;;23896:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23896:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23823:96;:::o;27366:161::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;27505:4:::1;27495:8;-1:-1:-1::0;;;;;27477:42:0::1;;27511:7;27477:42;;;;345:25:1::0;;333:2;318:18;;199:177;24270:360:0;24323:4;;-1:-1:-1;;;;;24377:19:0;;:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;24377:7;-1:-1:-1;;;;;24377:19:0;;24373:46;;-1:-1:-1;24412:4:0;24373:46;24433:13;;-1:-1:-1;;;;;24433:25:0;;;:13;;:25;24429:52;;-1:-1:-1;24474:4:0;24429:52;-1:-1:-1;;;;;24495:16:0;;;;;;:6;:16;;;;;;;;24491:43;;;-1:-1:-1;24527:4:0;24491:43;-1:-1:-1;;;;;24548:25:0;;24556:4;24548:25;24544:52;;-1:-1:-1;24589:4:0;24613:9;24270:360;-1:-1:-1;;24270:360:0:o;25024:98::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;-1:-1:-1;25092:10:0::1;:22:::0;25024:98::o;28930:154::-;29018:13;;29012:64;;-1:-1:-1;;;29012:64:0;;;;;26741:25:1;;;29045:10:0;26820:18:1;;;26813:43;-1:-1:-1;;;;;26892:15:1;;;26872:18;;;26865:43;26924:18;;;26917:34;;;29018:13:0;;;;29012:26;;26713:19:1;;29012:64:0;26495:462:1;22581:91:0;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;22642:15:0::1;;::::0;;;:6:::1;:15;::::0;;;;:22;;-1:-1:-1;;22642:22:0::1;22660:4;22642:22;::::0;;22581:91::o;772:103::-;595:7;622:6;-1:-1:-1;;;;;622:6:0;179:10;684:23;676:68;;;;-1:-1:-1;;;676:68:0;;27164:2:1;676:68:0;;;27146:21:1;;;27183:18;;;27176:30;27242:34;27222:18;;;27215:62;27294:18;;676:68:0;26962:356:1;676:68:0;837:30:::1;864:1;837:18;:30::i;:::-;772:103::o:0;26919:145::-;27001:55;;-1:-1:-1;;;27001:55:0;;27031:4;27001:55;;;27628:34:1;-1:-1:-1;;;;;27698:15:1;;;27678:18;;;27671:43;27730:18;;;27723:34;;;27793:3;27773:18;;;27766:31;-1:-1:-1;27813:19:1;;;27806:30;27001:21:0;;;;;27853:19:1;;27001:55:0;27323:555:1;29090:158:0;29180:13;;29174:66;;-1:-1:-1;;;29174:66:0;;;;;26741:25:1;;;29209:10:0;26820:18:1;;;26813:43;-1:-1:-1;;;;;26892:15:1;;;26872:18;;;26865:43;26924:18;;;26917:34;;;29180:13:0;;;;29174:28;;26713:19:1;;29174:66:0;26495:462:1;29381:191:0;29493:13;;29487:77;;-1:-1:-1;;;29487:77:0;;;;;28114:25:1;;;-1:-1:-1;;;;;28213:15:1;;;28193:18;;;28186:43;28245:18;;;28238:34;;;28308:15;;;28288:18;;;28281:43;29493:13:0;;;;29487:26;;29521:9;;28086:19:1;;29487:77:0;;;;;;;;;;;;;;;;;;;28250:218;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;28387:13:::1;::::0;28381:79:::1;::::0;-1:-1:-1;;;28381:79:0;;-1:-1:-1;;;;;28387:13:0;;::::1;::::0;28381:31:::1;::::0;:79:::1;::::0;28413:4;;28419:8;;28429:16;;28447:12;;28381:79:::1;;;:::i;25228:134::-:0;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;-1:-1:-1;25322:14:0::1;::::0;;;:8:::1;:14;::::0;;;;;;;-1:-1:-1;;;;;25322:24:0;;::::1;::::0;;;;;;;;;:32;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;::::1;::::0;25228:134::o;25128:94::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;-1:-1:-1;25194:8:0::1;:20:::0;25128:94::o;27070:141::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;27189:4:::1;27179:8;-1:-1:-1::0;;;;;27171:32:0::1;;27195:7;27171:32;;;;345:25:1::0;;333:2;318:18;;199:177;25846:707:0;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;25964:7:::1;25990:6:::0;25986:291:::1;26006:18;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;26006:28:0;::::1;::::0;;;;;;;:35;26002:39;::::1;25986:291;;;26110:21:::0;;::::1;26067:18:::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;26067:28:0;;::::1;::::0;;;;;;;:31;;:64;;;::::1;::::0;:28;26096:1;;26067:31;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:39:::0;-1:-1:-1;;;;;26067:39:0::1;:64;:132:::0;::::1;;;-1:-1:-1::0;26178:21:0::1;::::0;;::::1;::::0;26135:18:::1;::::0;;;:12:::1;:18:::0;;;;;;-1:-1:-1;;;;;26135:28:0;::::1;::::0;;;;;;;;;:31;;26164:1;;26135:31;::::1;;;;;:::i;:::-;;;;;;;;;;;:39;;;:64;26067:132;26063:203;;;26225:1;26220:6;;26245:5;;26063:203;26043:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25986:291;;;-1:-1:-1::0;26294:18:0::1;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;26294:28:0;::::1;::::0;;;;;;;:32;;26323:2;;26294:32;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;26287:39:::0;;-1:-1:-1;;;;;;26287:39:0::1;::::0;;;::::1;::::0;26350:2;26337:164:::1;26358:18;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;26358:28:0;::::1;::::0;;;;;;;:35;:37:::1;::::0;26394:1:::1;::::0;26358:37:::1;:::i;:::-;26354:1;:41;26337:164;;;26450:18;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;26450:28:0;::::1;::::0;;;;;;;26479:3:::1;:1:::0;26481::::1;26479:3;:::i;:::-;26450:33;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;26416:18;;;:12:::1;:18:::0;;;;;;-1:-1:-1;;;;;26416:28:0;::::1;::::0;;;;;;;:31;;26450:33:::1;::::0;;::::1;::::0;;::::1;::::0;26416:28;26445:1;;26416:31;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:67;;:31:::1;::::0;;::::1;;:67:::0;;-1:-1:-1;;;;;;26416:67:0::1;-1:-1:-1::0;;;;;26416:67:0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;26397:3;::::1;::::0;::::1;:::i;:::-;;;;26337:164;;;-1:-1:-1::0;26511:18:0::1;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;26511:28:0;::::1;::::0;;;;;;;:34;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;26511:34:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;26511:34:0::1;::::0;;::::1;;::::0;;;-1:-1:-1;;;;;25846:707:0:o;25545:295::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;25669:18:::1;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;25669:28:0;::::1;::::0;;;;;;;25662:35:::1;::::0;::::1;:::i;:::-;25712:6;25708:125;25728:13;:20;25724:1;:24;25708:125;;;25770:18;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;25770:28:0;::::1;::::0;;;;;;;25804:16;;:13;;25818:1;;25804:16;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;25770:51;;::::1;::::0;;::::1;::::0;;-1:-1:-1;25770:51:0;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;25770:51:0::1;-1:-1:-1::0;;;;;25770:51:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;25750:3;::::1;::::0;::::1;:::i;:::-;;;;25708:125;;24910:108:::0;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;-1:-1:-1;24983:15:0::1;:27:::0;24910:108::o;26773:140::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;26871:34:::1;::::0;-1:-1:-1;;;26871:34:0;;-1:-1:-1;;;;;29675:32:1;;;26871:34:0::1;::::0;::::1;29657:51:1::0;29724:18;;;29717:34;;;26871:15:0;::::1;::::0;::::1;::::0;29630:18:1;;26871:34:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29578:163::-:0;29688:13;;29682:51;;-1:-1:-1;;;29682:51:0;;;;;26390:25:1;;;-1:-1:-1;;;;;26451:32:1;;;26431:18;;;26424:60;29655:7:0;;29688:13;;29682:35;;26363:18:1;;29682:51:0;26216:274:1;25368:171:0;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;-1:-1:-1;25483:18:0::1;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;25483:28:0;;::::1;::::0;;;;;;:48;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;25483:48:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;25368:171::o;28026:218::-;22095:14;22143:10;22132:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22132:7;-1:-1:-1;;;;;22132:21:0;;22128:48;;-1:-1:-1;22169:4:0;22128:48;22190:13;;22207:10;-1:-1:-1;;;;;22190:13:0;;;:27;22186:54;;-1:-1:-1;22233:4:0;22186:54;22261:10;22254:18;;;;:6;:18;;;;;;;;22250:45;;;-1:-1:-1;22288:4:0;22250:45;22326:4;22313:17;;;;22305:52;;;;-1:-1:-1;;;22305:52:0;;;;;;;:::i;:::-;28163:13:::1;::::0;28157:79:::1;::::0;-1:-1:-1;;;28157:79:0;;-1:-1:-1;;;;;28163:13:0;;::::1;::::0;28157:31:::1;::::0;:79:::1;::::0;28189:4;;28195:8;;28205:16;;28223:12;;28157:79:::1;;;:::i;29254:121::-:0;29328:13;;29322:45;;-1:-1:-1;;;29322:45:0;;;;;26390:25:1;;;-1:-1:-1;;;;;26451:32:1;;;26431:18;;;26424:60;29328:13:0;;;;29322:29;;26363:18:1;;29322:45:0;26216:274:1;28529:129:0;28601:13;;28595:55;;-1:-1:-1;;;28595:55:0;;;;;25815:25:1;;;25856:18;;;25849:34;;;28639:10:0;25899:18:1;;;25892:60;-1:-1:-1;;;;;28601:13:0;;;;28595:28;;25788:18:1;;28595:55:0;25613:345:1;23666:151:0;23781:18;;;;:12;:18;;;;;;;;-1:-1:-1;;;;;23781:28:0;;;;;;;;;23774:35;;;;;;;;;;;;;;;;;23740:21;;23774:35;;23781:28;;23774:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23774:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23666:151;;;;:::o;883:201::-;595:7;622:6;-1:-1:-1;;;;;622:6:0;179:10;684:23;676:68;;;;-1:-1:-1;;;676:68:0;;27164:2:1;676:68:0;;;27146:21:1;;;27183:18;;;27176:30;27242:34;27222:18;;;27215:62;27294:18;;676:68:0;26962:356:1;676:68:0;-1:-1:-1;;;;;972:22:0;::::1;964:73;;;::::0;-1:-1:-1;;;964:73:0;;30214:2:1;964:73:0::1;::::0;::::1;30196:21:1::0;30253:2;30233:18;;;30226:30;30292:34;30272:18;;;30265:62;-1:-1:-1;;;30343:18:1;;;30336:36;30389:19;;964:73:0::1;30012:402:1::0;964:73:0::1;1048:28;1067:8;1048:18;:28::i;:::-;883:201:::0;:::o;1092:191::-;1166:16;1185:6;;-1:-1:-1;;;;;1202:17:0;;;-1:-1:-1;;;;;;1202:17:0;;;;;;1235:40;;1185:6;;;;;;;1235:40;;1166:16;1235:40;1155:128;1092:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:423::-;423:3;461:5;455:12;488:6;483:3;476:19;513:1;523:162;537:6;534:1;531:13;523:162;;;599:4;655:13;;;651:22;;645:29;627:11;;;623:20;;616:59;552:12;523:162;;;527:3;730:1;723:4;714:6;709:3;705:16;701:27;694:38;793:4;786:2;782:7;777:2;769:6;765:15;761:29;756:3;752:39;748:50;741:57;;;381:423;;;;:::o;1022:469::-;1083:3;1121:5;1115:12;1148:6;1143:3;1136:19;1174:4;1203:2;1198:3;1194:12;1187:19;;1240:2;1233:5;1229:14;1261:1;1271:195;1285:6;1282:1;1279:13;1271:195;;;1350:13;;-1:-1:-1;;;;;1346:39:1;1334:52;;1406:12;;;;1441:15;;;;1382:1;1300:9;1271:195;;;-1:-1:-1;1482:3:1;;1022:469;-1:-1:-1;;;;;1022:469:1:o;1496:616::-;1548:3;1586:5;1580:12;1613:6;1608:3;1601:19;1639:4;1680:2;1675:3;1671:12;1705:11;1732;1725:18;;1782:6;1779:1;1775:14;1768:5;1764:26;1752:38;;1824:2;1817:5;1813:14;1845:1;1855:231;1869:6;1866:1;1863:13;1855:231;;;1940:5;1934:4;1930:16;1925:3;1918:29;1968:38;2001:4;1992:6;1986:13;1968:38;:::i;:::-;2064:12;;;;1960:46;-1:-1:-1;2029:15:1;;;;1891:1;1884:9;1855:231;;;-1:-1:-1;2102:4:1;;1496:616;-1:-1:-1;;;;;;;1496:616:1:o;2117:435::-;2170:3;2208:5;2202:12;2235:6;2230:3;2223:19;2261:4;2290:2;2285:3;2281:12;2274:19;;2327:2;2320:5;2316:14;2348:1;2358:169;2372:6;2369:1;2366:13;2358:169;;;2433:13;;2421:26;;2467:12;;;;2502:15;;;;2394:1;2387:9;2358:169;;2557:1172;2608:3;2636:6;2677:5;2671:12;2704:2;2699:3;2692:15;2728:45;2769:2;2764:3;2760:12;2746;2728:45;:::i;:::-;2716:57;;;2821:4;2814:5;2810:16;2804:23;2836:58;2888:4;2883:3;2879:14;2863;-1:-1:-1;;;;;883:31:1;871:44;;809:112;2836:58;;2942:4;2935:5;2931:16;2925:23;2957:47;2998:4;2993:3;2989:14;2973;996:13;989:21;977:34;;926:91;2957:47;;3053:4;3046:5;3042:16;3036:23;3029:4;3024:3;3020:14;3013:47;3109:4;3102:5;3098:16;3092:23;3085:4;3080:3;3076:14;3069:47;3165:4;3158:5;3154:16;3148:23;3141:4;3136:3;3132:14;3125:47;3220:4;3213:5;3209:16;3203:23;3268:3;3262:4;3258:14;3251:4;3246:3;3242:14;3235:38;3296:58;3349:4;3333:14;3296:58;:::i;:::-;3282:72;;;3402:4;3395:5;3391:16;3385:23;3452:3;3444:6;3440:16;3433:4;3428:3;3424:14;3417:40;3480:51;3524:6;3508:14;3480:51;:::i;:::-;3466:65;;;3550:6;3604:2;3597:5;3593:14;3587:21;3650:3;3642:6;3638:16;3633:2;3628:3;3624:12;3617:38;3671:52;3716:6;3700:14;3671:52;:::i;:::-;3664:59;2557:1172;-1:-1:-1;;;;;;2557:1172:1:o;3734:261::-;3915:2;3904:9;3897:21;3878:4;3935:54;3985:2;3974:9;3970:18;3962:6;3935:54;:::i;4000:131::-;-1:-1:-1;;;;;4075:31:1;;4065:42;;4055:70;;4121:1;4118;4111:12;4136:127;4197:10;4192:3;4188:20;4185:1;4178:31;4228:4;4225:1;4218:15;4252:4;4249:1;4242:15;4268:255;4340:2;4334:9;4382:6;4370:19;;-1:-1:-1;;;;;4404:34:1;;4440:22;;;4401:62;4398:88;;;4466:18;;:::i;:::-;4502:2;4495:22;4268:255;:::o;4528:275::-;4599:2;4593:9;4664:2;4645:13;;-1:-1:-1;;4641:27:1;4629:40;;-1:-1:-1;;;;;4684:34:1;;4720:22;;;4681:62;4678:88;;;4746:18;;:::i;:::-;4782:2;4775:22;4528:275;;-1:-1:-1;4528:275:1:o;4808:406::-;4872:5;-1:-1:-1;;;;;4898:6:1;4895:30;4892:56;;;4928:18;;:::i;:::-;4966:57;5011:2;4990:15;;-1:-1:-1;;4986:29:1;5017:4;4982:40;4966:57;:::i;:::-;4957:66;;5046:6;5039:5;5032:21;5086:3;5077:6;5072:3;5068:16;5065:25;5062:45;;;5103:1;5100;5093:12;5062:45;5152:6;5147:3;5140:4;5133:5;5129:16;5116:43;5206:1;5199:4;5190:6;5183:5;5179:18;5175:29;5168:40;4808:406;;;;;:::o;5219:794::-;5314:6;5322;5330;5338;5391:3;5379:9;5370:7;5366:23;5362:33;5359:53;;;5408:1;5405;5398:12;5359:53;5447:9;5434:23;5466:31;5491:5;5466:31;:::i;:::-;5516:5;-1:-1:-1;5573:2:1;5558:18;;5545:32;5586:33;5545:32;5586:33;:::i;:::-;5638:7;-1:-1:-1;5692:2:1;5677:18;;5664:32;;-1:-1:-1;5747:2:1;5732:18;;5719:32;-1:-1:-1;;;;;5763:30:1;;5760:50;;;5806:1;5803;5796:12;5760:50;5829:22;;5882:4;5874:13;;5870:27;-1:-1:-1;5860:55:1;;5911:1;5908;5901:12;5860:55;5934:73;5999:7;5994:2;5981:16;5976:2;5972;5968:11;5934:73;:::i;:::-;5924:83;;;5219:794;;;;;;;:::o;6225:247::-;6284:6;6337:2;6325:9;6316:7;6312:23;6308:32;6305:52;;;6353:1;6350;6343:12;6305:52;6392:9;6379:23;6411:31;6436:5;6411:31;:::i;6477:383::-;6554:6;6562;6570;6623:2;6611:9;6602:7;6598:23;6594:32;6591:52;;;6639:1;6636;6629:12;6591:52;6678:9;6665:23;6697:31;6722:5;6697:31;:::i;:::-;6747:5;6799:2;6784:18;;6771:32;;-1:-1:-1;6850:2:1;6835:18;;;6822:32;;6477:383;-1:-1:-1;;;6477:383:1:o;6865:221::-;6908:5;6961:3;6954:4;6946:6;6942:17;6938:27;6928:55;;6979:1;6976;6969:12;6928:55;7001:79;7076:3;7067:6;7054:20;7047:4;7039:6;7035:17;7001:79;:::i;7091:142::-;7167:20;;7196:31;7167:20;7196:31;:::i;:::-;7091:142;;;:::o;7238:118::-;7324:5;7317:13;7310:21;7303:5;7300:32;7290:60;;7346:1;7343;7336:12;7361:128;7426:20;;7455:28;7426:20;7455:28;:::i;7494:191::-;7562:4;-1:-1:-1;;;;;7587:6:1;7584:30;7581:56;;;7617:18;;:::i;:::-;-1:-1:-1;7662:1:1;7658:14;7674:4;7654:25;;7494:191::o;7690:753::-;7752:5;7805:3;7798:4;7790:6;7786:17;7782:27;7772:55;;7823:1;7820;7813:12;7772:55;7859:6;7846:20;7885:4;7909:68;7925:51;7973:2;7925:51;:::i;:::-;7909:68;:::i;:::-;8011:15;;;8097:1;8093:10;;;;8081:23;;8077:32;;;8042:12;;;;8121:15;;;8118:35;;;8149:1;8146;8139:12;8118:35;8185:2;8177:6;8173:15;8197:217;8213:6;8208:3;8205:15;8197:217;;;8293:3;8280:17;8310:31;8335:5;8310:31;:::i;:::-;8354:18;;8392:12;;;;8230;;8197:217;;;-1:-1:-1;8432:5:1;7690:753;-1:-1:-1;;;;;;7690:753:1:o;8448:896::-;8501:5;8554:3;8547:4;8539:6;8535:17;8531:27;8521:55;;8572:1;8569;8562:12;8521:55;8608:6;8595:20;8634:4;8658:68;8674:51;8722:2;8674:51;:::i;8658:68::-;8760:15;;;8846:1;8842:10;;;;8830:23;;8826:32;;;8791:12;;;;8870:15;;;8867:35;;;8898:1;8895;8888:12;8867:35;8934:2;8926:6;8922:15;8946:369;8962:6;8957:3;8954:15;8946:369;;;9048:3;9035:17;-1:-1:-1;;;;;9071:11:1;9068:35;9065:125;;;9144:1;9173:2;9169;9162:14;9065:125;9215:57;9268:3;9263:2;9249:11;9241:6;9237:24;9233:33;9215:57;:::i;:::-;9203:70;;-1:-1:-1;9293:12:1;;;;8979;;8946:369;;9349:670;9403:5;9456:3;9449:4;9441:6;9437:17;9433:27;9423:55;;9474:1;9471;9464:12;9423:55;9510:6;9497:20;9536:4;9560:68;9576:51;9624:2;9576:51;:::i;9560:68::-;9662:15;;;9748:1;9744:10;;;;9732:23;;9728:32;;;9693:12;;;;9772:15;;;9769:35;;;9800:1;9797;9790:12;9769:35;9836:2;9828:6;9824:15;9848:142;9864:6;9859:3;9856:15;9848:142;;;9930:17;;9918:30;;9968:12;;;;9881;;9848:142;;10024:1330;10079:5;10127:6;10115:9;10110:3;10106:19;10102:32;10099:52;;;10147:1;10144;10137:12;10099:52;10169:22;;:::i;:::-;10160:31;;10227:9;10214:23;-1:-1:-1;;;;;10297:2:1;10289:6;10286:14;10283:34;;;10313:1;10310;10303:12;10283:34;10340:46;10382:3;10373:6;10362:9;10358:22;10340:46;:::i;:::-;10333:5;10326:61;10419:46;10461:2;10450:9;10446:18;10419:46;:::i;:::-;10414:2;10407:5;10403:14;10396:70;10498:35;10529:2;10518:9;10514:18;10498:35;:::i;:::-;10493:2;10486:5;10482:14;10475:59;10594:2;10583:9;10579:18;10566:32;10561:2;10554:5;10550:14;10543:56;10660:3;10649:9;10645:19;10632:33;10626:3;10619:5;10615:15;10608:58;10727:3;10716:9;10712:19;10699:33;10693:3;10686:5;10682:15;10675:58;10786:3;10775:9;10771:19;10758:33;10742:49;;10816:2;10806:8;10803:16;10800:36;;;10832:1;10829;10822:12;10800:36;10869:67;10932:3;10921:8;10910:9;10906:24;10869:67;:::i;:::-;10863:3;10856:5;10852:15;10845:92;10990:3;10979:9;10975:19;10962:33;10946:49;;11020:2;11010:8;11007:16;11004:36;;;11036:1;11033;11026:12;11004:36;11073:58;11127:3;11116:8;11105:9;11101:24;11073:58;:::i;:::-;11067:3;11060:5;11056:15;11049:83;11151:3;11141:13;;11207:2;11196:9;11192:18;11179:32;11236:2;11226:8;11223:16;11220:36;;;11252:1;11249;11242:12;11220:36;11288:59;11343:3;11332:8;11321:9;11317:24;11288:59;:::i;:::-;11283:2;11276:5;11272:14;11265:83;;;;10024:1330;;;;:::o;11359:347::-;11444:6;11497:2;11485:9;11476:7;11472:23;11468:32;11465:52;;;11513:1;11510;11503:12;11465:52;11553:9;11540:23;-1:-1:-1;;;;;11578:6:1;11575:30;11572:50;;;11618:1;11615;11608:12;11572:50;11641:59;11692:7;11683:6;11672:9;11668:22;11641:59;:::i;:::-;11631:69;11359:347;-1:-1:-1;;;;11359:347:1:o;11711:315::-;11779:6;11787;11840:2;11828:9;11819:7;11815:23;11811:32;11808:52;;;11856:1;11853;11846:12;11808:52;11892:9;11879:23;11869:33;;11952:2;11941:9;11937:18;11924:32;11965:31;11990:5;11965:31;:::i;:::-;12015:5;12005:15;;;11711:315;;;;;:::o;12525:675::-;12632:6;12640;12648;12656;12709:3;12697:9;12688:7;12684:23;12680:33;12677:53;;;12726:1;12723;12716:12;12677:53;12766:9;12753:23;-1:-1:-1;;;;;12791:6:1;12788:30;12785:50;;;12831:1;12828;12821:12;12785:50;12854;12896:7;12887:6;12876:9;12872:22;12854:50;:::i;:::-;12844:60;;;12951:2;12940:9;12936:18;12923:32;12913:42;;13005:2;12994:9;12990:18;12977:32;13018:31;13043:5;13018:31;:::i;:::-;13068:5;-1:-1:-1;13125:2:1;13110:18;;13097:32;13138:30;13097:32;13138:30;:::i;:::-;12525:675;;;;-1:-1:-1;12525:675:1;;-1:-1:-1;;12525:675:1:o;13205:248::-;13273:6;13281;13334:2;13322:9;13313:7;13309:23;13305:32;13302:52;;;13350:1;13347;13340:12;13302:52;-1:-1:-1;;13373:23:1;;;13443:2;13428:18;;;13415:32;;-1:-1:-1;13205:248:1:o;13458:415::-;13552:6;13560;13613:2;13601:9;13592:7;13588:23;13584:32;13581:52;;;13629:1;13626;13619:12;13581:52;13665:9;13652:23;13642:33;;13726:2;13715:9;13711:18;13698:32;-1:-1:-1;;;;;13745:6:1;13742:30;13739:50;;;13785:1;13782;13775:12;13739:50;13808:59;13859:7;13850:6;13839:9;13835:22;13808:59;:::i;:::-;13798:69;;;13458:415;;;;;:::o;13878:844::-;14072:4;14101:2;14141;14130:9;14126:18;14171:2;14160:9;14153:21;14194:6;14229;14223:13;14260:6;14252;14245:22;14298:2;14287:9;14283:18;14276:25;;14360:2;14350:6;14347:1;14343:14;14332:9;14328:30;14324:39;14310:53;;14398:2;14390:6;14386:15;14419:1;14429:264;14443:6;14440:1;14437:13;14429:264;;;14536:2;14532:7;14520:9;14512:6;14508:22;14504:36;14499:3;14492:49;14564;14606:6;14597;14591:13;14564:49;:::i;:::-;14554:59;-1:-1:-1;14671:12:1;;;;14636:15;;;;14465:1;14458:9;14429:264;;;-1:-1:-1;14710:6:1;;13878:844;-1:-1:-1;;;;;;;13878:844:1:o;15141:398::-;15233:6;15241;15249;15302:2;15290:9;15281:7;15277:23;15273:32;15270:52;;;15318:1;15315;15308:12;15270:52;15354:9;15341:23;15331:33;;15414:2;15403:9;15399:18;15386:32;15427:31;15452:5;15427:31;:::i;:::-;15141:398;;15477:5;;-1:-1:-1;;;15529:2:1;15514:18;;;;15501:32;;15141:398::o;15544:471::-;15636:6;15644;15652;15705:2;15693:9;15684:7;15680:23;15676:32;15673:52;;;15721:1;15718;15711:12;15673:52;15760:9;15747:23;15779:31;15804:5;15779:31;:::i;:::-;15829:5;-1:-1:-1;15881:2:1;15866:18;;15853:32;;-1:-1:-1;15937:2:1;15922:18;;15909:32;15950:33;15909:32;15950:33;:::i;:::-;16002:7;15992:17;;;15544:471;;;;;:::o;16228:525::-;16314:6;16322;16330;16338;16391:3;16379:9;16370:7;16366:23;16362:33;16359:53;;;16408:1;16405;16398:12;16359:53;16444:9;16431:23;16421:33;;16504:2;16493:9;16489:18;16476:32;16517:31;16542:5;16517:31;:::i;:::-;16567:5;-1:-1:-1;16619:2:1;16604:18;;16591:32;;-1:-1:-1;16675:2:1;16660:18;;16647:32;16688:33;16647:32;16688:33;:::i;16758:609::-;16869:6;16877;16885;16893;16946:3;16934:9;16925:7;16921:23;16917:33;16914:53;;;16963:1;16960;16953:12;16914:53;16999:9;16986:23;16976:33;;17059:2;17048:9;17044:18;17031:32;17072:31;17097:5;17072:31;:::i;:::-;17122:5;-1:-1:-1;17178:2:1;17163:18;;17150:32;-1:-1:-1;;;;;17194:30:1;;17191:50;;;17237:1;17234;17227:12;17191:50;17260;17302:7;17293:6;17282:9;17278:22;17260:50;:::i;:::-;16758:609;;;;-1:-1:-1;17250:60:1;;17357:2;17342:18;17329:32;;-1:-1:-1;;;16758:609:1:o;17372:991::-;17475:6;17483;17491;17535:9;17526:7;17522:23;17565:3;17561:2;17557:12;17554:32;;;17582:1;17579;17572:12;17554:32;17618:9;17605:23;17595:33;;17678:2;17667:9;17663:18;17650:32;17691:31;17716:5;17691:31;:::i;:::-;17741:5;-1:-1:-1;17780:4:1;-1:-1:-1;;17762:16:1;;17758:27;17755:47;;;17798:1;17795;17788:12;17755:47;;17831:2;17825:9;17873:4;17865:6;17861:17;17944:6;17932:10;17929:22;-1:-1:-1;;;;;17896:10:1;17893:34;17890:62;17887:88;;;17955:18;;:::i;:::-;17995:10;17991:2;17984:22;;18058:2;18047:9;18043:18;18030:32;18022:6;18015:48;18124:2;18113:9;18109:18;18096:32;18091:2;18083:6;18079:15;18072:57;18190:3;18179:9;18175:19;18162:33;18157:2;18149:6;18145:15;18138:58;18257:4;18246:9;18242:20;18229:34;18224:2;18216:6;18212:15;18205:59;18326:3;18315:9;18311:19;18298:33;18292:3;18284:6;18280:16;18273:59;18351:6;18341:16;;;17372:991;;;;;:::o;18368:554::-;18427:5;18475:4;18463:9;18458:3;18454:19;18450:30;18447:50;;;18493:1;18490;18483:12;18447:50;18526:4;18520:11;18570:4;18562:6;18558:17;18641:6;18629:10;18626:22;-1:-1:-1;;;;;18593:10:1;18590:34;18587:62;18584:88;;;18652:18;;:::i;:::-;18688:4;18681:24;18723:6;-1:-1:-1;18723:6:1;18753:23;;18785:33;18753:23;18785:33;:::i;:::-;18827:23;;18911:2;18896:18;;;18883:32;18866:15;;18859:57;;;;18368:554;;-1:-1:-1;18368:554:1:o;18927:441::-;19034:6;19042;19050;19103:3;19091:9;19082:7;19078:23;19074:33;19071:53;;;19120:1;19117;19110:12;19071:53;19156:9;19143:23;19133:33;;19216:2;19205:9;19201:18;19188:32;19229:31;19254:5;19229:31;:::i;:::-;19279:5;-1:-1:-1;19303:59:1;19354:7;19349:2;19334:18;;19303:59;:::i;:::-;19293:69;;18927:441;;;;;:::o;19373:1180::-;19505:6;19513;19521;19574:2;19562:9;19553:7;19549:23;19545:32;19542:52;;;19590:1;19587;19580:12;19542:52;19626:9;19613:23;19603:33;;19655:2;19707;19696:9;19692:18;19679:32;19720:31;19745:5;19720:31;:::i;:::-;19770:5;-1:-1:-1;19794:2:1;19832:18;;;19819:32;-1:-1:-1;;;;;19863:30:1;;19860:50;;;19906:1;19903;19896:12;19860:50;19929:22;;19982:4;19974:13;;19970:27;-1:-1:-1;19960:55:1;;20011:1;20008;20001:12;19960:55;20047:2;20034:16;20070:68;20086:51;20134:2;20086:51;:::i;20070:68::-;20172:15;;;20254:1;20250:10;;;;20242:19;;20238:28;;;20203:12;;;;20278:19;;;20275:39;;;20310:1;20307;20300:12;20275:39;20334:11;;;;20354:169;20370:6;20365:3;20362:15;20354:169;;;20436:44;20472:7;20467:3;20436:44;:::i;:::-;20424:57;;20387:12;;;;20501;;;;20354:169;;;20542:5;20532:15;;;;;;;;19373:1180;;;;;:::o;21033:824::-;21264:2;21316:21;;;21386:13;;21289:18;;;21408:22;;;21235:4;;21264:2;21449;;21467:18;;;;21508:15;;;21235:4;21551:280;21565:6;21562:1;21559:13;21551:280;;;21624:13;;21666:9;;-1:-1:-1;;;;;21662:35:1;21650:48;;21738:11;;21732:18;21718:12;;;21711:40;21771:12;;;;21806:15;;;;21694:1;21580:9;21551:280;;21862:127;21923:10;21918:3;21914:20;21911:1;21904:31;21954:4;21951:1;21944:15;21978:4;21975:1;21968:15;21994:184;22064:6;22117:2;22105:9;22096:7;22092:23;22088:32;22085:52;;;22133:1;22130;22123:12;22085:52;-1:-1:-1;22156:16:1;;21994:184;-1:-1:-1;21994:184:1:o;22183:380::-;22262:1;22258:12;;;;22305;;;22326:61;;22380:4;22372:6;22368:17;22358:27;;22326:61;22433:2;22425:6;22422:14;22402:18;22399:38;22396:161;;22479:10;22474:3;22470:20;22467:1;22460:31;22514:4;22511:1;22504:15;22542:4;22539:1;22532:15;22396:161;;22183:380;;;:::o;22568:346::-;22770:2;22752:21;;;22809:2;22789:18;;;22782:30;-1:-1:-1;;;22843:2:1;22828:18;;22821:52;22905:2;22890:18;;22568:346::o;23045:545::-;23147:2;23142:3;23139:11;23136:448;;;23183:1;23208:5;23204:2;23197:17;23253:4;23249:2;23239:19;23323:2;23311:10;23307:19;23304:1;23300:27;23294:4;23290:38;23359:4;23347:10;23344:20;23341:47;;;-1:-1:-1;23382:4:1;23341:47;23437:2;23432:3;23428:12;23425:1;23421:20;23415:4;23411:31;23401:41;;23492:82;23510:2;23503:5;23500:13;23492:82;;;23555:17;;;23536:1;23525:13;23492:82;;23136:448;23045:545;;;:::o;23766:1352::-;23892:3;23886:10;-1:-1:-1;;;;;23911:6:1;23908:30;23905:56;;;23941:18;;:::i;:::-;23970:97;24060:6;24020:38;24052:4;24046:11;24020:38;:::i;:::-;24014:4;23970:97;:::i;:::-;24122:4;;24186:2;24175:14;;24203:1;24198:663;;;;24905:1;24922:6;24919:89;;;-1:-1:-1;24974:19:1;;;24968:26;24919:89;-1:-1:-1;;23723:1:1;23719:11;;;23715:24;23711:29;23701:40;23747:1;23743:11;;;23698:57;25021:81;;24168:944;;24198:663;22992:1;22985:14;;;23029:4;23016:18;;-1:-1:-1;;24234:20:1;;;24352:236;24366:7;24363:1;24360:14;24352:236;;;24455:19;;;24449:26;24434:42;;24547:27;;;;24515:1;24503:14;;;;24382:19;;24352:236;;;24356:3;24616:6;24607:7;24604:19;24601:201;;;24677:19;;;24671:26;-1:-1:-1;;24760:1:1;24756:14;;;24772:3;24752:24;24748:37;24744:42;24729:58;24714:74;;24601:201;-1:-1:-1;;;;;24848:1:1;24832:14;;;24828:22;24815:36;;-1:-1:-1;23766:1352:1:o;25123:485::-;25364:3;25353:9;25346:22;25327:4;25385:46;25426:3;25415:9;25411:19;25403:6;25385:46;:::i;:::-;25462:2;25447:18;;25440:34;;;;-1:-1:-1;;;;;;25510:32:1;;;;25505:2;25490:18;;25483:60;25586:14;25579:22;25574:2;25559:18;;;25552:50;25377:54;25123:485;-1:-1:-1;25123:485:1:o;28335:476::-;28565:25;;;-1:-1:-1;;;;;28626:32:1;;28621:2;28606:18;;28599:60;28695:3;28690:2;28675:18;;28668:31;;;-1:-1:-1;;28716:46:1;;28742:19;;28734:6;28716:46;:::i;:::-;28708:54;;28798:6;28793:2;28782:9;28778:18;28771:34;28335:476;;;;;;;:::o;28816:127::-;28877:10;28872:3;28868:20;28865:1;28858:31;28908:4;28905:1;28898:15;28932:4;28929:1;28922:15;28948:135;28987:3;29008:17;;;29005:43;;29028:18;;:::i;:::-;-1:-1:-1;29075:1:1;29064:13;;28948:135::o;29088:128::-;29155:9;;;29176:11;;;29173:37;;;29190:18;;:::i;29221:125::-;29286:9;;;29307:10;;;29304:36;;;29320:18;;:::i;29351:127::-;29412:10;29407:3;29403:20;29400:1;29393:31;29443:4;29440:1;29433:15;29467:4;29464:1;29457:15;29762:245;29829:6;29882:2;29870:9;29861:7;29857:23;29853:32;29850:52;;;29898:1;29895;29888:12;29850:52;29930:9;29924:16;29949:28;29971:5;29949:28;:::i

Swarm Source

ipfs://a33b2cc144eeee5c1a1dfc16a5b44dbcfad0aae7d4d00ea722ade087f00cdab0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.