ETH Price: $4,004.50 (+2.87%)

Token

ERC-20: BANGER (BANGER)
 

Overview

Max Total Supply

5,000,000,000 BANGER

Holders

393

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
Banger

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-08
*/

/*

Website : ItsaBanger.io 
Telegram : https://t.me/ItsABanger_Portal

*/


pragma solidity 0.8.20;

// SPDX-License-Identifier: MIT

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = 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 functionCallWithValue(target, data, 0, "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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

interface ILpPair {
    function sync() external;
    function mint(address to) external returns (uint liquidity);
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

contract Banger is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    mapping (address => bool) public isAMMPair;

    address public marketingAddress;
    address public devAddress;
    address public bangerAddress;

    Taxes public buyTax;
    Taxes public sellTax;

    TokensForTax public tokensForTax;

    bool public limited = true;

    uint256 public swapTokensAtAmt;

    address public lpPair;
    IDexRouter internal dexRouter;
    IWETH internal immutable WETH;

    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    mapping(uint256 => mapping(uint256 => uint256)) public gweiMapping;

    TxLimits public txLimits;

    uint64 public constant FEE_DIVISOR = 10000;

    // structs

    struct TxLimits {
        uint128 transactionLimit;
        uint128 walletLimit;
    }

    struct Taxes {
        uint48 marketingTax;
        uint48 devTax;
        uint48 bangerTax;
        uint48 totalTax;
    }

    struct TokensForTax {
        uint64 tokensForMarketing;
        uint64 tokensForDev;
        uint64 tokensForBanger;
        bool gasSaver;
    }

    uint256 public launchTime;
    bool public dynamicTaxOn;

    // events

    event UpdatedTransactionLimit(uint newMax);
    event UpdatedWalletLimit(uint newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint newAmt);
    event UpdatedSellTax(uint newAmt);

    // constructor

    constructor()
        ERC20("BANGER", "BANGER")
    {   
        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Chain not configured");
        }

        dynamicTaxOn = true;

        dexRouter = IDexRouter(_v2Router);

        marketingAddress = 0xDfA81Dbd6822E3a50147586fFD11870B5d67cB74;
        devAddress = 0xBa7cc9CFAee71eaC953e702cB014fa05B53E428a;
        bangerAddress = 0x9FF044C9A4F9Bc834b9e308c80e22C4c470DE1d4;

        uint256 _totalSupply = 5 * 1e9 * 1e18;
        _mint(address(this), 4_250_000_000 * 1e18);
        _mint(msg.sender, _totalSupply - balanceOf(address(this)));

        txLimits.transactionLimit = uint128(totalSupply() * 5 / 1000);
        txLimits.walletLimit = uint128(totalSupply() * 1 / 100);
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        buyTax.marketingTax = 700;
        buyTax.devTax = 700;
        buyTax.bangerTax = 600;
        buyTax.totalTax = buyTax.marketingTax + buyTax.devTax + buyTax.bangerTax;

        sellTax.marketingTax = 700;
        sellTax.devTax = 700; 
        sellTax.bangerTax = 600;
        sellTax.totalTax = sellTax.marketingTax + sellTax.devTax + sellTax.bangerTax;

        tokensForTax.gasSaver = true;

        WETH = IWETH(dexRouter.WETH());
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), address(WETH));

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[marketingAddress] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[marketingAddress] = true;
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            if(limited){
                checkLimits(from, to, amount);
            }
            amount -= handleTax(from, to, amount);
        }

        super._transfer(from,to,amount);
    }

    function checkLimits(address from, address to, uint256 amount) internal {
        bool exFromLimitsTo = exemptFromLimits[to];
        uint256 balanceOfTo = balanceOf(to);
        TxLimits memory _txLimits = txLimits;
        // buy
        if (isAMMPair[from] && !exFromLimitsTo) {
            require(amount <= _txLimits.transactionLimit, "Max Txn");
            require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
        } 
        // sell
        else if (isAMMPair[to] && !exemptFromLimits[from]) {
            require(amount <= _txLimits.transactionLimit, "Max Txn");
        }
        else if(!exFromLimitsTo) {
            require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
        }

        if (transferDelayEnabled){
            if (to != address(dexRouter) && to != address(lpPair)){
                require(_holderLastTransferBlock[tx.origin] < block.number, "Transfer Delay enabled");
                require(tx.origin == to, "no buying to external wallets yet");
                _holderLastTransferBlock[tx.origin] = block.number;
                if(launchTime + 45 >= block.timestamp){
                    require(gweiMapping[tx.gasprice][amount] < block.number, "Dupe Txn");
                    gweiMapping[tx.gasprice][amount] = block.number;
                }
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmt && !isAMMPair[from]) {
            convertTaxes();
        }

        if(dynamicTaxOn){
            setInternalTaxes();
        }
        
        uint128 tax = 0;

        Taxes memory taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }

        if(taxes.totalTax > 0){
            TokensForTax memory tokensForTaxUpdate = tokensForTax;
            tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
            tokensForTaxUpdate.tokensForMarketing += uint64(tax * taxes.marketingTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForDev += uint64(tax * taxes.devTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForBanger += uint64(tax * taxes.bangerTax / taxes.totalTax / 1e9);
            tokensForTax = tokensForTaxUpdate;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmt) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(WETH);

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function convertTaxes() private {

        uint256 contractBalance = balanceOf(address(this));
        TokensForTax memory tokensForTaxMem = tokensForTax;
        uint256 totalTokensToSwap = tokensForTaxMem.tokensForMarketing + tokensForTaxMem.tokensForDev + tokensForTaxMem.tokensForBanger;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmt * 40){
            contractBalance = swapTokensAtAmt * 40;
        }
        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            if(tokensForTaxMem.tokensForDev > 0){
                (success,) = devAddress.call{value: ethBalance * tokensForTaxMem.tokensForDev/ totalTokensToSwap}("");  
            }

            if(tokensForTaxMem.tokensForBanger > 0){
                (success,) = bangerAddress.call{value: ethBalance * tokensForTaxMem.tokensForBanger/ totalTokensToSwap}("");  
            }

            ethBalance = address(this).balance;

            if(ethBalance > 0){
                (success,) = marketingAddress.call{value: ethBalance}("");  
            }
        }

        tokensForTaxMem.tokensForMarketing = 0;
        tokensForTaxMem.tokensForDev = 0;
        tokensForTaxMem.tokensForBanger = 0;
        tokensForTax = tokensForTaxMem;
    }

    // owner functions
    function setExemptFromFee(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexempt contract");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimit(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateTransactionLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 5 / 1000)/(10**decimals()), "Too low");
        txLimits.transactionLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedTransactionLimit(txLimits.transactionLimit);
    }

    function updateWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 100)/(10**decimals()), "Too low");
        txLimits.walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(txLimits.walletLimit);
    }

    function updateSwapTokensAmt(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmt = newAmount;
    }

    function updateBuyTax(uint48 _marketingTax, uint48 _devTax, uint48 _bangerTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.devTax = _devTax;
        taxes.bangerTax = _bangerTax;
        taxes.totalTax = _marketingTax + _devTax + _bangerTax;
        require(taxes.totalTax  <= 300, "Keep tax at or below 3%");
        emit UpdatedBuyTax(taxes.totalTax);
        buyTax = taxes;
    }

    function updateSellTax(uint48 _marketingTax, uint48 _devTax, uint48 _bangerTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.devTax = _devTax;
        taxes.bangerTax = _bangerTax;
        taxes.totalTax = _marketingTax + _devTax + _bangerTax;
        require(taxes.totalTax  <= 300, "Keep tax at or below 3%");
        emit UpdatedSellTax(taxes.totalTax);
        sellTax = taxes;
    }

    function removeTransferDelay() external onlyOwner {
        require(transferDelayEnabled, "Already disabled");
        transferDelayEnabled = false;
    }

    function removeDynamicTax() external onlyOwner {
        require(dynamicTaxOn, "Already disabled");
        dynamicTaxOn = false;
    }

    function removeLimits() external onlyOwner {
        limited = false;
        transferDelayEnabled = false;
        TxLimits memory _txLimits;
        uint256 supply = totalSupply();
        _txLimits.transactionLimit = uint128(supply);
        _txLimits.walletLimit = uint128(supply);
        txLimits = _txLimits;
        emit RemovedLimits();
    }

    function airdropToWallets(address[] calldata wallets, uint256[] calldata amountsInWei) external onlyOwner {
        require(wallets.length == amountsInWei.length, "arrays length mismatch");
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInWei[i]);
        }
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "_token address cannot be native token");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
    }

    function updateMarketingAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        marketingAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    function updateBangerAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        bangerAddress = _address;
    }

    function setInternalTaxes() internal {
        Taxes memory newBuyTax = buyTax;
        Taxes memory newSellTax = sellTax;
        uint256 currentTime = block.timestamp;
        uint256 timeSinceLaunch = currentTime - launchTime;
        if(timeSinceLaunch >= 30 minutes){
            dynamicTaxOn = false;

            newBuyTax.marketingTax = 100;
            newBuyTax.devTax = 100;
            newBuyTax.bangerTax = 100;
            newBuyTax.totalTax = 300;

            newSellTax.marketingTax = 100;
            newSellTax.devTax = 100;
            newSellTax.bangerTax = 100;
            newSellTax.totalTax = 300;

        } else if (timeSinceLaunch >= 10 minutes){
            newBuyTax.marketingTax = 400;
            newBuyTax.devTax = 300;
            newBuyTax.bangerTax = 300;
            newBuyTax.totalTax = 1000;

            newSellTax.marketingTax = 400;
            newSellTax.devTax = 300;
            newSellTax.bangerTax = 300;
            newSellTax.totalTax = 1000;

        }

        if(buyTax.totalTax != newBuyTax.totalTax){
            buyTax = newBuyTax;
        }
        if(sellTax.totalTax != newSellTax.totalTax){
            sellTax = newSellTax;
        }
    }

    receive() payable external {}

    function addLp(address _to) external onlyOwner payable {
        require(address(this).balance > 0 && balanceOf(address(this)) > 0);

        WETH.deposit{value: address(this).balance}();

        super._transfer(address(this), address(lpPair), balanceOf(address(this)));
        IERC20(address(WETH)).transfer(address(lpPair), IERC20(address(WETH)).balanceOf(address(this)));
        ILpPair(lpPair).mint(_to);
        launchTime = block.timestamp;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"addLp","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bangerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint48","name":"marketingTax","type":"uint48"},{"internalType":"uint48","name":"devTax","type":"uint48"},{"internalType":"uint48","name":"bangerTax","type":"uint48"},{"internalType":"uint48","name":"totalTax","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTaxOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"gweiMapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeDynamicTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint48","name":"marketingTax","type":"uint48"},{"internalType":"uint48","name":"devTax","type":"uint48"},{"internalType":"uint48","name":"bangerTax","type":"uint48"},{"internalType":"uint48","name":"totalTax","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint64","name":"tokensForMarketing","type":"uint64"},{"internalType":"uint64","name":"tokensForDev","type":"uint64"},{"internalType":"uint64","name":"tokensForBanger","type":"uint64"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateBangerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"_marketingTax","type":"uint48"},{"internalType":"uint48","name":"_devTax","type":"uint48"},{"internalType":"uint48","name":"_bangerTax","type":"uint48"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"_marketingTax","type":"uint48"},{"internalType":"uint48","name":"_devTax","type":"uint48"},{"internalType":"uint48","name":"_bangerTax","type":"uint48"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600f8054600160ff1991821681179092556014805490911690911790553480156200002d575f80fd5b506040805180820182526006808252652120a723a2a960d11b60208084018290528451808601909552918452908301529060036200006c8382620008ec565b5060046200007b8282620008ec565b5050505f6200008f6200066060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505f46600103620001025750737a250d5630b4cf539739df2c5dacb4c659f2488d62000174565b46600503620001275750737a250d5630b4cf539739df2c5dacb4c659f2488d62000174565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6018805460ff19166001179055601280546001600160a01b0383166001600160a01b03199182161790915560098054821673dfa81dbd6822e3a50147586ffd11870b5d67cb74179055600a8054821673ba7cc9cfaee71eac953e702cb014fa05b53e428a179055600b8054909116739ff044c9a4f9bc834b9e308c80e22c4c470de1d41790556b1027e72f1f128130880000006200021f306b0dbb8481a7362102da00000062000664565b305f9081526020819052604090205462000247903390620002419084620009c8565b62000664565b6103e86200025460025490565b62000261906005620009e4565b6200026d9190620009fe565b601680546001600160801b0319166001600160801b039290921691909117905560646200029960025490565b620002a6906001620009e4565b620002b29190620009fe565b601680546001600160801b03928316600160801b029216919091179055620186a0620002dd60025490565b620002ea906019620009e4565b620002f69190620009fe565b601055600c80546001600160901b0319166d02580000000002bc0000000002bc179081905565ffffffffffff6c0100000000000000000000000082048116916200034f916601000000000000909104166102bc62000a1e565b6200035b919062000a1e565b600c805465ffffffffffff60901b1916600160901b65ffffffffffff93841602179055600d80546001600160901b0319166d02580000000002bc0000000002bc17908190556c010000000000000000000000008104821691620003cc9166010000000000009004166102bc62000a1e565b620003d8919062000a1e565b600d805465ffffffffffff92909216600160901b0265ffffffffffff60901b19909216919091179055600e805460ff60c01b1916600160c01b179055601254604080516315ab88c960e31b815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa1580156200045d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000483919062000a47565b6001600160a01b039081166080526012546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015620004d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004f8919062000a47565b6080516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af115801562000547573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200056d919062000a47565b601180546001600160a01b0319166001600160a01b0392831690811782555f908152600860209081526040808320805460ff199081166001908117909255945486168452600783528184208054861682179055338085528285208054871683179055308086528386208054881684179055600980548916875284872080548916851790559186526006909452828520805487168317905583855282852080548716831790555486168452922080549093169091179091556012546200063592165f1962000725565b601254620006589033906001600160a01b03166200065260025490565b62000725565b505062000a8c565b3390565b6001600160a01b038216620006bc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200016b565b8060025f828254620006cf919062000a76565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316620007895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200016b565b6001600160a01b038216620007ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200016b565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200087557607f821691505b6020821081036200089457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620008e7575f81815260208120601f850160051c81016020861015620008c25750805b601f850160051c820191505b81811015620008e357828155600101620008ce565b5050505b505050565b81516001600160401b038111156200090857620009086200084c565b620009208162000919845462000860565b846200089a565b602080601f83116001811462000956575f84156200093e5750858301515b5f19600386901b1c1916600185901b178555620008e3565b5f85815260208120601f198616915b82811015620009865788860151825594840194600190910190840162000965565b5085821015620009a457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620009de57620009de620009b4565b92915050565b8082028115828204841417620009de57620009de620009b4565b5f8262000a1957634e487b7160e01b5f52601260045260245ffd5b500490565b65ffffffffffff81811683821601908082111562000a405762000a40620009b4565b5092915050565b5f6020828403121562000a58575f80fd5b81516001600160a01b038116811462000a6f575f80fd5b9392505050565b80820180821115620009de57620009de620009b4565b60805161366762000ab35f395f81816109db01528181610a920152612de101526136675ff3fe60806040526004361061028e575f3560e01c8063790ca41311610155578063b3103465116100be578063dd62ed3e11610078578063dd62ed3e14610892578063f270fde4146108b1578063f2fde38b146108fb578063f8686f071461091a578063fd607aad1461092e578063fe40fd711461094d575f80fd5b8063b3103465146107ca578063bedafd01146107e9578063c78d0fa014610808578063c876d0b91461081d578063cc1776d314610836578063ccad03e114610873575f80fd5b80639e7261af1161010f5780639e7261af146106fe5780639e93ad8e14610712578063a457c2d71461073f578063a5ece9411461075e578063a9059cbb1461077d578063b0249cc61461079c575f80fd5b8063790ca413146106525780638503376214610667578063860a32ec146106865780638d3e6e401461069f5780638da5cb5b146106cd57806395d89b41146106ea575f80fd5b806339509351116101f757806366ebd39a116101b157806366ebd39a146105445780636d7adcad1461056357806370a08231146105d7578063715018a61461060b57806372e8a1f81461061f578063751039fc1461063e575f80fd5b806339509351146104135780633ad10ef614610432578063452ed4f1146104695780634f7041a5146104885780635431c94e146104f75780635a90a49e14610516575f80fd5b80632369bf83116102485780632369bf831461036357806323b872dd146103825780632f0f5e4f146103a1578063313ce567146103c0578063362919a7146103db57806336e18e19146103f4575f80fd5b806306f200031461029957806306fdde03146102ae578063095ea7b3146102d857806318160ddd1461030757806321045918146103255780632307b44114610344575f80fd5b3661029557005b5f80fd5b6102ac6102a7366004613010565b610983565b005b3480156102b9575f80fd5b506102c2610be9565b6040516102cf9190613052565b60405180910390f35b3480156102e3575f80fd5b506102f76102f2366004613084565b610c79565b60405190151581526020016102cf565b348015610312575f80fd5b506002545b6040519081526020016102cf565b348015610330575f80fd5b506102ac61033f3660046130ac565b610c92565b34801561034f575f80fd5b506102ac61035e36600461310a565b610ddd565b34801561036e575f80fd5b506102ac61037d366004613010565b610ebb565b34801561038d575f80fd5b506102f761039c366004613170565b610f2d565b3480156103ac575f80fd5b506102ac6103bb3660046131be565b610f50565b3480156103cb575f80fd5b50604051601281526020016102cf565b3480156103e6575f80fd5b506018546102f79060ff1681565b3480156103ff575f80fd5b506102ac61040e3660046131fe565b6110cf565b34801561041e575f80fd5b506102f761042d366004613084565b6111e7565b34801561043d575f80fd5b50600a54610451906001600160a01b031681565b6040516001600160a01b0390911681526020016102cf565b348015610474575f80fd5b50601154610451906001600160a01b031681565b348015610493575f80fd5b50600c546104c59065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b90041684565b6040805165ffffffffffff958616815293851660208501529184169183019190915290911660608201526080016102cf565b348015610502575f80fd5b506102ac610511366004613224565b611208565b348015610521575f80fd5b506102f7610530366004613010565b60066020525f908152604090205460ff1681565b34801561054f575f80fd5b506102ac61055e3660046131fe565b611368565b34801561056e575f80fd5b50600e546105a2906001600160401b0380821691600160401b8104821691600160801b82041690600160c01b900460ff1684565b6040516102cf94939291906001600160401b039485168152928416602084015292166040820152901515606082015260800190565b3480156105e2575f80fd5b506103176105f1366004613010565b6001600160a01b03165f9081526020819052604090205490565b348015610616575f80fd5b506102ac61147b565b34801561062a575f80fd5b50600b54610451906001600160a01b031681565b348015610649575f80fd5b506102ac6114ee565b34801561065d575f80fd5b5061031760175481565b348015610672575f80fd5b506102ac610681366004613010565b611599565b348015610691575f80fd5b50600f546102f79060ff1681565b3480156106aa575f80fd5b506102f76106b9366004613010565b60076020525f908152604090205460ff1681565b3480156106d8575f80fd5b506005546001600160a01b0316610451565b3480156106f5575f80fd5b506102c261160b565b348015610709575f80fd5b506102ac61161a565b34801561071d575f80fd5b5061072761271081565b6040516001600160401b0390911681526020016102cf565b34801561074a575f80fd5b506102f7610759366004613084565b611695565b348015610769575f80fd5b50600954610451906001600160a01b031681565b348015610788575f80fd5b506102f7610797366004613084565b61170f565b3480156107a7575f80fd5b506102f76107b6366004613010565b60086020525f908152604090205460ff1681565b3480156107d5575f80fd5b506102ac6107e4366004613010565b61171c565b3480156107f4575f80fd5b506102ac610803366004613265565b61178e565b348015610813575f80fd5b5061031760105481565b348015610828575f80fd5b506014546102f79060ff1681565b348015610841575f80fd5b50600d546104c59065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b90041684565b34801561087e575f80fd5b506102ac61088d366004613265565b6118b8565b34801561089d575f80fd5b506103176108ac366004613224565b6119da565b3480156108bc575f80fd5b506016546108db906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016102cf565b348015610906575f80fd5b506102ac610915366004613010565b611a04565b348015610925575f80fd5b506102ac611aee565b348015610939575f80fd5b506102ac6109483660046131be565b611b69565b348015610958575f80fd5b5061031761096736600461329a565b601560209081525f928352604080842090915290825290205481565b6005546001600160a01b031633146109b65760405162461bcd60e51b81526004016109ad906132ba565b60405180910390fd5b5f471180156109d15750305f90815260208190526040812054115b6109d9575f80fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004015f604051808303818588803b158015610a32575f80fd5b505af1158015610a44573d5f803e3d5ffd5b5050601154305f81815260208190526040902054610a7295509093506001600160a01b039091169150611ce8565b6011546040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015610ae3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0791906132ef565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610b4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b739190613306565b506011546040516335313c2160e11b81526001600160a01b03838116600483015290911690636a627842906024016020604051808303815f875af1158015610bbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be191906132ef565b505042601755565b606060038054610bf890613321565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490613321565b8015610c6f5780601f10610c4657610100808354040283529160200191610c6f565b820191905f5260205f20905b815481529060010190602001808311610c5257829003601f168201915b5050505050905090565b5f33610c86818585611e8b565b60019150505b92915050565b6005546001600160a01b03163314610cbc5760405162461bcd60e51b81526004016109ad906132ba565b620186a0610cc960025490565b610cd490600161336d565b610cde9190613398565b811015610d4b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109ad565b6103e8610d5760025490565b610d6290600561336d565b610d6c9190613398565b811115610dd85760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109ad565b601055565b6005546001600160a01b03163314610e075760405162461bcd60e51b81526004016109ad906132ba565b828114610e4f5760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016109ad565b5f5b83811015610eb457610ea233868684818110610e6f57610e6f6133ab565b9050602002016020810190610e849190613010565b858585818110610e9657610e966133ab565b90506020020135611ce8565b80610eac816133bf565b915050610e51565b5050505050565b6005546001600160a01b03163314610ee55760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b038116610f0b5760405162461bcd60e51b81526004016109ad906133d7565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610f3a858285611fae565b610f45858585612026565b506001949350505050565b6005546001600160a01b03163314610f7a5760405162461bcd60e51b81526004016109ad906132ba565b604080516080810182525f606082015265ffffffffffff8581168252848116602083015283169181019190915281610fb284866133fd565b610fbc91906133fd565b65ffffffffffff166060820181905261012c10156110165760405162461bcd60e51b81526020600482015260176024820152764b65657020746178206174206f722062656c6f7720332560481b60448201526064016109ad565b606081015160405165ffffffffffff90911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600c80546020840151604085015160609095015165ffffffffffff908116600160901b0265ffffffffffff60901b19968216600160601b0296909616600160601b600160c01b0319928216600160301b026001600160601b03199094169190951617919091171691909117919091179055505050565b6005546001600160a01b031633146110f95760405162461bcd60e51b81526004016109ad906132ba565b6111056012600a613503565b6103e861111160025490565b61111c90600561336d565b6111269190613398565b6111309190613398565b816001600160801b031610156111725760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109ad565b61117e6012600a613503565b611191906001600160801b03831661336d565b601680546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b5f33610c868185856111f983836119da565b6112039190613511565b611e8b565b6005546001600160a01b031633146112325760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b0382166112885760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109ad565b306001600160a01b038316036112ee5760405162461bcd60e51b815260206004820152602560248201527f5f746f6b656e20616464726573732063616e6e6f74206265206e6174697665206044820152643a37b5b2b760d91b60648201526084016109ad565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611332573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135691906132ef565b90506113638383836120a4565b505050565b6005546001600160a01b031633146113925760405162461bcd60e51b81526004016109ad906132ba565b61139e6012600a613503565b60646113a960025490565b6113b490600161336d565b6113be9190613398565b6113c89190613398565b816001600160801b0316101561140a5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109ad565b6114166012600a613503565b611429906001600160801b03831661336d565b601680546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788906020016111dc565b6005546001600160a01b031633146114a55760405162461bcd60e51b81526004016109ad906132ba565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115185760405162461bcd60e51b81526004016109ad906132ba565b600f805460ff19908116909155601480549091169055604080518082019091525f80825260208201525f61154b60025490565b6001600160801b03811680845260208401819052600160801b8102176016556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b6005546001600160a01b031633146115c35760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b0381166115e95760405162461bcd60e51b81526004016109ad906133d7565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610bf890613321565b6005546001600160a01b031633146116445760405162461bcd60e51b81526004016109ad906132ba565b60185460ff166116895760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48191a5cd8589b195960821b60448201526064016109ad565b6018805460ff19169055565b5f33816116a282866119da565b9050838110156117025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109ad565b610f458286868403611e8b565b5f33610c86818585612026565b6005546001600160a01b031633146117465760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b03811661176c5760405162461bcd60e51b81526004016109ad906133d7565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117b85760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b0382166117fd5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109ad565b306001600160a01b038316036118555760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e7472616374000000000000000060448201526064016109ad565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146118e25760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b0382166119275760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109ad565b8061197f576011546001600160a01b039081169083160361197f5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109ad565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce91016118ac565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611a2e5760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b038116611a935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ad565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b185760405162461bcd60e51b81526004016109ad906132ba565b60145460ff16611b5d5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48191a5cd8589b195960821b60448201526064016109ad565b6014805460ff19169055565b6005546001600160a01b03163314611b935760405162461bcd60e51b81526004016109ad906132ba565b604080516080810182525f606082015265ffffffffffff8581168252848116602083015283169181019190915281611bcb84866133fd565b611bd591906133fd565b65ffffffffffff166060820181905261012c1015611c2f5760405162461bcd60e51b81526020600482015260176024820152764b65657020746178206174206f722062656c6f7720332560481b60448201526064016109ad565b606081015160405165ffffffffffff90911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600d80546020840151604085015160609095015165ffffffffffff908116600160901b0265ffffffffffff60901b19968216600160601b0296909616600160601b600160c01b0319928216600160301b026001600160601b03199094169190951617919091171691909117919091179055505050565b6001600160a01b038316611d4c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ad565b6001600160a01b038216611dae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ad565b6001600160a01b0383165f9081526020819052604090205481811015611e255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109ad565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6001600160a01b038316611eed5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ad565b6001600160a01b038216611f4e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ad565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611fb984846119da565b90505f19811461202057818110156120135760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109ad565b6120208484848403611e8b565b50505050565b6001600160a01b0383165f9081526006602052604090205460ff1615801561206657506001600160a01b0382165f9081526006602052604090205460ff16155b1561209957600f5460ff1615612081576120818383836120f6565b61208c838383612470565b6120969082613524565b90505b611363838383611ce8565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113639084906127d9565b6001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526016546001600160801b038082168352600160801b90910416818601529589168552600890935292205460ff92831693919216801561215d575082155b156121fe5780516001600160801b03168411156121a65760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b60448201526064016109ad565b60208101516001600160801b03166121be8386613511565b11156121f95760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b60448201526064016109ad565b6122de565b6001600160a01b0385165f9081526008602052604090205460ff16801561223d57506001600160a01b0386165f9081526007602052604090205460ff16155b156122865780516001600160801b03168411156121f95760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b60448201526064016109ad565b826122de5760208101516001600160801b03166122a38386613511565b11156122de5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b60448201526064016109ad565b60145460ff1615612468576012546001600160a01b0386811691161480159061231557506011546001600160a01b03868116911614155b1561246857325f9081526013602052604090205443116123705760405162461bcd60e51b8152602060048201526016602482015275151c985b9cd9995c8811195b185e48195b98589b195960521b60448201526064016109ad565b326001600160a01b038616146123d25760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079656044820152601d60fa1b60648201526084016109ad565b325f90815260136020526040902043905560175442906123f390602d613511565b10612468573a5f908152601560209081526040808320878452909152902054431161244b5760405162461bcd60e51b8152602060048201526008602482015267223ab832902a3c3760c11b60448201526064016109ad565b3a5f90815260156020908152604080832087845290915290204390555b505050505050565b601054305f908152602081905260408120549091111580156124aa57506001600160a01b0384165f9081526008602052604090205460ff16155b156124b7576124b76128aa565b60185460ff16156124ca576124ca612b28565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600890529182205460ff1615612555575060408051608081018252600d5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b900490911660608201526125bd565b6001600160a01b0386165f9081526008602052604090205460ff16156125bd575060408051608081018252600c5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b900490911660608201525b606081015165ffffffffffff16156127c75760408051608081018252600e546001600160401b038082168352600160401b820481166020840152600160801b82041692820192909252600160c01b90910460ff161515606080830191909152820151612710906126359065ffffffffffff168761336d565b61263f9190613398565b9250633b9aca00826060015165ffffffffffff16835f015165ffffffffffff168561266a9190613537565b6126749190613562565b61267e9190613562565b8151829061268d908390613587565b6001600160401b031690525060608201516020830151633b9aca009165ffffffffffff908116916126bf911686613537565b6126c99190613562565b6126d39190613562565b816020018181516126e49190613587565b6001600160401b031690525060608201516040830151633b9aca009165ffffffffffff90811691612716911686613537565b6127209190613562565b61272a9190613562565b8160400181815161273b9190613587565b6001600160401b039081169091528251600e80546020860151604087015160608801511515600160c01b0260ff60c01b19918716600160801b029190911668ffffffffffffffffff60801b19928716600160401b026001600160801b03199094169590961694909417919091171692909217179055506127c587306001600160801b038616611ce8565b505b506001600160801b0316949350505050565b5f61282d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d769092919063ffffffff16565b805190915015611363578080602001905181019061284b9190613306565b6113635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109ad565b305f9081526020819052604081205460408051608081018252600e546001600160401b03808216808452600160401b8304821660208501819052600160801b8404909216948401859052600160c01b90920460ff161515606084015293945090925f92916129189190613587565b6129229190613587565b6001600160401b03169050821580612938575080155b1561294257505050565b60105461295090602861336d565b8311156129685760105461296590602861336d565b92505b8215612af05761297783612d8c565b602082015147905f906001600160401b031615612a0557600a5460208501516001600160a01b039091169084906129b7906001600160401b03168561336d565b6129c19190613398565b6040515f81818185875af1925050503d805f81146129fa576040519150601f19603f3d011682016040523d82523d5f602084013e6129ff565b606091505b50909150505b60408401516001600160401b031615612a8f57600b5460408501516001600160a01b03909116908490612a41906001600160401b03168561336d565b612a4b9190613398565b6040515f81818185875af1925050503d805f8114612a84576040519150601f19603f3d011682016040523d82523d5f602084013e612a89565b606091505b50909150505b4791508115612aed576009546040516001600160a01b039091169083905f81818185875af1925050503d805f8114612ae2576040519150601f19603f3d011682016040523d82523d5f602084013e612ae7565b606091505b50909150505b50505b505f808252602082018190526040820152600e80546060909201511515600160c01b026001600160c81b031990921691909117905550565b6040805160808082018352600c5465ffffffffffff8082168452600160301b8083048216602080870191909152600160601b808504841687890152600160901b94859004841660608089019190915288519687018952600d548086168852938404851692870192909252820483169685019690965291909104169281019290925260175490919042905f90612bbd9083613524565b90506107088110612c0a576018805460ff1916905560648085526020808601829052604080870183905261012c606080890182905284885292870184905290860192909252840152612c4b565b6102588110612c4b5761019080855261012c602080870182905260408088018390526103e86060808a01829052948852918701839052860191909152908401525b6060840151600c54600160901b900465ffffffffffff908116911614612cde578351600c805460208701516040880151606089015165ffffffffffff908116600160901b0265ffffffffffff60901b19928216600160601b0292909216600160601b600160c01b0319938216600160301b026001600160601b031990951691909616179290921716929092179190911790555b6060830151600d54600160901b900465ffffffffffff908116911614612020578251600d805460208601516040870151606088015165ffffffffffff908116600160901b0265ffffffffffff60901b19928216600160601b0292909216600160601b600160c01b0319938216600160301b026001600160601b0319909516919096161792909217169290921791909117905550505050565b6060612d8484845f85612e81565b949350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612dbf57612dbf6133ab565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612e1357612e136133ab565b6001600160a01b03928316602091820292909201015260125460405163791ac94760e01b815291169063791ac94790612e589085905f908690309042906004016135a7565b5f604051808303815f87803b158015612e6f575f80fd5b505af1158015612468573d5f803e3d5ffd5b606082471015612ee25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109ad565b5f80866001600160a01b03168587604051612efd9190613616565b5f6040518083038185875af1925050503d805f8114612f37576040519150601f19603f3d011682016040523d82523d5f602084013e612f3c565b606091505b5091509150612f4d87838387612f58565b979650505050505050565b60608315612fc65782515f03612fbf576001600160a01b0385163b612fbf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109ad565b5081612d84565b612d848383815115612fdb5781518083602001fd5b8060405162461bcd60e51b81526004016109ad9190613052565b80356001600160a01b038116811461300b575f80fd5b919050565b5f60208284031215613020575f80fd5b61302982612ff5565b9392505050565b5f5b8381101561304a578181015183820152602001613032565b50505f910152565b602081525f8251806020840152613070816040850160208701613030565b601f01601f19169190910160400192915050565b5f8060408385031215613095575f80fd5b61309e83612ff5565b946020939093013593505050565b5f602082840312156130bc575f80fd5b5035919050565b5f8083601f8401126130d3575f80fd5b5081356001600160401b038111156130e9575f80fd5b6020830191508360208260051b8501011115613103575f80fd5b9250929050565b5f805f806040858703121561311d575f80fd5b84356001600160401b0380821115613133575f80fd5b61313f888389016130c3565b90965094506020870135915080821115613157575f80fd5b50613164878288016130c3565b95989497509550505050565b5f805f60608486031215613182575f80fd5b61318b84612ff5565b925061319960208501612ff5565b9150604084013590509250925092565b803565ffffffffffff8116811461300b575f80fd5b5f805f606084860312156131d0575f80fd5b6131d9846131a9565b92506131e7602085016131a9565b91506131f5604085016131a9565b90509250925092565b5f6020828403121561320e575f80fd5b81356001600160801b0381168114613029575f80fd5b5f8060408385031215613235575f80fd5b61323e83612ff5565b915061324c60208401612ff5565b90509250929050565b8015158114613262575f80fd5b50565b5f8060408385031215613276575f80fd5b61327f83612ff5565b9150602083013561328f81613255565b809150509250929050565b5f80604083850312156132ab575f80fd5b50508035926020909101359150565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156132ff575f80fd5b5051919050565b5f60208284031215613316575f80fd5b815161302981613255565b600181811c9082168061333557607f821691505b60208210810361335357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c8c57610c8c613359565b634e487b7160e01b5f52601260045260245ffd5b5f826133a6576133a6613384565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f600182016133d0576133d0613359565b5060010190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b65ffffffffffff81811683821601908082111561341c5761341c613359565b5092915050565b600181815b8085111561345d57815f190482111561344357613443613359565b8085161561345057918102915b93841c9390800290613428565b509250929050565b5f8261347357506001610c8c565b8161347f57505f610c8c565b8160018114613495576002811461349f576134bb565b6001915050610c8c565b60ff8411156134b0576134b0613359565b50506001821b610c8c565b5060208310610133831016604e8410600b84101617156134de575081810a610c8c565b6134e88383613423565b805f19048211156134fb576134fb613359565b029392505050565b5f61302960ff841683613465565b80820180821115610c8c57610c8c613359565b81810381811115610c8c57610c8c613359565b6001600160801b0381811683821602808216919082811461355a5761355a613359565b505092915050565b5f6001600160801b038084168061357b5761357b613384565b92169190910492915050565b6001600160401b0381811683821601908082111561341c5761341c613359565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156135f55784516001600160a01b0316835293830193918301916001016135d0565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251613627818460208701613030565b919091019291505056fea264697066735822122043d4b547586f4effd20725177e1c8df8ec99a6d6e0678f47d5c8bc8d9595fff464736f6c63430008140033

Deployed Bytecode

0x60806040526004361061028e575f3560e01c8063790ca41311610155578063b3103465116100be578063dd62ed3e11610078578063dd62ed3e14610892578063f270fde4146108b1578063f2fde38b146108fb578063f8686f071461091a578063fd607aad1461092e578063fe40fd711461094d575f80fd5b8063b3103465146107ca578063bedafd01146107e9578063c78d0fa014610808578063c876d0b91461081d578063cc1776d314610836578063ccad03e114610873575f80fd5b80639e7261af1161010f5780639e7261af146106fe5780639e93ad8e14610712578063a457c2d71461073f578063a5ece9411461075e578063a9059cbb1461077d578063b0249cc61461079c575f80fd5b8063790ca413146106525780638503376214610667578063860a32ec146106865780638d3e6e401461069f5780638da5cb5b146106cd57806395d89b41146106ea575f80fd5b806339509351116101f757806366ebd39a116101b157806366ebd39a146105445780636d7adcad1461056357806370a08231146105d7578063715018a61461060b57806372e8a1f81461061f578063751039fc1461063e575f80fd5b806339509351146104135780633ad10ef614610432578063452ed4f1146104695780634f7041a5146104885780635431c94e146104f75780635a90a49e14610516575f80fd5b80632369bf83116102485780632369bf831461036357806323b872dd146103825780632f0f5e4f146103a1578063313ce567146103c0578063362919a7146103db57806336e18e19146103f4575f80fd5b806306f200031461029957806306fdde03146102ae578063095ea7b3146102d857806318160ddd1461030757806321045918146103255780632307b44114610344575f80fd5b3661029557005b5f80fd5b6102ac6102a7366004613010565b610983565b005b3480156102b9575f80fd5b506102c2610be9565b6040516102cf9190613052565b60405180910390f35b3480156102e3575f80fd5b506102f76102f2366004613084565b610c79565b60405190151581526020016102cf565b348015610312575f80fd5b506002545b6040519081526020016102cf565b348015610330575f80fd5b506102ac61033f3660046130ac565b610c92565b34801561034f575f80fd5b506102ac61035e36600461310a565b610ddd565b34801561036e575f80fd5b506102ac61037d366004613010565b610ebb565b34801561038d575f80fd5b506102f761039c366004613170565b610f2d565b3480156103ac575f80fd5b506102ac6103bb3660046131be565b610f50565b3480156103cb575f80fd5b50604051601281526020016102cf565b3480156103e6575f80fd5b506018546102f79060ff1681565b3480156103ff575f80fd5b506102ac61040e3660046131fe565b6110cf565b34801561041e575f80fd5b506102f761042d366004613084565b6111e7565b34801561043d575f80fd5b50600a54610451906001600160a01b031681565b6040516001600160a01b0390911681526020016102cf565b348015610474575f80fd5b50601154610451906001600160a01b031681565b348015610493575f80fd5b50600c546104c59065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b90041684565b6040805165ffffffffffff958616815293851660208501529184169183019190915290911660608201526080016102cf565b348015610502575f80fd5b506102ac610511366004613224565b611208565b348015610521575f80fd5b506102f7610530366004613010565b60066020525f908152604090205460ff1681565b34801561054f575f80fd5b506102ac61055e3660046131fe565b611368565b34801561056e575f80fd5b50600e546105a2906001600160401b0380821691600160401b8104821691600160801b82041690600160c01b900460ff1684565b6040516102cf94939291906001600160401b039485168152928416602084015292166040820152901515606082015260800190565b3480156105e2575f80fd5b506103176105f1366004613010565b6001600160a01b03165f9081526020819052604090205490565b348015610616575f80fd5b506102ac61147b565b34801561062a575f80fd5b50600b54610451906001600160a01b031681565b348015610649575f80fd5b506102ac6114ee565b34801561065d575f80fd5b5061031760175481565b348015610672575f80fd5b506102ac610681366004613010565b611599565b348015610691575f80fd5b50600f546102f79060ff1681565b3480156106aa575f80fd5b506102f76106b9366004613010565b60076020525f908152604090205460ff1681565b3480156106d8575f80fd5b506005546001600160a01b0316610451565b3480156106f5575f80fd5b506102c261160b565b348015610709575f80fd5b506102ac61161a565b34801561071d575f80fd5b5061072761271081565b6040516001600160401b0390911681526020016102cf565b34801561074a575f80fd5b506102f7610759366004613084565b611695565b348015610769575f80fd5b50600954610451906001600160a01b031681565b348015610788575f80fd5b506102f7610797366004613084565b61170f565b3480156107a7575f80fd5b506102f76107b6366004613010565b60086020525f908152604090205460ff1681565b3480156107d5575f80fd5b506102ac6107e4366004613010565b61171c565b3480156107f4575f80fd5b506102ac610803366004613265565b61178e565b348015610813575f80fd5b5061031760105481565b348015610828575f80fd5b506014546102f79060ff1681565b348015610841575f80fd5b50600d546104c59065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b90041684565b34801561087e575f80fd5b506102ac61088d366004613265565b6118b8565b34801561089d575f80fd5b506103176108ac366004613224565b6119da565b3480156108bc575f80fd5b506016546108db906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016102cf565b348015610906575f80fd5b506102ac610915366004613010565b611a04565b348015610925575f80fd5b506102ac611aee565b348015610939575f80fd5b506102ac6109483660046131be565b611b69565b348015610958575f80fd5b5061031761096736600461329a565b601560209081525f928352604080842090915290825290205481565b6005546001600160a01b031633146109b65760405162461bcd60e51b81526004016109ad906132ba565b60405180910390fd5b5f471180156109d15750305f90815260208190526040812054115b6109d9575f80fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004015f604051808303818588803b158015610a32575f80fd5b505af1158015610a44573d5f803e3d5ffd5b5050601154305f81815260208190526040902054610a7295509093506001600160a01b039091169150611ce8565b6011546040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015610ae3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0791906132ef565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610b4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b739190613306565b506011546040516335313c2160e11b81526001600160a01b03838116600483015290911690636a627842906024016020604051808303815f875af1158015610bbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be191906132ef565b505042601755565b606060038054610bf890613321565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490613321565b8015610c6f5780601f10610c4657610100808354040283529160200191610c6f565b820191905f5260205f20905b815481529060010190602001808311610c5257829003601f168201915b5050505050905090565b5f33610c86818585611e8b565b60019150505b92915050565b6005546001600160a01b03163314610cbc5760405162461bcd60e51b81526004016109ad906132ba565b620186a0610cc960025490565b610cd490600161336d565b610cde9190613398565b811015610d4b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109ad565b6103e8610d5760025490565b610d6290600561336d565b610d6c9190613398565b811115610dd85760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109ad565b601055565b6005546001600160a01b03163314610e075760405162461bcd60e51b81526004016109ad906132ba565b828114610e4f5760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016109ad565b5f5b83811015610eb457610ea233868684818110610e6f57610e6f6133ab565b9050602002016020810190610e849190613010565b858585818110610e9657610e966133ab565b90506020020135611ce8565b80610eac816133bf565b915050610e51565b5050505050565b6005546001600160a01b03163314610ee55760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b038116610f0b5760405162461bcd60e51b81526004016109ad906133d7565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610f3a858285611fae565b610f45858585612026565b506001949350505050565b6005546001600160a01b03163314610f7a5760405162461bcd60e51b81526004016109ad906132ba565b604080516080810182525f606082015265ffffffffffff8581168252848116602083015283169181019190915281610fb284866133fd565b610fbc91906133fd565b65ffffffffffff166060820181905261012c10156110165760405162461bcd60e51b81526020600482015260176024820152764b65657020746178206174206f722062656c6f7720332560481b60448201526064016109ad565b606081015160405165ffffffffffff90911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600c80546020840151604085015160609095015165ffffffffffff908116600160901b0265ffffffffffff60901b19968216600160601b0296909616600160601b600160c01b0319928216600160301b026001600160601b03199094169190951617919091171691909117919091179055505050565b6005546001600160a01b031633146110f95760405162461bcd60e51b81526004016109ad906132ba565b6111056012600a613503565b6103e861111160025490565b61111c90600561336d565b6111269190613398565b6111309190613398565b816001600160801b031610156111725760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109ad565b61117e6012600a613503565b611191906001600160801b03831661336d565b601680546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b5f33610c868185856111f983836119da565b6112039190613511565b611e8b565b6005546001600160a01b031633146112325760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b0382166112885760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109ad565b306001600160a01b038316036112ee5760405162461bcd60e51b815260206004820152602560248201527f5f746f6b656e20616464726573732063616e6e6f74206265206e6174697665206044820152643a37b5b2b760d91b60648201526084016109ad565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611332573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135691906132ef565b90506113638383836120a4565b505050565b6005546001600160a01b031633146113925760405162461bcd60e51b81526004016109ad906132ba565b61139e6012600a613503565b60646113a960025490565b6113b490600161336d565b6113be9190613398565b6113c89190613398565b816001600160801b0316101561140a5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109ad565b6114166012600a613503565b611429906001600160801b03831661336d565b601680546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788906020016111dc565b6005546001600160a01b031633146114a55760405162461bcd60e51b81526004016109ad906132ba565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115185760405162461bcd60e51b81526004016109ad906132ba565b600f805460ff19908116909155601480549091169055604080518082019091525f80825260208201525f61154b60025490565b6001600160801b03811680845260208401819052600160801b8102176016556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b6005546001600160a01b031633146115c35760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b0381166115e95760405162461bcd60e51b81526004016109ad906133d7565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610bf890613321565b6005546001600160a01b031633146116445760405162461bcd60e51b81526004016109ad906132ba565b60185460ff166116895760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48191a5cd8589b195960821b60448201526064016109ad565b6018805460ff19169055565b5f33816116a282866119da565b9050838110156117025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109ad565b610f458286868403611e8b565b5f33610c86818585612026565b6005546001600160a01b031633146117465760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b03811661176c5760405162461bcd60e51b81526004016109ad906133d7565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117b85760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b0382166117fd5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109ad565b306001600160a01b038316036118555760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e7472616374000000000000000060448201526064016109ad565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146118e25760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b0382166119275760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109ad565b8061197f576011546001600160a01b039081169083160361197f5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109ad565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce91016118ac565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611a2e5760405162461bcd60e51b81526004016109ad906132ba565b6001600160a01b038116611a935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ad565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b185760405162461bcd60e51b81526004016109ad906132ba565b60145460ff16611b5d5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48191a5cd8589b195960821b60448201526064016109ad565b6014805460ff19169055565b6005546001600160a01b03163314611b935760405162461bcd60e51b81526004016109ad906132ba565b604080516080810182525f606082015265ffffffffffff8581168252848116602083015283169181019190915281611bcb84866133fd565b611bd591906133fd565b65ffffffffffff166060820181905261012c1015611c2f5760405162461bcd60e51b81526020600482015260176024820152764b65657020746178206174206f722062656c6f7720332560481b60448201526064016109ad565b606081015160405165ffffffffffff90911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600d80546020840151604085015160609095015165ffffffffffff908116600160901b0265ffffffffffff60901b19968216600160601b0296909616600160601b600160c01b0319928216600160301b026001600160601b03199094169190951617919091171691909117919091179055505050565b6001600160a01b038316611d4c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ad565b6001600160a01b038216611dae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ad565b6001600160a01b0383165f9081526020819052604090205481811015611e255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109ad565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6001600160a01b038316611eed5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ad565b6001600160a01b038216611f4e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ad565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611fb984846119da565b90505f19811461202057818110156120135760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109ad565b6120208484848403611e8b565b50505050565b6001600160a01b0383165f9081526006602052604090205460ff1615801561206657506001600160a01b0382165f9081526006602052604090205460ff16155b1561209957600f5460ff1615612081576120818383836120f6565b61208c838383612470565b6120969082613524565b90505b611363838383611ce8565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113639084906127d9565b6001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526016546001600160801b038082168352600160801b90910416818601529589168552600890935292205460ff92831693919216801561215d575082155b156121fe5780516001600160801b03168411156121a65760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b60448201526064016109ad565b60208101516001600160801b03166121be8386613511565b11156121f95760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b60448201526064016109ad565b6122de565b6001600160a01b0385165f9081526008602052604090205460ff16801561223d57506001600160a01b0386165f9081526007602052604090205460ff16155b156122865780516001600160801b03168411156121f95760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b60448201526064016109ad565b826122de5760208101516001600160801b03166122a38386613511565b11156122de5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b60448201526064016109ad565b60145460ff1615612468576012546001600160a01b0386811691161480159061231557506011546001600160a01b03868116911614155b1561246857325f9081526013602052604090205443116123705760405162461bcd60e51b8152602060048201526016602482015275151c985b9cd9995c8811195b185e48195b98589b195960521b60448201526064016109ad565b326001600160a01b038616146123d25760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079656044820152601d60fa1b60648201526084016109ad565b325f90815260136020526040902043905560175442906123f390602d613511565b10612468573a5f908152601560209081526040808320878452909152902054431161244b5760405162461bcd60e51b8152602060048201526008602482015267223ab832902a3c3760c11b60448201526064016109ad565b3a5f90815260156020908152604080832087845290915290204390555b505050505050565b601054305f908152602081905260408120549091111580156124aa57506001600160a01b0384165f9081526008602052604090205460ff16155b156124b7576124b76128aa565b60185460ff16156124ca576124ca612b28565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600890529182205460ff1615612555575060408051608081018252600d5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b900490911660608201526125bd565b6001600160a01b0386165f9081526008602052604090205460ff16156125bd575060408051608081018252600c5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b900490911660608201525b606081015165ffffffffffff16156127c75760408051608081018252600e546001600160401b038082168352600160401b820481166020840152600160801b82041692820192909252600160c01b90910460ff161515606080830191909152820151612710906126359065ffffffffffff168761336d565b61263f9190613398565b9250633b9aca00826060015165ffffffffffff16835f015165ffffffffffff168561266a9190613537565b6126749190613562565b61267e9190613562565b8151829061268d908390613587565b6001600160401b031690525060608201516020830151633b9aca009165ffffffffffff908116916126bf911686613537565b6126c99190613562565b6126d39190613562565b816020018181516126e49190613587565b6001600160401b031690525060608201516040830151633b9aca009165ffffffffffff90811691612716911686613537565b6127209190613562565b61272a9190613562565b8160400181815161273b9190613587565b6001600160401b039081169091528251600e80546020860151604087015160608801511515600160c01b0260ff60c01b19918716600160801b029190911668ffffffffffffffffff60801b19928716600160401b026001600160801b03199094169590961694909417919091171692909217179055506127c587306001600160801b038616611ce8565b505b506001600160801b0316949350505050565b5f61282d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d769092919063ffffffff16565b805190915015611363578080602001905181019061284b9190613306565b6113635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109ad565b305f9081526020819052604081205460408051608081018252600e546001600160401b03808216808452600160401b8304821660208501819052600160801b8404909216948401859052600160c01b90920460ff161515606084015293945090925f92916129189190613587565b6129229190613587565b6001600160401b03169050821580612938575080155b1561294257505050565b60105461295090602861336d565b8311156129685760105461296590602861336d565b92505b8215612af05761297783612d8c565b602082015147905f906001600160401b031615612a0557600a5460208501516001600160a01b039091169084906129b7906001600160401b03168561336d565b6129c19190613398565b6040515f81818185875af1925050503d805f81146129fa576040519150601f19603f3d011682016040523d82523d5f602084013e6129ff565b606091505b50909150505b60408401516001600160401b031615612a8f57600b5460408501516001600160a01b03909116908490612a41906001600160401b03168561336d565b612a4b9190613398565b6040515f81818185875af1925050503d805f8114612a84576040519150601f19603f3d011682016040523d82523d5f602084013e612a89565b606091505b50909150505b4791508115612aed576009546040516001600160a01b039091169083905f81818185875af1925050503d805f8114612ae2576040519150601f19603f3d011682016040523d82523d5f602084013e612ae7565b606091505b50909150505b50505b505f808252602082018190526040820152600e80546060909201511515600160c01b026001600160c81b031990921691909117905550565b6040805160808082018352600c5465ffffffffffff8082168452600160301b8083048216602080870191909152600160601b808504841687890152600160901b94859004841660608089019190915288519687018952600d548086168852938404851692870192909252820483169685019690965291909104169281019290925260175490919042905f90612bbd9083613524565b90506107088110612c0a576018805460ff1916905560648085526020808601829052604080870183905261012c606080890182905284885292870184905290860192909252840152612c4b565b6102588110612c4b5761019080855261012c602080870182905260408088018390526103e86060808a01829052948852918701839052860191909152908401525b6060840151600c54600160901b900465ffffffffffff908116911614612cde578351600c805460208701516040880151606089015165ffffffffffff908116600160901b0265ffffffffffff60901b19928216600160601b0292909216600160601b600160c01b0319938216600160301b026001600160601b031990951691909616179290921716929092179190911790555b6060830151600d54600160901b900465ffffffffffff908116911614612020578251600d805460208601516040870151606088015165ffffffffffff908116600160901b0265ffffffffffff60901b19928216600160601b0292909216600160601b600160c01b0319938216600160301b026001600160601b0319909516919096161792909217169290921791909117905550505050565b6060612d8484845f85612e81565b949350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612dbf57612dbf6133ab565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612e1357612e136133ab565b6001600160a01b03928316602091820292909201015260125460405163791ac94760e01b815291169063791ac94790612e589085905f908690309042906004016135a7565b5f604051808303815f87803b158015612e6f575f80fd5b505af1158015612468573d5f803e3d5ffd5b606082471015612ee25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109ad565b5f80866001600160a01b03168587604051612efd9190613616565b5f6040518083038185875af1925050503d805f8114612f37576040519150601f19603f3d011682016040523d82523d5f602084013e612f3c565b606091505b5091509150612f4d87838387612f58565b979650505050505050565b60608315612fc65782515f03612fbf576001600160a01b0385163b612fbf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109ad565b5081612d84565b612d848383815115612fdb5781518083602001fd5b8060405162461bcd60e51b81526004016109ad9190613052565b80356001600160a01b038116811461300b575f80fd5b919050565b5f60208284031215613020575f80fd5b61302982612ff5565b9392505050565b5f5b8381101561304a578181015183820152602001613032565b50505f910152565b602081525f8251806020840152613070816040850160208701613030565b601f01601f19169190910160400192915050565b5f8060408385031215613095575f80fd5b61309e83612ff5565b946020939093013593505050565b5f602082840312156130bc575f80fd5b5035919050565b5f8083601f8401126130d3575f80fd5b5081356001600160401b038111156130e9575f80fd5b6020830191508360208260051b8501011115613103575f80fd5b9250929050565b5f805f806040858703121561311d575f80fd5b84356001600160401b0380821115613133575f80fd5b61313f888389016130c3565b90965094506020870135915080821115613157575f80fd5b50613164878288016130c3565b95989497509550505050565b5f805f60608486031215613182575f80fd5b61318b84612ff5565b925061319960208501612ff5565b9150604084013590509250925092565b803565ffffffffffff8116811461300b575f80fd5b5f805f606084860312156131d0575f80fd5b6131d9846131a9565b92506131e7602085016131a9565b91506131f5604085016131a9565b90509250925092565b5f6020828403121561320e575f80fd5b81356001600160801b0381168114613029575f80fd5b5f8060408385031215613235575f80fd5b61323e83612ff5565b915061324c60208401612ff5565b90509250929050565b8015158114613262575f80fd5b50565b5f8060408385031215613276575f80fd5b61327f83612ff5565b9150602083013561328f81613255565b809150509250929050565b5f80604083850312156132ab575f80fd5b50508035926020909101359150565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156132ff575f80fd5b5051919050565b5f60208284031215613316575f80fd5b815161302981613255565b600181811c9082168061333557607f821691505b60208210810361335357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c8c57610c8c613359565b634e487b7160e01b5f52601260045260245ffd5b5f826133a6576133a6613384565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f600182016133d0576133d0613359565b5060010190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b65ffffffffffff81811683821601908082111561341c5761341c613359565b5092915050565b600181815b8085111561345d57815f190482111561344357613443613359565b8085161561345057918102915b93841c9390800290613428565b509250929050565b5f8261347357506001610c8c565b8161347f57505f610c8c565b8160018114613495576002811461349f576134bb565b6001915050610c8c565b60ff8411156134b0576134b0613359565b50506001821b610c8c565b5060208310610133831016604e8410600b84101617156134de575081810a610c8c565b6134e88383613423565b805f19048211156134fb576134fb613359565b029392505050565b5f61302960ff841683613465565b80820180821115610c8c57610c8c613359565b81810381811115610c8c57610c8c613359565b6001600160801b0381811683821602808216919082811461355a5761355a613359565b505092915050565b5f6001600160801b038084168061357b5761357b613384565b92169190910492915050565b6001600160401b0381811683821601908082111561341c5761341c613359565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156135f55784516001600160a01b0316835293830193918301916001016135d0565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251613627818460208701613030565b919091019291505056fea264697066735822122043d4b547586f4effd20725177e1c8df8ec99a6d6e0678f47d5c8bc8d9595fff464736f6c63430008140033

Deployed Bytecode Sourcemap

22236:14980:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36749:464;;;;;;:::i;:::-;;:::i;:::-;;4274:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6634:201;;;;;;;;;;-1:-1:-1;6634:201:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;6634:201:0;1298:187:1;5403:108:0;;;;;;;;;;-1:-1:-1;5491:12:0;;5403:108;;;1636:25:1;;;1624:2;1609:18;5403:108:0;1490:177:1;32252:346:0;;;;;;;;;;-1:-1:-1;32252:346:0;;;;;:::i;:::-;;:::i;34214:333::-;;;;;;;;;;-1:-1:-1;34214:333:0;;;;;:::i;:::-;;:::i;34943:173::-;;;;;;;;;;-1:-1:-1;34943:173:0;;;;;:::i;:::-;;:::i;7415:261::-;;;;;;;;;;-1:-1:-1;7415:261:0;;;;;:::i;:::-;;:::i;32606:455::-;;;;;;;;;;-1:-1:-1;32606:455:0;;;;;:::i;:::-;;:::i;5245:93::-;;;;;;;;;;-1:-1:-1;5245:93:0;;5328:2;3987:36:1;;3975:2;3960:18;5245:93:0;3845:184:1;23587:24:0;;;;;;;;;;-1:-1:-1;23587:24:0;;;;;;;;31613:322;;;;;;;;;;-1:-1:-1;31613:322:0;;;;;:::i;:::-;;:::i;8085:238::-;;;;;;;;;;-1:-1:-1;8085:238:0;;;;;:::i;:::-;;:::i;22480:25::-;;;;;;;;;;-1:-1:-1;22480:25:0;;;;-1:-1:-1;;;;;22480:25:0;;;;;;-1:-1:-1;;;;;4504:32:1;;;4486:51;;4474:2;4459:18;22480:25:0;4340:203:1;22719:21:0;;;;;;;;;;-1:-1:-1;22719:21:0;;;;-1:-1:-1;;;;;22719:21:0;;;22549:19;;;;;;;;;;-1:-1:-1;22549:19:0;;;;;;;;;-1:-1:-1;;;22549:19:0;;;;;-1:-1:-1;;;22549:19:0;;;;;-1:-1:-1;;;22549:19:0;;;;;;;;;4781:14:1;4822:15;;;4804:34;;4874:15;;;4869:2;4854:18;;4847:43;4926:15;;;4906:18;;;4899:43;;;;4978:15;;;4973:2;4958:18;;4951:43;4758:3;4743:19;22549::0;4548:452:1;34555:380:0;;;;;;;;;;-1:-1:-1;34555:380:0;;;;;:::i;:::-;;:::i;22279:47::-;;;;;;;;;;-1:-1:-1;22279:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31943:301;;;;;;;;;;-1:-1:-1;31943:301:0;;;;;:::i;:::-;;:::i;22604:32::-;;;;;;;;;;-1:-1:-1;22604:32:0;;;;-1:-1:-1;;;;;22604:32:0;;;;-1:-1:-1;;;22604:32:0;;;;;-1:-1:-1;;;22604:32:0;;;;-1:-1:-1;;;22604:32:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5544:15:1;;;5526:34;;5596:15;;;5591:2;5576:18;;5569:43;5648:15;;5643:2;5628:18;;5621:43;5707:14;;5700:22;5695:2;5680:18;;5673:50;5476:3;5461:19;;5270:459;5574:127:0;;;;;;;;;;-1:-1:-1;5574:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5675:18:0;5648:7;5675:18;;;;;;;;;;;;5574:127;13188:150;;;;;;;;;;;;;:::i;22512:28::-;;;;;;;;;;-1:-1:-1;22512:28:0;;;;-1:-1:-1;;;;;22512:28:0;;;33846:360;;;;;;;;;;;;;:::i;23555:25::-;;;;;;;;;;;;;;;;35124:161;;;;;;;;;;-1:-1:-1;35124:161:0;;;;;:::i;:::-;;:::i;22645:26::-;;;;;;;;;;-1:-1:-1;22645:26:0;;;;;;;;22333:49;;;;;;;;;;-1:-1:-1;22333:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12974:79;;;;;;;;;;-1:-1:-1;13039:6:0;;-1:-1:-1;;;;;13039:6:0;12974:79;;4493:104;;;;;;;;;;;;;:::i;33700:138::-;;;;;;;;;;;;;:::i;23094:42::-;;;;;;;;;;;;23131:5;23094:42;;;;;-1:-1:-1;;;;;5896:31:1;;;5878:50;;5866:2;5851:18;23094:42:0;5734:200:1;8826:436:0;;;;;;;;;;-1:-1:-1;8826:436:0;;;;;:::i;:::-;;:::i;22442:31::-;;;;;;;;;;-1:-1:-1;22442:31:0;;;;-1:-1:-1;;;;;22442:31:0;;;5907:193;;;;;;;;;;-1:-1:-1;5907:193:0;;;;;:::i;:::-;;:::i;22391:42::-;;;;;;;;;;-1:-1:-1;22391:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35293:167;;;;;;;;;;-1:-1:-1;35293:167:0;;;;;:::i;:::-;;:::i;30926:319::-;;;;;;;;;;-1:-1:-1;30926:319:0;;;;;:::i;:::-;;:::i;22680:30::-;;;;;;;;;;;;;;;;22940:39;;;;;;;;;;-1:-1:-1;22940:39:0;;;;;;;;22575:20;;;;;;;;;;-1:-1:-1;22575:20:0;;;;;;;;;-1:-1:-1;;;22575:20:0;;;;;-1:-1:-1;;;22575:20:0;;;;;-1:-1:-1;;;22575:20:0;;;;;31253:352;;;;;;;;;;-1:-1:-1;31253:352:0;;;;;:::i;:::-;;:::i;6163:151::-;;;;;;;;;;-1:-1:-1;6163:151:0;;;;;:::i;:::-;;:::i;23061:24::-;;;;;;;;;;-1:-1:-1;23061:24:0;;;;-1:-1:-1;;;;;23061:24:0;;;;-1:-1:-1;;;23061:24:0;;;;;;;;;-1:-1:-1;;;;;6627:15:1;;;6609:34;;6679:15;;;;6674:2;6659:18;;6652:43;6529:18;23061:24:0;6382:319:1;13346:244:0;;;;;;;;;;-1:-1:-1;13346:244:0;;;;;:::i;:::-;;:::i;33535:157::-;;;;;;;;;;;;;:::i;33069:458::-;;;;;;;;;;-1:-1:-1;33069:458:0;;;;;:::i;:::-;;:::i;22986:66::-;;;;;;;;;;-1:-1:-1;22986:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;36749:464;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;;;;;;;;;36847:1:::1;36823:21;:25;:57;;;;-1:-1:-1::0;36870:4:0::1;36879:1;5675:18:::0;;;;;;;;;;;36852:28:::1;36823:57;36815:66;;;::::0;::::1;;36894:4;-1:-1:-1::0;;;;;36894:12:0::1;;36914:21;36894:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;36990:6:0::1;::::0;36975:4:::1;5648:7:::0;5675:18;;;;;;;;;;;36951:73:::1;::::0;-1:-1:-1;36975:4:0;;-1:-1:-1;;;;;;36990:6:0;;::::1;::::0;-1:-1:-1;36951:15:0::1;:73::i;:::-;37074:6;::::0;37083:46:::1;::::0;-1:-1:-1;;;37083:46:0;;37123:4:::1;37083:46;::::0;::::1;4486:51:1::0;-1:-1:-1;;;;;37050:4:0::1;37035:30:::0;::::1;::::0;::::1;::::0;37074:6;::::1;::::0;37035:30;;37083:31:::1;::::0;4459:18:1;;37083:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37035:95;::::0;-1:-1:-1;;;;;;37035:95:0::1;::::0;;;;;;-1:-1:-1;;;;;7701:32:1;;;37035:95:0::1;::::0;::::1;7683:51:1::0;7750:18;;;7743:34;7656:18;;37035:95:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37149:6:0::1;::::0;37141:25:::1;::::0;-1:-1:-1;;;37141:25:0;;-1:-1:-1;;;;;4504:32:1;;;37141:25:0::1;::::0;::::1;4486:51:1::0;37149:6:0;;::::1;::::0;37141:20:::1;::::0;4459:18:1;;37141:25:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37190:15:0::1;37177:10;:28:::0;36749:464::o;4274:100::-;4328:13;4361:5;4354:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4274:100;:::o;6634:201::-;6717:4;260:10;6773:32;260:10;6789:7;6798:6;6773:8;:32::i;:::-;6823:4;6816:11;;;6634:201;;;;;:::o;32252:346::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;32373:6:::1;32352:13;5491:12:::0;;;5403:108;32352:13:::1;:17;::::0;32368:1:::1;32352:17;:::i;:::-;32351:28;;;;:::i;:::-;32338:9;:41;;32330:107;;;::::0;-1:-1:-1;;;32330:107:0;;9187:2:1;32330:107:0::1;::::0;::::1;9169:21:1::0;9226:2;9206:18;;;9199:30;9265:34;9245:18;;;9238:62;-1:-1:-1;;;9316:18:1;;;9309:51;9377:19;;32330:107:0::1;8985:417:1::0;32330:107:0::1;32491:4;32470:13;5491:12:::0;;;5403:108;32470:13:::1;:17;::::0;32486:1:::1;32470:17;:::i;:::-;32469:26;;;;:::i;:::-;32456:9;:39;;32448:104;;;::::0;-1:-1:-1;;;32448:104:0;;9609:2:1;32448:104:0::1;::::0;::::1;9591:21:1::0;9648:2;9628:18;;;9621:30;9687:34;9667:18;;;9660:62;-1:-1:-1;;;9738:18:1;;;9731:50;9798:19;;32448:104:0::1;9407:416:1::0;32448:104:0::1;32563:15;:27:::0;32252:346::o;34214:333::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;34339:37;;::::1;34331:72;;;::::0;-1:-1:-1;;;34331:72:0;;10030:2:1;34331:72:0::1;::::0;::::1;10012:21:1::0;10069:2;10049:18;;;10042:30;-1:-1:-1;;;10088:18:1;;;10081:52;10150:18;;34331:72:0::1;9828:346:1::0;34331:72:0::1;34418:9;34414:126;34433:18:::0;;::::1;34414:126;;;34472:56;34488:10;34500:7;;34508:1;34500:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;34512:12;;34525:1;34512:15;;;;;;;:::i;:::-;;;;;;;34472;:56::i;:::-;34453:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34414:126;;;;34214:333:::0;;;;:::o;34943:173::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35031:22:0;::::1;35023:47;;;;-1:-1:-1::0;;;35023:47:0::1;;;;;;;:::i;:::-;35081:16;:27:::0;;-1:-1:-1;;;;;;35081:27:0::1;-1:-1:-1::0;;;;;35081:27:0;;;::::1;::::0;;;::::1;::::0;;34943:173::o;7415:261::-;7512:4;260:10;7570:38;7586:4;260:10;7601:6;7570:15;:38::i;:::-;7619:27;7629:4;7635:2;7639:6;7619:9;:27::i;:::-;-1:-1:-1;7664:4:0;;7415:261;-1:-1:-1;;;;7415:261:0:o;32606:455::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;32744:34:0::1;::::0;;::::1;::::0;;32789:22;;::::1;-1:-1:-1::0;;;32789:22:0;32822:28;::::1;-1:-1:-1::0;;;32822:28:0;;;;;32878:23:::1;32789:22:::0;32744:34;32878:23:::1;:::i;:::-;:36;;;;:::i;:::-;32861:53;;:14;::::0;::::1;:53:::0;;;32952:3:::1;-1:-1:-1::0;32933:22:0::1;32925:58;;;::::0;-1:-1:-1;;;32925:58:0;;11175:2:1;32925:58:0::1;::::0;::::1;11157:21:1::0;11214:2;11194:18;;;11187:30;-1:-1:-1;;;11233:18:1;;;11226:53;11296:18;;32925:58:0::1;10973:347:1::0;32925:58:0::1;33013:14;::::0;::::1;::::0;32999:29:::1;::::0;11500:14:1;11488:27;;;11470:46;;32999:29:0::1;::::0;11458:2:1;11443:18;32999:29:0::1;;;;;;;33039:14:::0;;:6:::1;:14:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;33039:14:0::1;-1:-1:-1::0;;;;33039:14:0;;::::1;-1:-1:-1::0;;;33039:14:0::1;::::0;;;;-1:-1:-1;;;;;;;;33039:14:0;;::::1;-1:-1:-1::0;;;33039:14:0::1;-1:-1:-1::0;;;;;;33039:14:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;32606:455:0:o;31613:322::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;31753:14:::1;5328:2:::0;31753::::1;:14;:::i;:::-;31746:4;31726:13;5491:12:::0;;;5403:108;31726:13:::1;:17;::::0;31742:1:::1;31726:17;:::i;:::-;:24;;;;:::i;:::-;31725:43;;;;:::i;:::-;31707:14;-1:-1:-1::0;;;;;31707:61:0::1;;;31699:81;;;::::0;-1:-1:-1;;;31699:81:0;;13112:2:1;31699:81:0::1;::::0;::::1;13094:21:1::0;13151:1;13131:18;;;13124:29;-1:-1:-1;;;13169:18:1;;;13162:37;13216:18;;31699:81:0::1;12910:330:1::0;31699:81:0::1;31845:14;5328:2:::0;31845::::1;:14;:::i;:::-;31827:33;::::0;-1:-1:-1;;;;;31827:33:0;::::1;;:::i;:::-;31791:8;:70:::0;;-1:-1:-1;;;;;;31791:70:0::1;-1:-1:-1::0;;;;;31791:70:0;;;::::1;::::0;;::::1;::::0;;31877:50:::1;::::0;13391:66:1;;;31877:50:0::1;::::0;13379:2:1;13364:18;31877:50:0::1;;;;;;;;31613:322:::0;:::o;8085:238::-;8173:4;260:10;8229:64;260:10;8245:7;8282:10;8254:25;260:10;8245:7;8254:9;:25::i;:::-;:38;;;;:::i;:::-;8229:8;:64::i;34555:380::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34644:20:0;::::1;34636:59;;;::::0;-1:-1:-1;;;34636:59:0;;13800:2:1;34636:59:0::1;::::0;::::1;13782:21:1::0;13839:2;13819:18;;;13812:30;13878:28;13858:18;;;13851:56;13924:18;;34636:59:0::1;13598:350:1::0;34636:59:0::1;34732:4;-1:-1:-1::0;;;;;34714:23:0;::::1;::::0;34706:73:::1;;;::::0;-1:-1:-1;;;34706:73:0;;14155:2:1;34706:73:0::1;::::0;::::1;14137:21:1::0;14194:2;14174:18;;;14167:30;14233:34;14213:18;;;14206:62;-1:-1:-1;;;14284:18:1;;;14277:35;14329:19;;34706:73:0::1;13953:401:1::0;34706:73:0::1;34817:39;::::0;-1:-1:-1;;;34817:39:0;;34850:4:::1;34817:39;::::0;::::1;4486:51:1::0;34790:24:0::1;::::0;-1:-1:-1;;;;;34817:24:0;::::1;::::0;::::1;::::0;4459:18:1;;34817:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34790:66;;34867:60;34897:6;34905:3;34910:16;34867:22;:60::i;:::-;34625:310;34555:380:::0;;:::o;31943:301::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;32077:14:::1;5328:2:::0;32077::::1;:14;:::i;:::-;32071:3;32051:13;5491:12:::0;;;5403:108;32051:13:::1;:17;::::0;32067:1:::1;32051:17;:::i;:::-;:23;;;;:::i;:::-;32050:42;;;;:::i;:::-;32032:14;-1:-1:-1::0;;;;;32032:60:0::1;;;32024:80;;;::::0;-1:-1:-1;;;32024:80:0;;13112:2:1;32024:80:0::1;::::0;::::1;13094:21:1::0;13151:1;13131:18;;;13124:29;-1:-1:-1;;;13169:18:1;;;13162:37;13216:18;;32024:80:0::1;12910:330:1::0;32024:80:0::1;32164:14;5328:2:::0;32164::::1;:14;:::i;:::-;32146:33;::::0;-1:-1:-1;;;;;32146:33:0;::::1;;:::i;:::-;32115:8;:65:::0;;-1:-1:-1;;;;;32115:65:0;;::::1;-1:-1:-1::0;;;32115:65:0;;::::1;::::0;::::1;;::::0;;;;32196:40:::1;::::0;32215:20;;;::::1;;13391:66:1::0;;32196:40:0::1;::::0;13379:2:1;13364:18;32196:40:0::1;13245:218:1::0;13188:150:0;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;13281:6:::1;::::0;13260:40:::1;::::0;13297:1:::1;::::0;-1:-1:-1;;;;;13281:6:0::1;::::0;13260:40:::1;::::0;13297:1;;13260:40:::1;13311:6;:19:::0;;-1:-1:-1;;;;;;13311:19:0::1;::::0;;13188:150::o;33846:360::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;33900:7:::1;:15:::0;;-1:-1:-1;;33900:15:0;;::::1;::::0;;;33926:20:::1;:28:::0;;;;::::1;::::0;;-1:-1:-1;;;;;;;;;33910:5:0::1;-1:-1:-1::0;;;;;;;34001:14:0::1;34018:13;5491:12:::0;;;5403:108;34018:13:::1;-1:-1:-1::0;;;;;34042:44:0;::::1;::::0;;;34097:21:::1;::::0;::::1;:39:::0;;;-1:-1:-1;;;34147:20:0;::::1;;:8;:20:::0;34183:15:::1;::::0;34001:30;;-1:-1:-1;34183:15:0::1;::::0;34042:26:::1;::::0;34183:15:::1;33889:317;;33846:360::o:0;35124:161::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35206:22:0;::::1;35198:47;;;;-1:-1:-1::0;;;35198:47:0::1;;;;;;;:::i;:::-;35256:10;:21:::0;;-1:-1:-1;;;;;;35256:21:0::1;-1:-1:-1::0;;;;;35256:21:0;;;::::1;::::0;;;::::1;::::0;;35124:161::o;4493:104::-;4549:13;4582:7;4575:14;;;;;:::i;33700:138::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;33766:12:::1;::::0;::::1;;33758:41;;;::::0;-1:-1:-1;;;33758:41:0;;14561:2:1;33758:41:0::1;::::0;::::1;14543:21:1::0;14600:2;14580:18;;;14573:30;-1:-1:-1;;;14619:18:1;;;14612:46;14675:18;;33758:41:0::1;14359:340:1::0;33758:41:0::1;33810:12;:20:::0;;-1:-1:-1;;33810:20:0::1;::::0;;33700:138::o;8826:436::-;8919:4;260:10;8919:4;9002:25;260:10;9019:7;9002:9;:25::i;:::-;8975:52;;9066:15;9046:16;:35;;9038:85;;;;-1:-1:-1;;;9038:85:0;;14906:2:1;9038:85:0;;;14888:21:1;14945:2;14925:18;;;14918:30;14984:34;14964:18;;;14957:62;-1:-1:-1;;;15035:18:1;;;15028:35;15080:19;;9038:85:0;14704:401:1;9038:85:0;9159:60;9168:5;9175:7;9203:15;9184:16;:34;9159:8;:60::i;5907:193::-;5986:4;260:10;6042:28;260:10;6059:2;6063:6;6042:9;:28::i;35293:167::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35378:22:0;::::1;35370:47;;;;-1:-1:-1::0;;;35370:47:0::1;;;;;;;:::i;:::-;35428:13;:24:::0;;-1:-1:-1;;;;;;35428:24:0::1;-1:-1:-1::0;;;;;35428:24:0;;;::::1;::::0;;;::::1;::::0;;35293:167::o;30926:319::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31024:22:0;::::1;31016:47;;;::::0;-1:-1:-1;;;31016:47:0;;15312:2:1;31016:47:0::1;::::0;::::1;15294:21:1::0;15351:2;15331:18;;;15324:30;-1:-1:-1;;;15370:18:1;;;15363:42;15422:18;;31016:47:0::1;15110:336:1::0;31016:47:0::1;31102:4;-1:-1:-1::0;;;;;31082:25:0;::::1;::::0;31074:62:::1;;;::::0;-1:-1:-1;;;31074:62:0;;15653:2:1;31074:62:0::1;::::0;::::1;15635:21:1::0;15692:2;15672:18;;;15665:30;15731:26;15711:18;;;15704:54;15775:18;;31074:62:0::1;15451:348:1::0;31074:62:0::1;-1:-1:-1::0;;;;;31147:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;31147:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31199:38;;15972:51:1;;;16039:18;;;16032:50;31199:38:0::1;::::0;15945:18:1;31199:38:0::1;;;;;;;;30926:319:::0;;:::o;31253:352::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31353:22:0;::::1;31345:47;;;::::0;-1:-1:-1;;;31345:47:0;;15312:2:1;31345:47:0::1;::::0;::::1;15294:21:1::0;15351:2;15331:18;;;15324:30;-1:-1:-1;;;15370:18:1;;;15363:42;15422:18;;31345:47:0::1;15110:336:1::0;31345:47:0::1;31407:9;31403:90;;31452:6;::::0;-1:-1:-1;;;;;31452:6:0;;::::1;31440:18:::0;;::::1;::::0;31432:49:::1;;;::::0;-1:-1:-1;;;31432:49:0;;16295:2:1;31432:49:0::1;::::0;::::1;16277:21:1::0;16334:2;16314:18;;;16307:30;-1:-1:-1;;;16353:18:1;;;16346:48;16411:18;;31432:49:0::1;16093:342:1::0;31432:49:0::1;-1:-1:-1::0;;;;;31503:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;31503:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31557:40;;15972:51:1;;;16039:18;;;16032:50;31557:40:0::1;::::0;15945:18:1;31557:40:0::1;15804:284:1::0;6163:151:0;-1:-1:-1;;;;;6279:18:0;;;6252:7;6279:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6163:151::o;13346:244::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13435:22:0;::::1;13427:73;;;::::0;-1:-1:-1;;;13427:73:0;;16642:2:1;13427:73:0::1;::::0;::::1;16624:21:1::0;16681:2;16661:18;;;16654:30;16720:34;16700:18;;;16693:62;-1:-1:-1;;;16771:18:1;;;16764:36;16817:19;;13427:73:0::1;16440:402:1::0;13427:73:0::1;13537:6;::::0;13516:38:::1;::::0;-1:-1:-1;;;;;13516:38:0;;::::1;::::0;13537:6:::1;::::0;13516:38:::1;::::0;13537:6:::1;::::0;13516:38:::1;13565:6;:17:::0;;-1:-1:-1;;;;;;13565:17:0::1;-1:-1:-1::0;;;;;13565:17:0;;;::::1;::::0;;;::::1;::::0;;13346:244::o;33535:157::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;33604:20:::1;::::0;::::1;;33596:49;;;::::0;-1:-1:-1;;;33596:49:0;;14561:2:1;33596:49:0::1;::::0;::::1;14543:21:1::0;14600:2;14580:18;;;14573:30;-1:-1:-1;;;14619:18:1;;;14612:46;14675:18;;33596:49:0::1;14359:340:1::0;33596:49:0::1;33656:20;:28:::0;;-1:-1:-1;;33656:28:0::1;::::0;;33535:157::o;33069:458::-;13101:6;;-1:-1:-1;;;;;13101:6:0;260:10;13101:22;13093:67;;;;-1:-1:-1;;;13093:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;33208:34:0::1;::::0;;::::1;::::0;;33253:22;;::::1;-1:-1:-1::0;;;33253:22:0;33286:28;::::1;-1:-1:-1::0;;;33286:28:0;;;;;33342:23:::1;33253:22:::0;33208:34;33342:23:::1;:::i;:::-;:36;;;;:::i;:::-;33325:53;;:14;::::0;::::1;:53:::0;;;33416:3:::1;-1:-1:-1::0;33397:22:0::1;33389:58;;;::::0;-1:-1:-1;;;33389:58:0;;11175:2:1;33389:58:0::1;::::0;::::1;11157:21:1::0;11214:2;11194:18;;;11187:30;-1:-1:-1;;;11233:18:1;;;11226:53;11296:18;;33389:58:0::1;10973:347:1::0;33389:58:0::1;33478:14;::::0;::::1;::::0;33463:30:::1;::::0;11500:14:1;11488:27;;;11470:46;;33463:30:0::1;::::0;11458:2:1;11443:18;33463:30:0::1;;;;;;;33504:15:::0;;:7:::1;:15:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;33504:15:0::1;-1:-1:-1::0;;;;33504:15:0;;::::1;-1:-1:-1::0;;;33504:15:0::1;::::0;;;;-1:-1:-1;;;;;;;;33504:15:0;;::::1;-1:-1:-1::0;;;33504:15:0::1;-1:-1:-1::0;;;;;;33504:15:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;33069:458:0:o;9732:705::-;-1:-1:-1;;;;;9829:18:0;;9821:68;;;;-1:-1:-1;;;9821:68:0;;17049:2:1;9821:68:0;;;17031:21:1;17088:2;17068:18;;;17061:30;17127:34;17107:18;;;17100:62;-1:-1:-1;;;17178:18:1;;;17171:35;17223:19;;9821:68:0;16847:401:1;9821:68:0;-1:-1:-1;;;;;9908:16:0;;9900:64;;;;-1:-1:-1;;;9900:64:0;;17455:2:1;9900:64:0;;;17437:21:1;17494:2;17474:18;;;17467:30;17533:34;17513:18;;;17506:62;-1:-1:-1;;;17584:18:1;;;17577:33;17627:19;;9900:64:0;17253:399:1;9900:64:0;-1:-1:-1;;;;;9999:15:0;;9977:19;9999:15;;;;;;;;;;;10033:21;;;;10025:72;;;;-1:-1:-1;;;10025:72:0;;17859:2:1;10025:72:0;;;17841:21:1;17898:2;17878:18;;;17871:30;17937:34;17917:18;;;17910:62;-1:-1:-1;;;17988:18:1;;;17981:36;18034:19;;10025:72:0;17657:402:1;10025:72:0;-1:-1:-1;;;;;10133:15:0;;;:9;:15;;;;;;;;;;;10151:20;;;10133:38;;10351:13;;;;;;;;;;:23;;;;;;10403:26;;1636:25:1;;;10351:13:0;;10403:26;;1609:18:1;10403:26:0;;;;;;;9810:627;9732:705;;;:::o;11587:346::-;-1:-1:-1;;;;;11689:19:0;;11681:68;;;;-1:-1:-1;;;11681:68:0;;18266:2:1;11681:68:0;;;18248:21:1;18305:2;18285:18;;;18278:30;18344:34;18324:18;;;18317:62;-1:-1:-1;;;18395:18:1;;;18388:34;18439:19;;11681:68:0;18064:400:1;11681:68:0;-1:-1:-1;;;;;11768:21:0;;11760:68;;;;-1:-1:-1;;;11760:68:0;;18671:2:1;11760:68:0;;;18653:21:1;18710:2;18690:18;;;18683:30;18749:34;18729:18;;;18722:62;-1:-1:-1;;;18800:18:1;;;18793:32;18842:19;;11760:68:0;18469:398:1;11760:68:0;-1:-1:-1;;;;;11841:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11893:32;;1636:25:1;;;11893:32:0;;1609:18:1;11893:32:0;;;;;;;11587:346;;;:::o;12224:419::-;12325:24;12352:25;12362:5;12369:7;12352:9;:25::i;:::-;12325:52;;-1:-1:-1;;12392:16:0;:37;12388:248;;12474:6;12454:16;:26;;12446:68;;;;-1:-1:-1;;;12446:68:0;;19074:2:1;12446:68:0;;;19056:21:1;19113:2;19093:18;;;19086:30;19152:31;19132:18;;;19125:59;19201:18;;12446:68:0;18872:353:1;12446:68:0;12558:51;12567:5;12574:7;12602:6;12583:16;:25;12558:8;:51::i;:::-;12314:329;12224:419;;;:::o;26144:394::-;-1:-1:-1;;;;;26290:20:0;;;;;;:14;:20;;;;;;;;26289:21;:44;;;;-1:-1:-1;;;;;;26315:18:0;;;;;;:14;:18;;;;;;;;26314:19;26289:44;26286:201;;;26352:7;;;;26349:75;;;26379:29;26391:4;26397:2;26401:6;26379:11;:29::i;:::-;26448:27;26458:4;26464:2;26468:6;26448:9;:27::i;:::-;26438:37;;;;:::i;:::-;;;26286:201;26499:31;26515:4;26520:2;26523:6;26499:15;:31::i;19760:177::-;19870:58;;;-1:-1:-1;;;;;7701:32:1;;19870:58:0;;;7683:51:1;7750:18;;;;7743:34;;;19870:58:0;;;;;;;;;;7656:18:1;;;;19870:58:0;;;;;;;;-1:-1:-1;;;;;19870:58:0;-1:-1:-1;;;19870:58:0;;;19843:86;;19863:5;;19843:19;:86::i;26546:1373::-;-1:-1:-1;;;;;26651:20:0;;;26629:19;26651:20;;;:16;:20;;;;;;;;;5675:18;;;;;;;26728:36;;;;;;;26756:8;26728:36;-1:-1:-1;;;;;26728:36:0;;;;;-1:-1:-1;;;26728:36:0;;;;;;;;26795:15;;;;;:9;:15;;;;;;26651:20;;;;;5675:18;;26795:15;:34;;;;;26815:14;26814:15;26795:34;26791:498;;;26864:26;;-1:-1:-1;;;;;26854:36:0;;;;26846:56;;;;-1:-1:-1;;;26846:56:0;;19565:2:1;26846:56:0;;;19547:21:1;19604:1;19584:18;;;19577:29;-1:-1:-1;;;19622:18:1;;;19615:37;19669:18;;26846:56:0;19363:330:1;26846:56:0;26949:21;;;;-1:-1:-1;;;;;26925:45:0;:20;26934:11;26925:6;:20;:::i;:::-;:45;;26917:68;;;;-1:-1:-1;;;26917:68:0;;19900:2:1;26917:68:0;;;19882:21:1;19939:2;19919:18;;;19912:30;-1:-1:-1;;;19958:18:1;;;19951:40;20008:18;;26917:68:0;19698:334:1;26917:68:0;26791:498;;;-1:-1:-1;;;;;27034:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;27052:22:0;;;;;;:16;:22;;;;;;;;27051:23;27034:40;27030:259;;;27109:26;;-1:-1:-1;;;;;27099:36:0;;;;27091:56;;;;-1:-1:-1;;;27091:56:0;;19565:2:1;27091:56:0;;;19547:21:1;19604:1;19584:18;;;19577:29;-1:-1:-1;;;19622:18:1;;;19615:37;19669:18;;27091:56:0;19363:330:1;27030:259:0;27178:14;27174:115;;27241:21;;;;-1:-1:-1;;;;;27217:45:0;:20;27226:11;27217:6;:20;:::i;:::-;:45;;27209:68;;;;-1:-1:-1;;;27209:68:0;;19900:2:1;27209:68:0;;;19882:21:1;19939:2;19919:18;;;19912:30;-1:-1:-1;;;19958:18:1;;;19951:40;20008:18;;27209:68:0;19698:334:1;27209:68:0;27305:20;;;;27301:611;;;27359:9;;-1:-1:-1;;;;;27345:24:0;;;27359:9;;27345:24;;;;:49;;-1:-1:-1;27387:6:0;;-1:-1:-1;;;;;27373:21:0;;;27387:6;;27373:21;;27345:49;27341:560;;;27447:9;27422:35;;;;:24;:35;;;;;;27460:12;-1:-1:-1;27414:85:0;;;;-1:-1:-1;;;27414:85:0;;20239:2:1;27414:85:0;;;20221:21:1;20278:2;20258:18;;;20251:30;-1:-1:-1;;;20297:18:1;;;20290:52;20359:18;;27414:85:0;20037:346:1;27414:85:0;27526:9;-1:-1:-1;;;;;27526:15:0;;;27518:61;;;;-1:-1:-1;;;27518:61:0;;20590:2:1;27518:61:0;;;20572:21:1;20629:2;20609:18;;;20602:30;20668:34;20648:18;;;20641:62;-1:-1:-1;;;20719:18:1;;;20712:31;20760:19;;27518:61:0;20388:397:1;27518:61:0;27623:9;27598:35;;;;:24;:35;;;;;27636:12;27598:50;;27670:10;;27689:15;;27670;;27683:2;27670:15;:::i;:::-;:34;27667:219;;27748:11;27736:24;;;;:11;:24;;;;;;;;:32;;;;;;;;;27771:12;-1:-1:-1;27728:68:0;;;;-1:-1:-1;;;27728:68:0;;20992:2:1;27728:68:0;;;20974:21:1;21031:1;21011:18;;;21004:29;-1:-1:-1;;;21049:18:1;;;21042:38;21097:18;;27728:68:0;20790:331:1;27728:68:0;27831:11;27819:24;;;;:11;:24;;;;;;;;:32;;;;;;;;27854:12;27819:47;;27667:219;26618:1301;;;26546:1373;;;:::o;27927:1125::-;28058:15;;28048:4;28006:7;5675:18;;;;;;;;;;;28006:7;;-1:-1:-1;28030:43:0;:63;;;;-1:-1:-1;;;;;;28078:15:0;;;;;;:9;:15;;;;;;;;28077:16;28030:63;28027:109;;;28110:14;:12;:14::i;:::-;28151:12;;;;28148:61;;;28179:18;:16;:18::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28292:13:0;;;;:9;:13;;;;;;;;28288:126;;;-1:-1:-1;28321:15:0;;;;;;;;28329:7;28321:15;;;;;;;-1:-1:-1;;;28321:15:0;;;;;;;;-1:-1:-1;;;28321:15:0;;;;;;;;;;;-1:-1:-1;;;28321:15:0;;;;;;;;;28288:126;;;-1:-1:-1;;;;;28357:15:0;;;;;;:9;:15;;;;;;;;28354:60;;;-1:-1:-1;28388:14:0;;;;;;;;28396:6;28388:14;;;;;;;-1:-1:-1;;;28388:14:0;;;;;;;;-1:-1:-1;;;28388:14:0;;;;;;;;;;;-1:-1:-1;;;28388:14:0;;;;;;;;;28354:60;28429:14;;;;:18;;;28426:588;;28463:53;;;;;;;;28504:12;28463:53;-1:-1:-1;;;;;28463:53:0;;;;;-1:-1:-1;;;28463:53:0;;;;;;;;-1:-1:-1;;;28463:53:0;;;;;;;;;;-1:-1:-1;;;28463:53:0;;;;;;;;;;;;;;;28554:14;;;23131:5;;28545:23;;;;:6;:23;:::i;:::-;:37;;;;:::i;:::-;28531:52;;28690:3;28673:5;:14;;;28646:41;;28652:5;:18;;;28646:24;;:3;:24;;;;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;28598:96;;:18;;:96;;;;;:::i;:::-;-1:-1:-1;;;;;28598:96:0;;;-1:-1:-1;28772:14:0;;;;28757:12;;;;28789:3;;28751:35;;;;;:18;;;:3;:18;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;28709:18;:31;;:84;;;;;;;:::i;:::-;-1:-1:-1;;;;;28709:84:0;;;-1:-1:-1;28877:14:0;;;;28859:15;;;;28894:3;;28853:38;;;;;:21;;;:3;:21;:::i;:::-;:38;;;;:::i;:::-;:44;;;;:::i;:::-;28808:18;:34;;:90;;;;;;;:::i;:::-;-1:-1:-1;;;;;28808:90:0;;;;;;28913:33;;:12;:33;;;;;;;;;;;;;;;;-1:-1:-1;;;28913:33:0;-1:-1:-1;;;;28913:33:0;;;-1:-1:-1;;;28913:33:0;;;;;-1:-1:-1;;;;28913:33:0;;;-1:-1:-1;;;28913:33:0;-1:-1:-1;;;;;;28913:33:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28961:41:0;28977:4;28991;-1:-1:-1;;;;;28961:41:0;;:15;:41::i;:::-;28448:566;28426:588;-1:-1:-1;;;;;;29034:10:0;;27927:1125;-1:-1:-1;;;;27927:1125:0:o;20158:333::-;20239:23;20265:69;20293:4;20265:69;;;;;;;;;;;;;;;;;20273:5;-1:-1:-1;;;;;20265:27:0;;;:69;;;;;:::i;:::-;20349:17;;20239:95;;-1:-1:-1;20349:21:0;20345:139;;20406:10;20395:30;;;;;;;;;;;;:::i;:::-;20387:85;;;;-1:-1:-1;;;20387:85:0;;22013:2:1;20387:85:0;;;21995:21:1;22052:2;22032:18;;;22025:30;22091:34;22071:18;;;22064:62;-1:-1:-1;;;22142:18:1;;;22135:40;22192:19;;20387:85:0;21811:406:1;29449:1445:0;29538:4;29494:23;5675:18;;;;;;;;;;;29555:50;;;;;;;;29593:12;29555:50;-1:-1:-1;;;;;29555:50:0;;;;;;-1:-1:-1;;;29555:50:0;;;;;;;;;;-1:-1:-1;;;29555:50:0;;;;;;;;;;;-1:-1:-1;;;29555:50:0;;;;;;;;;;;29494;;-1:-1:-1;29555:50:0;;-1:-1:-1;;29555:50:0;29644:65;;29555:50;29644:65;:::i;:::-;:99;;;;:::i;:::-;-1:-1:-1;;;;;29616:127:0;;-1:-1:-1;29767:20:0;;;:46;;-1:-1:-1;29791:22:0;;29767:46;29764:60;;;29816:7;;;29449:1445::o;29764:60::-;29857:15;;:20;;29875:2;29857:20;:::i;:::-;29839:15;:38;29836:107;;;29911:15;;:20;;29929:2;29911:20;:::i;:::-;29893:38;;29836:107;29956:19;;29953:753;;29993:33;30010:15;29993:16;:33::i;:::-;30146:28;;;;30076:21;;30055:18;;-1:-1:-1;;;;;30146:32:0;;30143:174;;30211:10;;30247:28;;;;-1:-1:-1;;;;;30211:10:0;;;;30277:17;;30234:41;;-1:-1:-1;;;;;30234:41:0;:10;:41;:::i;:::-;:60;;;;:::i;:::-;30211:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30198:101:0;;-1:-1:-1;;30143:174:0;30336:31;;;;-1:-1:-1;;;;;30336:35:0;;30333:183;;30404:13;;30443:31;;;;-1:-1:-1;;;;;30404:13:0;;;;30476:17;;30430:44;;-1:-1:-1;;;;;30430:44:0;:10;:44;:::i;:::-;:63;;;;:::i;:::-;30404:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30391:107:0;;-1:-1:-1;;30333:183:0;30545:21;;-1:-1:-1;30586:14:0;;30583:112;;30633:16;;:44;;-1:-1:-1;;;;;30633:16:0;;;;30662:10;;30633:44;;;;30662:10;30633:16;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30620:57:0;;-1:-1:-1;;30583:112:0;29976:730;;29953:753;-1:-1:-1;30755:1:0;30718:38;;;30767:28;;;:32;;;30810:31;;;:35;30856:12;:30;;;;;;;;;-1:-1:-1;;;30856:30:0;-1:-1:-1;;;;;;30856:30:0;;;;;;;;;-1:-1:-1;29449:1445:0:o;35468:1236::-;35516:31;;;;;;;;;35541:6;35516:31;;;;;;;-1:-1:-1;;;35516:31:0;;;;;;;;;;;;;-1:-1:-1;;;35516:31:0;;;;;;;;;-1:-1:-1;;;35516:31:0;;;;;;;;;;;;;;35558:33;;;;;;;35584:7;35558:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35690:10;;35516:31;;35558:33;35624:15;;35516:22;;35676:24;;35624:15;35676:24;:::i;:::-;35650:50;;35733:10;35714:15;:29;35711:788;;35759:12;:20;;-1:-1:-1;;35759:20:0;;;35821:3;35796:28;;;35839:16;;;;:22;;;35876:19;;;;:25;;;35937:3;35916:18;;;;:24;;;35957:29;;;36001:17;;;:23;;;36039:20;;;:26;;;;36080:19;;:25;35711:788;;;36148:10;36129:15;:29;36125:374;;36199:3;36174:28;;;36236:3;36217:16;;;;:22;;;36254:19;;;;:25;;;36315:4;36294:18;;;;:25;;;36336:29;;;36380:17;;;:23;;;36418:20;;:26;;;;36459:19;;;:26;36125:374;36533:18;;;;36514:6;:15;-1:-1:-1;;;36514:15:0;;:37;:15;;;:37;;;36511:86;;36567:18;;:6;:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36567:18:0;-1:-1:-1;;;;36567:18:0;;;-1:-1:-1;;;36567:18:0;;;;;-1:-1:-1;;;;;;;;36567:18:0;;;-1:-1:-1;;;36567:18:0;-1:-1:-1;;;;;;36567:18:0;;;;;;;;;;;;;;;;;;;;;;;36511:86;36630:19;;;;36610:7;:16;-1:-1:-1;;;36610:16:0;;:39;:16;;;:39;;;36607:90;;36665:20;;:7;:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36665:20:0;-1:-1:-1;;;;36665:20:0;;;-1:-1:-1;;;36665:20:0;;;;;-1:-1:-1;;;;;;;;36665:20:0;;;-1:-1:-1;;;36665:20:0;-1:-1:-1;;;;;;36665:20:0;;;;;;;;;;;;;;;;;;;;;;;35505:1199;;;;35468:1236::o;14263:229::-;14400:12;14432:52;14454:6;14462:4;14468:1;14471:12;14432:21;:52::i;:::-;14425:59;14263:229;-1:-1:-1;;;;14263:229:0:o;29060:381::-;29149:16;;;29163:1;29149:16;;;;;;;;29125:21;;29149:16;;;;;;;;;;-1:-1:-1;29149:16:0;29125:40;;29194:4;29176;29181:1;29176:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29176:23:0;;;-1:-1:-1;;;;;29176:23:0;;;;;29228:4;29210;29215:1;29210:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29210:23:0;;;:7;;;;;;;;;:23;29246:9;;:187;;-1:-1:-1;;;29246:187:0;;:9;;;:60;;:187;;29321:8;;29246:9;;29360:4;;29387;;29407:15;;29246:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15383:455;15553:12;15611:5;15586:21;:30;;15578:81;;;;-1:-1:-1;;;15578:81:0;;23751:2:1;15578:81:0;;;23733:21:1;23790:2;23770:18;;;23763:30;23829:34;23809:18;;;23802:62;-1:-1:-1;;;23880:18:1;;;23873:36;23926:19;;15578:81:0;23549:402:1;15578:81:0;15671:12;15685:23;15712:6;-1:-1:-1;;;;;15712:11:0;15731:5;15738:4;15712:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15670:73;;;;15761:69;15788:6;15796:7;15805:10;15817:12;15761:26;:69::i;:::-;15754:76;15383:455;-1:-1:-1;;;;;;;15383:455:0:o;17956:644::-;18141:12;18170:7;18166:427;;;18198:10;:17;18219:1;18198:22;18194:290;;-1:-1:-1;;;;;13704:19:0;;;18408:60;;;;-1:-1:-1;;;18408:60:0;;24450:2:1;18408:60:0;;;24432:21:1;24489:2;24469:18;;;24462:30;24528:31;24508:18;;;24501:59;24577:18;;18408:60:0;24248:353:1;18408:60:0;-1:-1:-1;18505:10:0;18498:17;;18166:427;18548:33;18556:10;18568:12;19303:17;;:21;19299:388;;19535:10;19529:17;19592:15;19579:10;19575:2;19571:19;19564:44;19299:388;19662:12;19655:20;;-1:-1:-1;;;19655:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:250::-;468:1;478:113;492:6;489:1;486:13;478:113;;;568:11;;;562:18;549:11;;;542:39;514:2;507:10;478:113;;;-1:-1:-1;;625:1:1;607:16;;600:27;383:250::o;638:396::-;787:2;776:9;769:21;750:4;819:6;813:13;862:6;857:2;846:9;842:18;835:34;878:79;950:6;945:2;934:9;930:18;925:2;917:6;913:15;878:79;:::i;:::-;1018:2;997:15;-1:-1:-1;;993:29:1;978:45;;;;1025:2;974:54;;638:396;-1:-1:-1;;638:396:1:o;1039:254::-;1107:6;1115;1168:2;1156:9;1147:7;1143:23;1139:32;1136:52;;;1184:1;1181;1174:12;1136:52;1207:29;1226:9;1207:29;:::i;:::-;1197:39;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;1039:254:1:o;1672:180::-;1731:6;1784:2;1772:9;1763:7;1759:23;1755:32;1752:52;;;1800:1;1797;1790:12;1752:52;-1:-1:-1;1823:23:1;;1672:180;-1:-1:-1;1672:180:1:o;1857:367::-;1920:8;1930:6;1984:3;1977:4;1969:6;1965:17;1961:27;1951:55;;2002:1;1999;1992:12;1951:55;-1:-1:-1;2025:20:1;;-1:-1:-1;;;;;2057:30:1;;2054:50;;;2100:1;2097;2090:12;2054:50;2137:4;2129:6;2125:17;2113:29;;2197:3;2190:4;2180:6;2177:1;2173:14;2165:6;2161:27;2157:38;2154:47;2151:67;;;2214:1;2211;2204:12;2151:67;1857:367;;;;;:::o;2229:773::-;2351:6;2359;2367;2375;2428:2;2416:9;2407:7;2403:23;2399:32;2396:52;;;2444:1;2441;2434:12;2396:52;2484:9;2471:23;-1:-1:-1;;;;;2554:2:1;2546:6;2543:14;2540:34;;;2570:1;2567;2560:12;2540:34;2609:70;2671:7;2662:6;2651:9;2647:22;2609:70;:::i;:::-;2698:8;;-1:-1:-1;2583:96:1;-1:-1:-1;2786:2:1;2771:18;;2758:32;;-1:-1:-1;2802:16:1;;;2799:36;;;2831:1;2828;2821:12;2799:36;;2870:72;2934:7;2923:8;2912:9;2908:24;2870:72;:::i;:::-;2229:773;;;;-1:-1:-1;2961:8:1;-1:-1:-1;;;;2229:773:1:o;3007:328::-;3084:6;3092;3100;3153:2;3141:9;3132:7;3128:23;3124:32;3121:52;;;3169:1;3166;3159:12;3121:52;3192:29;3211:9;3192:29;:::i;:::-;3182:39;;3240:38;3274:2;3263:9;3259:18;3240:38;:::i;:::-;3230:48;;3325:2;3314:9;3310:18;3297:32;3287:42;;3007:328;;;;;:::o;3340:167::-;3407:20;;3467:14;3456:26;;3446:37;;3436:65;;3497:1;3494;3487:12;3512:328;3586:6;3594;3602;3655:2;3643:9;3634:7;3630:23;3626:32;3623:52;;;3671:1;3668;3661:12;3623:52;3694:28;3712:9;3694:28;:::i;:::-;3684:38;;3741:37;3774:2;3763:9;3759:18;3741:37;:::i;:::-;3731:47;;3797:37;3830:2;3819:9;3815:18;3797:37;:::i;:::-;3787:47;;3512:328;;;;;:::o;4034:301::-;4093:6;4146:2;4134:9;4125:7;4121:23;4117:32;4114:52;;;4162:1;4159;4152:12;4114:52;4201:9;4188:23;-1:-1:-1;;;;;4244:5:1;4240:46;4233:5;4230:57;4220:85;;4301:1;4298;4291:12;5005:260;5073:6;5081;5134:2;5122:9;5113:7;5109:23;5105:32;5102:52;;;5150:1;5147;5140:12;5102:52;5173:29;5192:9;5173:29;:::i;:::-;5163:39;;5221:38;5255:2;5244:9;5240:18;5221:38;:::i;:::-;5211:48;;5005:260;;;;;:::o;5939:118::-;6025:5;6018:13;6011:21;6004:5;6001:32;5991:60;;6047:1;6044;6037:12;5991:60;5939:118;:::o;6062:315::-;6127:6;6135;6188:2;6176:9;6167:7;6163:23;6159:32;6156:52;;;6204:1;6201;6194:12;6156:52;6227:29;6246:9;6227:29;:::i;:::-;6217:39;;6306:2;6295:9;6291:18;6278:32;6319:28;6341:5;6319:28;:::i;:::-;6366:5;6356:15;;;6062:315;;;;;:::o;6706:248::-;6774:6;6782;6835:2;6823:9;6814:7;6810:23;6806:32;6803:52;;;6851:1;6848;6841:12;6803:52;-1:-1:-1;;6874:23:1;;;6944:2;6929:18;;;6916:32;;-1:-1:-1;6706:248:1:o;6959:356::-;7161:2;7143:21;;;7180:18;;;7173:30;7239:34;7234:2;7219:18;;7212:62;7306:2;7291:18;;6959:356::o;7320:184::-;7390:6;7443:2;7431:9;7422:7;7418:23;7414:32;7411:52;;;7459:1;7456;7449:12;7411:52;-1:-1:-1;7482:16:1;;7320:184;-1:-1:-1;7320:184:1:o;7788:245::-;7855:6;7908:2;7896:9;7887:7;7883:23;7879:32;7876:52;;;7924:1;7921;7914:12;7876:52;7956:9;7950:16;7975:28;7997:5;7975:28;:::i;8038:380::-;8117:1;8113:12;;;;8160;;;8181:61;;8235:4;8227:6;8223:17;8213:27;;8181:61;8288:2;8280:6;8277:14;8257:18;8254:38;8251:161;;8334:10;8329:3;8325:20;8322:1;8315:31;8369:4;8366:1;8359:15;8397:4;8394:1;8387:15;8251:161;;8038:380;;;:::o;8423:127::-;8484:10;8479:3;8475:20;8472:1;8465:31;8515:4;8512:1;8505:15;8539:4;8536:1;8529:15;8555:168;8628:9;;;8659;;8676:15;;;8670:22;;8656:37;8646:71;;8697:18;;:::i;8728:127::-;8789:10;8784:3;8780:20;8777:1;8770:31;8820:4;8817:1;8810:15;8844:4;8841:1;8834:15;8860:120;8900:1;8926;8916:35;;8931:18;;:::i;:::-;-1:-1:-1;8965:9:1;;8860:120::o;10179:127::-;10240:10;10235:3;10231:20;10228:1;10221:31;10271:4;10268:1;10261:15;10295:4;10292:1;10285:15;10311:135;10350:3;10371:17;;;10368:43;;10391:18;;:::i;:::-;-1:-1:-1;10438:1:1;10427:13;;10311:135::o;10451:336::-;10653:2;10635:21;;;10692:2;10672:18;;;10665:30;-1:-1:-1;;;10726:2:1;10711:18;;10704:42;10778:2;10763:18;;10451:336::o;10792:176::-;10859:14;10893:10;;;10905;;;10889:27;;10928:11;;;10925:37;;;10942:18;;:::i;:::-;10925:37;10792:176;;;;:::o;11527:422::-;11616:1;11659:5;11616:1;11673:270;11694:7;11684:8;11681:21;11673:270;;;11753:4;11749:1;11745:6;11741:17;11735:4;11732:27;11729:53;;;11762:18;;:::i;:::-;11812:7;11802:8;11798:22;11795:55;;;11832:16;;;;11795:55;11911:22;;;;11871:15;;;;11673:270;;;11677:3;11527:422;;;;;:::o;11954:806::-;12003:5;12033:8;12023:80;;-1:-1:-1;12074:1:1;12088:5;;12023:80;12122:4;12112:76;;-1:-1:-1;12159:1:1;12173:5;;12112:76;12204:4;12222:1;12217:59;;;;12290:1;12285:130;;;;12197:218;;12217:59;12247:1;12238:10;;12261:5;;;12285:130;12322:3;12312:8;12309:17;12306:43;;;12329:18;;:::i;:::-;-1:-1:-1;;12385:1:1;12371:16;;12400:5;;12197:218;;12499:2;12489:8;12486:16;12480:3;12474:4;12471:13;12467:36;12461:2;12451:8;12448:16;12443:2;12437:4;12434:12;12430:35;12427:77;12424:159;;;-1:-1:-1;12536:19:1;;;12568:5;;12424:159;12615:34;12640:8;12634:4;12615:34;:::i;:::-;12685:6;12681:1;12677:6;12673:19;12664:7;12661:32;12658:58;;;12696:18;;:::i;:::-;12734:20;;11954:806;-1:-1:-1;;;11954:806:1:o;12765:140::-;12823:5;12852:47;12893:4;12883:8;12879:19;12873:4;12852:47;:::i;13468:125::-;13533:9;;;13554:10;;;13551:36;;;13567:18;;:::i;19230:128::-;19297:9;;;19318:11;;;19315:37;;;19332:18;;:::i;21126:274::-;-1:-1:-1;;;;;21264:10:1;;;21276;;;21260:27;21307:20;;;;21198:34;21346:24;;;21336:58;;21374:18;;:::i;:::-;21336:58;;21126:274;;;;:::o;21405:216::-;21445:1;-1:-1:-1;;;;;21532:2:1;21529:1;21525:10;21554:3;21544:37;;21561:18;;:::i;:::-;21599:10;;21595:20;;;;;21405:216;-1:-1:-1;;21405:216:1:o;21626:180::-;-1:-1:-1;;;;;21731:10:1;;;21743;;;21727:27;;21766:11;;;21763:37;;;21780:18;;:::i;22564:980::-;22826:4;22874:3;22863:9;22859:19;22905:6;22894:9;22887:25;22931:2;22969:6;22964:2;22953:9;22949:18;22942:34;23012:3;23007:2;22996:9;22992:18;22985:31;23036:6;23071;23065:13;23102:6;23094;23087:22;23140:3;23129:9;23125:19;23118:26;;23179:2;23171:6;23167:15;23153:29;;23200:1;23210:195;23224:6;23221:1;23218:13;23210:195;;;23289:13;;-1:-1:-1;;;;;23285:39:1;23273:52;;23380:15;;;;23345:12;;;;23321:1;23239:9;23210:195;;;-1:-1:-1;;;;;;;23461:32:1;;;;23456:2;23441:18;;23434:60;-1:-1:-1;;;23525:3:1;23510:19;23503:35;23422:3;22564:980;-1:-1:-1;;;22564:980:1:o;23956:287::-;24085:3;24123:6;24117:13;24139:66;24198:6;24193:3;24186:4;24178:6;24174:17;24139:66;:::i;:::-;24221:16;;;;;23956:287;-1:-1:-1;;23956:287:1:o

Swarm Source

ipfs://43d4b547586f4effd20725177e1c8df8ec99a6d6e0678f47d5c8bc8d9595fff4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.