Token TangleV3

 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
1,000,000,000 TNGLv3

Holders:
38,624 addresses

Transfers:
-

Contract:
0x2f96f61a027b5101e966ec1ba75b78f353259fb30x2F96f61a027B5101E966EC1bA75B78f353259Fb3

Decimals:
9

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TangleV3

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: 0BSD

pragma solidity ^0.8.7;

interface ERC20 {
    function transfer(address to, uint tokens) external;
    function transferFrom(address from, address to, uint tokens) external;
}

contract TangleV3 {

    uint8 public decimals;
    uint public totalSupply;
    string public name;
    string public symbol;
    mapping (address => uint256) private balances;
    mapping (address => mapping (address => uint)) private allowed;

    bool public disableGame = false;
    address public gamemaster;
    address public owner;
    address public liquidityAddress;
    uint public totalPieces;
    uint public piecesPerUnit;
    uint public minHoldAmount;
    uint public workaroundConstant = 1;
    uint public distributionRewardThreshold;
    uint public marketMakingRewardThreshold;
    mapping(uint => uint) public S;
    mapping(uint => uint) public tax;
    mapping(uint => uint) public rewardMax;
    mapping(uint => uint) public startTime;
    mapping(uint => uint) public rewardConst;
    mapping(uint => uint) public totalRewardableEvents;
    mapping(uint => uint) public lastRewardDistribution;
    mapping(uint => uint) public rewardsLastRewardChange;
    mapping(uint => uint) public timeFromInitToLastRewardChange;
    mapping(address => bool) public hasReceivedPieces;
    mapping(address => mapping(uint => uint)) public Si;
    mapping(address => mapping(uint => uint)) public WCi;
    mapping(address => mapping(uint => uint)) public storedRewards;
    mapping(address => mapping(uint => uint)) public rewardableEvents;

    constructor() {
        name = "TangleV3";
        symbol = "TNGLv3";
        decimals = 9;
        totalSupply = 1e9 * 1*10**(decimals);
        totalPieces = type(uint128).max - (type(uint128).max % totalSupply);
        piecesPerUnit = totalPieces / totalSupply;
        balances[msg.sender] = totalPieces;
        gamemaster = msg.sender;
        owner = msg.sender;
        minHoldAmount = 1;
        distributionRewardThreshold = 1e9;
        marketMakingRewardThreshold = 1e9;

        // INITIAL REWARDCONST MAP {
            rewardConst[0] = 300000; // Market Maker
            rewardConst[1] = 300000; // Distributor
            rewardConst[2] = 300000; // Staker
        // }

        // INITIAL TAX MAP {
            tax[100] =  5e9;  // Transfer Multiplier
            tax[101] =  1e11; // Transfer Divisor
            tax[200] =  1e9;  // Market Maker Transfer Multiplier
            tax[201] =  1e11; // Market Maker Transfer Divisor
            tax[210] = 10e9;  // Market Maker Withdraw Multiplier
            tax[211] =  1e11; // Market Maker Withdraw Divisor
            tax[220] =  4e9;  // Market Maker To Distributor Multiplier
            tax[221] =  1e11; // Market Maker To Distributor Divisor
            tax[230] =  4e9;  // Market Maker To Staker Multiplier
            tax[231] =  1e11; // Market Maker To Staker Divisor
            tax[240] =  1e9;  // Market Maker To Reflect Multiplier
            tax[241] =  1e11; // Market Maker To Reflect Divisor
            tax[250] =  1e9;  // Market Maker To Gamemaster Multiplier
            tax[251] =  1e11; // Market Maker To Gamemaster Divisor
            tax[300] =  1e9;  // Distributor Transfer Multiplier
            tax[301] =  1e11; // Distributor Transfer Divisor
            tax[310] = 10e9;  // Distributor Withdraw Multiplier
            tax[311] =  1e11; // Distributor Withdraw Divisor
            tax[320] =  4e9;  // Distributor To Market Maker Multiplier
            tax[321] =  1e11; // Distributor To Market Maker Divisor
            tax[330] =  4e9;  // Distributor To Staker Multiplier
            tax[331] =  1e11; // Distributor To Staker Divisor
            tax[340] =  1e9;  // Distributor To Reflect Multiplier
            tax[341] =  1e11; // Distributor To Reflect Divisor
            tax[350] =  1e9;  // Distributor To Gamemaster Multiplier
            tax[351] =  1e11; // Distributor To Gamemaster Divisor
            tax[400] =  1e9;  // Staker Transfer Multiplier
            tax[401] =  1e11; // Staker Transfer Divisor
            tax[410] = 10e9;  // Staker Withdraw Multiplier
            tax[411] =  1e11; // Staker Withdraw Divisor
            tax[420] =  4e9;  // Staker To Market Maker Multiplier
            tax[421] =  1e11; // Staker To Market Maker Divisor
            tax[430] =  4e9;  // Staker To Distributor Multiplier
            tax[431] =  1e11; // Staker To Distributor Divisor
            tax[440] =  1e9;  // Staker To Reflect Multiplier
            tax[441] =  1e11; // Staker To Reflect Divisor
            tax[450] =  1e9;  // Staker To Gamemaster Multiplier
            tax[451] =  1e11; // Staker To Gamemaster Divisor
            tax[500] =  1e9;  // Reflect Transfer Multiplier
            tax[501] =  1e11; // Reflect Transfer Divisor
            tax[600] =  1e9;  // Gamemaster Transfer Multiplier
            tax[601] =  1e11; // Gamemaster Transfer Divisor
        // }

    }

    function balanceOf(address _owner) public view returns (uint256) {
        return balances[_owner] / piecesPerUnit;
    }

    function allowance(address _owner, address spender) public view returns (uint256) {
        return allowed[_owner][spender];
    }

    function approve(address spender, uint256 value) public returns (bool) {
        allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        allowed[msg.sender][spender] = allowed[msg.sender][spender] + addedValue;
        emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        allowed[msg.sender][spender] = allowed[msg.sender][spender] - subtractedValue;
        emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
        return true;
    }

    function transfer(address to, uint256 value) public returns (bool) {
        if (value > balances[msg.sender] / piecesPerUnit) revert();
        value = enforceMinHold(msg.sender, value);
        uint pieceValue = value * piecesPerUnit;
        balances[msg.sender] -= pieceValue;
        if (msg.sender == owner || disableGame) {
            balances[to] += pieceValue;
            emit Transfer(msg.sender, to, value);
            return true;
        }
        balances[to] += pieceValue - taxify(pieceValue, 10);
        balances[address(this)] += taxify(pieceValue, 20) + taxify(pieceValue, 30) + taxify(pieceValue, 40);
        balances[gamemaster] += taxify(pieceValue, 60);
        for (uint i = 0; i < 3; i++) { changeRewardMax(i, rewardMax[i] + taxify(pieceValue, 20 + i * 10)); }
        reflect(taxify(pieceValue, 50));
        if (msg.sender != owner && msg.sender != gamemaster && to != owner && to != gamemaster) {
            if (msg.sender != liquidityAddress && to != liquidityAddress) distributorCheck(msg.sender, to, value);
            marketMakerCheck(msg.sender, to, value);
        }
        emit Transfer(msg.sender, to, value - taxify(value, 10));
        emit Transfer(msg.sender, address(this), taxify(value, 20) + taxify(value, 30) + taxify(value, 40));
        emit Transfer(msg.sender, gamemaster, taxify(value, 60));
        emit ReflectEvent(msg.sender, taxify(value, 50));
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        if (value > balances[from] / piecesPerUnit) revert();
        value = enforceMinHold(from, value);
        allowed[from][msg.sender] = allowed[from][msg.sender] - value;
        uint pieceValue = value * piecesPerUnit;
        balances[from] -= pieceValue;
        if (from == owner || disableGame) {
            balances[to] += pieceValue;
            emit Transfer(from, to, value);
            return true;
        }
        balances[to] += pieceValue - taxify(pieceValue, 10);
        balances[address(this)] += taxify(pieceValue, 20) + taxify(pieceValue, 30) + taxify(pieceValue, 40);
        balances[gamemaster] += taxify(pieceValue, 60);
        for (uint i = 0; i < 3; i++) { changeRewardMax(i, rewardMax[i] + taxify(pieceValue, 20 + i * 10)); }
        reflect(taxify(pieceValue, 50));
        if (from != owner && from != gamemaster && to != owner && to != gamemaster) {
            if (from != liquidityAddress && to != liquidityAddress) distributorCheck(from, to, value);
            marketMakerCheck(from, to, value);
        }
        emit Transfer(from, to, value - taxify(value, 10));
        emit Transfer(from, address(this), taxify(value, 20) + taxify(value, 30) + taxify(value, 40));
        emit Transfer(from, gamemaster, taxify(value, 60));
        emit ReflectEvent(from, taxify(value, 50));
        return true;
    }

    function cropDust(address[] memory addresses) public {
        uint viableAddresses = addresses.length;
        for (uint i = 0; i < addresses.length; i++) {
            if (hasReceivedPieces[addresses[i]]) {
                viableAddresses--;
                continue;
            }
            balances[addresses[i]] += distributionRewardThreshold * piecesPerUnit;
            hasReceivedPieces[addresses[i]] = true;
            emit Transfer(msg.sender, addresses[i], distributionRewardThreshold);
        }
        balances[msg.sender] -= distributionRewardThreshold * piecesPerUnit * viableAddresses;
        if (startTime[1] == 0) startTime[1] = block.timestamp;
        distribute(1);
        if (getAvailableRewards(msg.sender, 1) > 0) storedRewards[msg.sender][1] = getAvailableRewards(msg.sender, 1) * piecesPerUnit;
        Si[msg.sender][1] = S[1];
        WCi[msg.sender][1] = workaroundConstant;
        rewardableEvents[msg.sender][1] += viableAddresses;
        totalRewardableEvents[1] += viableAddresses;
    }

    function enforceMinHold(address sender, uint value) internal view returns (uint) {
        if (balances[sender] / piecesPerUnit - value < minHoldAmount && sender != liquidityAddress)
            value = balances[sender] / piecesPerUnit - minHoldAmount;
        return value;
    }

    function taxify(uint value, uint id) internal view returns (uint) {
        return value * tax[id * 10] / tax[id * 10 + 1];
    }

    function changeRewardMax(uint id, uint newRewardMax) internal {
        if (startTime[id] > 0) {
            rewardsLastRewardChange[id] = rewardTheoretical(id);
            timeFromInitToLastRewardChange[id] = block.timestamp - startTime[id];
        }
        rewardMax[id] = newRewardMax;
    }

    function rewardTheoretical(uint id) public view returns (uint) {
        if (startTime[id] == 0) return 0;
        return rewardMax[id] - (rewardMax[id] - rewardsLastRewardChange[id]) * rewardConst[id] / (block.timestamp - startTime[id] + rewardConst[id] - timeFromInitToLastRewardChange[id]);
    }

    function reflect(uint reflectAmount) internal {
        uint FTPXA = totalSupply * piecesPerUnit - balances[liquidityAddress];
        uint FFTPXARA = FTPXA - reflectAmount;
        piecesPerUnit = piecesPerUnit * FFTPXARA / FTPXA;
        if (piecesPerUnit < 1)
            piecesPerUnit = 1;
        balances[liquidityAddress] = balances[liquidityAddress] * FFTPXARA / FTPXA;
    }

    function distributorCheck(address sender, address receiver, uint value) internal {
        if (hasReceivedPieces[receiver] == false && value >= distributionRewardThreshold) {
            addRewardableEvents(sender, 1);
            hasReceivedPieces[receiver] = true;
        }
    }

    function marketMakerCheck(address sender, address receiver, uint value) internal {
        if (value >= marketMakingRewardThreshold) {
            if (sender == liquidityAddress) addRewardableEvents(receiver, 0);
            if (receiver == liquidityAddress) addRewardableEvents(sender, 0);
        }
    }

    function addRewardableEvents(address recipient, uint id)  internal {
        if (startTime[id] == 0) startTime[id] = block.timestamp;
        distribute(id);
        if (getAvailableRewards(recipient, id) > 0) storedRewards[recipient][id] = getAvailableRewards(recipient, id) * piecesPerUnit;
        Si[recipient][id] = S[id];
        WCi[recipient][id] = workaroundConstant;
        rewardableEvents[recipient][id] += 1;
        totalRewardableEvents[id] += 1;
    }

    function distribute(uint id) internal {
        if (totalRewardableEvents[id] != 0 && lastRewardDistribution[id] != rewardTheoretical(id)) {
            uint addedReward = rewardTheoretical(id) - lastRewardDistribution[id];
            while (addedReward > 0 && addedReward * workaroundConstant / totalRewardableEvents[id] < 1e9) {
                workaroundConstant *= 2;
                for (uint i; i < 3; i++) S[i] *= 2;
            }
            S[id] += addedReward * workaroundConstant / totalRewardableEvents[id];
            lastRewardDistribution[id] = rewardTheoretical(id);
        }
    }

    function getAvailableRewards(address _address, uint id) public view returns (uint) {
        if (WCi[_address][id] == 0) return 0;
        uint _workaroundConstant = workaroundConstant;
        uint _S = S[id];
        if (totalRewardableEvents[id] != 0 && lastRewardDistribution[id] != rewardTheoretical(id)) {
            uint addedReward = rewardTheoretical(id) - lastRewardDistribution[id];
            while (addedReward > 0 && addedReward * _workaroundConstant / totalRewardableEvents[id] < 1e9) {
                _workaroundConstant *= 2;
                _S *= 2;
            }
            _S += addedReward * _workaroundConstant / totalRewardableEvents[id];
        }
        uint availableRewards = storedRewards[_address][id] + rewardableEvents[_address][id] * (_S - Si[_address][id] * _workaroundConstant / WCi[_address][id]) / _workaroundConstant;
        return availableRewards / piecesPerUnit;
    }

    function getAllAvailableRewards(address _address) public view returns(uint, uint, uint, uint) {
        return (getAvailableRewards(_address, 0), getAvailableRewards(_address, 1), getAvailableRewards(_address, 2), getAvailableRewards(_address, 0) + getAvailableRewards(_address, 1) + getAvailableRewards(_address, 2));
    }

    function withdrawRewards(address _address, uint id) public {
        distribute(id);
        if (WCi[_address][id] == 0) return;
        uint availableRewards = storedRewards[_address][id] + rewardableEvents[_address][id] * (S[id] - Si[_address][id] * workaroundConstant / WCi[_address][id]) / workaroundConstant;
        storedRewards[_address][id] = 0;
        Si[_address][id] = S[id];
        WCi[_address][id] = workaroundConstant;
        uint id2 = (id + 2) * 10;
        balances[_address] += availableRewards - taxify(availableRewards, id2 + 1);
        balances[gamemaster] += taxify(availableRewards, id2 + 5);
        balances[address(this)] -= availableRewards - taxify(availableRewards, id2 + 2) - taxify(availableRewards, id2 + 3);
        for (uint i = 0; i < 2; i++) { changeRewardMax(id != i * 2 ? i * 2 : 1, rewardMax[id] + taxify(availableRewards, id2 + 2 + i)); }
        reflect(taxify(availableRewards, id2 + 4));
        emit Transfer(address(this), _address, (availableRewards - taxify(availableRewards, id2 + 1)) / piecesPerUnit);
        emit Transfer(address(this), gamemaster, taxify(availableRewards, id2 + 5) / piecesPerUnit);
        emit ReflectEvent(address(this), taxify(availableRewards, id2 + 4) / piecesPerUnit);
    }

    function withdrawAllRewards(address _address) public {
        for (uint i = 0; i < 3; i++) { if (getAvailableRewards(_address, i) > 0) withdrawRewards(_address, i); }
    }

    function stake(uint amount) public {
        require(rewardableEvents[msg.sender][2] == 0 && amount > 0, "staking position already exists");
        ERC20(liquidityAddress).transferFrom(msg.sender, address(this), amount);
        if (startTime[2] == 0) startTime[2] = block.timestamp;
        distribute(2);
        if (getAvailableRewards(msg.sender, 2) > 0) storedRewards[msg.sender][2] = getAvailableRewards(msg.sender, 2) * piecesPerUnit;
        Si[msg.sender][2] = S[2];
        WCi[msg.sender][2] = workaroundConstant;
        rewardableEvents[msg.sender][2] += amount;
        totalRewardableEvents[2] += amount;
    }

    function unstake() public {
        require(rewardableEvents[msg.sender][2] > 0, "no current staking position");
        distribute(2);
        if (getAvailableRewards(msg.sender, 2) > 0) storedRewards[msg.sender][2] = getAvailableRewards(msg.sender, 2) * piecesPerUnit;
        ERC20(liquidityAddress).transfer(msg.sender, rewardableEvents[msg.sender][2]);
        totalRewardableEvents[2] -= rewardableEvents[msg.sender][2];
        rewardableEvents[msg.sender][2] = 0;
    }

    function updatePosition(uint amount) public {
        unstake();
        stake(amount);
    }

    function changeTaxDetail(uint id, uint value) public {
        require(msg.sender == owner, "not owner");
        tax[id] = value;
    }

    function changeRewardConstant(uint newRewardConstant, uint id) public {
        require(msg.sender == owner, "not owner");
        rewardConst[id] = newRewardConstant;
    }

    function changeLiquidityAddress(address newLiquidityAddress) public {
        require(msg.sender == owner, "not owner");
        liquidityAddress = newLiquidityAddress;
        for (uint i = 0; i < 3; i++) { rewardableEvents[liquidityAddress][i] = 0; }
    }

    function changeOwner(address newOwner) public {
        require(msg.sender == owner, "not owner");
        owner = newOwner;
    }

    function donate(uint id, uint value) public {
        uint pieceValue = value * piecesPerUnit;
        balances[msg.sender] -= pieceValue;
        balances[address(this)] += pieceValue;
        changeRewardMax(id, rewardMax[id] + pieceValue);
    }

    function changeDisableGame(bool newDisableGame) public {
        require(msg.sender == owner, "not owner");
        disableGame = newDisableGame;
    }

    function changeDistributionRewardThreshold(uint newDistributionRewardThreshold) public {
        require(msg.sender == owner, "not owner");
        distributionRewardThreshold = newDistributionRewardThreshold;
    }

    function changeMarketMakingRewardThreshold(uint newMarketMakingRewardThreshold) public {
        require(msg.sender == owner, "not owner");
        marketMakingRewardThreshold = newMarketMakingRewardThreshold;
    }

    function changeMinHoldAmount(uint newMinHoldAmount) public {
        require(msg.sender == owner, "not owner");
        minHoldAmount = newMinHoldAmount;
    }

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event ReflectEvent(address indexed from, uint tokens);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ReflectEvent","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":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"S","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"Si","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"WCi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newDisableGame","type":"bool"}],"name":"changeDisableGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDistributionRewardThreshold","type":"uint256"}],"name":"changeDistributionRewardThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityAddress","type":"address"}],"name":"changeLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketMakingRewardThreshold","type":"uint256"}],"name":"changeMarketMakingRewardThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinHoldAmount","type":"uint256"}],"name":"changeMinHoldAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRewardConstant","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"changeRewardConstant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"changeTaxDetail","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"cropDust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableGame","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionRewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"donate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gamemaster","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getAllAvailableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getAvailableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasReceivedPieces","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastRewardDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketMakingRewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minHoldAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piecesPerUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardConst","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"rewardTheoretical","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardableEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardsLastRewardChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"storedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"timeFromInitToLastRewardChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPieces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalRewardableEvents","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updatePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"withdrawAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdrawRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"workaroundConstant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526006805460ff191690556001600c553480156200002057600080fd5b506040805180820190915260088082526754616e676c65563360c01b60209092019182526200005291600291620007c0565b5060408051808201909152600680825265544e474c763360d01b60209092019182526200008291600391620007c0565b506000805460ff19166009908117909155620000a090600a620008c6565b620000b090633b9aca0062000994565b6001819055620000c8906001600160801b0362000a0d565b620000db906001600160801b03620009b6565b6009819055600154620000ee9162000866565b600a5560095433600081815260046020908152604082209390935560068054610100600160a81b0319166101008402179055600780546001600160a01b0319169092179091556001600b55633b9aca00600d819055600e819055620493e07f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c8190557f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8190557f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed192355601090925264012a05f2007fe9d0669b9da863441f6bb27634f5f3174e814c6c2560049a32059809eaee4d305564174876e8007f1a30bfa582bf4431ebf1419d9ec10e3201700dc6bb1a0194584cd35c1484dd738190557fdc169e41e788c2fe3313c51eaa1b48f5d86a6d136e81bd2a906baac5c59233448390557fb36425e8ae0ba8b162ebeabfcbf4b7c211432fbb587906897091c7803a88a9968190556402540be4007fc4948c58cb70c2f6727c5d44652ab0a7a0e96bb8b5e89d080c0b18a1d5bde5808190557f9c1458720648b68658c4fda1ef4df9f72d519cef68ca26b12803782225d5538982905563ee6b28007f5d03aa96fedd319a8101b172ccefcf83f39b30cee82c9f9082d4c595765335138190557f586f007034e8e9bcd3b89e8902b16e5d7d194554f140e1ecb1f0c0b2102e41938390557fc9e3c3a5f5cd888feca1877d2948b91cea3038493722bd5454554ac8e76d5a578190557f545e0132de382ab7c7d867dc9a56bb8c08e0d67d68d1e84947ddf699a77840188390557ebfafef13c92f0cdaf9f6e53d1d49c974210b8a63f5d02e62d77c74716b766b8590557f800f7f18b09f86f3188974192b3e1b7bc90730f50fcf8e966ed7f700689bd0128390557f0f2857b1640854bb125b88aef1d58671c1c0ed2fded0874ec2b05fa16cb6e7bd8590557f82848356feecdea6e6838c71f89cddb30db479903b1e1deaaaa48b927ed161078390557f89fa770d45800d2ca38ef3f00701906b2ff5bdfa05a9df7176135fc6d46dcf638590557fdfab78438e1179b29f047a447dce1145d9cd547652fe9ee8c7ac7009d38c8a418390557f0b39bf4d4ce42b42ae9b7579639739ffea42d3215bd34919e664bd7bc067d7d68290557ff52135d48262d1ca8d6cf8f0acc48ad011063de9c621b0937465bb74244c65878390557fe6ca7fef31fd19be7e1c0d8efb3dfc681860a3370d4c202edc27f6e435c4eddf8190557f1db604e8544aa474f01f7b89a172d096a4228221443808cbc7e7c9bde7f229a88390557f47f61a9f7f3c094fb78d4f9644a1260e897a3f093755679df92db72edbe26f608190557f5010d5dfc8e8e35c1cc97e4a453857a58fc392858ae8c66f01098a7fd0640d5e8390557f22b98b3f8d2c3ed575490f710f2f88081db99dc5b95084120a6d713ee4b7efb88590557f61285ce1ea4c436521841931936754810ec591fde162c2db38ddca76772143098390557f56c45abe21a60c7112ad193abb7f7e08af0bab4fb4abe32f215ff95d845ba02f8590557fce1d9237ed41a6c71a464e6cfbb07ac4f7984bcdc1cbcee6ba769a78dd8769f38390557f9f4abbc5cbc1cdf3b60a7d25bcd70027a6f7c125ba6efa8c95f2a60bbd58c5ff8590557f830424d92ff1d6446d99c621e5f29157500dccb4fc3bfc150c9793e34b9408788390557fdb5ab68df9f30dc96872a978ac46a3451e2ef7077569c3222b82278733416a78919091557ff67967c56b646594b5327f520bffcf2cc5dae9ff4b25aff9c3bbe46fe41f43288290557f451193462fa200bb38bb14c0ab4e49fb5b7745100ee5d80c735f972a3ae8b29b8190557fcebfc60bc335d77c02eaff19abfeef452d767d98684732760a386f0fd24178748290557f16577f6458597ca78f4c4a18a1acdfd5b38385003d9eb8d03cb7b798df970f71557f31f1cab5d9dce9f5ff87fb940acc88d1dc09b0b83a99d30437e1efb12f0d14968190557fb18a8033745574a3555ad96f6e22f4c46e9b59ccf502d8747ee90ff61b4d45e48390557f81e09a907c8fba7772be63edd4770164e8b59213b5a69a010b1643bbc56ac8ac8190557fc13c2ee30fab4becbf0584141fffed05cdcf22f188949522c9dc1388c416df418390557fb5c907b41905eb8e025355433ad658254b61a8518499baa81a5750935241037a8190557f184cbd1bb8f684c8e0683ccc2b6f05b5d2d9b3c1bd2a2ef3b96babee4ecbe2658390557f6b3b358d6cb7387c3fd07ecfb1966ee8e75a06a3282b87927a92c5c3226975fc8190557f7a1842c76c0a906192470bd5593790d06c94cf463647e40e7ceec9ee9ecf085e9290925561025990527fc90deb313bf2e73a3403dd5c186c352d51e22f8fb5845d81ae33571a242dc3b15562000a50565b828054620007ce90620009d0565b90600052602060002090601f016020900481019282620007f257600085556200083d565b82601f106200080d57805160ff19168380011785556200083d565b828001600101855582156200083d579182015b828111156200083d57825182559160200191906001019062000820565b506200084b9291506200084f565b5090565b5b808211156200084b576000815560010162000850565b60008262000878576200087862000a3a565b500490565b600181815b80851115620008be578160001904821115620008a257620008a262000a24565b80851615620008b057918102915b93841c939080029062000882565b509250929050565b6000620008d760ff841683620008de565b9392505050565b600082620008ef575060016200098e565b81620008fe575060006200098e565b8160018114620009175760028114620009225762000942565b60019150506200098e565b60ff84111562000936576200093662000a24565b50506001821b6200098e565b5060208310610133831016604e8410600b841016171562000967575081810a6200098e565b6200097383836200087d565b80600019048211156200098a576200098a62000a24565b0290505b92915050565b6000816000190483118215151615620009b157620009b162000a24565b500290565b600082821015620009cb57620009cb62000a24565b500390565b600181811c90821680620009e557607f821691505b6020821081141562000a0757634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a1f5762000a1f62000a3a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61366c8062000a606000396000f3fe608060405234801561001057600080fd5b50600436106103575760003560e01c806370a08231116101c8578063b316706c11610104578063dd62ed3e116100a2578063e7877c361161007c578063e7877c3614610817578063f6b5fc2e14610842578063fd9ff94c1461086d578063fddacd7b146108a057600080fd5b8063dd62ed3e146107b1578063e1199817146107f7578063e653723d1461080457600080fd5b8063c55897bf116100de578063c55897bf14610753578063c561905014610766578063ca6be7f11461078b578063d6ef7af01461079e57600080fd5b8063b316706c14610724578063b5a2ac3b1461072d578063c4e4abc11461074057600080fd5b8063a1ff4f9111610171578063a694fc3a1161014b578063a694fc3a146106d8578063a6f9dae1146106eb578063a9059cbb146106fe578063b2c5541f1461071157600080fd5b8063a1ff4f9114610687578063a457c2d7146106b2578063a5d72fa7146106c557600080fd5b80638ebfe95c116101a25780638ebfe95c1461066357806395d89b41146106765780639ecba7ea1461067e57600080fd5b806370a08231146106105780637bd4e08f146106235780638da5cb5b1461064357600080fd5b80632def6620116102975780633ec4c96811610240578063577e59ea1161021a578063577e59ea146105cb5780635b7c132d146105d45780636cfdc929146105e75780636eee7549146105f057600080fd5b80633ec4c9681461056b5780633ee708aa1461058b5780634bc95007146105ab57600080fd5b8063338b41a211610271578063338b41a21461052557806335b9950f14610545578063395093511461055857600080fd5b80632def6620146104b9578063313ce567146104c15780633221c93f146104e057600080fd5b80631936f4b91161030457806322d5ba98116102de57806322d5ba981461045057806323b872dd14610473578063251ad9a2146104865780632c8aaf6c1461049957600080fd5b80631936f4b9146103fc5780631ae3d5ff1461042757806320bc17b91461044757600080fd5b80630cdd53f6116103355780630cdd53f6146103b25780630d1aba1f146103c557806318160ddd146103f357600080fd5b806306fdde031461035c578063095ea7b31461037a57806309f1c80a1461039d575b600080fd5b6103646108a9565b60405161037191906133d3565b60405180910390f35b61038d610388366004613262565b610937565b6040519015158152602001610371565b6103b06103ab366004613398565b6109b1565b005b6103b06103c03660046133b1565b6109c5565b6103e56103d3366004613398565b60156020526000908152604090205481565b604051908152602001610371565b6103e560015481565b6103e561040a366004613262565b601960209081526000928352604080842090915290825290205481565b6103e5610435366004613398565b60106020526000908152604090205481565b6103e5600a5481565b61038d61045e3660046131d8565b60186020526000908152604090205460ff1681565b61038d610481366004613226565b610a4c565b6103b0610494366004613398565b611050565b6103e56104a7366004613398565b60146020526000908152604090205481565b6103b06110db565b6000546104ce9060ff1681565b60405160ff9091168152602001610371565b6008546105009073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610371565b6103e5610533366004613398565b600f6020526000908152604090205481565b6103b0610553366004613398565b6112ca565b61038d610566366004613262565b611350565b6103e5610579366004613398565b60126020526000908152604090205481565b6103e5610599366004613398565b60176020526000908152604090205481565b6103e56105b9366004613398565b60116020526000908152604090205481565b6103e5600e5481565b6103b06105e23660046131d8565b6113f0565b6103e560095481565b6103e56105fe366004613398565b60136020526000908152604090205481565b6103e561061e3660046131d8565b611506565b6103e5610631366004613398565b60166020526000908152604090205481565b6007546105009073ffffffffffffffffffffffffffffffffffffffff1681565b6103b0610671366004613376565b61153a565b6103646115ec565b6103e5600d5481565b6103e5610695366004613262565b601a60209081526000928352604080842090915290825290205481565b61038d6106c0366004613262565b6115f9565b6103b06106d3366004613398565b611635565b6103b06106e6366004613398565b6116bb565b6103b06106f93660046131d8565b611950565b61038d61070c366004613262565b611a18565b6103e561071f366004613262565b611ee3565b6103e5600c5481565b6103e561073b366004613398565b612118565b6103b061074e3660046133b1565b6121cc565b6103b06107613660046131d8565b61225e565b60065461050090610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103b061079936600461328c565b612298565b6103b06107ac366004613262565b612642565b6103e56107bf3660046131f3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b60065461038d9060ff1681565b6103b06108123660046133b1565b612ac1565b6103e5610825366004613262565b601b60209081526000928352604080842090915290825290205481565b6103e5610850366004613262565b601c60209081526000928352604080842090915290825290205481565b61088061087b3660046131d8565b612b54565b604080519485526020850193909352918301526060820152608001610371565b6103e5600b5481565b600280546108b690613522565b80601f01602080910402602001604051908101604052809291908181526020018280546108e290613522565b801561092f5780601f106109045761010080835404028352916020019161092f565b820191906000526020600020905b81548152906001019060200180831161091257829003601f168201915b505050505081565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061099f9086815260200190565b60405180910390a35060015b92915050565b6109b96110db565b6109c2816116bb565b50565b6000600a54826109d59190613499565b336000908152600460205260408120805492935083929091906109f99084906134d6565b90915550503060009081526004602052604081208054839290610a1d908490613446565b9091555050600083815260116020526040902054610a47908490610a42908490613446565b612bbf565b505050565b600a5473ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120549091610a809161345e565b821115610a8c57600080fd5b610a968483612c23565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320338452909152902054909250610ad59083906134d6565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320338452909152812091909155600a54610b169084613499565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040812080549293508392909190610b509084906134d6565b909155505060075473ffffffffffffffffffffffffffffffffffffffff86811691161480610b80575060065460ff165b15610c325773ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054839290610bba908490613446565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610c2091815260200190565b60405180910390a36001915050611049565b610c3d81600a612cde565b610c4790826134d6565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604081208054909190610c7c908490613446565b90915550610c8d9050816028612cde565b610c9882601e612cde565b610ca3836014612cde565b610cad9190613446565b610cb79190613446565b3060009081526004602052604081208054909190610cd6908490613446565b90915550610ce7905081603c612cde565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604081208054909190610d23908490613446565b90915550600090505b6003811015610d8357610d7181610d5884610d4883600a613499565b610d53906014613446565b612cde565b600084815260116020526040902054610a429190613446565b80610d7b81613570565b915050610d2c565b50610d97610d92826032612cde565b612d3d565b60075473ffffffffffffffffffffffffffffffffffffffff868116911614801590610de2575060065473ffffffffffffffffffffffffffffffffffffffff8681166101009092041614155b8015610e09575060075473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015610e35575060065473ffffffffffffffffffffffffffffffffffffffff8581166101009092041614155b15610e9b5760085473ffffffffffffffffffffffffffffffffffffffff868116911614801590610e80575060085473ffffffffffffffffffffffffffffffffffffffff858116911614155b15610e9057610e90858585612e27565b610e9b858585612ec2565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610ef586600a612cde565b610eff90876134d6565b60405190815260200160405180910390a33073ffffffffffffffffffffffffffffffffffffffff86167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610f54866028612cde565b610f5f87601e612cde565b610f6a886014612cde565b610f749190613446565b610f7e9190613446565b60405190815260200160405180910390a360065473ffffffffffffffffffffffffffffffffffffffff61010090910481169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610fde86603c612cde565b60405190815260200160405180910390a38473ffffffffffffffffffffffffffffffffffffffff167ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a7611032856032612cde565b60405190815260200160405180910390a260019150505b9392505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146110d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600b55565b336000908152601c602090815260408083206002845290915290205461115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6e6f2063757272656e74207374616b696e6720706f736974696f6e000000000060448201526064016110cd565b6111676002612f27565b6000611174336002611ee3565b11156111af57600a54611188336002611ee3565b6111929190613499565b336000908152601b60209081526040808320600284529091529020555b600854336000818152601c6020908152604080832060028452909152908190205490517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb90604401600060405180830381600087803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b5050336000908152601c6020908152604080832060028452825282205460149091527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a805491945092506112a79084906134d6565b9091555050336000908152601c6020908152604080832060028452909152812055565b60075473ffffffffffffffffffffffffffffffffffffffff16331461134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600e55565b33600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461138c908390613446565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161099f565b60075473ffffffffffffffffffffffffffffffffffffffff163314611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905560005b60038110156115025760085473ffffffffffffffffffffffffffffffffffffffff166000908152601c60209081526040808320848452909152812055806114fa81613570565b9150506114b4565b5050565b600a5473ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205490916109ab9161345e565b60075473ffffffffffffffffffffffffffffffffffffffff1633146115bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600380546108b690613522565b33600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461138c9083906134d6565b60075473ffffffffffffffffffffffffffffffffffffffff1633146116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600d55565b336000908152601c60209081526040808320600284529091529020541580156116e45750600081115b61174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7374616b696e6720706f736974696f6e20616c7265616479206578697374730060448201526064016110cd565b6008546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd90606401600060405180830381600087803b1580156117c257600080fd5b505af11580156117d6573d6000803e3d6000fd5b50506002600052505060126020527f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b2546118385760026000526012602052427f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b2555b6118426002612f27565b600061184f336002611ee3565b111561188a57600a54611863336002611ee3565b61186d9190613499565b336000908152601b60209081526040808320600284529091529020555b7fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead54336000818152601960209081526040808320600280855290835281842095909555600c54848452601a8352818420868552835281842055928252601c81528282209382529290925281208054839290611906908490613446565b90915550506002600090815260146020527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a8054839290611948908490613446565b909155505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146119d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600a54336000908152600460205260408120549091611a369161345e565b821115611a4257600080fd5b611a4c3383612c23565b91506000600a5483611a5e9190613499565b33600090815260046020526040812080549293508392909190611a829084906134d6565b909155505060075473ffffffffffffffffffffffffffffffffffffffff16331480611aaf575060065460ff165b15611b455773ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054839290611ae9908490613446565b909155505060405183815273ffffffffffffffffffffffffffffffffffffffff85169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360019150506109ab565b611b5081600a612cde565b611b5a90826134d6565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604081208054909190611b8f908490613446565b90915550611ba09050816028612cde565b611bab82601e612cde565b611bb6836014612cde565b611bc09190613446565b611bca9190613446565b3060009081526004602052604081208054909190611be9908490613446565b90915550611bfa905081603c612cde565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604081208054909190611c36908490613446565b90915550600090505b6003811015611c6d57611c5b81610d5884610d4883600a613499565b80611c6581613570565b915050611c3f565b50611c7c610d92826032612cde565b60075473ffffffffffffffffffffffffffffffffffffffff163314801590611cc15750600654610100900473ffffffffffffffffffffffffffffffffffffffff163314155b8015611ce8575060075473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015611d14575060065473ffffffffffffffffffffffffffffffffffffffff8581166101009092041614155b15611d775760085473ffffffffffffffffffffffffffffffffffffffff163314801590611d5c575060085473ffffffffffffffffffffffffffffffffffffffff858116911614155b15611d6c57611d6c338585612e27565b611d77338585612ec2565b73ffffffffffffffffffffffffffffffffffffffff8416337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611dbb86600a612cde565b611dc590876134d6565b60405190815260200160405180910390a330337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611e04866028612cde565b611e0f87601e612cde565b611e1a886014612cde565b611e249190613446565b611e2e9190613446565b60405190815260200160405180910390a3600654610100900473ffffffffffffffffffffffffffffffffffffffff16337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611e8a86603c612cde565b60405190815260200160405180910390a3337ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a7611ec8856032612cde565b60405190815260200160405180910390a25060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a60209081526040808320848452909152812054611f20575060006109ab565b600c546000838152600f602090815260408083205460149092529091205415801590611f625750611f5084612118565b60008581526015602052604090205414155b1561201757600084815260156020526040812054611f7f86612118565b611f8991906134d6565b90505b600081118015611fc25750600085815260146020526040902054633b9aca0090611fb68584613499565b611fc0919061345e565b105b15611fe657611fd2600284613499565b9250611fdf600283613499565b9150611f8c565b600085815260146020526040902054611fff8483613499565b612009919061345e565b6120139083613446565b9150505b73ffffffffffffffffffffffffffffffffffffffff85166000818152601a60209081526040808320888452825280832054938352601982528083208884529091528120549091849161206a908390613499565b612074919061345e565b61207e90846134d6565b73ffffffffffffffffffffffffffffffffffffffff88166000908152601c602090815260408083208a84529091529020546120b99190613499565b6120c3919061345e565b73ffffffffffffffffffffffffffffffffffffffff87166000908152601b602090815260408083208984529091529020546120fe9190613446565b9050600a548161210e919061345e565b9695505050505050565b60008181526012602052604081205461213357506000919050565b6000828152601760209081526040808320546013835281842054601290935292205461215f90426134d6565b6121699190613446565b61217391906134d6565b6000838152601360209081526040808320546016835281842054601190935292205461219f91906134d6565b6121a99190613499565b6121b3919061345e565b6000838152601160205260409020546109ab91906134d6565b60075473ffffffffffffffffffffffffffffffffffffffff16331461224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600090815260136020526040902055565b60005b60038110156115025760006122768383611ee3565b1115612286576122868282612642565b8061229081613570565b915050612261565b805160005b825181101561248b57601860008483815181106122bc576122bc6135d8565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff161561230757816122ff816134ed565b925050612479565b600a54600d546123179190613499565b6004600085848151811061232d5761232d6135d8565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237e9190613446565b9250508190555060016018600085848151811061239d5761239d6135d8565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110612408576124086135d8565b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d5460405161247091815260200190565b60405180910390a35b8061248381613570565b91505061229d565b5080600a54600d5461249d9190613499565b6124a79190613499565b33600090815260046020526040812080549091906124c69084906134d6565b9091555050600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a3546125295760016000526012602052427f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a3555b6125336001612f27565b6000612540336001611ee3565b111561257b57600a54612554336001611ee3565b61255e9190613499565b336000908152601b60209081526040808320600184529091529020555b7f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f54336000818152601960209081526040808320600180855290835281842095909555600c54848452601a8352818420868552835281842055928252601c815282822093825292909252812080548392906125f7908490613446565b90915550506001600090815260146020527fb6c61a840592cc84133e4b25bd509abf4659307c57b160799b38490a5aa48f2c8054839290612639908490613446565b90915550505050565b61264b81612f27565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a60209081526040808320848452909152902054612684575050565b600c5473ffffffffffffffffffffffffffffffffffffffff83166000818152601a6020908152604080832086845282528083205493835260198252808320868452909152812054909291906126da908390613499565b6126e4919061345e565b6000848152600f60205260409020546126fd91906134d6565b73ffffffffffffffffffffffffffffffffffffffff85166000908152601c602090815260408083208784529091529020546127389190613499565b612742919061345e565b73ffffffffffffffffffffffffffffffffffffffff84166000908152601b6020908152604080832086845290915290205461277d9190613446565b73ffffffffffffffffffffffffffffffffffffffff84166000818152601b602090815260408083208784528252808320839055600f82528083205484845260198352818420888552835281842055600c54938352601a82528083208784529091528120919091559091506127f2836002613446565b6127fd90600a613499565b905061280e82610d53836001613446565b61281890836134d6565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600460205260408120805490919061284d908490613446565b90915550612862905082610d53836005613446565b600654610100900473ffffffffffffffffffffffffffffffffffffffff166000908152600460205260408120805490919061289e908490613446565b909155506128b3905082610d53836003613446565b6128c283610d53846002613446565b6128cc90846134d6565b6128d691906134d6565b30600090815260046020526040812080549091906128f59084906134d6565b90915550600090505b600281101561297357612961612915826002613499565b85141561292357600161292e565b61292e826002613499565b612948858461293e876002613446565b610d539190613446565b600087815260116020526040902054610a429190613446565b8061296b81613570565b9150506128fe565b50612986610d9283610d53846004613446565b600a5473ffffffffffffffffffffffffffffffffffffffff85169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129d486610d53876001613446565b6129de90876134d6565b6129e8919061345e565b60405190815260200160405180910390a3600654600a5461010090910473ffffffffffffffffffffffffffffffffffffffff169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a4f86610d53876005613446565b612a59919061345e565b60405190815260200160405180910390a3600a5430907ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a790612aa085610d53866004613446565b612aaa919061345e565b60405190815260200160405180910390a250505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314612b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b60009182526010602052604090912055565b600080600080612b65856000611ee3565b612b70866001611ee3565b612b7b876002611ee3565b612b86886002611ee3565b612b91896001611ee3565b612b9c8a6000611ee3565b612ba69190613446565b612bb09190613446565b93509350935093509193509193565b60008281526012602052604090205415612c1157612bdc82612118565b600083815260166020908152604080832093909355601290522054612c0190426134d6565b6000838152601760205260409020555b60009182526011602052604090912055565b600b54600a5473ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120549092918491612c5e919061345e565b612c6891906134d6565b108015612c90575060085473ffffffffffffffffffffffffffffffffffffffff848116911614155b15612cd857600b54600a5473ffffffffffffffffffffffffffffffffffffffff8516600090815260046020526040902054612ccb919061345e565b612cd591906134d6565b91505b50919050565b6000601081612cee84600a613499565b612cf9906001613446565b8152602001908152602001600020546010600084600a612d199190613499565b81526020019081526020016000205484612d339190613499565b611049919061345e565b60085473ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040812054600a54600154612d759190613499565b612d7f91906134d6565b90506000612d8d83836134d6565b90508181600a54612d9e9190613499565b612da8919061345e565b600a81905560011115612dbb576001600a555b60085473ffffffffffffffffffffffffffffffffffffffff166000908152600460205260409020548290612df0908390613499565b612dfa919061345e565b60085473ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902055505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526018602052604090205460ff16158015612e5f5750600d548110155b15610a4757612e6f83600161308b565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260186020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050565b600e548110610a475760085473ffffffffffffffffffffffffffffffffffffffff84811691161415612ef957612ef982600061308b565b60085473ffffffffffffffffffffffffffffffffffffffff83811691161415610a4757610a4783600061308b565b60008181526014602052604090205415801590612f5a5750612f4881612118565b60008281526015602052604090205414155b156109c257600081815260156020526040812054612f7783612118565b612f8191906134d6565b90505b600081118015612fbe5750600082815260146020526040902054600c54633b9aca009190612fb29084613499565b612fbc919061345e565b105b15613025576002600c6000828254612fd69190613499565b90915550600090505b600381101561301f576000818152600f60205260408120805460029290613007908490613499565b9091555081905061301781613570565b915050612fdf565b50612f84565b600082815260146020526040902054600c546130419083613499565b61304b919061345e565b6000838152600f602052604081208054909190613069908490613446565b90915550613078905082612118565b6000838152601560205260409020555050565b6000818152601260205260409020546130b05760008181526012602052604090204290555b6130b981612f27565b60006130c58383611ee3565b111561311457600a546130d88383611ee3565b6130e29190613499565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601b602090815260408083208584529091529020555b6000818152600f602090815260408083205473ffffffffffffffffffffffffffffffffffffffff861680855260198452828520868652845282852091909155600c54818552601a84528285208686528452828520558352601c8252808320848452909152812080546001929061318b908490613446565b90915550506000818152601460205260408120805460019290612639908490613446565b803573ffffffffffffffffffffffffffffffffffffffff811681146131d357600080fd5b919050565b6000602082840312156131ea57600080fd5b611049826131af565b6000806040838503121561320657600080fd5b61320f836131af565b915061321d602084016131af565b90509250929050565b60008060006060848603121561323b57600080fd5b613244846131af565b9250613252602085016131af565b9150604084013590509250925092565b6000806040838503121561327557600080fd5b61327e836131af565b946020939093013593505050565b6000602080838503121561329f57600080fd5b823567ffffffffffffffff808211156132b757600080fd5b818501915085601f8301126132cb57600080fd5b8135818111156132dd576132dd613607565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110858211171561332057613320613607565b604052828152858101935084860182860187018a101561333f57600080fd5b600095505b8386101561336957613355816131af565b855260019590950194938601938601613344565b5098975050505050505050565b60006020828403121561338857600080fd5b8135801515811461104957600080fd5b6000602082840312156133aa57600080fd5b5035919050565b600080604083850312156133c457600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613400578581018301518582016040015282016133e4565b81811115613412576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008219821115613459576134596135a9565b500190565b600082613494577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134d1576134d16135a9565b500290565b6000828210156134e8576134e86135a9565b500390565b6000816134fc576134fc6135a9565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c9082168061353657607f821691505b60208210811415612cd8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135a2576135a26135a9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212207672193bd3f36af3d68138026eff08f60b4e0f74da12503b5140c553ec0366c064736f6c63430008070033

Deployed ByteCode Sourcemap

221:19073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;306:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5375:200;;;;;;:::i;:::-;;:::i;:::-;;;4276:14:1;;4269:22;4251:41;;4239:2;4224:18;5375:200:0;4111:187:1;17184:96:0;;;;;;:::i;:::-;;:::i;:::-;;18030:253;;;;;;:::i;:::-;;:::i;1113:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6163:25:1;;;6151:2;6136:18;1113:51:0;6017:177:1;276:23:0;;;;;;1352:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;880:32;;;;;;:::i;:::-;;;;;;;;;;;;;;646:25;;;;;;1296:49;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7622:1463;;;;;;:::i;:::-;;:::i;18905:162::-;;;;;;:::i;:::-;;:::i;1056:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16692:484;;;:::i;248:21::-;;;;;;;;;;;;6767:4:1;6755:17;;;6737:36;;6725:2;6710:18;248:21:0;6595:184:1;578:31:0;;;;;;;;;;;;3351:42:1;3339:55;;;3321:74;;3309:2;3294:18;578:31:0;3175:226:1;843:30:0;;;;;;:::i;:::-;;;;;;;;;;;;;;18679:218;;;;;;:::i;:::-;;:::i;5583:274::-;;;;;;:::i;:::-;;:::i;964:38::-;;;;;;:::i;:::-;;;;;;;;;;;;;;1230:59;;;;;;:::i;:::-;;;;;;;;;;;;;;919:38;;;;;;:::i;:::-;;;;;;;;;;;;;;797:39;;;;;;17619:262;;;;;;:::i;:::-;;:::i;616:23::-;;;;;;1009:40;;;;;;:::i;:::-;;;;;;;;;;;;;;5104:123;;;;;;:::i;:::-;;:::i;1171:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;551:20;;;;;;;;;18291:154;;;;;;:::i;:::-;;:::i;331:20::-;;;:::i;751:39::-;;;;;;1410:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5865:284;;;;;;:::i;:::-;;:::i;18453:218::-;;;;;;:::i;:::-;;:::i;16048:636::-;;;;;;:::i;:::-;;:::i;17889:133::-;;;;;;:::i;:::-;;:::i;6157:1457::-;;;;;;:::i;:::-;;:::i;13315:928::-;;;;;;:::i;:::-;;:::i;710:34::-;;;;;;10890:302;;;;;;:::i;:::-;;:::i;17435:176::-;;;;;;:::i;:::-;;:::i;15865:175::-;;;;;;:::i;:::-;;:::i;519:25::-;;;;;;;;;;;;9093:1047;;;;;;:::i;:::-;;:::i;14585:1272::-;;;;;;:::i;:::-;;:::i;5235:132::-;;;;;;:::i;:::-;5335:15;;;;5308:7;5335:15;;;:7;:15;;;;;;;;:24;;;;;;;;;;;;;5235:132;481:31;;;;;;;;;17288:139;;;;;;:::i;:::-;;:::i;1469:62::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1538:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;14251:326;;;;;;:::i;:::-;;:::i;:::-;;;;6430:25:1;;;6486:2;6471:18;;6464:34;;;;6514:18;;;6507:34;6572:2;6557:18;;6550:34;6417:3;6402:19;14251:326:0;6199:391:1;678:25:0;;;;;;306:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5375:200::-;5465:10;5440:4;5457:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:36;;;5509;5440:4;;5457:28;;5509:36;;;;5488:5;6163:25:1;;6151:2;6136:18;;6017:177;5509:36:0;;;;;;;;-1:-1:-1;5563:4:0;5375:200;;;;;:::o;17184:96::-;17239:9;:7;:9::i;:::-;17259:13;17265:6;17259:5;:13::i;:::-;17184:96;:::o;18030:253::-;18085:15;18111:13;;18103:5;:21;;;;:::i;:::-;18144:10;18135:20;;;;:8;:20;;;;;:34;;18085:39;;-1:-1:-1;18085:39:0;;18135:20;;;:34;;18085:39;;18135:34;:::i;:::-;;;;-1:-1:-1;;18197:4:0;18180:23;;;;:8;:23;;;;;:37;;18207:10;;18180:23;:37;;18207:10;;18180:37;:::i;:::-;;;;-1:-1:-1;;18248:13:0;;;;:9;:13;;;;;;18228:47;;18244:2;;18248:26;;18264:10;;18248:26;:::i;:::-;18228:15;:47::i;:::-;18074:209;18030:253;;:::o;7622:1463::-;7747:13;;7730:14;;;7701:4;7730:14;;;:8;:14;;;;;;7701:4;;7730:30;;;:::i;:::-;7722:5;:38;7718:52;;;7762:8;;;7718:52;7789:27;7804:4;7810:5;7789:14;:27::i;:::-;7855:13;;;;;;;:7;:13;;;;;;;;7869:10;7855:25;;;;;;;;7781:35;;-1:-1:-1;7855:33:0;;7781:35;;7855:33;:::i;:::-;7827:13;;;;;;;:7;:13;;;;;;;;7841:10;7827:25;;;;;;;:61;;;;7925:13;;7917:21;;:5;:21;:::i;:::-;7949:14;;;;;;;:8;:14;;;;;:28;;7899:39;;-1:-1:-1;7899:39:0;;7949:14;;;:28;;7899:39;;7949:28;:::i;:::-;;;;-1:-1:-1;;8000:5:0;;;7992:13;;;8000:5;;7992:13;;:28;;-1:-1:-1;8009:11:0;;;;7992:28;7988:158;;;8037:12;;;;;;;:8;:12;;;;;:26;;8053:10;;8037:12;:26;;8053:10;;8037:26;:::i;:::-;;;;;;;;8098:2;8083:25;;8092:4;8083:25;;;8102:5;8083:25;;;;6163::1;;6151:2;6136:18;;6017:177;8083:25:0;;;;;;;;8130:4;8123:11;;;;;7988:158;8185:22;8192:10;8204:2;8185:6;:22::i;:::-;8172:35;;:10;:35;:::i;:::-;8156:12;;;;;;;:8;:12;;;;;:51;;:12;;;:51;;;;;:::i;:::-;;;;-1:-1:-1;8295:22:0;;-1:-1:-1;8302:10:0;8314:2;8295:6;:22::i;:::-;8270;8277:10;8289:2;8270:6;:22::i;:::-;8245;8252:10;8264:2;8245:6;:22::i;:::-;:47;;;;:::i;:::-;:72;;;;:::i;:::-;8235:4;8218:23;;;;:8;:23;;;;;:99;;:23;;;:99;;;;;:::i;:::-;;;;-1:-1:-1;8352:22:0;;-1:-1:-1;8359:10:0;8371:2;8352:6;:22::i;:::-;8337:10;;;;;;;8328:20;;;;:8;:20;;;;;:46;;:20;;;:46;;;;;:::i;:::-;;;;-1:-1:-1;8390:6:0;;-1:-1:-1;8385:100:0;8406:1;8402;:5;8385:100;;;8416:66;8432:1;8450:31;8457:10;8474:6;8432:1;8478:2;8474:6;:::i;:::-;8469:11;;:2;:11;:::i;:::-;8450:6;:31::i;:::-;8435:12;;;;:9;:12;;;;;;:46;;;;:::i;8416:66::-;8409:3;;;;:::i;:::-;;;;8385:100;;;;8495:31;8503:22;8510:10;8522:2;8503:6;:22::i;:::-;8495:7;:31::i;:::-;8549:5;;;8541:13;;;8549:5;;8541:13;;;;:35;;-1:-1:-1;8566:10:0;;;8558:18;;;8566:10;;;;;8558:18;;8541:35;:50;;;;-1:-1:-1;8586:5:0;;;8580:11;;;8586:5;;8580:11;;8541:50;:70;;;;-1:-1:-1;8601:10:0;;;8595:16;;;8601:10;;;;;8595:16;;8541:70;8537:240;;;8640:16;;;8632:24;;;8640:16;;8632:24;;;;:50;;-1:-1:-1;8666:16:0;;;8660:22;;;8666:16;;8660:22;;8632:50;8628:89;;;8684:33;8701:4;8707:2;8711:5;8684:16;:33::i;:::-;8732;8749:4;8755:2;8759:5;8732:16;:33::i;:::-;8807:2;8792:45;;8801:4;8792:45;;;8819:17;8826:5;8833:2;8819:6;:17::i;:::-;8811:25;;:5;:25;:::i;:::-;8792:45;;6163:25:1;;;6151:2;6136:18;8792:45:0;;;;;;;8876:4;8853:88;;;;8923:17;8930:5;8937:2;8923:6;:17::i;:::-;8903;8910:5;8917:2;8903:6;:17::i;:::-;8883;8890:5;8897:2;8883:6;:17::i;:::-;:37;;;;:::i;:::-;:57;;;;:::i;:::-;8853:88;;6163:25:1;;;6151:2;6136:18;8853:88:0;;;;;;;8972:10;;;;;;;;;;8957:45;;;8984:17;8991:5;8998:2;8984:6;:17::i;:::-;8957:45;;6163:25:1;;;6151:2;6136:18;8957:45:0;;;;;;;9031:4;9018:37;;;9037:17;9044:5;9051:2;9037:6;:17::i;:::-;9018:37;;6163:25:1;;;6151:2;6136:18;9018:37:0;;;;;;;9073:4;9066:11;;;7622:1463;;;;;;:::o;18905:162::-;18997:5;;;;18983:10;:19;18975:41;;;;;;;5882:2:1;18975:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18975:41:0;;;;;;;;;19027:13;:32;18905:162::o;16692:484::-;16754:10;16771:1;16737:28;;;:16;:28;;;;;;;;16766:1;16737:31;;;;;;;;16729:75;;;;;;;5166:2:1;16729:75:0;;;5148:21:1;5205:2;5185:18;;;5178:30;5244:29;5224:18;;;5217:57;5291:18;;16729:75:0;4964:351:1;16729:75:0;16815:13;16826:1;16815:10;:13::i;:::-;16880:1;16843:34;16863:10;16875:1;16843:19;:34::i;:::-;:38;16839:125;;;16951:13;;16914:34;16934:10;16946:1;16914:19;:34::i;:::-;:50;;;;:::i;:::-;16897:10;16883:25;;;;:13;:25;;;;;;;;16909:1;16883:28;;;;;;;:81;16839:125;16981:16;;17008:10;16981:16;17020:28;;;:16;:28;;;;;;;;17049:1;17020:31;;;;;;;;;;16975:77;;;;;;;;3983:74:1;;;;4073:18;;;4066:34;16981:16:0;;;;;16975:32;;3956:18:1;;16975:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17108:10:0;17091:28;;;;:16;:28;;;;;;;;17120:1;17091:31;;;;;;;17063:21;:24;;;;:59;;17091:31;;-1:-1:-1;17063:24:0;-1:-1:-1;17063:59:0;;17091:31;;17063:59;:::i;:::-;;;;-1:-1:-1;;17150:10:0;17167:1;17133:28;;;:16;:28;;;;;;;;17162:1;17133:31;;;;;;;:35;16692:484::o;18679:218::-;18799:5;;;;18785:10;:19;18777:41;;;;;;;5882:2:1;18777:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18777:41:0;5680:332:1;18777:41:0;18829:27;:60;18679:218::o;5583:274::-;5719:10;5663:4;5711:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:41;;5742:10;;5711:41;:::i;:::-;5688:10;5680:19;;;;:7;:19;;;;;;;;;:28;;;;;;;;;;;;:72;;;5768:59;6163:25:1;;;5680:28:0;;5768:59;;6136:18:1;5768:59:0;6017:177:1;17619:262:0;17720:5;;;;17706:10;:19;17698:41;;;;;;;5882:2:1;17698:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17698:41:0;5680:332:1;17698:41:0;17750:16;:38;;;;;;;;;;-1:-1:-1;17799:75:0;17820:1;17816;:5;17799:75;;;17847:16;;;;17870:1;17830:34;;;:16;:34;;;;;;;;:37;;;;;;;;:41;17865:1;17823:3;17865:1;17823:3;:::i;:::-;;;;17799:75;;;;17619:262;:::o;5104:123::-;5206:13;;5187:16;;;5160:7;5187:16;;;:8;:16;;;;;;5160:7;;5187:32;;;:::i;18291:154::-;18379:5;;;;18365:10;:19;18357:41;;;;;;;5882:2:1;18357:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18357:41:0;5680:332:1;18357:41:0;18409:11;:28;;;;;;;;;;;;;18291:154::o;331:20::-;;;;;;;:::i;5865:284::-;6006:10;5950:4;5998:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:46;;6029:15;;5998:46;:::i;18453:218::-;18573:5;;;;18559:10;:19;18551:41;;;;;;;5882:2:1;18551:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18551:41:0;5680:332:1;18551:41:0;18603:27;:60;18453:218::o;16048:636::-;16119:10;16102:28;;;;:16;:28;;;;;;;;16131:1;16102:31;;;;;;;;:36;:50;;;;;16151:1;16142:6;:10;16102:50;16094:94;;;;;;;5522:2:1;16094:94:0;;;5504:21:1;5561:2;5541:18;;;5534:30;5600:33;5580:18;;;5573:61;5651:18;;16094:94:0;5320:355:1;16094:94:0;16205:16;;16199:71;;;;;16236:10;16199:71;;;3669:34:1;16256:4:0;3719:18:1;;;3712:43;3771:18;;;3764:34;;;16205:16:0;;;;;16199:36;;3581:18:1;;16199:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16295:1:0;16285:12;;-1:-1:-1;;16285:9:0;:12;;;;16281:53;;16314:1;16304:12;;:9;:12;;16319:15;16304:12;:30;16281:53;16345:13;16356:1;16345:10;:13::i;:::-;16410:1;16373:34;16393:10;16405:1;16373:19;:34::i;:::-;:38;16369:125;;;16481:13;;16444:34;16464:10;16476:1;16444:19;:34::i;:::-;:50;;;;:::i;:::-;16427:10;16413:25;;;;:13;:25;;;;;;;;16439:1;16413:28;;;;;;;:81;16369:125;16525:4;;16508:10;16525:4;16505:14;;;:2;16525:4;16505:14;;;16525:4;16505:14;;;16527:1;16505:17;;;;;;;;;:24;;;;16561:18;;16540:15;;;:3;:15;;;;;:18;;;;;;;;:39;16590:28;;;:16;:28;;;;;:31;;;;;;;;;:41;;16625:6;;16525:4;16590:41;;16625:6;;16590:41;:::i;:::-;;;;-1:-1:-1;;16664:1:0;16642:24;;;;:21;:24;;;:34;;16670:6;;16642:24;:34;;16670:6;;16642:34;:::i;:::-;;;;-1:-1:-1;;;16048:636:0:o;17889:133::-;17968:5;;;;17954:10;:19;17946:41;;;;;;;5882:2:1;17946:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17946:41:0;5680:332:1;17946:41:0;17998:5;:16;;;;;;;;;;;;;;;17889:133::o;6157:1457::-;6270:13;;6256:10;6218:4;6247:20;;;:8;:20;;;;;;6218:4;;6247:36;;;:::i;:::-;6239:5;:44;6235:58;;;6285:8;;;6235:58;6312:33;6327:10;6339:5;6312:14;:33::i;:::-;6304:41;;6356:15;6382:13;;6374:5;:21;;;;:::i;:::-;6415:10;6406:20;;;;:8;:20;;;;;:34;;6356:39;;-1:-1:-1;6356:39:0;;6406:20;;;:34;;6356:39;;6406:34;:::i;:::-;;;;-1:-1:-1;;6469:5:0;;;;6455:10;:19;;:34;;-1:-1:-1;6478:11:0;;;;6455:34;6451:170;;;6506:12;;;;;;;:8;:12;;;;;:26;;6522:10;;6506:12;:26;;6522:10;;6506:26;:::i;:::-;;;;-1:-1:-1;;6552:31:0;;6163:25:1;;;6552:31:0;;;;6561:10;;6552:31;;6151:2:1;6136:18;6552:31:0;;;;;;;6605:4;6598:11;;;;;6451:170;6660:22;6667:10;6679:2;6660:6;:22::i;:::-;6647:35;;:10;:35;:::i;:::-;6631:12;;;;;;;:8;:12;;;;;:51;;:12;;;:51;;;;;:::i;:::-;;;;-1:-1:-1;6770:22:0;;-1:-1:-1;6777:10:0;6789:2;6770:6;:22::i;:::-;6745;6752:10;6764:2;6745:6;:22::i;:::-;6720;6727:10;6739:2;6720:6;:22::i;:::-;:47;;;;:::i;:::-;:72;;;;:::i;:::-;6710:4;6693:23;;;;:8;:23;;;;;:99;;:23;;;:99;;;;;:::i;:::-;;;;-1:-1:-1;6827:22:0;;-1:-1:-1;6834:10:0;6846:2;6827:6;:22::i;:::-;6812:10;;;;;;;6803:20;;;;:8;:20;;;;;:46;;:20;;;:46;;;;;:::i;:::-;;;;-1:-1:-1;6865:6:0;;-1:-1:-1;6860:100:0;6881:1;6877;:5;6860:100;;;6891:66;6907:1;6925:31;6932:10;6949:6;6907:1;6953:2;6949:6;:::i;6891:66::-;6884:3;;;;:::i;:::-;;;;6860:100;;;;6970:31;6978:22;6985:10;6997:2;6978:6;:22::i;6970:31::-;7030:5;;;;7016:10;:19;;;;:47;;-1:-1:-1;7053:10:0;;;;;;;7039;:24;;7016:47;:62;;;;-1:-1:-1;7073:5:0;;;7067:11;;;7073:5;;7067:11;;7016:62;:82;;;;-1:-1:-1;7088:10:0;;;7082:16;;;7088:10;;;;;7082:16;;7016:82;7012:270;;;7133:16;;;;7119:10;:30;;;;:56;;-1:-1:-1;7159:16:0;;;7153:22;;;7159:16;;7153:22;;7119:56;7115:101;;;7177:39;7194:10;7206:2;7210:5;7177:16;:39::i;:::-;7231;7248:10;7260:2;7264:5;7231:16;:39::i;:::-;7297:51;;;7306:10;7297:51;7330:17;7337:5;7344:2;7330:6;:17::i;:::-;7322:25;;:5;:25;:::i;:::-;7297:51;;6163:25:1;;;6151:2;6136:18;7297:51:0;;;;;;;7393:4;7373:10;7364:94;7440:17;7447:5;7454:2;7440:6;:17::i;:::-;7420;7427:5;7434:2;7420:6;:17::i;:::-;7400;7407:5;7414:2;7400:6;:17::i;:::-;:37;;;;:::i;:::-;:57;;;;:::i;:::-;7364:94;;6163:25:1;;;6151:2;6136:18;7364:94:0;;;;;;;7495:10;;;;;;;7483;7474:51;7507:17;7514:5;7521:2;7507:6;:17::i;:::-;7474:51;;6163:25:1;;;6151:2;6136:18;7474:51:0;;;;;;;7554:10;7541:43;7566:17;7573:5;7580:2;7566:6;:17::i;:::-;7541:43;;6163:25:1;;;6151:2;6136:18;7541:43:0;;;;;;;-1:-1:-1;7602:4:0;;6157:1457;-1:-1:-1;;;6157:1457:0:o;13315:928::-;13413:13;;;13392:4;13413:13;;;:3;:13;;;;;;;;:17;;;;;;;;;13409:36;;-1:-1:-1;13444:1:0;13437:8;;13409:36;13483:18;;13456:24;13522:5;;;:1;:5;;;;;;;;;13542:21;:25;;;;;;;:30;;;;:85;;;13606:21;13624:2;13606:17;:21::i;:::-;13576:26;;;;:22;:26;;;;;;:51;;13542:85;13538:463;;;13644:16;13687:26;;;:22;:26;;;;;;13663:21;13710:2;13663:17;:21::i;:::-;:50;;;;:::i;:::-;13644:69;;13728:180;13749:1;13735:11;:15;:86;;;;-1:-1:-1;13790:25:0;;;;:21;:25;;;;;;13818:3;;13754:33;13768:19;13754:11;:33;:::i;:::-;:61;;;;:::i;:::-;:67;13735:86;13728:180;;;13842:24;13865:1;13842:24;;:::i;:::-;;-1:-1:-1;13885:7:0;13891:1;13885:7;;:::i;:::-;;;13728:180;;;13964:25;;;;:21;:25;;;;;;13928:33;13942:19;13928:11;:33;:::i;:::-;:61;;;;:::i;:::-;13922:67;;;;:::i;:::-;;;13629:372;13538:463;14145:13;;;14011:21;14145:13;;;:3;:13;;;;;;;;:17;;;;;;;;;14104:12;;;:2;:12;;;;;:16;;;;;;;;;14011:21;;14166:19;;14104:38;;14166:19;;14104:38;:::i;:::-;:58;;;;:::i;:::-;14099:63;;:2;:63;:::i;:::-;14065:26;;;;;;;:16;:26;;;;;;;;:30;;;;;;;;;:98;;;;:::i;:::-;:120;;;;:::i;:::-;14035:23;;;;;;;:13;:23;;;;;;;;:27;;;;;;;;;:150;;;;:::i;:::-;14011:174;;14222:13;;14203:16;:32;;;;:::i;:::-;14196:39;13315:928;-1:-1:-1;;;;;;13315:928:0:o;10890:302::-;10947:4;10968:13;;;:9;:13;;;;;;10964:32;;-1:-1:-1;10995:1:0;;10890:302;-1:-1:-1;10890:302:0:o;10964:32::-;11149:34;;;;:30;:34;;;;;;;;;11131:11;:15;;;;;;11115:9;:13;;;;;;11097:31;;:15;:31;:::i;:::-;:49;;;;:::i;:::-;:86;;;;:::i;:::-;11078:15;;;;:11;:15;;;;;;;;;11047:23;:27;;;;;;11031:9;:13;;;;;;:43;;11047:27;11031:43;:::i;:::-;11030:63;;;;:::i;:::-;:154;;;;:::i;:::-;11014:13;;;;:9;:13;;;;;;:170;;;;:::i;17435:176::-;17538:5;;;;17524:10;:19;17516:41;;;;;;;5882:2:1;17516:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17516:41:0;5680:332:1;17516:41:0;17568:15;;;;:11;:15;;;;;:35;17435:176::o;15865:175::-;15934:6;15929:104;15950:1;15946;:5;15929:104;;;15999:1;15964:32;15984:8;15994:1;15964:19;:32::i;:::-;:36;15960:70;;;16002:28;16018:8;16028:1;16002:15;:28::i;:::-;15953:3;;;;:::i;:::-;;;;15929:104;;9093:1047;9180:16;;9157:20;9207:406;9228:9;:16;9224:1;:20;9207:406;;;9270:17;:31;9288:9;9298:1;9288:12;;;;;;;;:::i;:::-;;;;;;;;;;;;9270:31;;;;;;;;;;;;-1:-1:-1;9270:31:0;;;;9266:116;;;9322:17;;;;:::i;:::-;;;;9358:8;;9266:116;9452:13;;9422:27;;:43;;;;:::i;:::-;9396:8;:22;9405:9;9415:1;9405:12;;;;;;;;:::i;:::-;;;;;;;9396:22;;;;;;;;;;;;;;;;:69;;;;;;;:::i;:::-;;;;;;;;9514:4;9480:17;:31;9498:9;9508:1;9498:12;;;;;;;;:::i;:::-;;;;;;;9480:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;9559:9;9569:1;9559:12;;;;;;;;:::i;:::-;;;;;;;9538:63;;9547:10;9538:63;;;9573:27;;9538:63;;;;6163:25:1;;6151:2;6136:18;;6017:177;9538:63:0;;;;;;;;9207:406;9246:3;;;;:::i;:::-;;;;9207:406;;;;9693:15;9677:13;;9647:27;;:43;;;;:::i;:::-;:61;;;;:::i;:::-;9632:10;9623:20;;;;:8;:20;;;;;:85;;:20;;;:85;;;;;:::i;:::-;;;;-1:-1:-1;;9733:1:0;9723:12;;:9;:12;;;;9719:53;;9752:1;9742:12;;:9;:12;;9757:15;9742:12;:30;9719:53;9783:13;9794:1;9783:10;:13::i;:::-;9848:1;9811:34;9831:10;9843:1;9811:19;:34::i;:::-;:38;9807:125;;;9919:13;;9882:34;9902:10;9914:1;9882:19;:34::i;:::-;:50;;;;:::i;:::-;9865:10;9851:25;;;;:13;:25;;;;;;;;9877:1;9851:28;;;;;;;:81;9807:125;9963:4;;9946:10;9963:4;9943:14;;;:2;9963:4;9943:14;;;9963:4;9943:14;;;9965:1;9943:17;;;;;;;;;:24;;;;9999:18;;9978:15;;;:3;:15;;;;;:18;;;;;;;;:39;10028:28;;;:16;:28;;;;;:31;;;;;;;;;:50;;10063:15;;9963:4;10028:50;;10063:15;;10028:50;:::i;:::-;;;;-1:-1:-1;;10111:1:0;10089:24;;;;:21;:24;;;:43;;10117:15;;10089:24;:43;;10117:15;;10089:43;:::i;:::-;;;;-1:-1:-1;;;;9093:1047:0:o;14585:1272::-;14655:14;14666:2;14655:10;:14::i;:::-;14684:13;;;;;;;:3;:13;;;;;;;;:17;;;;;;;;;14680:35;;14585:1272;;:::o;14680:35::-;14882:18;;14861:13;;;14725:21;14861:13;;;:3;:13;;;;;;;;:17;;;;;;;;;14821:12;;;:2;:12;;;;;:16;;;;;;;;;14725:21;;14882:18;14861:17;14821:37;;14882:18;;14821:37;:::i;:::-;:57;;;;:::i;:::-;14813:5;;;;:1;:5;;;;;;:65;;;;:::i;:::-;14779:26;;;;;;;:16;:26;;;;;;;;:30;;;;;;;;;:100;;;;:::i;:::-;:121;;;;:::i;:::-;14749:23;;;;;;;:13;:23;;;;;;;;:27;;;;;;;;;:151;;;;:::i;:::-;14911:23;;;14941:1;14911:23;;;:13;:23;;;;;;;;:27;;;;;;;;:31;;;14972:1;:5;;;;;;14953:12;;;:2;:12;;;;;:16;;;;;;;;:24;15008:18;;14988:13;;;:3;:13;;;;;:17;;;;;;;;:38;;;;14725:175;;-1:-1:-1;15049:6:0;14935:2;15054:1;15049:6;:::i;:::-;15048:13;;15059:2;15048:13;:::i;:::-;15037:24;-1:-1:-1;15113:33:0;15120:16;15138:7;15037:24;15144:1;15138:7;:::i;15113:33::-;15094:52;;:16;:52;:::i;:::-;15072:18;;;;;;;:8;:18;;;;;:74;;:18;;;:74;;;;;:::i;:::-;;;;-1:-1:-1;15181:33:0;;-1:-1:-1;15188:16:0;15206:7;:3;15212:1;15206:7;:::i;15181:33::-;15166:10;;;;;;;15157:20;;;;:8;:20;;;;;:57;;:20;;;:57;;;;;:::i;:::-;;;;-1:-1:-1;15307:33:0;;-1:-1:-1;15314:16:0;15332:7;:3;15338:1;15332:7;:::i;15307:33::-;15271;15278:16;15296:7;:3;15302:1;15296:7;:::i;15271:33::-;15252:52;;:16;:52;:::i;:::-;:88;;;;:::i;:::-;15242:4;15225:23;;;;:8;:23;;;;;:115;;:23;;;:115;;;;;:::i;:::-;;;;-1:-1:-1;15356:6:0;;-1:-1:-1;15351:129:0;15372:1;15368;:5;15351:129;;;15382:95;15404:5;:1;15408;15404:5;:::i;:::-;15398:2;:11;;:23;;15420:1;15398:23;;;15412:5;:1;15416;15412:5;:::i;:::-;15439:37;15446:16;15474:1;15464:7;:3;15470:1;15464:7;:::i;:::-;:11;;;;:::i;15439:37::-;15423:13;;;;:9;:13;;;;;;:53;;;;:::i;15382:95::-;15375:3;;;;:::i;:::-;;;;15351:129;;;-1:-1:-1;15490:42:0;15498:33;15505:16;15523:7;:3;15529:1;15523:7;:::i;15490:42::-;15639:13;;15548:105;;;;15565:4;;15548:105;;15602:33;15609:16;15627:7;:3;15633:1;15627:7;:::i;15602:33::-;15583:52;;:16;:52;:::i;:::-;15582:70;;;;:::i;:::-;15548:105;;6163:25:1;;;6151:2;6136:18;15548:105:0;;;;;;;15693:10;;15741:13;;15693:10;;;;;;;15686:4;;15669:86;;15705:33;15712:16;15730:7;:3;15736:1;15730:7;:::i;15705:33::-;:49;;;;:::i;:::-;15669:86;;6163:25:1;;;6151:2;6136:18;15669:86:0;;;;;;;15835:13;;15792:4;;15771:78;;15799:33;15806:16;15824:7;:3;15830:1;15824:7;:::i;15799:33::-;:49;;;;:::i;:::-;15771:78;;6163:25:1;;;6151:2;6136:18;15771:78:0;;;;;;;14644:1213;;14585:1272;;:::o;17288:139::-;17374:5;;;;17360:10;:19;17352:41;;;;;;;5882:2:1;17352:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17352:41:0;5680:332:1;17352:41:0;17404:7;;;;:3;:7;;;;;;:15;17288:139::o;14251:326::-;14321:4;14327;14333;14339;14364:32;14384:8;14394:1;14364:19;:32::i;:::-;14398;14418:8;14428:1;14398:19;:32::i;:::-;14432;14452:8;14462:1;14432:19;:32::i;:::-;14536;14556:8;14566:1;14536:19;:32::i;:::-;14501;14521:8;14531:1;14501:19;:32::i;:::-;14466;14486:8;14496:1;14466:19;:32::i;:::-;:67;;;;:::i;:::-;:102;;;;:::i;:::-;14356:213;;;;;;;;14251:326;;;;;:::o;10579:303::-;10672:1;10656:13;;;:9;:13;;;;;;:17;10652:184;;10720:21;10738:2;10720:17;:21::i;:::-;10690:27;;;;:23;:27;;;;;;;;:51;;;;10811:9;:13;;;;10793:31;;:15;:31;:::i;:::-;10756:34;;;;:30;:34;;;;;:68;10652:184;10846:13;;;;:9;:13;;;;;;:28;10579:303::o;10148:284::-;10287:13;;10263;;10244:16;;;10223:4;10244:16;;;:8;:16;;;;;;10223:4;;10287:13;10279:5;;10244:32;;10263:13;10244:32;:::i;:::-;:40;;;;:::i;:::-;:56;:86;;;;-1:-1:-1;10314:16:0;;;10304:26;;;10314:16;;10304:26;;10244:86;10240:161;;;10388:13;;10372;;10353:16;;;;;;;:8;:16;;;;;;:32;;10372:13;10353:32;:::i;:::-;:48;;;;:::i;:::-;10345:56;;10240:161;-1:-1:-1;10419:5:0;10148:284;-1:-1:-1;10148:284:0:o;10440:131::-;10500:4;10547:3;10500:4;10551:7;:2;10556;10551:7;:::i;:::-;:11;;10561:1;10551:11;:::i;:::-;10547:16;;;;;;;;;;;;10532:3;:12;10536:2;10541;10536:7;;;;:::i;:::-;10532:12;;;;;;;;;;;;10524:5;:20;;;;:::i;:::-;:39;;;;:::i;11200:390::-;11309:16;;;;11257:10;11300:26;;;:8;:26;;;;;;11284:13;;11309:16;11270:11;:27;;11284:13;11270:27;:::i;:::-;:56;;;;:::i;:::-;11257:69;-1:-1:-1;11337:13:0;11353:21;11361:13;11257:69;11353:21;:::i;:::-;11337:37;;11428:5;11417:8;11401:13;;:24;;;;:::i;:::-;:32;;;;:::i;:::-;11385:13;:48;;;11464:1;-1:-1:-1;11444:53:0;;;11496:1;11480:13;:17;11444:53;11546:16;;;;11537:26;;;;:8;:26;;;;;;11577:5;;11537:37;;11566:8;;11537:37;:::i;:::-;:45;;;;:::i;:::-;11517:16;;;;11508:26;;;;:8;:26;;;;;:74;-1:-1:-1;;;11200:390:0:o;11598:287::-;11694:27;;;;;;;:17;:27;;;;;;;;:36;;;:76;;;11743:27;;11734:5;:36;;11694:76;11690:188;;;11787:30;11807:6;11815:1;11787:19;:30::i;:::-;11832:27;;;;;;;:17;:27;;;;;:34;;;;11862:4;11832:34;;;11598:287;;;:::o;11893:311::-;11998:27;;11989:5;:36;11985:212;;12056:16;;;12046:26;;;12056:16;;12046:26;12042:64;;;12074:32;12094:8;12104:1;12074:19;:32::i;:::-;12137:16;;;12125:28;;;12137:16;;12125:28;12121:64;;;12155:30;12175:6;12183:1;12155:19;:30::i;12696:611::-;12749:25;;;;:21;:25;;;;;;:30;;;;:85;;;12813:21;12831:2;12813:17;:21::i;:::-;12783:26;;;;:22;:26;;;;;;:51;;12749:85;12745:555;;;12851:16;12894:26;;;:22;:26;;;;;;12870:21;12917:2;12870:17;:21::i;:::-;:50;;;;:::i;:::-;12851:69;;12935:205;12956:1;12942:11;:15;:85;;;;-1:-1:-1;12996:25:0;;;;:21;:25;;;;;;12975:18;;13024:3;;12996:25;12961:32;;:11;:32;:::i;:::-;:60;;;;:::i;:::-;:66;12942:85;12935:205;;;13070:1;13048:18;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;13095:6:0;;-1:-1:-1;13090:34:0;13107:1;13103;:5;13090:34;;;13115:4;;;;:1;:4;;;;;:9;;13123:1;;13115:4;:9;;13123:1;;13115:9;:::i;:::-;;;;-1:-1:-1;13110:3:0;;-1:-1:-1;13110:3:0;;;:::i;:::-;;;;13090:34;;;;12935:205;;;13198:25;;;;:21;:25;;;;;;13177:18;;13163:32;;:11;:32;:::i;:::-;:60;;;;:::i;:::-;13154:5;;;;:1;:5;;;;;:69;;:5;;;:69;;;;;:::i;:::-;;;;-1:-1:-1;13267:21:0;;-1:-1:-1;13285:2:0;13267:17;:21::i;:::-;13238:26;;;;:22;:26;;;;;:50;-1:-1:-1;12696:611:0;:::o;12212:476::-;12294:13;;;;:9;:13;;;;;;12290:55;;12314:13;;;;:9;:13;;;;;12330:15;12314:31;;12290:55;12356:14;12367:2;12356:10;:14::i;:::-;12422:1;12385:34;12405:9;12416:2;12385:19;:34::i;:::-;:38;12381:125;;;12493:13;;12456:34;12476:9;12487:2;12456:19;:34::i;:::-;:50;;;;:::i;:::-;12425:24;;;;;;;:13;:24;;;;;;;;:28;;;;;;;;:81;12381:125;12537:5;;;;:1;:5;;;;;;;;;12517:13;;;;;;:2;:13;;;;;:17;;;;;;;;:25;;;;12574:18;;12553:14;;;:3;:14;;;;;:18;;;;;;;;:39;12603:27;;:16;:27;;;;;:31;;;;;;;;:36;;12638:1;;12537:5;12603:36;;12638:1;;12603:36;:::i;:::-;;;;-1:-1:-1;;12650:25:0;;;;:21;:25;;;;;:30;;12679:1;;12650:25;:30;;12679:1;;12650:30;:::i;14:196:1:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;406:260::-;474:6;482;535:2;523:9;514:7;510:23;506:32;503:52;;;551:1;548;541:12;503:52;574:29;593:9;574:29;:::i;:::-;564:39;;622:38;656:2;645:9;641:18;622:38;:::i;:::-;612:48;;406:260;;;;;:::o;671:328::-;748:6;756;764;817:2;805:9;796:7;792:23;788:32;785:52;;;833:1;830;823:12;785:52;856:29;875:9;856:29;:::i;:::-;846:39;;904:38;938:2;927:9;923:18;904:38;:::i;:::-;894:48;;989:2;978:9;974:18;961:32;951:42;;671:328;;;;;:::o;1004:254::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1172:29;1191:9;1172:29;:::i;:::-;1162:39;1248:2;1233:18;;;;1220:32;;-1:-1:-1;;;1004:254:1:o;1263:1191::-;1347:6;1378:2;1421;1409:9;1400:7;1396:23;1392:32;1389:52;;;1437:1;1434;1427:12;1389:52;1477:9;1464:23;1506:18;1547:2;1539:6;1536:14;1533:34;;;1563:1;1560;1553:12;1533:34;1601:6;1590:9;1586:22;1576:32;;1646:7;1639:4;1635:2;1631:13;1627:27;1617:55;;1668:1;1665;1658:12;1617:55;1704:2;1691:16;1726:2;1722;1719:10;1716:36;;;1732:18;;:::i;:::-;1778:2;1775:1;1771:10;1810:2;1804:9;1869:66;1864:2;1860;1856:11;1852:84;1844:6;1840:97;1987:6;1975:10;1972:22;1967:2;1955:10;1952:18;1949:46;1946:72;;;1998:18;;:::i;:::-;2034:2;2027:22;2084:18;;;2118:15;;;;-1:-1:-1;2153:11:1;;;2183;;;2179:20;;2176:33;-1:-1:-1;2173:53:1;;;2222:1;2219;2212:12;2173:53;2244:1;2235:10;;2254:169;2268:2;2265:1;2262:9;2254:169;;;2325:23;2344:3;2325:23;:::i;:::-;2313:36;;2286:1;2279:9;;;;;2369:12;;;;2401;;2254:169;;;-1:-1:-1;2442:6:1;1263:1191;-1:-1:-1;;;;;;;;1263:1191:1:o;2459:273::-;2515:6;2568:2;2556:9;2547:7;2543:23;2539:32;2536:52;;;2584:1;2581;2574:12;2536:52;2623:9;2610:23;2676:5;2669:13;2662:21;2655:5;2652:32;2642:60;;2698:1;2695;2688:12;2737:180;2796:6;2849:2;2837:9;2828:7;2824:23;2820:32;2817:52;;;2865:1;2862;2855:12;2817:52;-1:-1:-1;2888:23:1;;2737:180;-1:-1:-1;2737:180:1:o;2922:248::-;2990:6;2998;3051:2;3039:9;3030:7;3026:23;3022:32;3019:52;;;3067:1;3064;3057:12;3019:52;-1:-1:-1;;3090:23:1;;;3160:2;3145:18;;;3132:32;;-1:-1:-1;2922:248:1:o;4303:656::-;4415:4;4444:2;4473;4462:9;4455:21;4505:6;4499:13;4548:6;4543:2;4532:9;4528:18;4521:34;4573:1;4583:140;4597:6;4594:1;4591:13;4583:140;;;4692:14;;;4688:23;;4682:30;4658:17;;;4677:2;4654:26;4647:66;4612:10;;4583:140;;;4741:6;4738:1;4735:13;4732:91;;;4811:1;4806:2;4797:6;4786:9;4782:22;4778:31;4771:42;4732:91;-1:-1:-1;4875:2:1;4863:15;4880:66;4859:88;4844:104;;;;4950:2;4840:113;;4303:656;-1:-1:-1;;;4303:656:1:o;6784:128::-;6824:3;6855:1;6851:6;6848:1;6845:13;6842:39;;;6861:18;;:::i;:::-;-1:-1:-1;6897:9:1;;6784:128::o;6917:274::-;6957:1;6983;6973:189;;7018:77;7015:1;7008:88;7119:4;7116:1;7109:15;7147:4;7144:1;7137:15;6973:189;-1:-1:-1;7176:9:1;;6917:274::o;7196:228::-;7236:7;7362:1;7294:66;7290:74;7287:1;7284:81;7279:1;7272:9;7265:17;7261:105;7258:131;;;7369:18;;:::i;:::-;-1:-1:-1;7409:9:1;;7196:228::o;7429:125::-;7469:4;7497:1;7494;7491:8;7488:34;;;7502:18;;:::i;:::-;-1:-1:-1;7539:9:1;;7429:125::o;7559:196::-;7598:3;7626:5;7616:39;;7635:18;;:::i;:::-;-1:-1:-1;7682:66:1;7671:78;;7559:196::o;7760:437::-;7839:1;7835:12;;;;7882;;;7903:61;;7957:4;7949:6;7945:17;7935:27;;7903:61;8010:2;8002:6;7999:14;7979:18;7976:38;7973:218;;;8047:77;8044:1;8037:88;8148:4;8145:1;8138:15;8176:4;8173:1;8166:15;8202:195;8241:3;8272:66;8265:5;8262:77;8259:103;;;8342:18;;:::i;:::-;-1:-1:-1;8389:1:1;8378:13;;8202:195::o;8402:184::-;8454:77;8451:1;8444:88;8551:4;8548:1;8541:15;8575:4;8572:1;8565:15;8591:184;8643:77;8640:1;8633:88;8740:4;8737:1;8730:15;8764:4;8761:1;8754:15;8780:184;8832:77;8829:1;8822:88;8929:4;8926:1;8919:15;8953:4;8950:1;8943:15

Swarm Source

ipfs://7672193bd3f36af3d68138026eff08f60b4e0f74da12503b5140c553ec0366c0
Loading