ETH Price: $2,429.05 (+0.20%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve165206662023-01-30 15:54:23644 days ago1675094063IN
0xA19fFe2f...4961465b3
0 ETH0.0005169420.74925252
Approve165206582023-01-30 15:52:47644 days ago1675093967IN
0xA19fFe2f...4961465b3
0 ETH0.0005041820.23686035
Setis Exempt165206192023-01-30 15:44:59644 days ago1675093499IN
0xA19fFe2f...4961465b3
0 ETH0.0005609420.88021919
Set Structure165206152023-01-30 15:44:11644 days ago1675093451IN
0xA19fFe2f...4961465b3
0 ETH0.0011192521.89459101
Set Structure165206082023-01-30 15:42:47644 days ago1675093367IN
0xA19fFe2f...4961465b3
0 ETH0.0013122320.51269391
Set Parameters165206012023-01-30 15:41:23644 days ago1675093283IN
0xA19fFe2f...4961465b3
0 ETH0.0008980420.29844679
Set Parameters165205702023-01-30 15:35:11644 days ago1675092911IN
0xA19fFe2f...4961465b3
0 ETH0.0008081718.08071376
Approve165205622023-01-30 15:33:35644 days ago1675092815IN
0xA19fFe2f...4961465b3
0 ETH0.0005625720.60872453
Set Parameters165205602023-01-30 15:33:11644 days ago1675092791IN
0xA19fFe2f...4961465b3
0 ETH0.0008418918.9062596
Set Parameters165205572023-01-30 15:32:35644 days ago1675092755IN
0xA19fFe2f...4961465b3
0 ETH0.0007938117.97676744
Approve165205542023-01-30 15:31:59644 days ago1675092719IN
0xA19fFe2f...4961465b3
0 ETH0.0010461422.19319952
Approve165205452023-01-30 15:30:11644 days ago1675092611IN
0xA19fFe2f...4961465b3
0 ETH0.0008888118.85550395
Approve165205392023-01-30 15:28:59644 days ago1675092539IN
0xA19fFe2f...4961465b3
0 ETH0.0009392419.9254958
Approve165205392023-01-30 15:28:59644 days ago1675092539IN
0xA19fFe2f...4961465b3
0 ETH0.0005848721.4254958
Approve165205362023-01-30 15:28:23644 days ago1675092503IN
0xA19fFe2f...4961465b3
0 ETH0.0010298821.82042133
Approve165205362023-01-30 15:28:23644 days ago1675092503IN
0xA19fFe2f...4961465b3
0 ETH0.0010298821.82042133
Set Parameters165205352023-01-30 15:28:11644 days ago1675092491IN
0xA19fFe2f...4961465b3
0 ETH0.0008525919.24501306
Approve165205332023-01-30 15:27:47644 days ago1675092467IN
0xA19fFe2f...4961465b3
0 ETH0.0009373219.88470744
Approve165205282023-01-30 15:26:47644 days ago1675092407IN
0xA19fFe2f...4961465b3
0 ETH0.0009979521.14391894
Start Trading165205272023-01-30 15:26:35644 days ago1675092395IN
0xA19fFe2f...4961465b3
0 ETH0.0005098619.72402878
Approve165205252023-01-30 15:26:11644 days ago1675092371IN
0xA19fFe2f...4961465b3
0 ETH0.0006507421.6208364
Approve165205142023-01-30 15:23:59644 days ago1675092239IN
0xA19fFe2f...4961465b3
0 ETH0.0010476422.19674517
Set Parameters165205132023-01-30 15:23:47644 days ago1675092227IN
0xA19fFe2f...4961465b3
0 ETH0.0008711119.69506433
Approve165205122023-01-30 15:23:35644 days ago1675092215IN
0xA19fFe2f...4961465b3
0 ETH0.0009813420.79202626
Approve165205052023-01-30 15:22:11644 days ago1675092131IN
0xA19fFe2f...4961465b3
0 ETH0.0010174221.58399872
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
165256332023-01-31 8:32:11643 days ago1675153931
0xA19fFe2f...4961465b3
0.00528183 ETH
165256332023-01-31 8:32:11643 days ago1675153931
0xA19fFe2f...4961465b3
0.00528183 ETH
165207812023-01-30 16:17:23644 days ago1675095443
0xA19fFe2f...4961465b3
0.00593382 ETH
165207812023-01-30 16:17:23644 days ago1675095443
0xA19fFe2f...4961465b3
0.00593382 ETH
165207132023-01-30 16:03:47644 days ago1675094627
0xA19fFe2f...4961465b3
0.00615142 ETH
165207132023-01-30 16:03:47644 days ago1675094627
0xA19fFe2f...4961465b3
0.00615142 ETH
165207052023-01-30 16:02:11644 days ago1675094531
0xA19fFe2f...4961465b3
0.00815152 ETH
165207052023-01-30 16:02:11644 days ago1675094531
0xA19fFe2f...4961465b3
0.00815152 ETH
165206522023-01-30 15:51:35644 days ago1675093895
0xA19fFe2f...4961465b3
0.00737551 ETH
165206522023-01-30 15:51:35644 days ago1675093895
0xA19fFe2f...4961465b3
0.00737551 ETH
165206472023-01-30 15:50:35644 days ago1675093835
0xA19fFe2f...4961465b3
0.00820994 ETH
165206472023-01-30 15:50:35644 days ago1675093835
0xA19fFe2f...4961465b3
0.00820994 ETH
165206322023-01-30 15:47:35644 days ago1675093655
0xA19fFe2f...4961465b3
0.00913649 ETH
165206322023-01-30 15:47:35644 days ago1675093655
0xA19fFe2f...4961465b3
0.00913649 ETH
165206302023-01-30 15:47:11644 days ago1675093631
0xA19fFe2f...4961465b3
0.01039255 ETH
165206302023-01-30 15:47:11644 days ago1675093631
0xA19fFe2f...4961465b3
0.01039255 ETH
165206292023-01-30 15:46:59644 days ago1675093619
0xA19fFe2f...4961465b3
0.01120687 ETH
165206292023-01-30 15:46:59644 days ago1675093619
0xA19fFe2f...4961465b3
0.01120687 ETH
165206252023-01-30 15:46:11644 days ago1675093571
0xA19fFe2f...4961465b3
0.0123309 ETH
165206252023-01-30 15:46:11644 days ago1675093571
0xA19fFe2f...4961465b3
0.0123309 ETH
165206252023-01-30 15:46:11644 days ago1675093571
0xA19fFe2f...4961465b3
0.01520654 ETH
165206252023-01-30 15:46:11644 days ago1675093571
0xA19fFe2f...4961465b3
0.01520654 ETH
165206212023-01-30 15:45:23644 days ago1675093523
0xA19fFe2f...4961465b3
0.01896537 ETH
165206212023-01-30 15:45:23644 days ago1675093523
0xA19fFe2f...4961465b3
0.01896537 ETH
165206212023-01-30 15:45:23644 days ago1675093523
0xA19fFe2f...4961465b3
0.0247434 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WET

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-30
*/

/**
https://t.me/WETREWARDS

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b <= a, errorMessage); return a - b;}}

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a % b;}}}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}

contract WET is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Wet Ethere';
    string private constant _symbol = 'WET';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 private _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 private _maxSellAmount = ( _totalSupply * 100 ) / 10000;
    uint256 private _maxWalletToken = ( _totalSupply * 300 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = true;
    uint256 private liquidityFee = 200;
    uint256 private marketingFee = 100;
    uint256 private rewardsFee = 600;
    uint256 private developmentFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 900;
    uint256 private sellFee = 900;
    uint256 private transferFee = 4500;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping; 
    uint256 private swapThreshold = ( _totalSupply * 500 ) / 100000;
    uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    address public reward = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    mapping (address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 1 * (10 ** 16);
    uint256 public distributorGas = 500000;
    function _claimDividend() external {distributeDividend(msg.sender);}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant development_receiver = 0xe5293ED42EEff34946f0ABc44e8a5411f5181B2E; 
    address internal constant marketing_receiver = 0xe5293ED42EEff34946f0ABc44e8a5411f5181B2E;
    address internal constant liquidity_receiver = 0xe5293ED42EEff34946f0ABc44e8a5411f5181B2E;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(pair)] = true;
        isDividendExempt[address(msg.sender)] = true;        
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function startTrading() external onlyOwner {tradingAllowed = true;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
    function setisExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > uint256(0), "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount); 
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
        if(shares[recipient].amount > 0){distributeDividend(recipient);}
        process(distributorGas);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _rewards, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(totalFee <= denominator.div(5) && sellFee <= denominator.div(5) && transferFee <= denominator.div(5), "totalFee and sellFee cannot be more than 20%");
    }

    function setisBot(address _address, bool _enabled) external onlyOwner {
        require(_address != address(pair) && _address != address(router) && _address != address(this), "Ineligible Address");
        isBot[_address] = _enabled;
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(rewardsFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if(rewardsAmount > 0){deposit(rewardsAmount);}
        if(address(this).balance > uint256(0)){payable(development_receiver).transfer(address(this).balance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= uint256(2) && aboveThreshold;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));}
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(burnFee > uint256(0)){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function setisDividendExempt(address holder, bool exempt) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if(exempt){setShare(holder, 0);}
        else{setShare(holder, balanceOf(holder)); }
    }

    function setShare(address shareholder, uint256 amount) internal {
        if(amount > 0 && shares[shareholder].amount == 0){addShareholder(shareholder);}
        else if(amount == 0 && shares[shareholder].amount > 0){removeShareholder(shareholder); }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(reward).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(reward);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            address(this),
            block.timestamp);
        uint256 amount = IERC20(reward).balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) internal {
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == 0) { return; }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){currentIndex = 0;}
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);}
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function totalRewardsDistributed(address _wallet) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            IERC20(reward).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);}
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }
}

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":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_claimDividend","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":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a620000149190620009cd565b633b9aca0062000025919062000a1e565b60015561271060646001546200003c919062000a1e565b62000048919062000a98565b60025561271060646001546200005f919062000a1e565b6200006b919062000a98565b60035561271061012c60015462000083919062000a1e565b6200008f919062000a98565b6004556001600b60146101000a81548160ff02191690831515021790555060c8600c556064600d55610258600e556000600f5560006010556103846011556103846012556111946013556127106014556001601560006101000a81548160ff021916908315150217905550620186a06101f460015462000110919062000a1e565b6200011c919062000a98565b601855620186a0600a60015462000134919062000a1e565b62000140919062000a98565b60195573c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000601f55610e10602555662386f26fc100006026556207a120602755348015620001d057600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a0919062000b3a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032e919062000b3a565b6040518363ffffffff1660e01b81526004016200034d92919062000b7d565b6020604051808303816000875af11580156200036d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000393919062000b3a565b905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e5293ed42eeff34946f0abc44e8a5411f5181b2e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e5293ed42eeff34946f0abc44e8a5411f5181b2e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60015460405162000823919062000bbb565b60405180910390a3505062000bd8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620008c15780860481111562000899576200089862000833565b5b6001851615620008a95780820291505b8081029050620008b98562000862565b945062000879565b94509492505050565b600082620008dc5760019050620009af565b81620008ec5760009050620009af565b8160018114620009055760028114620009105762000946565b6001915050620009af565b60ff84111562000925576200092462000833565b5b8360020a9150848211156200093f576200093e62000833565b5b50620009af565b5060208310610133831016604e8410600b8410161715620009805782820a9050838111156200097a576200097962000833565b5b620009af565b6200098f84848460016200086f565b92509050818404811115620009a957620009a862000833565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620009da82620009b6565b9150620009e783620009c0565b925062000a167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008ca565b905092915050565b600062000a2b82620009b6565b915062000a3883620009b6565b925082820262000a4881620009b6565b9150828204841483151762000a625762000a6162000833565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000aa582620009b6565b915062000ab283620009b6565b92508262000ac55762000ac462000a69565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b028262000ad5565b9050919050565b62000b148162000af5565b811462000b2057600080fd5b50565b60008151905062000b348162000b09565b92915050565b60006020828403121562000b535762000b5262000ad0565b5b600062000b638482850162000b23565b91505092915050565b62000b778162000af5565b82525050565b600060408201905062000b94600083018562000b6c565b62000ba3602083018462000b6c565b9392505050565b62000bb581620009b6565b82525050565b600060208201905062000bd2600083018462000baa565b92915050565b614d0e8062000be86000396000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063c942435d116100a0578063e2d6f94c1161006f578063e2d6f94c146107b4578063ef43b02b146107dd578063efca2eed14610806578063f2fde38b14610831578063ffd49c841461085a5761020f565b8063c942435d146106e4578063ca89b899146106fb578063ce7c2ac214610738578063dd62ed3e146107775761020f565b80639358928b116100e75780639358928b146105fb57806395d89b4114610626578063997664d714610651578063a8aa1b311461067c578063a9059cbb146106a75761020f565b806370a0823114610541578063893d20e81461057e5780638c41180e146105a95780638cd4426d146105d25761020f565b80632f54bf6e1161019b5780633f4218e01161016a5780633f4218e0146104485780634355855a1461048557806348ff2b8b146104c25780634fab0ae8146104eb57806360e71962146105165761020f565b80632f54bf6e1461038c578063313ce567146103c957806334c5d2ce146103f45780633a98ef391461041d5761020f565b8063228cb733116101d7578063228cb733146102d057806323b872dd146102fb57806328fd319814610338578063293230b8146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630ca61cb11461027c57806318160ddd146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610885565b6040516102369190613ba7565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613c62565b6108c2565b6040516102739190613cbd565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613cd8565b6108d9565b005b3480156102b157600080fd5b506102ba61093b565b6040516102c79190613d3a565b60405180910390f35b3480156102dc57600080fd5b506102e5610945565b6040516102f29190613d64565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190613d7f565b61096b565b60405161032f9190613cbd565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190613dd2565b610a36565b60405161036c9190613d3a565b60405180910390f35b34801561038157600080fd5b5061038a610b4f565b005b34801561039857600080fd5b506103b360048036038101906103ae9190613dd2565b610bb4565b6040516103c09190613cbd565b60405180910390f35b3480156103d557600080fd5b506103de610c0d565b6040516103eb9190613e1b565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190613cd8565b610c16565b005b34801561042957600080fd5b50610432610d76565b60405161043f9190613d3a565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190613dd2565b610d7c565b60405161047c9190613cbd565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190613dd2565b610d9c565b6040516104b99190613cbd565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190613e62565b610dbc565b005b3480156104f757600080fd5b50610500610e5f565b60405161050d9190613d3a565b60405180910390f35b34801561052257600080fd5b5061052b610e65565b6040516105389190613d3a565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190613dd2565b610e6b565b6040516105759190613d3a565b60405180910390f35b34801561058a57600080fd5b50610593610eb4565b6040516105a09190613d64565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613e62565b610edd565b005b3480156105de57600080fd5b506105f960048036038101906105f49190613c62565b6110a3565b005b34801561060757600080fd5b5061061061116e565b60405161061d9190613d3a565b60405180910390f35b34801561063257600080fd5b5061063b6111af565b6040516106489190613ba7565b60405180910390f35b34801561065d57600080fd5b506106666111ec565b6040516106739190613d3a565b60405180910390f35b34801561068857600080fd5b506106916111f2565b60405161069e9190613d64565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613c62565b611218565b6040516106db9190613cbd565b60405180910390f35b3480156106f057600080fd5b506106f961122f565b005b34801561070757600080fd5b50610722600480360381019061071d9190613dd2565b61123a565b60405161072f9190613d3a565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190613dd2565b61128b565b60405161076e93929190613ea2565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613ed9565b6112b5565b6040516107ab9190613d3a565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190613f19565b61133c565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613e62565b611466565b005b34801561081257600080fd5b5061081b611532565b6040516108289190613d3a565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061400d565b611538565b005b34801561086657600080fd5b5061086f6115fa565b60405161087c9190613d3a565b60405180910390f35b60606040518060400160405280600a81526020017f5765742045746865726500000000000000000000000000000000000000000000815250905090565b60006108cf338484611600565b6001905092915050565b6108e233610bb4565b610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890614086565b60405180910390fd5b826025819055508160268190555080602781905550505050565b6000600154905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109788484846117c9565b610a2b8433610a2685604051806060016040528060288152602001614cb160289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aea9092919063ffffffff16565b611600565b600190509392505050565b600080602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610a8a5760009050610b4a565b6000610ad7602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b90506000602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610b3257600092505050610b4a565b610b458183611b7190919063ffffffff16565b925050505b919050565b610b5833610bb4565b610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90614086565b60405180910390fd5b6001600b60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b610c1f33610bb4565b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590614086565b60405180910390fd5b600061271084610c6c61093b565b610c7691906140d5565b610c809190614146565b9050600061271084610c9061093b565b610c9a91906140d5565b610ca49190614146565b9050600061271084610cb461093b565b610cbe91906140d5565b610cc89190614146565b90508260028190555081600381905550806004819055506000610d106103e8610d026005610cf461093b565b611b8790919063ffffffff16565b611b9d90919063ffffffff16565b9050808410158015610d225750808310155b8015610d2e5750808210155b610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d64906141e9565b60405180910390fd5b50505050505050565b601b5481565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b610dc533610bb4565b610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90614086565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60265481565b60275481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ee633610bb4565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90614086565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610fd15750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561100957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614255565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6110ac33610bb4565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290614086565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611126929190614275565b6020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116991906142b3565b505050565b60006111aa61117d6000610e6b565b61119c61118b61dead610e6b565b600154611b7190919063ffffffff16565b611b7190919063ffffffff16565b905090565b60606040518060400160405280600381526020017f5745540000000000000000000000000000000000000000000000000000000000815250905090565b601c5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006112253384846117c9565b6001905092915050565b61123833611bb3565b565b600080829050602360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154915050919050565b60236020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61134533610bb4565b611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90614086565b60405180910390fd5b87600c8190555086600d819055508560108190555084600e8190555083600f819055508260118190555081601281905550806013819055506113d26005601454611b9d90919063ffffffff16565b601154111580156113fa57506113f46005601454611b9d90919063ffffffff16565b60125411155b801561141d57506114176005601454611b9d90919063ffffffff16565b60135411155b61145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614352565b60405180910390fd5b5050505050505050565b61146f33610bb4565b6114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590614086565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561151b57611516826000611e46565b61152e565b61152d8261152884610e6b565b611e46565b5b5050565b601d5481565b61154133610bb4565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614086565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516115ef91906143d1565b60405180910390a150565b60255481565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361166f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116669061445e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d5906144f0565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117bc9190613d3a565b60405180910390a3505050565b6117d4838383612058565b6117de83836121c9565b6117e98383836122c6565b6117f3838361249f565b6117fe83838361256a565b61180983838361279f565b61185b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b7190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006118aa84846127c8565b6118b457816118c0565b6118bf848484612876565b5b905061191481600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119b49190613d3a565b60405180910390a3600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a2057611a1f84611a1a86610e6b565b611e46565b5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a8457611a8383611a7e85610e6b565b611e46565b5b6000602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115611ad957611ad883611bb3565b5b611ae4602754612a34565b50505050565b6000838311158290611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b299190613ba7565b60405180910390fd5b5082840390509392505050565b6000611b6a601f54611b5c601e5485611b8790919063ffffffff16565b611b9d90919063ffffffff16565b9050919050565b60008183611b7f9190614510565b905092915050565b60008183611b9591906140d5565b905092915050565b60008183611bab9190614146565b905092915050565b6000602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315611e43576000611c0982610a36565b90506000811115611e4157611c2981601d54612a1e90919063ffffffff16565b601d81905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c8c929190614275565b6020604051808303816000875af1158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906142b3565b5042602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d6981602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154612a1e90919063ffffffff16565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611dfa602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600081118015611e9857506000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b15611eab57611ea682612b6f565b611f0d565b600081148015611efd57506000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b15611f0c57611f0b82612c1e565b5b5b611f7681611f68602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601b54611b7190919063ffffffff16565b612a1e90919063ffffffff16565b601b8190555080602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061200e602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906145b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90614648565b60405180910390fd5b60008111612179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612170906146da565b60405180910390fd5b61218283610e6b565b8111156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb9061476c565b60405180910390fd5b505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561226d5750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122c257600b60149054906101000a900460ff166122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b8906147d8565b60405180910390fd5b5b5050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561236a5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123c45750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fe575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561249a5760045461245882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b1115612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614844565b60405180910390fd5b5b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156125465750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125665760016016600082825461255e9190614864565b925050819055505b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126ad57600354811115806126195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061266d5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a3906148e4565b60405180910390fd5b5b600254811115806127075750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061275b5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906148e4565b60405180910390fd5b505050565b6127aa838383612e25565b156127c3576127ba601854612f5e565b60006016819055505b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286e5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b60008061288385856131fd565b1115612a135760006128bb61289886866131fd565b6128ad60145486611b9d90919063ffffffff16565b611b8790919063ffffffff16565b905061290f81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129af9190613d3a565b60405180910390a3600060105411156129f8576129f73061dead6129f26010546129e460145489611b9d90919063ffffffff16565b611b8790919063ffffffff16565b6117c9565b5b612a0b8184611b7190919063ffffffff16565b915050612a17565b8190505b9392505050565b60008183612a2c9190614864565b905092915050565b6000602080549050905060008103612a4c5750612b6c565b6000805a905060005b8483108015612a6357508381105b15612b67578360245410612a7a5760006024819055505b612ac3602060245481548110612a9357612a92614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661338c565b15612b1257612b11602060245481548110612ae157612ae0614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bb3565b5b612b37612b285a84611b7190919063ffffffff16565b84612a1e90919063ffffffff16565b92505a915060246000815480929190612b4f90614933565b91905055508080612b5f90614933565b915050612a55565b505050505b50565b602080549050602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60206001602080549050612c329190614510565b81548110612c4357612c42614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166020602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110612cc157612cc0614904565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546021600060206001602080549050612d619190614510565b81548110612d7257612d71614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506020805480612ded57612dec61497b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60008060195483101590506000601854612e3e30610e6b565b10159050601760009054906101000a900460ff16158015612e6b5750601560009054906101000a900460ff165b8015612e835750600b60149054906101000a900460ff165b8015612e8c5750815b8015612ee25750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f3b5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612f4a5750600260165410155b8015612f535750805b925050509392505050565b6001601760006101000a81548160ff0219169083151502179055506000612fe06002612fd2600e54612fc4600f54612fb6600d54612fa86001600c54612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b611b8790919063ffffffff16565b9050600061300b82612ffd600c5486611b8790919063ffffffff16565b611b9d90919063ffffffff16565b905060006130228285611b7190919063ffffffff16565b90506000479050613032826133f9565b60006130478247611b7190919063ffffffff16565b90506000613072613063600c5488611b7190919063ffffffff16565b83611b9d90919063ffffffff16565b9050600061308b600c5483611b8790919063ffffffff16565b905060008111156130a1576130a0868261363c565b5b60006130cb600d546130bd600286611b8790919063ffffffff16565b611b8790919063ffffffff16565b905060008111156131325773e5293ed42eeff34946f0abc44e8a5411f5181b2e73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613130573d6000803e3d6000fd5b505b600061315c600e5461314e600287611b8790919063ffffffff16565b611b8790919063ffffffff16565b90506000811115613171576131708161372e565b5b60004711156131d65773e5293ed42eeff34946f0abc44e8a5411f5181b2e73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156131d4573d6000803e3d6000fd5b505b5050505050505050506000601760006101000a81548160ff02191690831515021790555050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132a05750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c2576132bb6064601454611b7190919063ffffffff16565b9050613386565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613321576012549050613386565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613380576011549050613386565b60135490505b92915050565b600042602554602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133dc9190614864565b1080156133f257506026546133f083610a36565b115b9050919050565b6000600267ffffffffffffffff811115613416576134156149aa565b5b6040519080825280602002602001820160405280156134445781602001602082028036833780820191505090505b509050308160008151811061345c5761345b614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352791906149ee565b8160018151811061353b5761353a614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135a230600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611600565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613606959493929190614b14565b600060405180830381600087803b15801561362057600080fd5b505af1158015613634573d6000803e3d6000fd5b505050505050565b61366930600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611600565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008073e5293ed42eeff34946f0abc44e8a5411f5181b2e426040518863ffffffff1660e01b81526004016136e496959493929190614b6e565b60606040518083038185885af1158015613702573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137279190614be4565b5050505050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161378b9190613d64565b602060405180830381865afa1580156137a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cc9190614c37565b90506000600267ffffffffffffffff8111156137eb576137ea6149aa565b5b6040519080825280602002602001820160405280156138195781602001602082028036833780820191505090505b509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ad91906149ee565b816000815181106138c1576138c0614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061393257613931614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008430426040518663ffffffff1660e01b81526004016139cf9493929190614c64565b6000604051808303818588803b1580156139e857600080fd5b505af11580156139fc573d6000803e3d6000fd5b50505050506000613ab183601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a629190613d64565b602060405180830381865afa158015613a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa39190614c37565b611b7190919063ffffffff16565b9050613ac881601c54612a1e90919063ffffffff16565b601c81905550613b0b613afa601b54613aec84601f54611b8790919063ffffffff16565b611b9d90919063ffffffff16565b601e54612a1e90919063ffffffff16565b601e8190555050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b51578082015181840152602081019050613b36565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b7982613b17565b613b838185613b22565b9350613b93818560208601613b33565b613b9c81613b5d565b840191505092915050565b60006020820190508181036000830152613bc18184613b6e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bf982613bce565b9050919050565b613c0981613bee565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b6000819050919050565b613c3f81613c2c565b8114613c4a57600080fd5b50565b600081359050613c5c81613c36565b92915050565b60008060408385031215613c7957613c78613bc9565b5b6000613c8785828601613c17565b9250506020613c9885828601613c4d565b9150509250929050565b60008115159050919050565b613cb781613ca2565b82525050565b6000602082019050613cd26000830184613cae565b92915050565b600080600060608486031215613cf157613cf0613bc9565b5b6000613cff86828701613c4d565b9350506020613d1086828701613c4d565b9250506040613d2186828701613c4d565b9150509250925092565b613d3481613c2c565b82525050565b6000602082019050613d4f6000830184613d2b565b92915050565b613d5e81613bee565b82525050565b6000602082019050613d796000830184613d55565b92915050565b600080600060608486031215613d9857613d97613bc9565b5b6000613da686828701613c17565b9350506020613db786828701613c17565b9250506040613dc886828701613c4d565b9150509250925092565b600060208284031215613de857613de7613bc9565b5b6000613df684828501613c17565b91505092915050565b600060ff82169050919050565b613e1581613dff565b82525050565b6000602082019050613e306000830184613e0c565b92915050565b613e3f81613ca2565b8114613e4a57600080fd5b50565b600081359050613e5c81613e36565b92915050565b60008060408385031215613e7957613e78613bc9565b5b6000613e8785828601613c17565b9250506020613e9885828601613e4d565b9150509250929050565b6000606082019050613eb76000830186613d2b565b613ec46020830185613d2b565b613ed16040830184613d2b565b949350505050565b60008060408385031215613ef057613eef613bc9565b5b6000613efe85828601613c17565b9250506020613f0f85828601613c17565b9150509250929050565b600080600080600080600080610100898b031215613f3a57613f39613bc9565b5b6000613f488b828c01613c4d565b9850506020613f598b828c01613c4d565b9750506040613f6a8b828c01613c4d565b9650506060613f7b8b828c01613c4d565b9550506080613f8c8b828c01613c4d565b94505060a0613f9d8b828c01613c4d565b93505060c0613fae8b828c01613c4d565b92505060e0613fbf8b828c01613c4d565b9150509295985092959890939650565b6000613fda82613bce565b9050919050565b613fea81613fcf565b8114613ff557600080fd5b50565b60008135905061400781613fe1565b92915050565b60006020828403121561402357614022613bc9565b5b600061403184828501613ff8565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614070600683613b22565b915061407b8261403a565b602082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140e082613c2c565b91506140eb83613c2c565b92508282026140f981613c2c565b915082820484148315176141105761410f6140a6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061415182613c2c565b915061415c83613c2c565b92508261416c5761416b614117565b5b828204905092915050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560008201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b60006141d3602e83613b22565b91506141de82614177565b604082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f496e656c696769626c6520416464726573730000000000000000000000000000600082015250565b600061423f601283613b22565b915061424a82614209565b602082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b600060408201905061428a6000830185613d55565b6142976020830184613d2b565b9392505050565b6000815190506142ad81613e36565b92915050565b6000602082840312156142c9576142c8613bc9565b5b60006142d78482850161429e565b91505092915050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b600061433c602c83613b22565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b6000819050919050565b600061439761439261438d84613bce565b614372565b613bce565b9050919050565b60006143a98261437c565b9050919050565b60006143bb8261439e565b9050919050565b6143cb816143b0565b82525050565b60006020820190506143e660008301846143c2565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614448602483613b22565b9150614453826143ec565b604082019050919050565b600060208201905081810360008301526144778161443b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144da602283613b22565b91506144e58261447e565b604082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b600061451b82613c2c565b915061452683613c2c565b925082820390508181111561453e5761453d6140a6565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145a0602583613b22565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614632602383613b22565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146c4602983613b22565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614756603183613b22565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b60006147c2600e83613b22565b91506147cd8261478c565b602082019050919050565b600060208201905081810360008301526147f1816147b5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b600061482e601e83613b22565b9150614839826147f8565b602082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b600061486f82613c2c565b915061487a83613c2c565b9250828201905080821115614892576148916140a6565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006148ce601183613b22565b91506148d982614898565b602082019050919050565b600060208201905081810360008301526148fd816148c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061493e82613c2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149705761496f6140a6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506149e881613c00565b92915050565b600060208284031215614a0457614a03613bc9565b5b6000614a12848285016149d9565b91505092915050565b6000819050919050565b6000614a40614a3b614a3684614a1b565b614372565b613c2c565b9050919050565b614a5081614a25565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a8b81613bee565b82525050565b6000614a9d8383614a82565b60208301905092915050565b6000602082019050919050565b6000614ac182614a56565b614acb8185614a61565b9350614ad683614a72565b8060005b83811015614b07578151614aee8882614a91565b9750614af983614aa9565b925050600181019050614ada565b5085935050505092915050565b600060a082019050614b296000830188613d2b565b614b366020830187614a47565b8181036040830152614b488186614ab6565b9050614b576060830185613d55565b614b646080830184613d2b565b9695505050505050565b600060c082019050614b836000830189613d55565b614b906020830188613d2b565b614b9d6040830187614a47565b614baa6060830186614a47565b614bb76080830185613d55565b614bc460a0830184613d2b565b979650505050505050565b600081519050614bde81613c36565b92915050565b600080600060608486031215614bfd57614bfc613bc9565b5b6000614c0b86828701614bcf565b9350506020614c1c86828701614bcf565b9250506040614c2d86828701614bcf565b9150509250925092565b600060208284031215614c4d57614c4c613bc9565b5b6000614c5b84828501614bcf565b91505092915050565b6000608082019050614c796000830187614a47565b8181036020830152614c8b8186614ab6565b9050614c9a6040830185613d55565b614ca76060830184613d2b565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c8c69b8498cdb53a8fdba6bb9a8cef6f325dcc57ee25ec040973ae9a03b50e2264736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102085760003560e01c806370a0823111610118578063c942435d116100a0578063e2d6f94c1161006f578063e2d6f94c146107b4578063ef43b02b146107dd578063efca2eed14610806578063f2fde38b14610831578063ffd49c841461085a5761020f565b8063c942435d146106e4578063ca89b899146106fb578063ce7c2ac214610738578063dd62ed3e146107775761020f565b80639358928b116100e75780639358928b146105fb57806395d89b4114610626578063997664d714610651578063a8aa1b311461067c578063a9059cbb146106a75761020f565b806370a0823114610541578063893d20e81461057e5780638c41180e146105a95780638cd4426d146105d25761020f565b80632f54bf6e1161019b5780633f4218e01161016a5780633f4218e0146104485780634355855a1461048557806348ff2b8b146104c25780634fab0ae8146104eb57806360e71962146105165761020f565b80632f54bf6e1461038c578063313ce567146103c957806334c5d2ce146103f45780633a98ef391461041d5761020f565b8063228cb733116101d7578063228cb733146102d057806323b872dd146102fb57806328fd319814610338578063293230b8146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630ca61cb11461027c57806318160ddd146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610885565b6040516102369190613ba7565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613c62565b6108c2565b6040516102739190613cbd565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613cd8565b6108d9565b005b3480156102b157600080fd5b506102ba61093b565b6040516102c79190613d3a565b60405180910390f35b3480156102dc57600080fd5b506102e5610945565b6040516102f29190613d64565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190613d7f565b61096b565b60405161032f9190613cbd565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190613dd2565b610a36565b60405161036c9190613d3a565b60405180910390f35b34801561038157600080fd5b5061038a610b4f565b005b34801561039857600080fd5b506103b360048036038101906103ae9190613dd2565b610bb4565b6040516103c09190613cbd565b60405180910390f35b3480156103d557600080fd5b506103de610c0d565b6040516103eb9190613e1b565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190613cd8565b610c16565b005b34801561042957600080fd5b50610432610d76565b60405161043f9190613d3a565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190613dd2565b610d7c565b60405161047c9190613cbd565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190613dd2565b610d9c565b6040516104b99190613cbd565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190613e62565b610dbc565b005b3480156104f757600080fd5b50610500610e5f565b60405161050d9190613d3a565b60405180910390f35b34801561052257600080fd5b5061052b610e65565b6040516105389190613d3a565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190613dd2565b610e6b565b6040516105759190613d3a565b60405180910390f35b34801561058a57600080fd5b50610593610eb4565b6040516105a09190613d64565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613e62565b610edd565b005b3480156105de57600080fd5b506105f960048036038101906105f49190613c62565b6110a3565b005b34801561060757600080fd5b5061061061116e565b60405161061d9190613d3a565b60405180910390f35b34801561063257600080fd5b5061063b6111af565b6040516106489190613ba7565b60405180910390f35b34801561065d57600080fd5b506106666111ec565b6040516106739190613d3a565b60405180910390f35b34801561068857600080fd5b506106916111f2565b60405161069e9190613d64565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613c62565b611218565b6040516106db9190613cbd565b60405180910390f35b3480156106f057600080fd5b506106f961122f565b005b34801561070757600080fd5b50610722600480360381019061071d9190613dd2565b61123a565b60405161072f9190613d3a565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190613dd2565b61128b565b60405161076e93929190613ea2565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613ed9565b6112b5565b6040516107ab9190613d3a565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190613f19565b61133c565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613e62565b611466565b005b34801561081257600080fd5b5061081b611532565b6040516108289190613d3a565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061400d565b611538565b005b34801561086657600080fd5b5061086f6115fa565b60405161087c9190613d3a565b60405180910390f35b60606040518060400160405280600a81526020017f5765742045746865726500000000000000000000000000000000000000000000815250905090565b60006108cf338484611600565b6001905092915050565b6108e233610bb4565b610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890614086565b60405180910390fd5b826025819055508160268190555080602781905550505050565b6000600154905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109788484846117c9565b610a2b8433610a2685604051806060016040528060288152602001614cb160289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aea9092919063ffffffff16565b611600565b600190509392505050565b600080602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610a8a5760009050610b4a565b6000610ad7602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b90506000602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610b3257600092505050610b4a565b610b458183611b7190919063ffffffff16565b925050505b919050565b610b5833610bb4565b610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90614086565b60405180910390fd5b6001600b60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b610c1f33610bb4565b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590614086565b60405180910390fd5b600061271084610c6c61093b565b610c7691906140d5565b610c809190614146565b9050600061271084610c9061093b565b610c9a91906140d5565b610ca49190614146565b9050600061271084610cb461093b565b610cbe91906140d5565b610cc89190614146565b90508260028190555081600381905550806004819055506000610d106103e8610d026005610cf461093b565b611b8790919063ffffffff16565b611b9d90919063ffffffff16565b9050808410158015610d225750808310155b8015610d2e5750808210155b610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d64906141e9565b60405180910390fd5b50505050505050565b601b5481565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b610dc533610bb4565b610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90614086565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60265481565b60275481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ee633610bb4565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90614086565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610fd15750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561100957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614255565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6110ac33610bb4565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290614086565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611126929190614275565b6020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116991906142b3565b505050565b60006111aa61117d6000610e6b565b61119c61118b61dead610e6b565b600154611b7190919063ffffffff16565b611b7190919063ffffffff16565b905090565b60606040518060400160405280600381526020017f5745540000000000000000000000000000000000000000000000000000000000815250905090565b601c5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006112253384846117c9565b6001905092915050565b61123833611bb3565b565b600080829050602360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154915050919050565b60236020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61134533610bb4565b611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90614086565b60405180910390fd5b87600c8190555086600d819055508560108190555084600e8190555083600f819055508260118190555081601281905550806013819055506113d26005601454611b9d90919063ffffffff16565b601154111580156113fa57506113f46005601454611b9d90919063ffffffff16565b60125411155b801561141d57506114176005601454611b9d90919063ffffffff16565b60135411155b61145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614352565b60405180910390fd5b5050505050505050565b61146f33610bb4565b6114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590614086565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561151b57611516826000611e46565b61152e565b61152d8261152884610e6b565b611e46565b5b5050565b601d5481565b61154133610bb4565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614086565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516115ef91906143d1565b60405180910390a150565b60255481565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361166f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116669061445e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d5906144f0565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117bc9190613d3a565b60405180910390a3505050565b6117d4838383612058565b6117de83836121c9565b6117e98383836122c6565b6117f3838361249f565b6117fe83838361256a565b61180983838361279f565b61185b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b7190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006118aa84846127c8565b6118b457816118c0565b6118bf848484612876565b5b905061191481600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119b49190613d3a565b60405180910390a3600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a2057611a1f84611a1a86610e6b565b611e46565b5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a8457611a8383611a7e85610e6b565b611e46565b5b6000602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115611ad957611ad883611bb3565b5b611ae4602754612a34565b50505050565b6000838311158290611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b299190613ba7565b60405180910390fd5b5082840390509392505050565b6000611b6a601f54611b5c601e5485611b8790919063ffffffff16565b611b9d90919063ffffffff16565b9050919050565b60008183611b7f9190614510565b905092915050565b60008183611b9591906140d5565b905092915050565b60008183611bab9190614146565b905092915050565b6000602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315611e43576000611c0982610a36565b90506000811115611e4157611c2981601d54612a1e90919063ffffffff16565b601d81905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c8c929190614275565b6020604051808303816000875af1158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906142b3565b5042602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d6981602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154612a1e90919063ffffffff16565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611dfa602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600081118015611e9857506000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b15611eab57611ea682612b6f565b611f0d565b600081148015611efd57506000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b15611f0c57611f0b82612c1e565b5b5b611f7681611f68602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601b54611b7190919063ffffffff16565b612a1e90919063ffffffff16565b601b8190555080602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061200e602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906145b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90614648565b60405180910390fd5b60008111612179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612170906146da565b60405180910390fd5b61218283610e6b565b8111156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb9061476c565b60405180910390fd5b505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561226d5750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122c257600b60149054906101000a900460ff166122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b8906147d8565b60405180910390fd5b5b5050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561236a5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123c45750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fe575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561249a5760045461245882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b1115612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614844565b60405180910390fd5b5b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156125465750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125665760016016600082825461255e9190614864565b925050819055505b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126ad57600354811115806126195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061266d5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a3906148e4565b60405180910390fd5b5b600254811115806127075750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061275b5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906148e4565b60405180910390fd5b505050565b6127aa838383612e25565b156127c3576127ba601854612f5e565b60006016819055505b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286e5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b60008061288385856131fd565b1115612a135760006128bb61289886866131fd565b6128ad60145486611b9d90919063ffffffff16565b611b8790919063ffffffff16565b905061290f81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129af9190613d3a565b60405180910390a3600060105411156129f8576129f73061dead6129f26010546129e460145489611b9d90919063ffffffff16565b611b8790919063ffffffff16565b6117c9565b5b612a0b8184611b7190919063ffffffff16565b915050612a17565b8190505b9392505050565b60008183612a2c9190614864565b905092915050565b6000602080549050905060008103612a4c5750612b6c565b6000805a905060005b8483108015612a6357508381105b15612b67578360245410612a7a5760006024819055505b612ac3602060245481548110612a9357612a92614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661338c565b15612b1257612b11602060245481548110612ae157612ae0614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bb3565b5b612b37612b285a84611b7190919063ffffffff16565b84612a1e90919063ffffffff16565b92505a915060246000815480929190612b4f90614933565b91905055508080612b5f90614933565b915050612a55565b505050505b50565b602080549050602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60206001602080549050612c329190614510565b81548110612c4357612c42614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166020602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110612cc157612cc0614904565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546021600060206001602080549050612d619190614510565b81548110612d7257612d71614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506020805480612ded57612dec61497b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60008060195483101590506000601854612e3e30610e6b565b10159050601760009054906101000a900460ff16158015612e6b5750601560009054906101000a900460ff165b8015612e835750600b60149054906101000a900460ff165b8015612e8c5750815b8015612ee25750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f3b5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612f4a5750600260165410155b8015612f535750805b925050509392505050565b6001601760006101000a81548160ff0219169083151502179055506000612fe06002612fd2600e54612fc4600f54612fb6600d54612fa86001600c54612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b611b8790919063ffffffff16565b9050600061300b82612ffd600c5486611b8790919063ffffffff16565b611b9d90919063ffffffff16565b905060006130228285611b7190919063ffffffff16565b90506000479050613032826133f9565b60006130478247611b7190919063ffffffff16565b90506000613072613063600c5488611b7190919063ffffffff16565b83611b9d90919063ffffffff16565b9050600061308b600c5483611b8790919063ffffffff16565b905060008111156130a1576130a0868261363c565b5b60006130cb600d546130bd600286611b8790919063ffffffff16565b611b8790919063ffffffff16565b905060008111156131325773e5293ed42eeff34946f0abc44e8a5411f5181b2e73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613130573d6000803e3d6000fd5b505b600061315c600e5461314e600287611b8790919063ffffffff16565b611b8790919063ffffffff16565b90506000811115613171576131708161372e565b5b60004711156131d65773e5293ed42eeff34946f0abc44e8a5411f5181b2e73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156131d4573d6000803e3d6000fd5b505b5050505050505050506000601760006101000a81548160ff02191690831515021790555050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132a05750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c2576132bb6064601454611b7190919063ffffffff16565b9050613386565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613321576012549050613386565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613380576011549050613386565b60135490505b92915050565b600042602554602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133dc9190614864565b1080156133f257506026546133f083610a36565b115b9050919050565b6000600267ffffffffffffffff811115613416576134156149aa565b5b6040519080825280602002602001820160405280156134445781602001602082028036833780820191505090505b509050308160008151811061345c5761345b614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352791906149ee565b8160018151811061353b5761353a614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135a230600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611600565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613606959493929190614b14565b600060405180830381600087803b15801561362057600080fd5b505af1158015613634573d6000803e3d6000fd5b505050505050565b61366930600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611600565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008073e5293ed42eeff34946f0abc44e8a5411f5181b2e426040518863ffffffff1660e01b81526004016136e496959493929190614b6e565b60606040518083038185885af1158015613702573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137279190614be4565b5050505050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161378b9190613d64565b602060405180830381865afa1580156137a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cc9190614c37565b90506000600267ffffffffffffffff8111156137eb576137ea6149aa565b5b6040519080825280602002602001820160405280156138195781602001602082028036833780820191505090505b509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ad91906149ee565b816000815181106138c1576138c0614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061393257613931614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008430426040518663ffffffff1660e01b81526004016139cf9493929190614c64565b6000604051808303818588803b1580156139e857600080fd5b505af11580156139fc573d6000803e3d6000fd5b50505050506000613ab183601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a629190613d64565b602060405180830381865afa158015613a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa39190614c37565b611b7190919063ffffffff16565b9050613ac881601c54612a1e90919063ffffffff16565b601c81905550613b0b613afa601b54613aec84601f54611b8790919063ffffffff16565b611b9d90919063ffffffff16565b601e54612a1e90919063ffffffff16565b601e8190555050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b51578082015181840152602081019050613b36565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b7982613b17565b613b838185613b22565b9350613b93818560208601613b33565b613b9c81613b5d565b840191505092915050565b60006020820190508181036000830152613bc18184613b6e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bf982613bce565b9050919050565b613c0981613bee565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b6000819050919050565b613c3f81613c2c565b8114613c4a57600080fd5b50565b600081359050613c5c81613c36565b92915050565b60008060408385031215613c7957613c78613bc9565b5b6000613c8785828601613c17565b9250506020613c9885828601613c4d565b9150509250929050565b60008115159050919050565b613cb781613ca2565b82525050565b6000602082019050613cd26000830184613cae565b92915050565b600080600060608486031215613cf157613cf0613bc9565b5b6000613cff86828701613c4d565b9350506020613d1086828701613c4d565b9250506040613d2186828701613c4d565b9150509250925092565b613d3481613c2c565b82525050565b6000602082019050613d4f6000830184613d2b565b92915050565b613d5e81613bee565b82525050565b6000602082019050613d796000830184613d55565b92915050565b600080600060608486031215613d9857613d97613bc9565b5b6000613da686828701613c17565b9350506020613db786828701613c17565b9250506040613dc886828701613c4d565b9150509250925092565b600060208284031215613de857613de7613bc9565b5b6000613df684828501613c17565b91505092915050565b600060ff82169050919050565b613e1581613dff565b82525050565b6000602082019050613e306000830184613e0c565b92915050565b613e3f81613ca2565b8114613e4a57600080fd5b50565b600081359050613e5c81613e36565b92915050565b60008060408385031215613e7957613e78613bc9565b5b6000613e8785828601613c17565b9250506020613e9885828601613e4d565b9150509250929050565b6000606082019050613eb76000830186613d2b565b613ec46020830185613d2b565b613ed16040830184613d2b565b949350505050565b60008060408385031215613ef057613eef613bc9565b5b6000613efe85828601613c17565b9250506020613f0f85828601613c17565b9150509250929050565b600080600080600080600080610100898b031215613f3a57613f39613bc9565b5b6000613f488b828c01613c4d565b9850506020613f598b828c01613c4d565b9750506040613f6a8b828c01613c4d565b9650506060613f7b8b828c01613c4d565b9550506080613f8c8b828c01613c4d565b94505060a0613f9d8b828c01613c4d565b93505060c0613fae8b828c01613c4d565b92505060e0613fbf8b828c01613c4d565b9150509295985092959890939650565b6000613fda82613bce565b9050919050565b613fea81613fcf565b8114613ff557600080fd5b50565b60008135905061400781613fe1565b92915050565b60006020828403121561402357614022613bc9565b5b600061403184828501613ff8565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614070600683613b22565b915061407b8261403a565b602082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140e082613c2c565b91506140eb83613c2c565b92508282026140f981613c2c565b915082820484148315176141105761410f6140a6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061415182613c2c565b915061415c83613c2c565b92508261416c5761416b614117565b5b828204905092915050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560008201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b60006141d3602e83613b22565b91506141de82614177565b604082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f496e656c696769626c6520416464726573730000000000000000000000000000600082015250565b600061423f601283613b22565b915061424a82614209565b602082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b600060408201905061428a6000830185613d55565b6142976020830184613d2b565b9392505050565b6000815190506142ad81613e36565b92915050565b6000602082840312156142c9576142c8613bc9565b5b60006142d78482850161429e565b91505092915050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b600061433c602c83613b22565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b6000819050919050565b600061439761439261438d84613bce565b614372565b613bce565b9050919050565b60006143a98261437c565b9050919050565b60006143bb8261439e565b9050919050565b6143cb816143b0565b82525050565b60006020820190506143e660008301846143c2565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614448602483613b22565b9150614453826143ec565b604082019050919050565b600060208201905081810360008301526144778161443b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144da602283613b22565b91506144e58261447e565b604082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b600061451b82613c2c565b915061452683613c2c565b925082820390508181111561453e5761453d6140a6565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145a0602583613b22565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614632602383613b22565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146c4602983613b22565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614756603183613b22565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b60006147c2600e83613b22565b91506147cd8261478c565b602082019050919050565b600060208201905081810360008301526147f1816147b5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b600061482e601e83613b22565b9150614839826147f8565b602082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b600061486f82613c2c565b915061487a83613c2c565b9250828201905080821115614892576148916140a6565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006148ce601183613b22565b91506148d982614898565b602082019050919050565b600060208201905081810360008301526148fd816148c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061493e82613c2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149705761496f6140a6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506149e881613c00565b92915050565b600060208284031215614a0457614a03613bc9565b5b6000614a12848285016149d9565b91505092915050565b6000819050919050565b6000614a40614a3b614a3684614a1b565b614372565b613c2c565b9050919050565b614a5081614a25565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a8b81613bee565b82525050565b6000614a9d8383614a82565b60208301905092915050565b6000602082019050919050565b6000614ac182614a56565b614acb8185614a61565b9350614ad683614a72565b8060005b83811015614b07578151614aee8882614a91565b9750614af983614aa9565b925050600181019050614ada565b5085935050505092915050565b600060a082019050614b296000830188613d2b565b614b366020830187614a47565b8181036040830152614b488186614ab6565b9050614b576060830185613d55565b614b646080830184613d2b565b9695505050505050565b600060c082019050614b836000830189613d55565b614b906020830188613d2b565b614b9d6040830187614a47565b614baa6060830186614a47565b614bb76080830185613d55565b614bc460a0830184613d2b565b979650505050505050565b600081519050614bde81613c36565b92915050565b600080600060608486031215614bfd57614bfc613bc9565b5b6000614c0b86828701614bcf565b9350506020614c1c86828701614bcf565b9250506040614c2d86828701614bcf565b9150509250925092565b600060208284031215614c4d57614c4c613bc9565b5b6000614c5b84828501614bcf565b91505092915050565b6000608082019050614c796000830187614a47565b8181036020830152614c8b8186614ab6565b9050614c9a6040830185613d55565b614ca76060830184613d2b565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c8c69b8498cdb53a8fdba6bb9a8cef6f325dcc57ee25ec040973ae9a03b50e2264736f6c63430008110033

Deployed Bytecode Sourcemap

4715:17810:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8266:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9371:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22270:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8646:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6224:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17200:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21140:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8489:67;;;;;;;;;;;;;:::i;:::-;;3095:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8416:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11940:578;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6297:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5325:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5376:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9257:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6857:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6911:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8736:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8562:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11690:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19956:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9510:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8339:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6330:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5499:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8845:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6956:68;;;;;;;;;;;;;:::i;:::-;;20347:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6730:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;8990:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11068:614;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17860:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6366:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3188:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6813:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8266:67;8303:13;8326:5;;;;;;;;;;;;;;;;;8319:12;;8266:67;:::o;9371:133::-;9446:4;9453:37;9462:10;9474:7;9483:6;9453:8;:37::i;:::-;9498:4;9491:11;;9371:133;;;;:::o;22270:252::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:10:::1;22404:9;:22;;;;22455:16;22437:15;:34;;;;22499:15;22482:14;:32;;;;22270:252:::0;;;:::o;8646:84::-;8699:7;8716:12;;8709:19;;8646:84;:::o;6224:66::-;;;;;;;;;;;;;:::o;17200:309::-;17298:4;17315:36;17325:6;17333:9;17344:6;17315:9;:36::i;:::-;17362:117;17371:6;17379:10;17391:87;17427:6;17391:87;;;;;;;;;;;;;;;;;:11;:19;17403:6;17391:19;;;;;;;;;;;;;;;:31;17411:10;17391:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;17362:8;:117::i;:::-;17497:4;17490:11;;17200:309;;;;;:::o;21140:473::-;21209:7;21262:1;21232:6;:19;21239:11;21232:19;;;;;;;;;;;;;;;:26;;;:31;21229:48;;21273:1;21266:8;;;;21229:48;21287:33;21323:50;21346:6;:19;21353:11;21346:19;;;;;;;;;;;;;;;:26;;;21323:22;:50::i;:::-;21287:86;;21384:32;21419:6;:19;21426:11;21419:19;;;;;;;;;;;;;;;:33;;;21384:68;;21495:24;21466:25;:53;21463:70;;21529:1;21522:8;;;;;;21463:70;21550:55;21580:24;21550:25;:29;;:55;;;;:::i;:::-;21543:62;;;;21140:473;;;;:::o;8489:67::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8550:4:::1;8533:14;;:21;;;;;;;;;;;;;;;;;;8489:67::o:0;3095:87::-;3150:4;3175:5;;;;;;;;;;;3164:16;;:7;:16;;;3157:23;;3095:87;;;:::o;8416:67::-;8457:5;4919:1;8465:16;;8416:67;:::o;11940:578::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12040:13:::1;12081:5;12073:4;12057:13;:11;:13::i;:::-;:20;;;;:::i;:::-;12056:30;;;;:::i;:::-;12040:46;;12097:19;12146:5;12136:6;12120:13;:11;:13::i;:::-;:22;;;;:::i;:::-;12119:32;;;;:::i;:::-;12097:54;;12162:17;12210:5;12199:7;12183:13;:11;:13::i;:::-;:23;;;;:::i;:::-;12182:33;;;;:::i;:::-;12162:53;;12241:5;12226:12;:20;;;;12274:11;12257:14;:28;;;;12314:9;12296:15;:27;;;;12334:13;12350:30;12375:4;12350:20;12368:1;12350:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;12334:46;;12408:5;12399;:14;;:38;;;;;12432:5;12417:11;:20;;12399:38;:60;;;;;12454:5;12441:9;:18;;12399:60;12391:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;12029:489;;;;11940:578:::0;;;:::o;6297:26::-;;;;:::o;5325:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;5376:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;9257:108::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9355:8:::1;9331:11;:21;9343:8;9331:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;9257:108:::0;;:::o;6857:47::-;;;;:::o;6911:38::-;;;;:::o;8736:103::-;8802:7;8819:9;:18;8829:7;8819:18;;;;;;;;;;;;;;;;8812:25;;8736:103;;;:::o;8562:78::-;8614:7;8632:5;;;;;;;;;;;8625:12;;8562:78;:::o;11690:242::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11799:4:::1;;;;;;;;;;;11779:25;;:8;:25;;;;:56;;;;;11828:6;;;;;;;;;;;11808:27;;:8;:27;;;;11779:56;:85;;;;;11859:4;11839:25;;:8;:25;;;;11779:85;11771:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;11916:8;11898:5;:15;11904:8;11898:15;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;11690:242:::0;;:::o;19956:140::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20049:8:::1;20042:25;;;20068:10;20080:7;20042:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19956:140:::0;;:::o;9510:138::-;9569:7;9586:60;9624:21;9642:1;9624:9;:21::i;:::-;9586:33;9603:15;7065:42;9603:9;:15::i;:::-;9586:12;;:16;;:33;;;;:::i;:::-;:37;;:60;;;;:::i;:::-;9579:67;;9510:138;:::o;8339:71::-;8378:13;8401:7;;;;;;;;;;;;;;;;;8394:14;;8339:71;:::o;6330:29::-;;;;:::o;5499:19::-;;;;;;;;;;;;;:::o;8845:139::-;8923:4;8930:40;8940:10;8952:9;8963:6;8930:9;:40::i;:::-;8978:4;8971:11;;8845:139;;;;:::o;6956:68::-;6992:30;7011:10;6992:18;:30::i;:::-;6956:68::o;20347:190::-;20420:7;20440:19;20462:7;20440:29;;20495:6;:19;20502:11;20495:19;;;;;;;;;;;;;;;:33;;;20480:49;;;20347:190;;;:::o;6730:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8990:127::-;9071:7;9088:11;:18;9100:5;9088:18;;;;;;;;;;;;;;;:27;9107:7;9088:27;;;;;;;;;;;;;;;;9081:34;;8990:127;;;;:::o;11068:614::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11277:10:::1;11262:12;:25;;;;11313:10;11298:12;:25;;;;11344:5;11334:7;:15;;;;11373:8;11360:10;:21;;;;11409:12;11392:14;:29;;;;11443:6;11432:8;:17;;;;11470:5;11460:7;:15;;;;11500:6;11486:11;:20;;;;11537:18;11553:1;11537:11;;:15;;:18;;;;:::i;:::-;11525:8;;:30;;:63;;;;;11570:18;11586:1;11570:11;;:15;;:18;;;;:::i;:::-;11559:7;;:29;;11525:63;:100;;;;;11607:18;11623:1;11607:11;;:15;;:18;;;;:::i;:::-;11592:11;;:33;;11525:100;11517:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;11068:614:::0;;;;;;;;:::o;17860:224::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17975:6:::1;17948:16;:24;17965:6;17948:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;17995:6;17992:85;;;18003:19;18012:6;18020:1;18003:8;:19::i;:::-;17992:85;;;18039:35;18048:6;18056:17;18066:6;18056:9;:17::i;:::-;18039:8;:35::i;:::-;17992:85;17860:224:::0;;:::o;6366:31::-;;;;:::o;3188:111::-;3054:19;3062:10;3054:7;:19::i;:::-;3046:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3262:3:::1;3254:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3272:25;3293:3;3272:25;;;;;;:::i;:::-;;;;;;;;3188:111:::0;:::o;6813:37::-;;;;:::o;17517:335::-;17627:1;17610:19;;:5;:19;;;17602:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17708:1;17689:21;;:7;:21;;;17681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17790:6;17760:11;:18;17772:5;17760:18;;;;;;;;;;;;;;;:27;17779:7;17760:27;;;;;;;;;;;;;;;:36;;;;17828:7;17812:32;;17821:5;17812:32;;;17837:6;17812:32;;;;;;:::i;:::-;;;;;;;;17517:335;;;:::o;10103:957::-;10192:37;10203:6;10211:9;10222:6;10192:10;:37::i;:::-;10240:38;10260:6;10268:9;10240:19;:38::i;:::-;10289:41;10304:6;10312:9;10323:6;10289:14;:41::i;:::-;10342:35;10359:6;10367:9;10342:16;:35::i;:::-;10388:39;10401:6;10409:9;10420:6;10388:12;:39::i;:::-;10439:35;10448:6;10456:9;10467:6;10439:8;:35::i;:::-;10505:29;10527:6;10505:9;:17;10515:6;10505:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;10485:9;:17;10495:6;10485:17;;;;;;;;;;;;;;;:49;;;;10545:22;10570:32;10584:6;10592:9;10570:13;:32::i;:::-;:78;;10642:6;10570:78;;;10605:34;10613:6;10621:9;10632:6;10605:7;:34::i;:::-;10570:78;10545:103;;10682:40;10707:14;10682:9;:20;10692:9;10682:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;10659:9;:20;10669:9;10659:20;;;;;;;;;;;;;;;:63;;;;10755:9;10738:43;;10747:6;10738:43;;;10766:14;10738:43;;;;;;:::i;:::-;;;;;;;;10796:16;:24;10813:6;10796:24;;;;;;;;;;;;;;;;;;;;;;;;;10792:67;;10822:35;10831:6;10839:17;10849:6;10839:9;:17::i;:::-;10822:8;:35::i;:::-;10792:67;10873:16;:27;10890:9;10873:27;;;;;;;;;;;;;;;;;;;;;;;;;10869:76;;10902:41;10911:9;10922:20;10932:9;10922;:20::i;:::-;10902:8;:41::i;:::-;10869:76;10985:1;10958:6;:17;10965:9;10958:17;;;;;;;;;;;;;;;:24;;;:28;10955:64;;;10988:29;11007:9;10988:18;:29::i;:::-;10955:64;11029:23;11037:14;;11029:7;:23::i;:::-;10181:879;10103:957;;;:::o;1427:162::-;1513:7;1556:1;1551;:6;;1559:12;1543:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1585:1;1581;:5;1574:12;;1427:162;;;;;:::o;21621:170::-;21691:7;21718:65;21751:31;;21718:28;21728:17;;21718:5;:9;;:28;;;;:::i;:::-;:32;;:65;;;;:::i;:::-;21711:72;;21621:170;;;:::o;214:82::-;272:7;293:1;289;:5;;;;:::i;:::-;282:12;;214:82;;;;:::o;302:::-;360:7;381:1;377;:5;;;;:::i;:::-;370:12;;302:82;;;;:::o;390:::-;448:7;469:1;465;:5;;;;:::i;:::-;458:12;;390:82;;;;:::o;20545:587::-;20647:1;20617:6;:19;20624:11;20617:19;;;;;;;;;;;;;;;:26;;;:31;20614:46;20651:7;20614:46;20670:14;20687:30;20705:11;20687:17;:30::i;:::-;20670:47;;20740:1;20731:6;:10;20728:397;;;20776:28;20797:6;20776:16;;:20;;:28;;;;:::i;:::-;20757:16;:47;;;;20826:6;;;;;;;;;;;20819:23;;;20843:11;20856:6;20819:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20911:15;20878:17;:30;20896:11;20878:30;;;;;;;;;;;;;;;:48;;;;20977:45;21015:6;20977;:19;20984:11;20977:19;;;;;;;;;;;;;;;:33;;;:37;;:45;;;;:::i;:::-;20941:6;:19;20948:11;20941:19;;;;;;;;;;;;;;;:33;;:81;;;;21073:50;21096:6;:19;21103:11;21096:19;;;;;;;;;;;;;;;:26;;;21073:22;:50::i;:::-;21037:6;:19;21044:11;21037:19;;;;;;;;;;;;;;;:33;;:86;;;;20728:397;20603:529;20545:587;;:::o;18092:482::-;18179:1;18170:6;:10;:45;;;;;18214:1;18184:6;:19;18191:11;18184:19;;;;;;;;;;;;;;;:26;;;:31;18170:45;18167:177;;;18217:27;18232:11;18217:14;:27::i;:::-;18167:177;;;18274:1;18264:6;:11;:45;;;;;18308:1;18279:6;:19;18286:11;18279:19;;;;;;;;;;;;;;;:26;;;:30;18264:45;18261:83;;;18311:30;18329:11;18311:17;:30::i;:::-;18261:83;18167:177;18368:55;18416:6;18368:43;18384:6;:19;18391:11;18384:19;;;;;;;;;;;;;;;:26;;;18368:11;;:15;;:43;;;;:::i;:::-;:47;;:55;;;;:::i;:::-;18354:11;:69;;;;18463:6;18434;:19;18441:11;18434:19;;;;;;;;;;;;;;;:26;;:35;;;;18516:50;18539:6;:19;18546:11;18539:19;;;;;;;;;;;;;;;:26;;;18516:22;:50::i;:::-;18480:6;:19;18487:11;18480:19;;;;;;;;;;;;;;;:33;;:86;;;;18092:482;;:::o;9656:439::-;9778:1;9760:20;;:6;:20;;;9752:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9862:1;9841:23;;:9;:23;;;9833:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9940:1;9923:6;:19;9915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10017:17;10027:6;10017:9;:17::i;:::-;10007:6;:27;;9999:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;9656:439;;;:::o;12526:191::-;12619:11;:19;12631:6;12619:19;;;;;;;;;;;;;;;;;;;;;;;;;12618:20;:47;;;;;12643:11;:22;12655:9;12643:22;;;;;;;;;;;;;;;;;;;;;;;;;12642:23;12618:47;12615:95;;;12675:14;;;;;;;;;;;12667:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;12615:95;12526:191;;:::o;12729:331::-;12833:11;:19;12845:6;12833:19;;;;;;;;;;;;;;;;;;;;;;;;;12832:20;:47;;;;;12857:11;:22;12869:9;12857:22;;;;;;;;;;;;;;;;;;;;;;;;;12856:23;12832:47;:77;;;;;12904:4;;;;;;;;;;;12883:26;;:9;:26;;;;12832:77;:107;;;;;7065:42;12913:26;;:9;:26;;;;12832:107;12829:224;;;13001:15;;12964:32;12989:6;12964:9;:20;12974:9;12964:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12963:53;;12955:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;12829:224;12729:331;;;:::o;13068:159::-;13165:4;;;;;;;;;;;13152:17;;:9;:17;;;:41;;;;;13174:11;:19;13186:6;13174:19;;;;;;;;;;;;;;;;;;;;;;;;;13173:20;13152:41;13149:71;;;13216:1;13195:9;;:23;;;;;;;:::i;:::-;;;;;;;;13149:71;13068:159;;:::o;13235:341::-;13346:4;;;;;;;;;;;13336:14;;:6;:14;;;13333:124;;13370:14;;13360:6;:24;;:47;;;;13388:11;:19;13400:6;13388:19;;;;;;;;;;;;;;;;;;;;;;;;;13360:47;:73;;;;13411:11;:22;13423:9;13411:22;;;;;;;;;;;;;;;;;;;;;;;;;13360:73;13352:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;13333:124;13485:12;;13475:6;:22;;:45;;;;13501:11;:19;13513:6;13501:19;;;;;;;;;;;;;;;;;;;;;;;;;13475:45;:71;;;;13524:11;:22;13536:9;13524:22;;;;;;;;;;;;;;;;;;;;;;;;;13475:71;13467:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;13235:341;;;:::o;15960:197::-;16052:41;16067:6;16075:9;16086:6;16052:14;:41::i;:::-;16049:101;;;16095:29;16110:13;;16095:14;:29::i;:::-;16146:1;16126:9;:22;;;;16049:101;15960:197;;;:::o;16165:160::-;16246:4;16271:11;:19;16283:6;16271:19;;;;;;;;;;;;;;;;;;;;;;;;;16270:20;:47;;;;;16295:11;:22;16307:9;16295:22;;;;;;;;;;;;;;;;;;;;;;;;;16294:23;16270:47;16263:54;;16165:160;;;;:::o;16646:546::-;16732:7;16788:1;16755:30;16767:6;16775:9;16755:11;:30::i;:::-;:34;16752:418;;;16801:17;16821:59;16849:30;16861:6;16869:9;16849:11;:30::i;:::-;16821:23;16832:11;;16821:6;:10;;:23;;;;:::i;:::-;:27;;:59;;;;:::i;:::-;16801:79;;16918:39;16947:9;16918;:24;16936:4;16918:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;16891:9;:24;16909:4;16891:24;;;;;;;;;;;;;;;:66;;;;16998:4;16973:42;;16982:6;16973:42;;;17005:9;16973:42;;;;;;:::i;:::-;;;;;;;;17047:1;17029:7;;:20;17026:104;;;17051:77;17069:4;7065:42;17091:36;17119:7;;17091:23;17102:11;;17091:6;:10;;:23;;;;:::i;:::-;:27;;:36;;;;:::i;:::-;17051:9;:77::i;:::-;17026:104;17147:21;17158:9;17147:6;:10;;:21;;;;:::i;:::-;17140:28;;;;;16752:418;17178:6;17171:13;;16646:546;;;;;;:::o;126:82::-;184:7;205:1;201;:5;;;;:::i;:::-;194:12;;126:82;;;;:::o;19272:676::-;19322:24;19349:12;:19;;;;19322:46;;19402:1;19382:16;:21;19379:37;;19407:7;;;19379:37;19426:15;19456;19474:9;19456:27;;19494:18;19527:414;19543:3;19533:7;:13;:46;;;;;19563:16;19550:10;:29;19533:46;19527:414;;;19615:16;19599:12;;:32;19596:55;;19648:1;19633:12;:16;;;;19596:55;19668:44;19685:12;19698;;19685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19668:16;:44::i;:::-;19665:115;;;19732:46;19751:12;19764;;19751:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19732:18;:46::i;:::-;19665:115;19804:35;19816:22;19828:9;19816:7;:11;;:22;;;;:::i;:::-;19804:7;:11;;:35;;;;:::i;:::-;19794:45;;19864:9;19854:19;;19888:12;;:14;;;;;;;;;:::i;:::-;;;;;;19917:12;;;;;:::i;:::-;;;;19527:414;;;19311:637;;;;19272:676;;:::o;21799:167::-;21898:12;:19;;;;21864:18;:31;21883:11;21864:31;;;;;;;;;;;;;;;:53;;;;21928:12;21946:11;21928:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21799:167;:::o;21974:288::-;22090:12;22123:1;22103:12;:19;;;;:21;;;;:::i;:::-;22090:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22042:12;22055:18;:31;22074:11;22055:31;;;;;;;;;;;;;;;;22042:45;;;;;;;;:::i;:::-;;;;;;;;;;:83;;;;;;;;;;;;;;;;;;22194:18;:31;22213:11;22194:31;;;;;;;;;;;;;;;;22136:18;:55;22155:12;22188:1;22168:12;:19;;;;:21;;;;:::i;:::-;22155:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22136:55;;;;;;;;;;;;;;;:89;;;;22236:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;21974:288;:::o;15552:400::-;15650:4;15667:13;15693:15;;15683:6;:25;;15667:41;;15719:19;15769:13;;15741:24;15759:4;15741:9;:24::i;:::-;:41;;15719:63;;15801:8;;;;;;;;;;;15800:9;:24;;;;;15813:11;;;;;;;;;;;15800:24;:42;;;;;15828:14;;;;;;;;;;;15800:42;:54;;;;;15846:8;15800:54;:78;;;;;15859:11;:19;15871:6;15859:19;;;;;;;;;;;;;;;;;;;;;;;;;15858:20;15800:78;:99;;;;;15895:4;;;;;;;;;;;15882:17;;:9;:17;;;15800:99;:126;;;;;15924:1;15903:9;;:23;;15800:126;:144;;;;;15930:14;15800:144;15793:151;;;;15552:400;;;;;:::o;13584:1167::-;6191:4;6180:8;;:15;;;;;;;;;;;;;;;;;;13655:20:::1;13678:82;13758:1;13679:73;13741:10;;13679:57;13721:14;;13679:37;13703:12;;13679:19;13696:1;13679:12;;:16;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;:61;;:73;;;;:::i;:::-;13678:79;;:82;;;;:::i;:::-;13655:105;;13771:32;13806:42;13835:12;13806:24;13817:12;;13806:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;13771:77;;13859:14;13876:36;13887:24;13876:6;:10;;:36;;;;:::i;:::-;13859:53;;13923:22;13948:21;13923:46;;13980:24;13997:6;13980:16;:24::i;:::-;14015:20;14038:41;14064:14;14038:21;:25;;:41;;;;:::i;:::-;14015:64;;14090:19;14111:48;14128:30;14145:12;;14128;:16;;:30;;;;:::i;:::-;14111:12;:16;;:48;;;;:::i;:::-;14090:69;;14170:29;14202;14218:12;;14202:11;:15;;:29;;;;:::i;:::-;14170:61;;14277:1;14245:21;:34;14242:103;;;14281:61;14294:24;14320:21;14281:12;:61::i;:::-;14242:103;14355:23;14381:36;14404:12;;14381:18;14397:1;14381:11;:15;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;14355:62;;14449:1;14431:15;:19;14428:79;;;7260:42;14452:36;;:53;14489:15;14452:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14428:79;14517:21;14541:34;14564:10;;14541:18;14557:1;14541:11;:15;;:18;;;;:::i;:::-;:22;;:34;;;;:::i;:::-;14517:58;;14605:1;14589:13;:17;14586:46;;;14608:22;14616:13;14608:7;:22::i;:::-;14586:46;14677:1;14645:21;:34;14642:102;;;7163:42;14681:38;;:61;14720:21;14681:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14642:102;13644:1107;;;;;;;;;6211:5:::0;6200:8;;:16;;;;;;;;;;;;;;;;;;13584:1167;:::o;16333:305::-;16412:7;16435:5;:13;16441:6;16435:13;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;16452:5;:16;16458:9;16452:16;;;;;;;;;;;;;;;;;;;;;;;;;16435:33;16432:76;;;16477:29;16501:3;16477:11;;:15;;:29;;;;:::i;:::-;16470:36;;;;16432:76;16534:4;;;;;;;;;;;16521:17;;:9;:17;;;16518:38;;16547:7;;16540:14;;;;16518:38;16579:4;;;;;;;;;;;16569:14;;:6;:14;;;16566:36;;16592:8;;16585:15;;;;16566:36;16619:11;;16612:18;;16333:305;;;;;:::o;20108:231::-;20178:4;20247:15;20235:9;;20202:17;:30;20220:11;20202:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:60;:129;;;;;20316:15;;20283:30;20301:11;20283:17;:30::i;:::-;:48;20202:129;20195:136;;20108:231;;;:::o;15110:434::-;15176:21;15214:1;15200:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15176:40;;15245:4;15227;15232:1;15227:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15271:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15261:4;15266:1;15261:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15295:53;15312:4;15327:6;;;;;;;;;;;15336:11;15295:8;:53::i;:::-;15359:6;;;;;;;;;;;:57;;;15431:11;15457:1;15473:4;15500;15520:15;15359:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15165:379;15110:434;:::o;14759:343::-;14840:53;14857:4;14872:6;;;;;;;;;;;14881:11;14840:8;:53::i;:::-;14904:6;;;;;;;;;;;:22;;;14934:9;14967:4;14987:11;15013:1;15029;7356:42;15078:15;14904:190;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14759:343;;:::o;18582:682::-;18638:21;18669:6;;;;;;;;;;;18662:24;;;18695:4;18662:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18638:63;;18712:21;18750:1;18736:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18712:40;;18773:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18763:4;18768:1;18763:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;18815:6;;;;;;;;;;;18797:4;18802:1;18797:7;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;18833:6;;;;;;;;;;;:57;;;18898:9;18923:1;18939:4;18966;18986:15;18833:169;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19013:14;19030:58;19074:13;19037:6;;;;;;;;;;;19030:24;;;19063:4;19030:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;:58;;;;:::i;:::-;19013:75;;19116:26;19135:6;19116:14;;:18;;:26;;;;:::i;:::-;19099:14;:43;;;;19173:83;19195:60;19243:11;;19195:43;19231:6;19195:31;;:35;;:43;;;;:::i;:::-;:47;;:60;;;;:::i;:::-;19173:17;;:21;;:83;;;;:::i;:::-;19153:17;:103;;;;18627:637;;;18582:682;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:118::-;4158:24;4176:5;4158:24;:::i;:::-;4153:3;4146:37;4071:118;;:::o;4195:222::-;4288:4;4326:2;4315:9;4311:18;4303:26;;4339:71;4407:1;4396:9;4392:17;4383:6;4339:71;:::i;:::-;4195:222;;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:619::-;4852:6;4860;4868;4917:2;4905:9;4896:7;4892:23;4888:32;4885:119;;;4923:79;;:::i;:::-;4885:119;5043:1;5068:53;5113:7;5104:6;5093:9;5089:22;5068:53;:::i;:::-;5058:63;;5014:117;5170:2;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5141:118;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;4775:619;;;;;:::o;5400:329::-;5459:6;5508:2;5496:9;5487:7;5483:23;5479:32;5476:119;;;5514:79;;:::i;:::-;5476:119;5634:1;5659:53;5704:7;5695:6;5684:9;5680:22;5659:53;:::i;:::-;5649:63;;5605:117;5400:329;;;;:::o;5735:86::-;5770:7;5810:4;5803:5;5799:16;5788:27;;5735:86;;;:::o;5827:112::-;5910:22;5926:5;5910:22;:::i;:::-;5905:3;5898:35;5827:112;;:::o;5945:214::-;6034:4;6072:2;6061:9;6057:18;6049:26;;6085:67;6149:1;6138:9;6134:17;6125:6;6085:67;:::i;:::-;5945:214;;;;:::o;6165:116::-;6235:21;6250:5;6235:21;:::i;:::-;6228:5;6225:32;6215:60;;6271:1;6268;6261:12;6215:60;6165:116;:::o;6287:133::-;6330:5;6368:6;6355:20;6346:29;;6384:30;6408:5;6384:30;:::i;:::-;6287:133;;;;:::o;6426:468::-;6491:6;6499;6548:2;6536:9;6527:7;6523:23;6519:32;6516:119;;;6554:79;;:::i;:::-;6516:119;6674:1;6699:53;6744:7;6735:6;6724:9;6720:22;6699:53;:::i;:::-;6689:63;;6645:117;6801:2;6827:50;6869:7;6860:6;6849:9;6845:22;6827:50;:::i;:::-;6817:60;;6772:115;6426:468;;;;;:::o;6900:442::-;7049:4;7087:2;7076:9;7072:18;7064:26;;7100:71;7168:1;7157:9;7153:17;7144:6;7100:71;:::i;:::-;7181:72;7249:2;7238:9;7234:18;7225:6;7181:72;:::i;:::-;7263;7331:2;7320:9;7316:18;7307:6;7263:72;:::i;:::-;6900:442;;;;;;:::o;7348:474::-;7416:6;7424;7473:2;7461:9;7452:7;7448:23;7444:32;7441:119;;;7479:79;;:::i;:::-;7441:119;7599:1;7624:53;7669:7;7660:6;7649:9;7645:22;7624:53;:::i;:::-;7614:63;;7570:117;7726:2;7752:53;7797:7;7788:6;7777:9;7773:22;7752:53;:::i;:::-;7742:63;;7697:118;7348:474;;;;;:::o;7828:1349::-;7950:6;7958;7966;7974;7982;7990;7998;8006;8055:3;8043:9;8034:7;8030:23;8026:33;8023:120;;;8062:79;;:::i;:::-;8023:120;8182:1;8207:53;8252:7;8243:6;8232:9;8228:22;8207:53;:::i;:::-;8197:63;;8153:117;8309:2;8335:53;8380:7;8371:6;8360:9;8356:22;8335:53;:::i;:::-;8325:63;;8280:118;8437:2;8463:53;8508:7;8499:6;8488:9;8484:22;8463:53;:::i;:::-;8453:63;;8408:118;8565:2;8591:53;8636:7;8627:6;8616:9;8612:22;8591:53;:::i;:::-;8581:63;;8536:118;8693:3;8720:53;8765:7;8756:6;8745:9;8741:22;8720:53;:::i;:::-;8710:63;;8664:119;8822:3;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8793:119;8951:3;8978:53;9023:7;9014:6;9003:9;8999:22;8978:53;:::i;:::-;8968:63;;8922:119;9080:3;9107:53;9152:7;9143:6;9132:9;9128:22;9107:53;:::i;:::-;9097:63;;9051:119;7828:1349;;;;;;;;;;;:::o;9183:104::-;9228:7;9257:24;9275:5;9257:24;:::i;:::-;9246:35;;9183:104;;;:::o;9293:138::-;9374:32;9400:5;9374:32;:::i;:::-;9367:5;9364:43;9354:71;;9421:1;9418;9411:12;9354:71;9293:138;:::o;9437:155::-;9491:5;9529:6;9516:20;9507:29;;9545:41;9580:5;9545:41;:::i;:::-;9437:155;;;;:::o;9598:345::-;9665:6;9714:2;9702:9;9693:7;9689:23;9685:32;9682:119;;;9720:79;;:::i;:::-;9682:119;9840:1;9865:61;9918:7;9909:6;9898:9;9894:22;9865:61;:::i;:::-;9855:71;;9811:125;9598:345;;;;:::o;9949:156::-;10089:8;10085:1;10077:6;10073:14;10066:32;9949:156;:::o;10111:365::-;10253:3;10274:66;10338:1;10333:3;10274:66;:::i;:::-;10267:73;;10349:93;10438:3;10349:93;:::i;:::-;10467:2;10462:3;10458:12;10451:19;;10111:365;;;:::o;10482:419::-;10648:4;10686:2;10675:9;10671:18;10663:26;;10735:9;10729:4;10725:20;10721:1;10710:9;10706:17;10699:47;10763:131;10889:4;10763:131;:::i;:::-;10755:139;;10482:419;;;:::o;10907:180::-;10955:77;10952:1;10945:88;11052:4;11049:1;11042:15;11076:4;11073:1;11066:15;11093:410;11133:7;11156:20;11174:1;11156:20;:::i;:::-;11151:25;;11190:20;11208:1;11190:20;:::i;:::-;11185:25;;11245:1;11242;11238:9;11267:30;11285:11;11267:30;:::i;:::-;11256:41;;11446:1;11437:7;11433:15;11430:1;11427:22;11407:1;11400:9;11380:83;11357:139;;11476:18;;:::i;:::-;11357:139;11141:362;11093:410;;;;:::o;11509:180::-;11557:77;11554:1;11547:88;11654:4;11651:1;11644:15;11678:4;11675:1;11668:15;11695:185;11735:1;11752:20;11770:1;11752:20;:::i;:::-;11747:25;;11786:20;11804:1;11786:20;:::i;:::-;11781:25;;11825:1;11815:35;;11830:18;;:::i;:::-;11815:35;11872:1;11869;11865:9;11860:14;;11695:185;;;;:::o;11886:233::-;12026:34;12022:1;12014:6;12010:14;12003:58;12095:16;12090:2;12082:6;12078:15;12071:41;11886:233;:::o;12125:366::-;12267:3;12288:67;12352:2;12347:3;12288:67;:::i;:::-;12281:74;;12364:93;12453:3;12364:93;:::i;:::-;12482:2;12477:3;12473:12;12466:19;;12125:366;;;:::o;12497:419::-;12663:4;12701:2;12690:9;12686:18;12678:26;;12750:9;12744:4;12740:20;12736:1;12725:9;12721:17;12714:47;12778:131;12904:4;12778:131;:::i;:::-;12770:139;;12497:419;;;:::o;12922:168::-;13062:20;13058:1;13050:6;13046:14;13039:44;12922:168;:::o;13096:366::-;13238:3;13259:67;13323:2;13318:3;13259:67;:::i;:::-;13252:74;;13335:93;13424:3;13335:93;:::i;:::-;13453:2;13448:3;13444:12;13437:19;;13096:366;;;:::o;13468:419::-;13634:4;13672:2;13661:9;13657:18;13649:26;;13721:9;13715:4;13711:20;13707:1;13696:9;13692:17;13685:47;13749:131;13875:4;13749:131;:::i;:::-;13741:139;;13468:419;;;:::o;13893:332::-;14014:4;14052:2;14041:9;14037:18;14029:26;;14065:71;14133:1;14122:9;14118:17;14109:6;14065:71;:::i;:::-;14146:72;14214:2;14203:9;14199:18;14190:6;14146:72;:::i;:::-;13893:332;;;;;:::o;14231:137::-;14285:5;14316:6;14310:13;14301:22;;14332:30;14356:5;14332:30;:::i;:::-;14231:137;;;;:::o;14374:345::-;14441:6;14490:2;14478:9;14469:7;14465:23;14461:32;14458:119;;;14496:79;;:::i;:::-;14458:119;14616:1;14641:61;14694:7;14685:6;14674:9;14670:22;14641:61;:::i;:::-;14631:71;;14587:125;14374:345;;;;:::o;14725:231::-;14865:34;14861:1;14853:6;14849:14;14842:58;14934:14;14929:2;14921:6;14917:15;14910:39;14725:231;:::o;14962:366::-;15104:3;15125:67;15189:2;15184:3;15125:67;:::i;:::-;15118:74;;15201:93;15290:3;15201:93;:::i;:::-;15319:2;15314:3;15310:12;15303:19;;14962:366;;;:::o;15334:419::-;15500:4;15538:2;15527:9;15523:18;15515:26;;15587:9;15581:4;15577:20;15573:1;15562:9;15558:17;15551:47;15615:131;15741:4;15615:131;:::i;:::-;15607:139;;15334:419;;;:::o;15759:60::-;15787:3;15808:5;15801:12;;15759:60;;;:::o;15825:142::-;15875:9;15908:53;15926:34;15935:24;15953:5;15935:24;:::i;:::-;15926:34;:::i;:::-;15908:53;:::i;:::-;15895:66;;15825:142;;;:::o;15973:126::-;16023:9;16056:37;16087:5;16056:37;:::i;:::-;16043:50;;15973:126;;;:::o;16105:134::-;16163:9;16196:37;16227:5;16196:37;:::i;:::-;16183:50;;16105:134;;;:::o;16245:147::-;16340:45;16379:5;16340:45;:::i;:::-;16335:3;16328:58;16245:147;;:::o;16398:238::-;16499:4;16537:2;16526:9;16522:18;16514:26;;16550:79;16626:1;16615:9;16611:17;16602:6;16550:79;:::i;:::-;16398:238;;;;:::o;16642:223::-;16782:34;16778:1;16770:6;16766:14;16759:58;16851:6;16846:2;16838:6;16834:15;16827:31;16642:223;:::o;16871:366::-;17013:3;17034:67;17098:2;17093:3;17034:67;:::i;:::-;17027:74;;17110:93;17199:3;17110:93;:::i;:::-;17228:2;17223:3;17219:12;17212:19;;16871:366;;;:::o;17243:419::-;17409:4;17447:2;17436:9;17432:18;17424:26;;17496:9;17490:4;17486:20;17482:1;17471:9;17467:17;17460:47;17524:131;17650:4;17524:131;:::i;:::-;17516:139;;17243:419;;;:::o;17668:221::-;17808:34;17804:1;17796:6;17792:14;17785:58;17877:4;17872:2;17864:6;17860:15;17853:29;17668:221;:::o;17895:366::-;18037:3;18058:67;18122:2;18117:3;18058:67;:::i;:::-;18051:74;;18134:93;18223:3;18134:93;:::i;:::-;18252:2;18247:3;18243:12;18236:19;;17895:366;;;:::o;18267:419::-;18433:4;18471:2;18460:9;18456:18;18448:26;;18520:9;18514:4;18510:20;18506:1;18495:9;18491:17;18484:47;18548:131;18674:4;18548:131;:::i;:::-;18540:139;;18267:419;;;:::o;18692:194::-;18732:4;18752:20;18770:1;18752:20;:::i;:::-;18747:25;;18786:20;18804:1;18786:20;:::i;:::-;18781:25;;18830:1;18827;18823:9;18815:17;;18854:1;18848:4;18845:11;18842:37;;;18859:18;;:::i;:::-;18842:37;18692:194;;;;:::o;18892:224::-;19032:34;19028:1;19020:6;19016:14;19009:58;19101:7;19096:2;19088:6;19084:15;19077:32;18892:224;:::o;19122:366::-;19264:3;19285:67;19349:2;19344:3;19285:67;:::i;:::-;19278:74;;19361:93;19450:3;19361:93;:::i;:::-;19479:2;19474:3;19470:12;19463:19;;19122:366;;;:::o;19494:419::-;19660:4;19698:2;19687:9;19683:18;19675:26;;19747:9;19741:4;19737:20;19733:1;19722:9;19718:17;19711:47;19775:131;19901:4;19775:131;:::i;:::-;19767:139;;19494:419;;;:::o;19919:222::-;20059:34;20055:1;20047:6;20043:14;20036:58;20128:5;20123:2;20115:6;20111:15;20104:30;19919:222;:::o;20147:366::-;20289:3;20310:67;20374:2;20369:3;20310:67;:::i;:::-;20303:74;;20386:93;20475:3;20386:93;:::i;:::-;20504:2;20499:3;20495:12;20488:19;;20147:366;;;:::o;20519:419::-;20685:4;20723:2;20712:9;20708:18;20700:26;;20772:9;20766:4;20762:20;20758:1;20747:9;20743:17;20736:47;20800:131;20926:4;20800:131;:::i;:::-;20792:139;;20519:419;;;:::o;20944:228::-;21084:34;21080:1;21072:6;21068:14;21061:58;21153:11;21148:2;21140:6;21136:15;21129:36;20944:228;:::o;21178:366::-;21320:3;21341:67;21405:2;21400:3;21341:67;:::i;:::-;21334:74;;21417:93;21506:3;21417:93;:::i;:::-;21535:2;21530:3;21526:12;21519:19;;21178:366;;;:::o;21550:419::-;21716:4;21754:2;21743:9;21739:18;21731:26;;21803:9;21797:4;21793:20;21789:1;21778:9;21774:17;21767:47;21831:131;21957:4;21831:131;:::i;:::-;21823:139;;21550:419;;;:::o;21975:236::-;22115:34;22111:1;22103:6;22099:14;22092:58;22184:19;22179:2;22171:6;22167:15;22160:44;21975:236;:::o;22217:366::-;22359:3;22380:67;22444:2;22439:3;22380:67;:::i;:::-;22373:74;;22456:93;22545:3;22456:93;:::i;:::-;22574:2;22569:3;22565:12;22558:19;;22217:366;;;:::o;22589:419::-;22755:4;22793:2;22782:9;22778:18;22770:26;;22842:9;22836:4;22832:20;22828:1;22817:9;22813:17;22806:47;22870:131;22996:4;22870:131;:::i;:::-;22862:139;;22589:419;;;:::o;23014:164::-;23154:16;23150:1;23142:6;23138:14;23131:40;23014:164;:::o;23184:366::-;23326:3;23347:67;23411:2;23406:3;23347:67;:::i;:::-;23340:74;;23423:93;23512:3;23423:93;:::i;:::-;23541:2;23536:3;23532:12;23525:19;;23184:366;;;:::o;23556:419::-;23722:4;23760:2;23749:9;23745:18;23737:26;;23809:9;23803:4;23799:20;23795:1;23784:9;23780:17;23773:47;23837:131;23963:4;23837:131;:::i;:::-;23829:139;;23556:419;;;:::o;23981:180::-;24121:32;24117:1;24109:6;24105:14;24098:56;23981:180;:::o;24167:366::-;24309:3;24330:67;24394:2;24389:3;24330:67;:::i;:::-;24323:74;;24406:93;24495:3;24406:93;:::i;:::-;24524:2;24519:3;24515:12;24508:19;;24167:366;;;:::o;24539:419::-;24705:4;24743:2;24732:9;24728:18;24720:26;;24792:9;24786:4;24782:20;24778:1;24767:9;24763:17;24756:47;24820:131;24946:4;24820:131;:::i;:::-;24812:139;;24539:419;;;:::o;24964:191::-;25004:3;25023:20;25041:1;25023:20;:::i;:::-;25018:25;;25057:20;25075:1;25057:20;:::i;:::-;25052:25;;25100:1;25097;25093:9;25086:16;;25121:3;25118:1;25115:10;25112:36;;;25128:18;;:::i;:::-;25112:36;24964:191;;;;:::o;25161:167::-;25301:19;25297:1;25289:6;25285:14;25278:43;25161:167;:::o;25334:366::-;25476:3;25497:67;25561:2;25556:3;25497:67;:::i;:::-;25490:74;;25573:93;25662:3;25573:93;:::i;:::-;25691:2;25686:3;25682:12;25675:19;;25334:366;;;:::o;25706:419::-;25872:4;25910:2;25899:9;25895:18;25887:26;;25959:9;25953:4;25949:20;25945:1;25934:9;25930:17;25923:47;25987:131;26113:4;25987:131;:::i;:::-;25979:139;;25706:419;;;:::o;26131:180::-;26179:77;26176:1;26169:88;26276:4;26273:1;26266:15;26300:4;26297:1;26290:15;26317:233;26356:3;26379:24;26397:5;26379:24;:::i;:::-;26370:33;;26425:66;26418:5;26415:77;26412:103;;26495:18;;:::i;:::-;26412:103;26542:1;26535:5;26531:13;26524:20;;26317:233;;;:::o;26556:180::-;26604:77;26601:1;26594:88;26701:4;26698:1;26691:15;26725:4;26722:1;26715:15;26742:180;26790:77;26787:1;26780:88;26887:4;26884:1;26877:15;26911:4;26908:1;26901:15;26928:143;26985:5;27016:6;27010:13;27001:22;;27032:33;27059:5;27032:33;:::i;:::-;26928:143;;;;:::o;27077:351::-;27147:6;27196:2;27184:9;27175:7;27171:23;27167:32;27164:119;;;27202:79;;:::i;:::-;27164:119;27322:1;27347:64;27403:7;27394:6;27383:9;27379:22;27347:64;:::i;:::-;27337:74;;27293:128;27077:351;;;;:::o;27434:85::-;27479:7;27508:5;27497:16;;27434:85;;;:::o;27525:158::-;27583:9;27616:61;27634:42;27643:32;27669:5;27643:32;:::i;:::-;27634:42;:::i;:::-;27616:61;:::i;:::-;27603:74;;27525:158;;;:::o;27689:147::-;27784:45;27823:5;27784:45;:::i;:::-;27779:3;27772:58;27689:147;;:::o;27842:114::-;27909:6;27943:5;27937:12;27927:22;;27842:114;;;:::o;27962:184::-;28061:11;28095:6;28090:3;28083:19;28135:4;28130:3;28126:14;28111:29;;27962:184;;;;:::o;28152:132::-;28219:4;28242:3;28234:11;;28272:4;28267:3;28263:14;28255:22;;28152:132;;;:::o;28290:108::-;28367:24;28385:5;28367:24;:::i;:::-;28362:3;28355:37;28290:108;;:::o;28404:179::-;28473:10;28494:46;28536:3;28528:6;28494:46;:::i;:::-;28572:4;28567:3;28563:14;28549:28;;28404:179;;;;:::o;28589:113::-;28659:4;28691;28686:3;28682:14;28674:22;;28589:113;;;:::o;28738:732::-;28857:3;28886:54;28934:5;28886:54;:::i;:::-;28956:86;29035:6;29030:3;28956:86;:::i;:::-;28949:93;;29066:56;29116:5;29066:56;:::i;:::-;29145:7;29176:1;29161:284;29186:6;29183:1;29180:13;29161:284;;;29262:6;29256:13;29289:63;29348:3;29333:13;29289:63;:::i;:::-;29282:70;;29375:60;29428:6;29375:60;:::i;:::-;29365:70;;29221:224;29208:1;29205;29201:9;29196:14;;29161:284;;;29165:14;29461:3;29454:10;;28862:608;;;28738:732;;;;:::o;29476:831::-;29739:4;29777:3;29766:9;29762:19;29754:27;;29791:71;29859:1;29848:9;29844:17;29835:6;29791:71;:::i;:::-;29872:80;29948:2;29937:9;29933:18;29924:6;29872:80;:::i;:::-;29999:9;29993:4;29989:20;29984:2;29973:9;29969:18;29962:48;30027:108;30130:4;30121:6;30027:108;:::i;:::-;30019:116;;30145:72;30213:2;30202:9;30198:18;30189:6;30145:72;:::i;:::-;30227:73;30295:3;30284:9;30280:19;30271:6;30227:73;:::i;:::-;29476:831;;;;;;;;:::o;30313:807::-;30562:4;30600:3;30589:9;30585:19;30577:27;;30614:71;30682:1;30671:9;30667:17;30658:6;30614:71;:::i;:::-;30695:72;30763:2;30752:9;30748:18;30739:6;30695:72;:::i;:::-;30777:80;30853:2;30842:9;30838:18;30829:6;30777:80;:::i;:::-;30867;30943:2;30932:9;30928:18;30919:6;30867:80;:::i;:::-;30957:73;31025:3;31014:9;31010:19;31001:6;30957:73;:::i;:::-;31040;31108:3;31097:9;31093:19;31084:6;31040:73;:::i;:::-;30313:807;;;;;;;;;:::o;31126:143::-;31183:5;31214:6;31208:13;31199:22;;31230:33;31257:5;31230:33;:::i;:::-;31126:143;;;;:::o;31275:663::-;31363:6;31371;31379;31428:2;31416:9;31407:7;31403:23;31399:32;31396:119;;;31434:79;;:::i;:::-;31396:119;31554:1;31579:64;31635:7;31626:6;31615:9;31611:22;31579:64;:::i;:::-;31569:74;;31525:128;31692:2;31718:64;31774:7;31765:6;31754:9;31750:22;31718:64;:::i;:::-;31708:74;;31663:129;31831:2;31857:64;31913:7;31904:6;31893:9;31889:22;31857:64;:::i;:::-;31847:74;;31802:129;31275:663;;;;;:::o;31944:351::-;32014:6;32063:2;32051:9;32042:7;32038:23;32034:32;32031:119;;;32069:79;;:::i;:::-;32031:119;32189:1;32214:64;32270:7;32261:6;32250:9;32246:22;32214:64;:::i;:::-;32204:74;;32160:128;31944:351;;;;:::o;32301:720::-;32536:4;32574:3;32563:9;32559:19;32551:27;;32588:79;32664:1;32653:9;32649:17;32640:6;32588:79;:::i;:::-;32714:9;32708:4;32704:20;32699:2;32688:9;32684:18;32677:48;32742:108;32845:4;32836:6;32742:108;:::i;:::-;32734:116;;32860:72;32928:2;32917:9;32913:18;32904:6;32860:72;:::i;:::-;32942;33010:2;32999:9;32995:18;32986:6;32942:72;:::i;:::-;32301:720;;;;;;;:::o

Swarm Source

ipfs://c8c69b8498cdb53a8fdba6bb9a8cef6f325dcc57ee25ec040973ae9a03b50e22

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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