false
true
0

Contract Address Details

0xe9a97B0798b1649045c1D7114F8C432846828404

Token
Froge (FROGE)
Creator
0xc6da32–9856c2 at 0xed2309–0c2277
Balance
0.019712513431094165 PLS ( )
Tokens
Fetching tokens...
Transactions
1,709 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26243357
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
FrogeToken




Optimization enabled
false
Compiler version
v0.8.19+commit.7dd6d404




EVM Version
paris




Verified at
2026-02-08T00:37:44.411793Z

Constructor Arguments

000000000000000000000000fd440f6a8f6ac5c153eaa9db9599f25c499e9ca1

Arg [0] (address) : 0xfd440f6a8f6ac5c153eaa9db9599f25c499e9ca1

              

FrogeToken.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from,
        address to,
        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);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

interface IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

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

/*
    * Froge ERC20 contract starts here
*/

contract FrogeToken is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address private _uniswapV2Pair;
    
    uint256 public maxHoldings;
    uint256 public feeTokenThreshold;
    bool public feesDisabled;
        
    bool private _inSwap;
    uint256 private _swapFee = 3;
    uint256 private _tokensForFee;
    address private _feeAddr;

    mapping (address => bool) private _excludedLimits;

    // much like onlyOwner() but used for the feeAddr so that once renounced fees and maxholdings can still be disabled
    modifier onlyFeeAddr() {
        require(_feeAddr == _msgSender(), "Caller is not the _feeAddr address.");
        _;
    }

    constructor(address feeAddr) ERC20("Froge", "FROGE") payable {
        uint256 totalSupply = 690420000000000000000000000000000;
        uint256 totalLiquidity = totalSupply * 90 / 100; // 90%

        maxHoldings = totalSupply * 2 / 100; // 2%
        feeTokenThreshold = totalSupply * 1 / 1000; // .1%

        _feeAddr = feeAddr;

        // exclution from fees and limits
        _excludedLimits[owner()] = true;
        _excludedLimits[address(this)] = true;
        _excludedLimits[address(0xdead)] = true;

        // mint lp tokens to the contract and remaning to deployer
        _mint(address(this), totalLiquidity);
        _mint(msg.sender, totalSupply.sub(totalLiquidity));
    }

    function createV2LP() external onlyOwner {
        // create pair
        _uniswapV2Pair = IUniswapV2Factory(
            _uniswapV2Router.factory()).createPair(address(this), 
            _uniswapV2Router.WETH()
        );

        // add lp to pair
        _addLiquidity(
            balanceOf(address(this)), 
            address(this).balance
        );
    }

    // updates the amount of tokens that needs to be reached before fee is swapped
    function updateFeeTokenThreshold(uint256 newThreshold) external onlyFeeAddr {        
  	    require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply.");
  	    require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply.");
  	    feeTokenThreshold = newThreshold;
  	}

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "Transfer from the zero address not allowed.");
        require(to != address(0), "Transfer to the zero address not allowed.");

        // no reason to waste gas
        bool isBuy = from == _uniswapV2Pair;
        bool exluded = _excludedLimits[from] || _excludedLimits[to];

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        // if pair has not yet been created
        if (_uniswapV2Pair == address(0)) {
            require(exluded, "Please wait for the LP pair to be created.");
            return;
        }

        // max holding check
        if (maxHoldings > 0 && isBuy && to != owner() && to != address(this))
            require(super.balanceOf(to) + amount <= maxHoldings, "Balance exceeds max holdings amount, consider using a second wallet.");
        
        // take fees if they haven't been perm disabled
        if (!feesDisabled) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= feeTokenThreshold;
            if (
                canSwap &&
                !_inSwap &&
                !isBuy &&
                !_excludedLimits[from] &&
                !_excludedLimits[to]
            ) {
                _inSwap = true;
                swapFee();
                _inSwap = false;
            }


            // check if we should be taking the fee
            bool takeFee = !_inSwap;
            if (exluded || !isBuy && to != _uniswapV2Pair) takeFee = false;
            
            if (takeFee) {
                uint256 fees = amount.mul(_swapFee).div(100);
                _tokensForFee = amount.mul(_swapFee).div(100);
                
                if (fees > 0)
                    super._transfer(from, address(this), fees);
                
                amount -= fees;
            }
        }

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

    // swaps tokens to eth
    function _swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        _approve(address(this), address(_uniswapV2Router), tokenAmount);

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    // does what it says
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);

        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _feeAddr,
            block.timestamp
        );
    }

    // swaps fee from tokens to eth
    function swapFee() internal {
        uint256 contractBal = balanceOf(address(this));
        uint256 tokensForLiq = _tokensForFee.div(3); // 1% fee is lp
        uint256 tokensForFee = _tokensForFee.sub(tokensForLiq); // remaning 2% is marketing/cex/development
        
        if (contractBal == 0 || _tokensForFee == 0) return;
        if (contractBal > feeTokenThreshold) contractBal = feeTokenThreshold;
        
        // Halve the amount of liquidity tokens
        uint256 liqTokens = contractBal * tokensForLiq / _tokensForFee / 2;
        uint256 amountToSwapForETH = contractBal.sub(liqTokens);
        
        uint256 initETHBal = address(this).balance;

        _swapTokensForEth(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance.sub(initETHBal);
        uint256 ethFee = ethBalance.mul(tokensForFee).div(_tokensForFee);
        uint256 ethLiq = ethBalance - ethFee;
        
        _tokensForFee = 0;

        payable(_feeAddr).transfer(ethFee);
                
        if (liqTokens > 0 && ethLiq > 0) 
            _addLiquidity(liqTokens, ethLiq);
    }

    // perm disable fees
    function disableFees() external onlyFeeAddr {
        feesDisabled = true;
    }

    // perm disable max holdings
    function disableHoldingLimit() external onlyFeeAddr {
        maxHoldings = 0;
    }

    // transfers any stuck eth from contract to feeAddr
    function transferStuckETH() external {
        payable(_feeAddr).transfer(address(this).balance);
    }

    receive() external payable {}
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"paris","compilationTarget":{"FrogeToken.sol":"FrogeToken"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"payable","inputs":[{"type":"address","name":"feeAddr","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"createV2LP","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"disableFees","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"disableHoldingLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeTokenThreshold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"feesDisabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxHoldings","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferStuckETH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateFeeTokenThreshold","inputs":[{"type":"uint256","name":"newThreshold","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600b5560405162003e0b38038062003e0b833981810160405281019062000083919062000647565b6040518060400160405280600581526020017f46726f67650000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f46524f47450000000000000000000000000000000000000000000000000000008152508160039081620001009190620008f3565b508060049081620001129190620008f3565b50505062000135620001296200034b60201b60201c565b6200035360201b60201c565b60006d220a535684d4193ba54d20000000905060006064605a836200015b919062000a09565b62000167919062000a83565b905060646002836200017a919062000a09565b62000186919062000a83565b6008819055506103e86001836200019e919062000a09565b620001aa919062000a83565b60098190555082600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000620002076200041960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200031c30826200044360201b60201c565b6200034233620003368385620005bb60201b90919060201c565b6200044360201b60201c565b50505062000be2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ac9062000b1c565b60405180910390fd5b620004c960008383620005d360201b60201c565b8060026000828254620004dd919062000b3e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000534919062000b3e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200059b919062000b8a565b60405180910390a3620005b760008383620005d860201b60201c565b5050565b60008183620005cb919062000ba7565b905092915050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200060f82620005e2565b9050919050565b620006218162000602565b81146200062d57600080fd5b50565b600081519050620006418162000616565b92915050565b60006020828403121562000660576200065f620005dd565b5b6000620006708482850162000630565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006fb57607f821691505b602082108103620007115762000710620006b3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200077b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200073c565b6200078786836200073c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007d4620007ce620007c8846200079f565b620007a9565b6200079f565b9050919050565b6000819050919050565b620007f083620007b3565b62000808620007ff82620007db565b84845462000749565b825550505050565b600090565b6200081f62000810565b6200082c818484620007e5565b505050565b5b8181101562000854576200084860008262000815565b60018101905062000832565b5050565b601f821115620008a3576200086d8162000717565b62000878846200072c565b8101602085101562000888578190505b620008a062000897856200072c565b83018262000831565b50505b505050565b600082821c905092915050565b6000620008c860001984600802620008a8565b1980831691505092915050565b6000620008e38383620008b5565b9150826002028217905092915050565b620008fe8262000679565b67ffffffffffffffff8111156200091a576200091962000684565b5b620009268254620006e2565b6200093382828562000858565b600060209050601f8311600181146200096b576000841562000956578287015190505b620009628582620008d5565b865550620009d2565b601f1984166200097b8662000717565b60005b82811015620009a5578489015182556001820191506020850194506020810190506200097e565b86831015620009c55784890151620009c1601f891682620008b5565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a16826200079f565b915062000a23836200079f565b925082820262000a33816200079f565b9150828204841483151762000a4d5762000a4c620009da565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a90826200079f565b915062000a9d836200079f565b92508262000ab05762000aaf62000a54565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000b04601f8362000abb565b915062000b118262000acc565b602082019050919050565b6000602082019050818103600083015262000b378162000af5565b9050919050565b600062000b4b826200079f565b915062000b58836200079f565b925082820190508082111562000b735762000b72620009da565b5b92915050565b62000b84816200079f565b82525050565b600060208201905062000ba1600083018462000b79565b92915050565b600062000bb4826200079f565b915062000bc1836200079f565b925082820390508181111562000bdc5762000bdb620009da565b5b92915050565b6132198062000bf26000396000f3fe6080604052600436106101395760003560e01c8063715018a6116100ab578063ce404b231161006f578063ce404b2314610425578063d0c695f41461043c578063dd62ed3e14610453578063e54f4faa14610490578063f2fde38b146104bb578063f442d3fb146104e457610140565b8063715018a61461033e5780638da5cb5b1461035557806395d89b4114610380578063a457c2d7146103ab578063a9059cbb146103e857610140565b806323b872dd116100fd57806323b872dd1461021a578063313ce5671461025757806339509351146102825780635564ad71146102bf57806365cffb1e146102d657806370a082311461030157610140565b806306fdde0314610145578063095ea7b31461017057806318160ddd146101ad5780631fac6a3b146101d85780631ffc2998146101ef57610140565b3661014057005b600080fd5b34801561015157600080fd5b5061015a61050d565b60405161016791906121b8565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190612273565b61059f565b6040516101a491906122ce565b60405180910390f35b3480156101b957600080fd5b506101c26105c2565b6040516101cf91906122f8565b60405180910390f35b3480156101e457600080fd5b506101ed6105cc565b005b3480156101fb57600080fd5b50610204610637565b60405161021191906122f8565b60405180910390f35b34801561022657600080fd5b50610241600480360381019061023c9190612313565b61063d565b60405161024e91906122ce565b60405180910390f35b34801561026357600080fd5b5061026c61066c565b6040516102799190612382565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612273565b610675565b6040516102b691906122ce565b60405180910390f35b3480156102cb57600080fd5b506102d461071f565b005b3480156102e257600080fd5b506102eb6107c0565b6040516102f891906122ce565b60405180910390f35b34801561030d57600080fd5b506103286004803603810190610323919061239d565b6107d3565b60405161033591906122f8565b60405180910390f35b34801561034a57600080fd5b5061035361081b565b005b34801561036157600080fd5b5061036a6108a3565b60405161037791906123d9565b60405180910390f35b34801561038c57600080fd5b506103956108cd565b6040516103a291906121b8565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190612273565b61095f565b6040516103df91906122ce565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612273565b610a49565b60405161041c91906122ce565b60405180910390f35b34801561043157600080fd5b5061043a610a6c565b005b34801561044857600080fd5b50610451610b20565b005b34801561045f57600080fd5b5061047a600480360381019061047591906123f4565b610d8e565b60405161048791906122f8565b60405180910390f35b34801561049c57600080fd5b506104a5610e15565b6040516104b291906122f8565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd919061239d565b610e1b565b005b3480156104f057600080fd5b5061050b60048036038101906105069190612434565b610f12565b005b60606003805461051c90612490565b80601f016020809104026020016040519081016040528092919081815260200182805461054890612490565b80156105955780601f1061056a57610100808354040283529160200191610595565b820191906000526020600020905b81548152906001019060200180831161057857829003601f168201915b5050505050905090565b6000806105aa61107a565b90506105b7818585611082565b600191505092915050565b6000600254905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610634573d6000803e3d6000fd5b50565b60095481565b60008061064861107a565b905061065585828561124b565b6106608585856112d7565b60019150509392505050565b60006012905090565b60008061068061107a565b9050610714818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461070f91906124f0565b611082565b600191505092915050565b61072761107a565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ad90612596565b60405180910390fd5b6000600881905550565b600a60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61082361107a565b73ffffffffffffffffffffffffffffffffffffffff166108416108a3565b73ffffffffffffffffffffffffffffffffffffffff1614610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90612602565b60405180910390fd5b6108a160006118a9565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108dc90612490565b80601f016020809104026020016040519081016040528092919081815260200182805461090890612490565b80156109555780601f1061092a57610100808354040283529160200191610955565b820191906000526020600020905b81548152906001019060200180831161093857829003601f168201915b5050505050905090565b60008061096a61107a565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2790612694565b60405180910390fd5b610a3d8286868403611082565b60019250505092915050565b600080610a5461107a565b9050610a618185856112d7565b600191505092915050565b610a7461107a565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90612596565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b610b2861107a565b73ffffffffffffffffffffffffffffffffffffffff16610b466108a3565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390612602565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d91906126c9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cda91906126c9565b6040518363ffffffff1660e01b8152600401610cf79291906126f6565b6020604051808303816000875af1158015610d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3a91906126c9565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d8c610d86306107d3565b4761196f565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b610e2361107a565b73ffffffffffffffffffffffffffffffffffffffff16610e416108a3565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90612602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90612791565b60405180910390fd5b610f0f816118a9565b50565b610f1a61107a565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090612596565b60405180910390fd5b620186a06001610fb76105c2565b610fc191906127b1565b610fcb9190612822565b81101561100d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611004906128c5565b60405180910390fd5b6103e8600561101a6105c2565b61102491906127b1565b61102e9190612822565b811115611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790612957565b60405180910390fd5b8060098190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e8906129e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790612a7b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161123e91906122f8565b60405180910390a3505050565b60006112578484610d8e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112d157818110156112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90612ae7565b60405180910390fd5b6112d08484848403611082565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90612b79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90612c0b565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806114ad5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600083036114ca576114c385856000611a6f565b50506118a4565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036115675780611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790612c9d565b60405180910390fd5b50506118a4565b60006008541180156115765750815b80156115b557506115856108a3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156115ed57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561164b57600854836115ff866107d3565b61160991906124f0565b111561164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190612d55565b60405180910390fd5b5b600a60009054906101000a900460ff1661189657600061166a306107d3565b9050600060095482101590508080156116905750600a60019054906101000a900460ff16155b801561169a575083155b80156116f05750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117465750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561178a576001600a60016101000a81548160ff02191690831515021790555061176e611cee565b6000600a60016101000a81548160ff0219169083151502179055505b6000600a60019054906101000a900460ff1615905083806118035750841580156118025750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b5b1561180d57600090505b801561189257600061183d606461182f600b548a611e9990919063ffffffff16565b611eaf90919063ffffffff16565b90506118676064611859600b548a611e9990919063ffffffff16565b611eaf90919063ffffffff16565b600c81905550600081111561188257611881893083611a6f565b5b808761188e9190612d75565b9650505b5050505b6118a1858585611a6f565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61199c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611082565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611a2596959493929190612dee565b60606040518083038185885af1158015611a43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a689190612e64565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad590612f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490612fbb565b60405180910390fd5b611b58838383611ec5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd59061304d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c7191906124f0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cd591906122f8565b60405180910390a3611ce8848484611eca565b50505050565b6000611cf9306107d3565b90506000611d136003600c54611eaf90919063ffffffff16565b90506000611d2c82600c54611ecf90919063ffffffff16565b90506000831480611d3f57506000600c54145b15611d4c57505050611e97565b600954831115611d5c5760095492505b60006002600c548486611d6f91906127b1565b611d799190612822565b611d839190612822565b90506000611d9a8286611ecf90919063ffffffff16565b90506000479050611daa82611ee5565b6000611dbf8247611ecf90919063ffffffff16565b90506000611dea600c54611ddc8885611e9990919063ffffffff16565b611eaf90919063ffffffff16565b905060008183611dfa9190612d75565b90506000600c81905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611e6c573d6000803e3d6000fd5b50600086118015611e7d5750600081115b15611e8d57611e8c868261196f565b5b5050505050505050505b565b60008183611ea791906127b1565b905092915050565b60008183611ebd9190612822565b905092915050565b505050565b505050565b60008183611edd9190612d75565b905092915050565b6000600267ffffffffffffffff811115611f0257611f0161306d565b5b604051908082528060200260200182016040528015611f305781602001602082028036833780820191505090505b5090503081600081518110611f4857611f4761309c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201391906126c9565b816001815181106120275761202661309c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061208e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611082565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016120f2959493929190613189565b600060405180830381600087803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612162578082015181840152602081019050612147565b60008484015250505050565b6000601f19601f8301169050919050565b600061218a82612128565b6121948185612133565b93506121a4818560208601612144565b6121ad8161216e565b840191505092915050565b600060208201905081810360008301526121d2818461217f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061220a826121df565b9050919050565b61221a816121ff565b811461222557600080fd5b50565b60008135905061223781612211565b92915050565b6000819050919050565b6122508161223d565b811461225b57600080fd5b50565b60008135905061226d81612247565b92915050565b6000806040838503121561228a576122896121da565b5b600061229885828601612228565b92505060206122a98582860161225e565b9150509250929050565b60008115159050919050565b6122c8816122b3565b82525050565b60006020820190506122e360008301846122bf565b92915050565b6122f28161223d565b82525050565b600060208201905061230d60008301846122e9565b92915050565b60008060006060848603121561232c5761232b6121da565b5b600061233a86828701612228565b935050602061234b86828701612228565b925050604061235c8682870161225e565b9150509250925092565b600060ff82169050919050565b61237c81612366565b82525050565b60006020820190506123976000830184612373565b92915050565b6000602082840312156123b3576123b26121da565b5b60006123c184828501612228565b91505092915050565b6123d3816121ff565b82525050565b60006020820190506123ee60008301846123ca565b92915050565b6000806040838503121561240b5761240a6121da565b5b600061241985828601612228565b925050602061242a85828601612228565b9150509250929050565b60006020828403121561244a576124496121da565b5b60006124588482850161225e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124a857607f821691505b6020821081036124bb576124ba612461565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124fb8261223d565b91506125068361223d565b925082820190508082111561251e5761251d6124c1565b5b92915050565b7f43616c6c6572206973206e6f7420746865205f6665654164647220616464726560008201527f73732e0000000000000000000000000000000000000000000000000000000000602082015250565b6000612580602383612133565b915061258b82612524565b604082019050919050565b600060208201905081810360008301526125af81612573565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125ec602083612133565b91506125f7826125b6565b602082019050919050565b6000602082019050818103600083015261261b816125df565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061267e602583612133565b915061268982612622565b604082019050919050565b600060208201905081810360008301526126ad81612671565b9050919050565b6000815190506126c381612211565b92915050565b6000602082840312156126df576126de6121da565b5b60006126ed848285016126b4565b91505092915050565b600060408201905061270b60008301856123ca565b61271860208301846123ca565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061277b602683612133565b91506127868261271f565b604082019050919050565b600060208201905081810360008301526127aa8161276e565b9050919050565b60006127bc8261223d565b91506127c78361223d565b92508282026127d58161223d565b915082820484148315176127ec576127eb6124c1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061282d8261223d565b91506128388361223d565b925082612848576128476127f3565b5b828204905092915050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b60006128af603883612133565b91506128ba82612853565b604082019050919050565b600060208201905081810360008301526128de816128a2565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b6000612941603783612133565b915061294c826128e5565b604082019050919050565b6000602082019050818103600083015261297081612934565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129d3602483612133565b91506129de82612977565b604082019050919050565b60006020820190508181036000830152612a02816129c6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a65602283612133565b9150612a7082612a09565b604082019050919050565b60006020820190508181036000830152612a9481612a58565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ad1601d83612133565b9150612adc82612a9b565b602082019050919050565b60006020820190508181036000830152612b0081612ac4565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e60008201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b6000612b63602b83612133565b9150612b6e82612b07565b604082019050919050565b60006020820190508181036000830152612b9281612b56565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f7460008201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b6000612bf5602983612133565b9150612c0082612b99565b604082019050919050565b60006020820190508181036000830152612c2481612be8565b9050919050565b7f506c65617365207761697420666f7220746865204c50207061697220746f206260008201527f6520637265617465642e00000000000000000000000000000000000000000000602082015250565b6000612c87602a83612133565b9150612c9282612c2b565b604082019050919050565b60006020820190508181036000830152612cb681612c7a565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f60008201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b6000612d3f604483612133565b9150612d4a82612cbd565b606082019050919050565b60006020820190508181036000830152612d6e81612d32565b9050919050565b6000612d808261223d565b9150612d8b8361223d565b9250828203905081811115612da357612da26124c1565b5b92915050565b6000819050919050565b6000819050919050565b6000612dd8612dd3612dce84612da9565b612db3565b61223d565b9050919050565b612de881612dbd565b82525050565b600060c082019050612e0360008301896123ca565b612e1060208301886122e9565b612e1d6040830187612ddf565b612e2a6060830186612ddf565b612e3760808301856123ca565b612e4460a08301846122e9565b979650505050505050565b600081519050612e5e81612247565b92915050565b600080600060608486031215612e7d57612e7c6121da565b5b6000612e8b86828701612e4f565b9350506020612e9c86828701612e4f565b9250506040612ead86828701612e4f565b9150509250925092565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f13602583612133565b9150612f1e82612eb7565b604082019050919050565b60006020820190508181036000830152612f4281612f06565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612fa5602383612133565b9150612fb082612f49565b604082019050919050565b60006020820190508181036000830152612fd481612f98565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613037602683612133565b915061304282612fdb565b604082019050919050565b600060208201905081810360008301526130668161302a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613100816121ff565b82525050565b600061311283836130f7565b60208301905092915050565b6000602082019050919050565b6000613136826130cb565b61314081856130d6565b935061314b836130e7565b8060005b8381101561317c5781516131638882613106565b975061316e8361311e565b92505060018101905061314f565b5085935050505092915050565b600060a08201905061319e60008301886122e9565b6131ab6020830187612ddf565b81810360408301526131bd818661312b565b90506131cc60608301856123ca565b6131d960808301846122e9565b969550505050505056fea2646970667358221220568162d431511408c53673e21c7fba76676afed45dac93b65b1a0c0f922ef2d464736f6c63430008130033000000000000000000000000fd440f6a8f6ac5c153eaa9db9599f25c499e9ca1

Deployed ByteCode

0x6080604052600436106101395760003560e01c8063715018a6116100ab578063ce404b231161006f578063ce404b2314610425578063d0c695f41461043c578063dd62ed3e14610453578063e54f4faa14610490578063f2fde38b146104bb578063f442d3fb146104e457610140565b8063715018a61461033e5780638da5cb5b1461035557806395d89b4114610380578063a457c2d7146103ab578063a9059cbb146103e857610140565b806323b872dd116100fd57806323b872dd1461021a578063313ce5671461025757806339509351146102825780635564ad71146102bf57806365cffb1e146102d657806370a082311461030157610140565b806306fdde0314610145578063095ea7b31461017057806318160ddd146101ad5780631fac6a3b146101d85780631ffc2998146101ef57610140565b3661014057005b600080fd5b34801561015157600080fd5b5061015a61050d565b60405161016791906121b8565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190612273565b61059f565b6040516101a491906122ce565b60405180910390f35b3480156101b957600080fd5b506101c26105c2565b6040516101cf91906122f8565b60405180910390f35b3480156101e457600080fd5b506101ed6105cc565b005b3480156101fb57600080fd5b50610204610637565b60405161021191906122f8565b60405180910390f35b34801561022657600080fd5b50610241600480360381019061023c9190612313565b61063d565b60405161024e91906122ce565b60405180910390f35b34801561026357600080fd5b5061026c61066c565b6040516102799190612382565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612273565b610675565b6040516102b691906122ce565b60405180910390f35b3480156102cb57600080fd5b506102d461071f565b005b3480156102e257600080fd5b506102eb6107c0565b6040516102f891906122ce565b60405180910390f35b34801561030d57600080fd5b506103286004803603810190610323919061239d565b6107d3565b60405161033591906122f8565b60405180910390f35b34801561034a57600080fd5b5061035361081b565b005b34801561036157600080fd5b5061036a6108a3565b60405161037791906123d9565b60405180910390f35b34801561038c57600080fd5b506103956108cd565b6040516103a291906121b8565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190612273565b61095f565b6040516103df91906122ce565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612273565b610a49565b60405161041c91906122ce565b60405180910390f35b34801561043157600080fd5b5061043a610a6c565b005b34801561044857600080fd5b50610451610b20565b005b34801561045f57600080fd5b5061047a600480360381019061047591906123f4565b610d8e565b60405161048791906122f8565b60405180910390f35b34801561049c57600080fd5b506104a5610e15565b6040516104b291906122f8565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd919061239d565b610e1b565b005b3480156104f057600080fd5b5061050b60048036038101906105069190612434565b610f12565b005b60606003805461051c90612490565b80601f016020809104026020016040519081016040528092919081815260200182805461054890612490565b80156105955780601f1061056a57610100808354040283529160200191610595565b820191906000526020600020905b81548152906001019060200180831161057857829003601f168201915b5050505050905090565b6000806105aa61107a565b90506105b7818585611082565b600191505092915050565b6000600254905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610634573d6000803e3d6000fd5b50565b60095481565b60008061064861107a565b905061065585828561124b565b6106608585856112d7565b60019150509392505050565b60006012905090565b60008061068061107a565b9050610714818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461070f91906124f0565b611082565b600191505092915050565b61072761107a565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ad90612596565b60405180910390fd5b6000600881905550565b600a60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61082361107a565b73ffffffffffffffffffffffffffffffffffffffff166108416108a3565b73ffffffffffffffffffffffffffffffffffffffff1614610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90612602565b60405180910390fd5b6108a160006118a9565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108dc90612490565b80601f016020809104026020016040519081016040528092919081815260200182805461090890612490565b80156109555780601f1061092a57610100808354040283529160200191610955565b820191906000526020600020905b81548152906001019060200180831161093857829003601f168201915b5050505050905090565b60008061096a61107a565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2790612694565b60405180910390fd5b610a3d8286868403611082565b60019250505092915050565b600080610a5461107a565b9050610a618185856112d7565b600191505092915050565b610a7461107a565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90612596565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b610b2861107a565b73ffffffffffffffffffffffffffffffffffffffff16610b466108a3565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390612602565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d91906126c9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cda91906126c9565b6040518363ffffffff1660e01b8152600401610cf79291906126f6565b6020604051808303816000875af1158015610d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3a91906126c9565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d8c610d86306107d3565b4761196f565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b610e2361107a565b73ffffffffffffffffffffffffffffffffffffffff16610e416108a3565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90612602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90612791565b60405180910390fd5b610f0f816118a9565b50565b610f1a61107a565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090612596565b60405180910390fd5b620186a06001610fb76105c2565b610fc191906127b1565b610fcb9190612822565b81101561100d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611004906128c5565b60405180910390fd5b6103e8600561101a6105c2565b61102491906127b1565b61102e9190612822565b811115611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790612957565b60405180910390fd5b8060098190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e8906129e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790612a7b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161123e91906122f8565b60405180910390a3505050565b60006112578484610d8e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112d157818110156112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90612ae7565b60405180910390fd5b6112d08484848403611082565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90612b79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90612c0b565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806114ad5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600083036114ca576114c385856000611a6f565b50506118a4565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036115675780611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790612c9d565b60405180910390fd5b50506118a4565b60006008541180156115765750815b80156115b557506115856108a3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156115ed57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561164b57600854836115ff866107d3565b61160991906124f0565b111561164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190612d55565b60405180910390fd5b5b600a60009054906101000a900460ff1661189657600061166a306107d3565b9050600060095482101590508080156116905750600a60019054906101000a900460ff16155b801561169a575083155b80156116f05750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117465750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561178a576001600a60016101000a81548160ff02191690831515021790555061176e611cee565b6000600a60016101000a81548160ff0219169083151502179055505b6000600a60019054906101000a900460ff1615905083806118035750841580156118025750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b5b1561180d57600090505b801561189257600061183d606461182f600b548a611e9990919063ffffffff16565b611eaf90919063ffffffff16565b90506118676064611859600b548a611e9990919063ffffffff16565b611eaf90919063ffffffff16565b600c81905550600081111561188257611881893083611a6f565b5b808761188e9190612d75565b9650505b5050505b6118a1858585611a6f565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61199c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611082565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611a2596959493929190612dee565b60606040518083038185885af1158015611a43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a689190612e64565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad590612f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490612fbb565b60405180910390fd5b611b58838383611ec5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd59061304d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c7191906124f0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cd591906122f8565b60405180910390a3611ce8848484611eca565b50505050565b6000611cf9306107d3565b90506000611d136003600c54611eaf90919063ffffffff16565b90506000611d2c82600c54611ecf90919063ffffffff16565b90506000831480611d3f57506000600c54145b15611d4c57505050611e97565b600954831115611d5c5760095492505b60006002600c548486611d6f91906127b1565b611d799190612822565b611d839190612822565b90506000611d9a8286611ecf90919063ffffffff16565b90506000479050611daa82611ee5565b6000611dbf8247611ecf90919063ffffffff16565b90506000611dea600c54611ddc8885611e9990919063ffffffff16565b611eaf90919063ffffffff16565b905060008183611dfa9190612d75565b90506000600c81905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611e6c573d6000803e3d6000fd5b50600086118015611e7d5750600081115b15611e8d57611e8c868261196f565b5b5050505050505050505b565b60008183611ea791906127b1565b905092915050565b60008183611ebd9190612822565b905092915050565b505050565b505050565b60008183611edd9190612d75565b905092915050565b6000600267ffffffffffffffff811115611f0257611f0161306d565b5b604051908082528060200260200182016040528015611f305781602001602082028036833780820191505090505b5090503081600081518110611f4857611f4761309c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201391906126c9565b816001815181106120275761202661309c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061208e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611082565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016120f2959493929190613189565b600060405180830381600087803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612162578082015181840152602081019050612147565b60008484015250505050565b6000601f19601f8301169050919050565b600061218a82612128565b6121948185612133565b93506121a4818560208601612144565b6121ad8161216e565b840191505092915050565b600060208201905081810360008301526121d2818461217f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061220a826121df565b9050919050565b61221a816121ff565b811461222557600080fd5b50565b60008135905061223781612211565b92915050565b6000819050919050565b6122508161223d565b811461225b57600080fd5b50565b60008135905061226d81612247565b92915050565b6000806040838503121561228a576122896121da565b5b600061229885828601612228565b92505060206122a98582860161225e565b9150509250929050565b60008115159050919050565b6122c8816122b3565b82525050565b60006020820190506122e360008301846122bf565b92915050565b6122f28161223d565b82525050565b600060208201905061230d60008301846122e9565b92915050565b60008060006060848603121561232c5761232b6121da565b5b600061233a86828701612228565b935050602061234b86828701612228565b925050604061235c8682870161225e565b9150509250925092565b600060ff82169050919050565b61237c81612366565b82525050565b60006020820190506123976000830184612373565b92915050565b6000602082840312156123b3576123b26121da565b5b60006123c184828501612228565b91505092915050565b6123d3816121ff565b82525050565b60006020820190506123ee60008301846123ca565b92915050565b6000806040838503121561240b5761240a6121da565b5b600061241985828601612228565b925050602061242a85828601612228565b9150509250929050565b60006020828403121561244a576124496121da565b5b60006124588482850161225e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124a857607f821691505b6020821081036124bb576124ba612461565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124fb8261223d565b91506125068361223d565b925082820190508082111561251e5761251d6124c1565b5b92915050565b7f43616c6c6572206973206e6f7420746865205f6665654164647220616464726560008201527f73732e0000000000000000000000000000000000000000000000000000000000602082015250565b6000612580602383612133565b915061258b82612524565b604082019050919050565b600060208201905081810360008301526125af81612573565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125ec602083612133565b91506125f7826125b6565b602082019050919050565b6000602082019050818103600083015261261b816125df565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061267e602583612133565b915061268982612622565b604082019050919050565b600060208201905081810360008301526126ad81612671565b9050919050565b6000815190506126c381612211565b92915050565b6000602082840312156126df576126de6121da565b5b60006126ed848285016126b4565b91505092915050565b600060408201905061270b60008301856123ca565b61271860208301846123ca565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061277b602683612133565b91506127868261271f565b604082019050919050565b600060208201905081810360008301526127aa8161276e565b9050919050565b60006127bc8261223d565b91506127c78361223d565b92508282026127d58161223d565b915082820484148315176127ec576127eb6124c1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061282d8261223d565b91506128388361223d565b925082612848576128476127f3565b5b828204905092915050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b60006128af603883612133565b91506128ba82612853565b604082019050919050565b600060208201905081810360008301526128de816128a2565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b6000612941603783612133565b915061294c826128e5565b604082019050919050565b6000602082019050818103600083015261297081612934565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129d3602483612133565b91506129de82612977565b604082019050919050565b60006020820190508181036000830152612a02816129c6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a65602283612133565b9150612a7082612a09565b604082019050919050565b60006020820190508181036000830152612a9481612a58565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ad1601d83612133565b9150612adc82612a9b565b602082019050919050565b60006020820190508181036000830152612b0081612ac4565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e60008201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b6000612b63602b83612133565b9150612b6e82612b07565b604082019050919050565b60006020820190508181036000830152612b9281612b56565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f7460008201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b6000612bf5602983612133565b9150612c0082612b99565b604082019050919050565b60006020820190508181036000830152612c2481612be8565b9050919050565b7f506c65617365207761697420666f7220746865204c50207061697220746f206260008201527f6520637265617465642e00000000000000000000000000000000000000000000602082015250565b6000612c87602a83612133565b9150612c9282612c2b565b604082019050919050565b60006020820190508181036000830152612cb681612c7a565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f60008201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b6000612d3f604483612133565b9150612d4a82612cbd565b606082019050919050565b60006020820190508181036000830152612d6e81612d32565b9050919050565b6000612d808261223d565b9150612d8b8361223d565b9250828203905081811115612da357612da26124c1565b5b92915050565b6000819050919050565b6000819050919050565b6000612dd8612dd3612dce84612da9565b612db3565b61223d565b9050919050565b612de881612dbd565b82525050565b600060c082019050612e0360008301896123ca565b612e1060208301886122e9565b612e1d6040830187612ddf565b612e2a6060830186612ddf565b612e3760808301856123ca565b612e4460a08301846122e9565b979650505050505050565b600081519050612e5e81612247565b92915050565b600080600060608486031215612e7d57612e7c6121da565b5b6000612e8b86828701612e4f565b9350506020612e9c86828701612e4f565b9250506040612ead86828701612e4f565b9150509250925092565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f13602583612133565b9150612f1e82612eb7565b604082019050919050565b60006020820190508181036000830152612f4281612f06565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612fa5602383612133565b9150612fb082612f49565b604082019050919050565b60006020820190508181036000830152612fd481612f98565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613037602683612133565b915061304282612fdb565b604082019050919050565b600060208201905081810360008301526130668161302a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613100816121ff565b82525050565b600061311283836130f7565b60208301905092915050565b6000602082019050919050565b6000613136826130cb565b61314081856130d6565b935061314b836130e7565b8060005b8381101561317c5781516131638882613106565b975061316e8361311e565b92505060018101905061314f565b5085935050505092915050565b600060a08201905061319e60008301886122e9565b6131ab6020830187612ddf565b81810360408301526131bd818661312b565b90506131cc60608301856123ca565b6131d960808301846122e9565b969550505050505056fea2646970667358221220568162d431511408c53673e21c7fba76676afed45dac93b65b1a0c0f922ef2d464736f6c63430008130033