More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 192 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18198195 | 342 days ago | IN | 0 ETH | 0.00037758 | ||||
Approve | 17698804 | 412 days ago | IN | 0 ETH | 0.0010445 | ||||
Approve | 17679311 | 415 days ago | IN | 0 ETH | 0.00232244 | ||||
Approve | 17582434 | 429 days ago | IN | 0 ETH | 0.00073873 | ||||
Approve | 17569815 | 430 days ago | IN | 0 ETH | 0.0005053 | ||||
Approve | 17569390 | 430 days ago | IN | 0 ETH | 0.00043798 | ||||
Transfer | 17569382 | 430 days ago | IN | 0 ETH | 0.00096148 | ||||
Transfer | 17568659 | 431 days ago | IN | 0 ETH | 0.00125284 | ||||
Approve | 17564582 | 431 days ago | IN | 0 ETH | 0.00117541 | ||||
Approve | 17564561 | 431 days ago | IN | 0 ETH | 0.0008928 | ||||
Trading Status | 17564560 | 431 days ago | IN | 0 ETH | 0.00050779 | ||||
Set Trans Fee | 17564541 | 431 days ago | IN | 0 ETH | 0.00054123 | ||||
Set Buy Fees | 17564523 | 431 days ago | IN | 0 ETH | 0.00062791 | ||||
Transfer | 17564431 | 431 days ago | IN | 0 ETH | 0.00100283 | ||||
Transfer | 17564422 | 431 days ago | IN | 0 ETH | 0.0007281 | ||||
Approve | 17563974 | 431 days ago | IN | 0 ETH | 0.00063931 | ||||
Approve | 17563317 | 431 days ago | IN | 0 ETH | 0.00057052 | ||||
Approve | 17563107 | 431 days ago | IN | 0 ETH | 0.00066 | ||||
Approve | 17563070 | 431 days ago | IN | 0 ETH | 0.0006365 | ||||
Approve | 17563047 | 431 days ago | IN | 0 ETH | 0.00067081 | ||||
Approve | 17563045 | 431 days ago | IN | 0 ETH | 0.00079007 | ||||
Approve | 17563042 | 431 days ago | IN | 0 ETH | 0.00088564 | ||||
Approve | 17563042 | 431 days ago | IN | 0 ETH | 0.00075605 | ||||
Trading Status | 17563041 | 431 days ago | IN | 0 ETH | 0.00044513 | ||||
Approve | 17563041 | 431 days ago | IN | 0 ETH | 0.00098406 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17838496 | 393 days ago | 0.006 ETH | ||||
17838496 | 393 days ago | 0.012 ETH | ||||
17838496 | 393 days ago | 0.036 ETH | ||||
17838496 | 393 days ago | 0.06 ETH | ||||
17698805 | 412 days ago | 0.006 ETH | ||||
17698805 | 412 days ago | 0.012 ETH | ||||
17698805 | 412 days ago | 0.036 ETH | ||||
17698805 | 412 days ago | 0.06 ETH | ||||
17564582 | 431 days ago | 0.006 ETH | ||||
17564582 | 431 days ago | 0.012 ETH | ||||
17564582 | 431 days ago | 0.036 ETH | ||||
17564582 | 431 days ago | 0.06 ETH | ||||
17563041 | 431 days ago | 0.00720181 ETH | ||||
17563041 | 431 days ago | 0.02160543 ETH | ||||
17563041 | 431 days ago | 0.03600905 ETH | ||||
17563041 | 431 days ago | 0.02160543 ETH | ||||
17563041 | 431 days ago | 0.03600905 ETH | ||||
17563041 | 431 days ago | 0.02160543 ETH | ||||
17563041 | 431 days ago | 0.03600905 ETH | ||||
17563041 | 431 days ago | 0.02160543 ETH | ||||
17563041 | 431 days ago | 0.03600905 ETH | ||||
17563041 | 431 days ago | 0.02160543 ETH | ||||
17563041 | 431 days ago | 0.03600905 ETH | ||||
17563041 | 431 days ago | 0.02160543 ETH | ||||
17563041 | 431 days ago | 0.03600905 ETH |
Loading...
Loading
Contract Name:
drmanContract
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-26 */ /** *Submitted for verification at Etherscan.io on 2023-01-11 */ /** */ // SPDX-License-Identifier: MIT /** */ pragma solidity ^0.8.17; /** * Abstract contract to easily change things when deploying new projects. Saves me having to find it everywhere. */ abstract contract Project { address public marketingWallet = 0xee9C573bd828c142061317ED206add29b48F2a53; address public devWallet = 0x96e26Bd22998c4981A9C2002BD43cCea4496c86A; string constant _name = "Dr Manhattan"; string constant _symbol = "DRMAN"; uint8 constant _decimals = 18; uint256 _totalSupply = 420 * 10**12 * 10**_decimals; uint256 public _maxTxAmount = (_totalSupply * 5) / 1000; // (_totalSupply * 10) / 1000 [this equals 1%] uint256 public _maxWalletToken = (_totalSupply * 5) / 1000; // uint256 public buyFee = 5; uint256 public buyTotalFee = buyFee; uint256 public swapLpFee = 1; uint256 public swapMarketing = 3; uint256 public swapTreasuryFee = 1; uint256 public swapTotalFee = swapMarketing + swapLpFee + swapTreasuryFee; uint256 public transFee = 5; uint256 public feeDenominator = 100; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface DRMAN { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /** * MainContract */ contract drmanContract is Project, DRMAN, Ownable { using SafeMath for uint256; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isFeeExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) isMaxExempt; mapping (address => bool) isTimelockExempt; address public autoLiquidityReceiver; uint256 targetLiquidity = 20; uint256 targetLiquidityDenominator = 100; IUniswapV2Router02 public immutable contractRouter; address public immutable uniswapV2Pair; bool public tradingOpen = false; bool public buyCooldownEnabled = true; uint8 public cooldownTimerInterval = 10; mapping (address => uint) private cooldownTimer; bool public swapEnabled = true; uint256 public swapThreshold = _totalSupply * 30 / 10000; uint256 public swapAmount = _totalSupply * 30 / 10000; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor () { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables contractRouter = _uniswapV2Router; _allowances[address(this)][address(contractRouter)] = type(uint256).max; isFeeExempt[msg.sender] = true; isTxLimitExempt[msg.sender] = true; isMaxExempt[msg.sender] = true; isTimelockExempt[msg.sender] = true; isTimelockExempt[DEAD] = true; isTimelockExempt[address(this)] = true; isFeeExempt[marketingWallet] = true; isMaxExempt[marketingWallet] = true; isTxLimitExempt[marketingWallet] = true; autoLiquidityReceiver = msg.sender; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner(); } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint256).max){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() { maxWallPercent_base1000=5; _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000; } function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() { maxTXPercentage_base1000=5; _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000; } function setTxLimit(uint256 amount) external onlyOwner() { _maxTxAmount = amount; } // *** // Functions for the burning mechanism // *** /** * Burn an amount of tokens for the current wallet (if they have enough) */ function burnTokens(uint256 amount) external { // does this user have enough tokens to perform the burn if(_balances[msg.sender] > amount) { _basicTransfer(msg.sender, DEAD, amount); } } // *** // End functions for the burning mechanism // *** function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } if(sender != owner() && recipient != owner()){ require(tradingOpen,"Trading not open yet"); } bool inSell = (recipient == uniswapV2Pair); bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair); if (recipient != address(this) && recipient != address(DEAD) && recipient != uniswapV2Pair && recipient != marketingWallet && recipient != devWallet && recipient != autoLiquidityReceiver ){ uint256 heldTokens = balanceOf(recipient); if(!isMaxExempt[recipient]) { require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much."); } } if (sender == uniswapV2Pair && buyCooldownEnabled && !isTimelockExempt[recipient] ){ require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys"); cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval; } // Checks max transaction limit // but no point if the recipient is exempt // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount if(!isTxLimitExempt[recipient]) { checkTxLimit(sender, amount); } //Exchange tokens _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = amount; // Do NOT take a fee if sender AND recipient are NOT the contract // i.e. you are doing a transfer if(inTransfer) { if(transFee > 0) { amountReceived = takeTransferFee(sender, amount); } } else { amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount; if(shouldSwapBack()){ swapBack(); } } _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function checkTxLimit(address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } // *** // Handle Fees // *** function takeTransferFee(address sender, uint256 amount) internal returns (uint256) { uint256 feeToTake = transFee; uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) { uint256 feeToTake = isSell ? swapTotalFee : buyTotalFee; uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } // *** // End Handle Fees // *** function shouldSwapBack() internal view returns (bool) { return msg.sender != uniswapV2Pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function clearStuckBalance(uint256 amountPercentage) external onlyOwner() { uint256 amountETH = address(this).balance; payable(marketingWallet).transfer(amountETH * amountPercentage / 100); } function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() { uint256 amountETH = address(this).balance; payable(msg.sender).transfer(amountETH * amountPercentage / 100); } // switch Trading function tradingStatus(bool _status) public onlyOwner { tradingOpen = _status; } // enable cooldown between trades function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner { buyCooldownEnabled = _status; cooldownTimerInterval = _interval; } function swapBack() internal swapping { uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee; uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2); uint256 amountToSwap = swapAmount.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = contractRouter.WETH(); uint256 balanceBefore = address(this).balance; contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance.sub(balanceBefore); uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2); uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee); uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee); (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}(""); (tmpSuccess,) = payable(devWallet).call{value: amountETHTreasury, gas: 30000}(""); // Supress warning msg tmpSuccess = false; if(amountToLiquify > 0){ contractRouter.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountETHLiquidity, amountToLiquify); } } // *** // Various exempt functions // *** function setIsFeeExempt(address holder, bool exempt) external onlyOwner() { isFeeExempt[holder] = exempt; } function setIsMaxExempt(address holder, bool exempt) external onlyOwner() { isMaxExempt[holder] = exempt; } function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() { isTxLimitExempt[holder] = exempt; } function setIsTimelockExempt(address holder, bool exempt) external onlyOwner() { isTimelockExempt[holder] = exempt; } // *** // End various exempt functions // *** // *** // Start fee things // *** function setTransFee(uint256 fee) external onlyOwner() { transFee = fee; } function setSwapFees(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() { swapLpFee = _newSwapLpFee; swapMarketing = _newSwapMarketingFee; swapTreasuryFee = _newSwapTreasuryFee; swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee); feeDenominator = _feeDenominator; require(swapTotalFee < 90, "Fees cannot be that high"); } function setBuyFees(uint256 buyTax) external onlyOwner() { buyTotalFee = buyTax; } // *** // end fee stuff§2e sw. // *** function setTreasuryFeeReceiver(address _newWallet) external onlyOwner() { isFeeExempt[devWallet] = false; isFeeExempt[_newWallet] = true; devWallet = _newWallet; } function setMarketingWallet(address _newWallet) external onlyOwner() { isFeeExempt[marketingWallet] = false; isFeeExempt[_newWallet] = true; isMaxExempt[_newWallet] = true; marketingWallet = _newWallet; } function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newdevWallet ) external onlyOwner() { isFeeExempt[devWallet] = false; isFeeExempt[_newdevWallet] = true; isFeeExempt[marketingWallet] = false; isFeeExempt[_newMarketingWallet] = true; isMaxExempt[_newMarketingWallet] = true; autoLiquidityReceiver = _autoLiquidityReceiver; marketingWallet = _newMarketingWallet; devWallet = _newdevWallet; } // *** // Swap settings // *** function setSwapThresholdAmount(uint256 _amount) external onlyOwner() { swapThreshold = _amount; } function setSwapAmount(uint256 _amount) external onlyOwner() { if(_amount > swapThreshold) { swapAmount = swapThreshold; } else { swapAmount = _amount; } } // *** // End Swap settings // *** function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply()); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } /* Airdrop */ function airDropCustom(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner { require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses"); require(addresses.length == tokens.length,"Mismatch between Address and token count"); uint256 SCCC = 0; for(uint i=0; i < addresses.length; i++){ SCCC = SCCC + tokens[i]; } require(balanceOf(from) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _basicTransfer(from,addresses[i],tokens[i]); } } function airDropFixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner { require(addresses.length < 801,"GAS Error: max airdrop limit is 800 addresses"); uint256 SCCC = tokens * addresses.length; require(balanceOf(from) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _basicTransfer(from,addresses[i],tokens); } } event AutoLiquify(uint256 amountETH, uint256 amountBOG); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airDropFixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newdevWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setTreasuryFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405273ee9c573bd828c142061317ed206add29b48f2a536000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507396e26bd22998c4981a9c2002bd43ccea4496c86a600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a620000bd919062000c21565b66017dfcdece4000620000d1919062000c72565b6002556103e86005600254620000e8919062000c72565b620000f4919062000cec565b6003556103e860056002546200010b919062000c72565b62000117919062000cec565b6004556005805560055460065560016007556003600855600160095560095460075460085462000148919062000d24565b62000154919062000d24565b600a556005600b556064600c5561dead601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060146019556064601a556000601b60006101000a81548160ff0219169083151502179055506001601b60016101000a81548160ff021916908315150217905550600a601b60026101000a81548160ff021916908360ff1602179055506001601d60006101000a81548160ff021916908315150217905550612710601e60025462000271919062000c72565b6200027d919062000cec565b601e55612710601e60025462000294919062000c72565b620002a0919062000cec565b601f55348015620002b057600080fd5b506000620002c362000a7f60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ed919062000dc9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047b919062000dc9565b6040518363ffffffff1660e01b81526004016200049a92919062000e0c565b6020604051808303816000875af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e0919062000dc9565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60025460405162000a70919062000e4a565b60405180910390a35062000e67565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b155780860481111562000aed5762000aec62000a87565b5b600185161562000afd5780820291505b808102905062000b0d8562000ab6565b945062000acd565b94509492505050565b60008262000b30576001905062000c03565b8162000b40576000905062000c03565b816001811462000b59576002811462000b645762000b9a565b600191505062000c03565b60ff84111562000b795762000b7862000a87565b5b8360020a91508482111562000b935762000b9262000a87565b5b5062000c03565b5060208310610133831016604e8410600b841016171562000bd45782820a90508381111562000bce5762000bcd62000a87565b5b62000c03565b62000be3848484600162000ac3565b9250905081840481111562000bfd5762000bfc62000a87565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c2e8262000c0a565b915062000c3b8362000c14565b925062000c6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b1e565b905092915050565b600062000c7f8262000c0a565b915062000c8c8362000c0a565b925082820262000c9c8162000c0a565b9150828204841483151762000cb65762000cb562000a87565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cf98262000c0a565b915062000d068362000c0a565b92508262000d195762000d1862000cbd565b5b828204905092915050565b600062000d318262000c0a565b915062000d3e8362000c0a565b925082820190508082111562000d595762000d5862000a87565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d918262000d64565b9050919050565b62000da38162000d84565b811462000daf57600080fd5b50565b60008151905062000dc38162000d98565b92915050565b60006020828403121562000de25762000de162000d5f565b5b600062000df28482850162000db2565b91505092915050565b62000e068162000d84565b82525050565b600060408201905062000e23600083018562000dfb565b62000e32602083018462000dfb565b9392505050565b62000e448162000c0a565b82525050565b600060208201905062000e61600083018462000e39565b92915050565b60805160a051615ebc62000ed360003960008181611bc201528181612a310152818161374f015281816137a2015281816137f9015281816138dd01528181613af001526145280152600081816120b40152818161472d0152818161480f0152614aac0152615ebc6000f3fe6080604052600436106103c75760003560e01c80636d1b229d116101f2578063b6c523241161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e21578063f53fd58414610e4a578063f84ba65d14610e75578063ffb54a9914610e9e576103ce565b8063dd62ed3e14610d67578063e53c30b014610da4578063e632313c14610dcf578063ee9ef29e14610df8576103ce565b8063d7c01032116100dc578063d7c0103214610cc3578063dcf7aef314610cec578063dd395c6314610d15578063dd46706414610d3e576103ce565b8063b6c5232414610c07578063bd9ab53714610c32578063ca33e64c14610c5b578063d51ed1c814610c86576103ce565b80637d1db4a5116101855780638ea5220f116101545780638ea5220f14610b5d57806395d89b4114610b88578063a69df4b514610bb3578063a9059cbb14610bca576103ce565b80637d1db4a514610ab35780638038cbd314610ade578063893d20e814610b075780638da5cb5b14610b32576103ce565b8063715018a6116101c1578063715018a614610a1b578063722b62ad14610a3257806375f0a87414610a5d57806378109e5414610a88576103ce565b80636d1b229d146109615780636ddd17131461098a57806370a08231146109b5578063713e4ae5146109f2576103ce565b80632d594567116102e257806349bd5a5e116102755780635d098b38116102445780635d098b38146108b9578063617fe0ed146108e2578063658d4b7f1461090d57806367ac77b414610936576103ce565b806349bd5a5e146107ff57806350db71fb1461082a578063571ac8b0146108535780635c85974f14610890576103ce565b8063442a583d116102b1578063442a583d1461075757806344a33fd21461078057806346e421a2146107a957806347062402146107d4576103ce565b80632d594567146106ad5780632e8fa821146106d6578063313ce567146107015780633705b3921461072c576103ce565b806318160ddd1161035a578063201e799111610329578063201e7991146105f357806323b872dd1461061c57806329e04b4a146106595780632b112e4914610682576103ce565b806318160ddd1461054b5780631ad017b9146105765780631da1db5e1461059f5780631e25dc54146105c8576103ce565b8063095ea7b311610396578063095ea7b31461047d5780630d295980146104ba5780631161ae39146104e3578063180b0d7e14610520576103ce565b8063026f7d15146103d35780630445b667146103fe57806306fdde031461042957806309302dc614610454576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610ec9565b6040516103f59190614bf2565b60405180910390f35b34801561040a57600080fd5b50610413610ecf565b6040516104209190614bf2565b60405180910390f35b34801561043557600080fd5b5061043e610ed5565b60405161044b9190614c9d565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190614cf5565b610f12565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614d80565b610fd1565b6040516104b19190614ddb565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190614e22565b6110c3565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190614e4f565b611177565b6040516105179190614ddb565b60405180910390f35b34801561052c57600080fd5b5061053561118c565b6040516105429190614bf2565b60405180910390f35b34801561055757600080fd5b50610560611192565b60405161056d9190614bf2565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190614e8f565b61119c565b005b3480156105ab57600080fd5b506105c660048036038101906105c19190614cf5565b611349565b005b3480156105d457600080fd5b506105dd611467565b6040516105ea9190614bf2565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190614e4f565b61146d565b005b34801561062857600080fd5b50610643600480360381019061063e9190614ebc565b611516565b6040516106509190614ddb565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190614cf5565b611716565b005b34801561068e57600080fd5b506106976117b7565b6040516106a49190614bf2565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614f48565b611839565b005b3480156106e257600080fd5b506106eb611909565b6040516106f89190614bf2565b60405180910390f35b34801561070d57600080fd5b5061071661190f565b6040516107239190614f97565b60405180910390f35b34801561073857600080fd5b50610741611918565b60405161074e9190614bf2565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190615017565b61191e565b005b34801561078c57600080fd5b506107a760048036038101906107a29190614cf5565b611ab6565b005b3480156107b557600080fd5b506107be611bb4565b6040516107cb9190614bf2565b60405180910390f35b3480156107e057600080fd5b506107e9611bba565b6040516107f69190614bf2565b60405180910390f35b34801561080b57600080fd5b50610814611bc0565b604051610821919061509a565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906150b5565b611be4565b005b34801561085f57600080fd5b5061087a60048036038101906108759190614e8f565b611cd6565b6040516108879190614ddb565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190614cf5565b611d09565b005b3480156108c557600080fd5b506108e060048036038101906108db9190614e8f565b611daa565b005b3480156108ee57600080fd5b506108f7611fad565b6040516109049190614ddb565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f91906150b5565b611fc0565b005b34801561094257600080fd5b5061094b6120b2565b6040516109589190615154565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614cf5565b6120d6565b005b34801561099657600080fd5b5061099f61214f565b6040516109ac9190614ddb565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190614e8f565b612162565b6040516109e99190614bf2565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a1491906151c5565b6121ab565b005b348015610a2757600080fd5b50610a306123dc565b005b348015610a3e57600080fd5b50610a47612534565b604051610a549190614f97565b60405180910390f35b348015610a6957600080fd5b50610a72612547565b604051610a7f919061509a565b60405180910390f35b348015610a9457600080fd5b50610a9d61256b565b604051610aaa9190614bf2565b60405180910390f35b348015610abf57600080fd5b50610ac8612571565b604051610ad59190614bf2565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b00919061525a565b612577565b005b348015610b1357600080fd5b50610b1c6126a0565b604051610b29919061509a565b60405180910390f35b348015610b3e57600080fd5b50610b476126af565b604051610b54919061509a565b60405180910390f35b348015610b6957600080fd5b50610b726126d9565b604051610b7f919061509a565b60405180910390f35b348015610b9457600080fd5b50610b9d6126ff565b604051610baa9190614c9d565b60405180910390f35b348015610bbf57600080fd5b50610bc861273c565b005b348015610bd657600080fd5b50610bf16004803603810190610bec9190614d80565b612913565b604051610bfe9190614ddb565b60405180910390f35b348015610c1357600080fd5b50610c1c612928565b604051610c299190614bf2565b60405180910390f35b348015610c3e57600080fd5b50610c596004803603810190610c549190614cf5565b612932565b005b348015610c6757600080fd5b50610c706129f1565b604051610c7d919061509a565b60405180910390f35b348015610c9257600080fd5b50610cad6004803603810190610ca89190614cf5565b612a17565b604051610cba9190614bf2565b60405180910390f35b348015610ccf57600080fd5b50610cea6004803603810190610ce591906152c1565b612a87565b005b348015610cf857600080fd5b50610d136004803603810190610d0e9190614cf5565b612de0565b005b348015610d2157600080fd5b50610d3c6004803603810190610d3791906150b5565b612e81565b005b348015610d4a57600080fd5b50610d656004803603810190610d609190614cf5565b612f73565b005b348015610d7357600080fd5b50610d8e6004803603810190610d899190615314565b613141565b604051610d9b9190614bf2565b60405180910390f35b348015610db057600080fd5b50610db96131c8565b604051610dc69190614bf2565b60405180910390f35b348015610ddb57600080fd5b50610df66004803603810190610df19190614cf5565b6131ce565b005b348015610e0457600080fd5b50610e1f6004803603810190610e1a9190614cf5565b613288565b005b348015610e2d57600080fd5b50610e486004803603810190610e439190614e8f565b613329565b005b348015610e5657600080fd5b50610e5f6134ef565b604051610e6c9190614bf2565b60405180910390f35b348015610e8157600080fd5b50610e9c6004803603810190610e9791906150b5565b6134f5565b005b348015610eaa57600080fd5b50610eb36135e7565b604051610ec09190614ddb565b60405180910390f35b60085481565b601e5481565b60606040518060400160405280600c81526020017f4472204d616e68617474616e0000000000000000000000000000000000000000815250905090565b610f1a6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa0906153a0565b60405180910390fd5b600590506103e881600254610fbe91906153ef565b610fc89190615460565b60048190555050565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110b19190614bf2565b60405180910390a36001905092915050565b6110cb6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611151906153a0565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b60008261118383612a17565b11905092915050565b600c5481565b6000600254905090565b6111a46135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a906153a0565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113516135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d7906153a0565b60405180910390fd5b600047905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064848461142d91906153ef565b6114379190615460565b9081150290604051600060405180830381858888f19350505050158015611462573d6000803e3d6000fd5b505050565b600b5481565b6114756135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb906153a0565b60405180910390fd5b8160198190555080601a819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461170257611681826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136029092919063ffffffff16565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61170d848484613657565b90509392505050565b61171e6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906153a0565b60405180910390fd5b80601e8190555050565b60006118346117e7601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612162565b611826611815601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612162565b600254613f2490919063ffffffff16565b613f2490919063ffffffff16565b905090565b6118416135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c7906153a0565b60405180910390fd5b81601b60016101000a81548160ff02191690831515021790555080601b60026101000a81548160ff021916908360ff1602179055505050565b601f5481565b60006012905090565b60065481565b6119266135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac906153a0565b60405180910390fd5b61032183839050106119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390615503565b60405180910390fd5b60008383905082611a0d91906153ef565b905080611a1986612162565b1015611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a519061556f565b60405180910390fd5b60005b84849050811015611aae57611a9a86868684818110611a7f57611a7e61558f565b5b9050602002016020810190611a949190614e8f565b85613f3a565b508080611aa6906155be565b915050611a5d565b505050505050565b611abe6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b44906153a0565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484611b7a91906153ef565b611b849190615460565b9081150290604051600060405180830381858888f19350505050158015611baf573d6000803e3d6000fd5b505050565b60075481565b60055481565b7f000000000000000000000000000000000000000000000000000000000000000081565b611bec6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c72906153a0565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611d02827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fd1565b9050919050565b611d116135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906153a0565b60405180910390fd5b8060038190555050565b611db26135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e38906153a0565b60405180910390fd5b6000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60019054906101000a900460ff1681565b611fc86135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e906153a0565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561214c5761214a33601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613f3a565b505b50565b601d60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121b36135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612242576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612239906153a0565b60405180910390fd5b6101f58484905010612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090615678565b60405180910390fd5b8181905084849050146122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c89061570a565b60405180910390fd5b6000805b8585905081101561231a578383828181106122f3576122f261558f565b5b9050602002013582612305919061572a565b91508080612312906155be565b9150506122d5565b508061232587612162565b1015612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d9061556f565b60405180910390fd5b60005b858590508110156123d3576123bf8787878481811061238b5761238a61558f565b5b90506020020160208101906123a09190614e8f565b8686858181106123b3576123b261558f565b5b90506020020135613f3a565b5080806123cb906155be565b915050612369565b50505050505050565b6123e46135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a906153a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b61257f6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461260e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612605906153a0565b60405180910390fd5b8360078190555082600881905550816009819055506126488261263a858761410d90919063ffffffff16565b61410d90919063ffffffff16565b600a8190555080600c81905550605a600a541061269a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612691906157aa565b60405180910390fd5b50505050565b60006126aa6126af565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600581526020017f44524d414e000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c39061583c565b60405180910390fd5b600f544211612810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612807906158a8565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612920338484613657565b905092915050565b6000600f54905090565b61293a6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c0906153a0565b60405180910390fd5b600590506103e8816002546129de91906153ef565b6129e89190615460565b60038190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612a80612a246117b7565b612a72612a636002612a557f0000000000000000000000000000000000000000000000000000000000000000612162565b61412390919063ffffffff16565b8561412390919063ffffffff16565b61413990919063ffffffff16565b9050919050565b612a8f6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b15906153a0565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612de86135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e906153a0565b60405180910390fd5b8060068190555050565b612e896135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f906153a0565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612f7b6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461300a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613001906153a0565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426130bb919061572a565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6131d66135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325c906153a0565b60405180910390fd5b601e5481111561327d57601e54601f81905550613285565b80601f819055505b50565b6132906135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461331f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613316906153a0565b60405180910390fd5b80600b8190555050565b6133316135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b7906153a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361342f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134269061593a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6134fd6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461358c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613583906153a0565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b600033905090565b600083831115829061364a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136419190614c9d565b60405180910390fd5b5082840390509392505050565b6000602060009054906101000a900460ff161561368057613679848484613f3a565b9050613f1d565b6136886126af565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156136f657506136c66126af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561374b57601b60009054906101000a900460ff1661374a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613741906159a6565b60405180910390fd5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561384857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156138d45750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561392c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613984575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156139de5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613a385750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613aee576000613a4886612162565b9050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613aec576004548582613aaa919061572a565b1115613aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae290615a38565b60405180910390fd5b5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015613b555750601b60019054906101000a900460ff165b8015613bab5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c935742601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2890615aca565b60405180910390fd5b601b60029054906101000a900460ff1660ff1642613c4f919061572a565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613cef57613cee868561414f565b5b613d78846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136029092919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008490508115613de3576000600b541115613dde57613ddb87866141ec565b90505b613e1b565b613dec87614355565b613df65784613e02565b613e018786856143ac565b5b9050613e0c614524565b15613e1a57613e196145f9565b5b5b613e6d81601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410d90919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f0d9190614bf2565b60405180910390a3600193505050505b9392505050565b60008183613f329190615aea565b905092915050565b6000613fc5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136029092919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061405a82601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410d90919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516140fa9190614bf2565b60405180910390a3600190509392505050565b6000818361411b919061572a565b905092915050565b6000818361413191906153ef565b905092915050565b600081836141479190615460565b905092915050565b600354811115806141a95750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6141e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141df90615b6a565b60405180910390fd5b5050565b600080600b549050600061423c6064600c5461420891906153ef565b61422e6064614220868961412390919063ffffffff16565b61412390919063ffffffff16565b61413990919063ffffffff16565b905061429081601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410d90919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143309190614bf2565b60405180910390a361434b8185613f2490919063ffffffff16565b9250505092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080826143bc576006546143c0565b600a545b9050600061440a6064600c546143d691906153ef565b6143fc60646143ee868a61412390919063ffffffff16565b61412390919063ffffffff16565b61413990919063ffffffff16565b905061445e81601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410d90919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144fe9190614bf2565b60405180910390a36145198186613f2490919063ffffffff16565b925050509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561458f5750602060009054906101000a900460ff16155b80156145a75750601d60009054906101000a900460ff165b80156145f45750601e54601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff0219169083151502179055506000614624601954601a54611177565b61463057600754614633565b60005b905060006146736002614665600a5461465786601f5461412390919063ffffffff16565b61413990919063ffffffff16565b61413990919063ffffffff16565b9050600061468c82601f54613f2490919063ffffffff16565b90506000600267ffffffffffffffff8111156146ab576146aa615b8a565b5b6040519080825280602002602001820160405280156146d95781602001602082028036833780820191505090505b50905030816000815181106146f1576146f061558f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147ba9190615bce565b816001815181106147ce576147cd61558f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040161486f959493929190615cf4565b600060405180830381600087803b15801561488957600080fd5b505af115801561489d573d6000803e3d6000fd5b5050505060006148b68247613f2490919063ffffffff16565b905060006148e26148d160028961413990919063ffffffff16565b600a54613f2490919063ffffffff16565b905060006149206002614912846149046007548861412390919063ffffffff16565b61413990919063ffffffff16565b61413990919063ffffffff16565b9050600061494b8361493d6008548761412390919063ffffffff16565b61413990919063ffffffff16565b90506000614976846149686009548861412390919063ffffffff16565b61413990919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516149c390615d7f565b600060405180830381858888f193505050503d8060008114614a01576040519150601f19603f3d011682016040523d82523d6000602084013e614a06565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051614a5490615d7f565b600060405180830381858888f193505050503d8060008114614a92576040519150601f19603f3d011682016040523d82523d6000602084013e614a97565b606091505b5050809150506000905060008a1115614bb1577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614b3196959493929190615d94565b60606040518083038185885af1158015614b4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614b749190615e0a565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051614ba8929190615e5d565b60405180910390a15b50505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000819050919050565b614bec81614bd9565b82525050565b6000602082019050614c076000830184614be3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614c47578082015181840152602081019050614c2c565b60008484015250505050565b6000601f19601f8301169050919050565b6000614c6f82614c0d565b614c798185614c18565b9350614c89818560208601614c29565b614c9281614c53565b840191505092915050565b60006020820190508181036000830152614cb78184614c64565b905092915050565b600080fd5b600080fd5b614cd281614bd9565b8114614cdd57600080fd5b50565b600081359050614cef81614cc9565b92915050565b600060208284031215614d0b57614d0a614cbf565b5b6000614d1984828501614ce0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614d4d82614d22565b9050919050565b614d5d81614d42565b8114614d6857600080fd5b50565b600081359050614d7a81614d54565b92915050565b60008060408385031215614d9757614d96614cbf565b5b6000614da585828601614d6b565b9250506020614db685828601614ce0565b9150509250929050565b60008115159050919050565b614dd581614dc0565b82525050565b6000602082019050614df06000830184614dcc565b92915050565b614dff81614dc0565b8114614e0a57600080fd5b50565b600081359050614e1c81614df6565b92915050565b600060208284031215614e3857614e37614cbf565b5b6000614e4684828501614e0d565b91505092915050565b60008060408385031215614e6657614e65614cbf565b5b6000614e7485828601614ce0565b9250506020614e8585828601614ce0565b9150509250929050565b600060208284031215614ea557614ea4614cbf565b5b6000614eb384828501614d6b565b91505092915050565b600080600060608486031215614ed557614ed4614cbf565b5b6000614ee386828701614d6b565b9350506020614ef486828701614d6b565b9250506040614f0586828701614ce0565b9150509250925092565b600060ff82169050919050565b614f2581614f0f565b8114614f3057600080fd5b50565b600081359050614f4281614f1c565b92915050565b60008060408385031215614f5f57614f5e614cbf565b5b6000614f6d85828601614e0d565b9250506020614f7e85828601614f33565b9150509250929050565b614f9181614f0f565b82525050565b6000602082019050614fac6000830184614f88565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614fd757614fd6614fb2565b5b8235905067ffffffffffffffff811115614ff457614ff3614fb7565b5b6020830191508360208202830111156150105761500f614fbc565b5b9250929050565b6000806000806060858703121561503157615030614cbf565b5b600061503f87828801614d6b565b945050602085013567ffffffffffffffff8111156150605761505f614cc4565b5b61506c87828801614fc1565b9350935050604061507f87828801614ce0565b91505092959194509250565b61509481614d42565b82525050565b60006020820190506150af600083018461508b565b92915050565b600080604083850312156150cc576150cb614cbf565b5b60006150da85828601614d6b565b92505060206150eb85828601614e0d565b9150509250929050565b6000819050919050565b600061511a61511561511084614d22565b6150f5565b614d22565b9050919050565b600061512c826150ff565b9050919050565b600061513e82615121565b9050919050565b61514e81615133565b82525050565b60006020820190506151696000830184615145565b92915050565b60008083601f84011261518557615184614fb2565b5b8235905067ffffffffffffffff8111156151a2576151a1614fb7565b5b6020830191508360208202830111156151be576151bd614fbc565b5b9250929050565b6000806000806000606086880312156151e1576151e0614cbf565b5b60006151ef88828901614d6b565b955050602086013567ffffffffffffffff8111156152105761520f614cc4565b5b61521c88828901614fc1565b9450945050604086013567ffffffffffffffff81111561523f5761523e614cc4565b5b61524b8882890161516f565b92509250509295509295909350565b6000806000806080858703121561527457615273614cbf565b5b600061528287828801614ce0565b945050602061529387828801614ce0565b93505060406152a487828801614ce0565b92505060606152b587828801614ce0565b91505092959194509250565b6000806000606084860312156152da576152d9614cbf565b5b60006152e886828701614d6b565b93505060206152f986828701614d6b565b925050604061530a86828701614d6b565b9150509250925092565b6000806040838503121561532b5761532a614cbf565b5b600061533985828601614d6b565b925050602061534a85828601614d6b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061538a602083614c18565b915061539582615354565b602082019050919050565b600060208201905081810360008301526153b98161537d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153fa82614bd9565b915061540583614bd9565b925082820261541381614bd9565b9150828204841483151761542a576154296153c0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061546b82614bd9565b915061547683614bd9565b92508261548657615485615431565b5b828204905092915050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3830302061646472657373657300000000000000000000000000000000000000602082015250565b60006154ed602d83614c18565b91506154f882615491565b604082019050919050565b6000602082019050818103600083015261551c816154e0565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b6000615559601b83614c18565b915061556482615523565b602082019050919050565b600060208201905081810360008301526155888161554c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006155c982614bd9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155fb576155fa6153c0565b5b600182019050919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b6000615662602d83614c18565b915061566d82615606565b604082019050919050565b6000602082019050818103600083015261569181615655565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b60006156f4602883614c18565b91506156ff82615698565b604082019050919050565b60006020820190508181036000830152615723816156e7565b9050919050565b600061573582614bd9565b915061574083614bd9565b9250828201905080821115615758576157576153c0565b5b92915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b6000615794601883614c18565b915061579f8261575e565b602082019050919050565b600060208201905081810360008301526157c381615787565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000615826602383614c18565b9150615831826157ca565b604082019050919050565b6000602082019050818103600083015261585581615819565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615892601f83614c18565b915061589d8261585c565b602082019050919050565b600060208201905081810360008301526158c181615885565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615924602683614c18565b915061592f826158c8565b604082019050919050565b6000602082019050818103600083015261595381615917565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000615990601483614c18565b915061599b8261595a565b602082019050919050565b600060208201905081810360008301526159bf81615983565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615a22603e83614c18565b9150615a2d826159c6565b604082019050919050565b60006020820190508181036000830152615a5181615a15565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000615ab4602583614c18565b9150615abf82615a58565b604082019050919050565b60006020820190508181036000830152615ae381615aa7565b9050919050565b6000615af582614bd9565b9150615b0083614bd9565b9250828203905081811115615b1857615b176153c0565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000615b54601183614c18565b9150615b5f82615b1e565b602082019050919050565b60006020820190508181036000830152615b8381615b47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615bc881614d54565b92915050565b600060208284031215615be457615be3614cbf565b5b6000615bf284828501615bb9565b91505092915050565b6000819050919050565b6000615c20615c1b615c1684615bfb565b6150f5565b614bd9565b9050919050565b615c3081615c05565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c6b81614d42565b82525050565b6000615c7d8383615c62565b60208301905092915050565b6000602082019050919050565b6000615ca182615c36565b615cab8185615c41565b9350615cb683615c52565b8060005b83811015615ce7578151615cce8882615c71565b9750615cd983615c89565b925050600181019050615cba565b5085935050505092915050565b600060a082019050615d096000830188614be3565b615d166020830187615c27565b8181036040830152615d288186615c96565b9050615d37606083018561508b565b615d446080830184614be3565b9695505050505050565b600081905092915050565b50565b6000615d69600083615d4e565b9150615d7482615d59565b600082019050919050565b6000615d8a82615d5c565b9150819050919050565b600060c082019050615da9600083018961508b565b615db66020830188614be3565b615dc36040830187615c27565b615dd06060830186615c27565b615ddd608083018561508b565b615dea60a0830184614be3565b979650505050505050565b600081519050615e0481614cc9565b92915050565b600080600060608486031215615e2357615e22614cbf565b5b6000615e3186828701615df5565b9350506020615e4286828701615df5565b9250506040615e5386828701615df5565b9150509250925092565b6000604082019050615e726000830185614be3565b615e7f6020830184614be3565b939250505056fea2646970667358221220f3a6c23e3517fb2e3871eb3bb7f464bbc4695380717d71506930554493afe2cf64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106103c75760003560e01c80636d1b229d116101f2578063b6c523241161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e21578063f53fd58414610e4a578063f84ba65d14610e75578063ffb54a9914610e9e576103ce565b8063dd62ed3e14610d67578063e53c30b014610da4578063e632313c14610dcf578063ee9ef29e14610df8576103ce565b8063d7c01032116100dc578063d7c0103214610cc3578063dcf7aef314610cec578063dd395c6314610d15578063dd46706414610d3e576103ce565b8063b6c5232414610c07578063bd9ab53714610c32578063ca33e64c14610c5b578063d51ed1c814610c86576103ce565b80637d1db4a5116101855780638ea5220f116101545780638ea5220f14610b5d57806395d89b4114610b88578063a69df4b514610bb3578063a9059cbb14610bca576103ce565b80637d1db4a514610ab35780638038cbd314610ade578063893d20e814610b075780638da5cb5b14610b32576103ce565b8063715018a6116101c1578063715018a614610a1b578063722b62ad14610a3257806375f0a87414610a5d57806378109e5414610a88576103ce565b80636d1b229d146109615780636ddd17131461098a57806370a08231146109b5578063713e4ae5146109f2576103ce565b80632d594567116102e257806349bd5a5e116102755780635d098b38116102445780635d098b38146108b9578063617fe0ed146108e2578063658d4b7f1461090d57806367ac77b414610936576103ce565b806349bd5a5e146107ff57806350db71fb1461082a578063571ac8b0146108535780635c85974f14610890576103ce565b8063442a583d116102b1578063442a583d1461075757806344a33fd21461078057806346e421a2146107a957806347062402146107d4576103ce565b80632d594567146106ad5780632e8fa821146106d6578063313ce567146107015780633705b3921461072c576103ce565b806318160ddd1161035a578063201e799111610329578063201e7991146105f357806323b872dd1461061c57806329e04b4a146106595780632b112e4914610682576103ce565b806318160ddd1461054b5780631ad017b9146105765780631da1db5e1461059f5780631e25dc54146105c8576103ce565b8063095ea7b311610396578063095ea7b31461047d5780630d295980146104ba5780631161ae39146104e3578063180b0d7e14610520576103ce565b8063026f7d15146103d35780630445b667146103fe57806306fdde031461042957806309302dc614610454576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610ec9565b6040516103f59190614bf2565b60405180910390f35b34801561040a57600080fd5b50610413610ecf565b6040516104209190614bf2565b60405180910390f35b34801561043557600080fd5b5061043e610ed5565b60405161044b9190614c9d565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190614cf5565b610f12565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614d80565b610fd1565b6040516104b19190614ddb565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190614e22565b6110c3565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190614e4f565b611177565b6040516105179190614ddb565b60405180910390f35b34801561052c57600080fd5b5061053561118c565b6040516105429190614bf2565b60405180910390f35b34801561055757600080fd5b50610560611192565b60405161056d9190614bf2565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190614e8f565b61119c565b005b3480156105ab57600080fd5b506105c660048036038101906105c19190614cf5565b611349565b005b3480156105d457600080fd5b506105dd611467565b6040516105ea9190614bf2565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190614e4f565b61146d565b005b34801561062857600080fd5b50610643600480360381019061063e9190614ebc565b611516565b6040516106509190614ddb565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190614cf5565b611716565b005b34801561068e57600080fd5b506106976117b7565b6040516106a49190614bf2565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614f48565b611839565b005b3480156106e257600080fd5b506106eb611909565b6040516106f89190614bf2565b60405180910390f35b34801561070d57600080fd5b5061071661190f565b6040516107239190614f97565b60405180910390f35b34801561073857600080fd5b50610741611918565b60405161074e9190614bf2565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190615017565b61191e565b005b34801561078c57600080fd5b506107a760048036038101906107a29190614cf5565b611ab6565b005b3480156107b557600080fd5b506107be611bb4565b6040516107cb9190614bf2565b60405180910390f35b3480156107e057600080fd5b506107e9611bba565b6040516107f69190614bf2565b60405180910390f35b34801561080b57600080fd5b50610814611bc0565b604051610821919061509a565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906150b5565b611be4565b005b34801561085f57600080fd5b5061087a60048036038101906108759190614e8f565b611cd6565b6040516108879190614ddb565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190614cf5565b611d09565b005b3480156108c557600080fd5b506108e060048036038101906108db9190614e8f565b611daa565b005b3480156108ee57600080fd5b506108f7611fad565b6040516109049190614ddb565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f91906150b5565b611fc0565b005b34801561094257600080fd5b5061094b6120b2565b6040516109589190615154565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614cf5565b6120d6565b005b34801561099657600080fd5b5061099f61214f565b6040516109ac9190614ddb565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190614e8f565b612162565b6040516109e99190614bf2565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a1491906151c5565b6121ab565b005b348015610a2757600080fd5b50610a306123dc565b005b348015610a3e57600080fd5b50610a47612534565b604051610a549190614f97565b60405180910390f35b348015610a6957600080fd5b50610a72612547565b604051610a7f919061509a565b60405180910390f35b348015610a9457600080fd5b50610a9d61256b565b604051610aaa9190614bf2565b60405180910390f35b348015610abf57600080fd5b50610ac8612571565b604051610ad59190614bf2565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b00919061525a565b612577565b005b348015610b1357600080fd5b50610b1c6126a0565b604051610b29919061509a565b60405180910390f35b348015610b3e57600080fd5b50610b476126af565b604051610b54919061509a565b60405180910390f35b348015610b6957600080fd5b50610b726126d9565b604051610b7f919061509a565b60405180910390f35b348015610b9457600080fd5b50610b9d6126ff565b604051610baa9190614c9d565b60405180910390f35b348015610bbf57600080fd5b50610bc861273c565b005b348015610bd657600080fd5b50610bf16004803603810190610bec9190614d80565b612913565b604051610bfe9190614ddb565b60405180910390f35b348015610c1357600080fd5b50610c1c612928565b604051610c299190614bf2565b60405180910390f35b348015610c3e57600080fd5b50610c596004803603810190610c549190614cf5565b612932565b005b348015610c6757600080fd5b50610c706129f1565b604051610c7d919061509a565b60405180910390f35b348015610c9257600080fd5b50610cad6004803603810190610ca89190614cf5565b612a17565b604051610cba9190614bf2565b60405180910390f35b348015610ccf57600080fd5b50610cea6004803603810190610ce591906152c1565b612a87565b005b348015610cf857600080fd5b50610d136004803603810190610d0e9190614cf5565b612de0565b005b348015610d2157600080fd5b50610d3c6004803603810190610d3791906150b5565b612e81565b005b348015610d4a57600080fd5b50610d656004803603810190610d609190614cf5565b612f73565b005b348015610d7357600080fd5b50610d8e6004803603810190610d899190615314565b613141565b604051610d9b9190614bf2565b60405180910390f35b348015610db057600080fd5b50610db96131c8565b604051610dc69190614bf2565b60405180910390f35b348015610ddb57600080fd5b50610df66004803603810190610df19190614cf5565b6131ce565b005b348015610e0457600080fd5b50610e1f6004803603810190610e1a9190614cf5565b613288565b005b348015610e2d57600080fd5b50610e486004803603810190610e439190614e8f565b613329565b005b348015610e5657600080fd5b50610e5f6134ef565b604051610e6c9190614bf2565b60405180910390f35b348015610e8157600080fd5b50610e9c6004803603810190610e9791906150b5565b6134f5565b005b348015610eaa57600080fd5b50610eb36135e7565b604051610ec09190614ddb565b60405180910390f35b60085481565b601e5481565b60606040518060400160405280600c81526020017f4472204d616e68617474616e0000000000000000000000000000000000000000815250905090565b610f1a6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa0906153a0565b60405180910390fd5b600590506103e881600254610fbe91906153ef565b610fc89190615460565b60048190555050565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110b19190614bf2565b60405180910390a36001905092915050565b6110cb6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611151906153a0565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b60008261118383612a17565b11905092915050565b600c5481565b6000600254905090565b6111a46135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a906153a0565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113516135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d7906153a0565b60405180910390fd5b600047905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064848461142d91906153ef565b6114379190615460565b9081150290604051600060405180830381858888f19350505050158015611462573d6000803e3d6000fd5b505050565b600b5481565b6114756135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb906153a0565b60405180910390fd5b8160198190555080601a819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461170257611681826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136029092919063ffffffff16565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61170d848484613657565b90509392505050565b61171e6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906153a0565b60405180910390fd5b80601e8190555050565b60006118346117e7601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612162565b611826611815601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612162565b600254613f2490919063ffffffff16565b613f2490919063ffffffff16565b905090565b6118416135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c7906153a0565b60405180910390fd5b81601b60016101000a81548160ff02191690831515021790555080601b60026101000a81548160ff021916908360ff1602179055505050565b601f5481565b60006012905090565b60065481565b6119266135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac906153a0565b60405180910390fd5b61032183839050106119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390615503565b60405180910390fd5b60008383905082611a0d91906153ef565b905080611a1986612162565b1015611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a519061556f565b60405180910390fd5b60005b84849050811015611aae57611a9a86868684818110611a7f57611a7e61558f565b5b9050602002016020810190611a949190614e8f565b85613f3a565b508080611aa6906155be565b915050611a5d565b505050505050565b611abe6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b44906153a0565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484611b7a91906153ef565b611b849190615460565b9081150290604051600060405180830381858888f19350505050158015611baf573d6000803e3d6000fd5b505050565b60075481565b60055481565b7f0000000000000000000000009ea3284d64e05f89999abb9f111c52e1a6a6ada281565b611bec6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c72906153a0565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611d02827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fd1565b9050919050565b611d116135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906153a0565b60405180910390fd5b8060038190555050565b611db26135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e38906153a0565b60405180910390fd5b6000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60019054906101000a900460ff1681565b611fc86135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e906153a0565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561214c5761214a33601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613f3a565b505b50565b601d60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121b36135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612242576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612239906153a0565b60405180910390fd5b6101f58484905010612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090615678565b60405180910390fd5b8181905084849050146122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c89061570a565b60405180910390fd5b6000805b8585905081101561231a578383828181106122f3576122f261558f565b5b9050602002013582612305919061572a565b91508080612312906155be565b9150506122d5565b508061232587612162565b1015612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d9061556f565b60405180910390fd5b60005b858590508110156123d3576123bf8787878481811061238b5761238a61558f565b5b90506020020160208101906123a09190614e8f565b8686858181106123b3576123b261558f565b5b90506020020135613f3a565b5080806123cb906155be565b915050612369565b50505050505050565b6123e46135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a906153a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b61257f6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461260e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612605906153a0565b60405180910390fd5b8360078190555082600881905550816009819055506126488261263a858761410d90919063ffffffff16565b61410d90919063ffffffff16565b600a8190555080600c81905550605a600a541061269a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612691906157aa565b60405180910390fd5b50505050565b60006126aa6126af565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600581526020017f44524d414e000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c39061583c565b60405180910390fd5b600f544211612810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612807906158a8565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612920338484613657565b905092915050565b6000600f54905090565b61293a6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c0906153a0565b60405180910390fd5b600590506103e8816002546129de91906153ef565b6129e89190615460565b60038190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612a80612a246117b7565b612a72612a636002612a557f0000000000000000000000009ea3284d64e05f89999abb9f111c52e1a6a6ada2612162565b61412390919063ffffffff16565b8561412390919063ffffffff16565b61413990919063ffffffff16565b9050919050565b612a8f6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b15906153a0565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612de86135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e906153a0565b60405180910390fd5b8060068190555050565b612e896135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f906153a0565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612f7b6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461300a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613001906153a0565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426130bb919061572a565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6131d66135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325c906153a0565b60405180910390fd5b601e5481111561327d57601e54601f81905550613285565b80601f819055505b50565b6132906135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461331f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613316906153a0565b60405180910390fd5b80600b8190555050565b6133316135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b7906153a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361342f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134269061593a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6134fd6135fa565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461358c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613583906153a0565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b600033905090565b600083831115829061364a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136419190614c9d565b60405180910390fd5b5082840390509392505050565b6000602060009054906101000a900460ff161561368057613679848484613f3a565b9050613f1d565b6136886126af565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156136f657506136c66126af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561374b57601b60009054906101000a900460ff1661374a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613741906159a6565b60405180910390fd5b5b60007f0000000000000000000000009ea3284d64e05f89999abb9f111c52e1a6a6ada273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f0000000000000000000000009ea3284d64e05f89999abb9f111c52e1a6a6ada273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561384857507f0000000000000000000000009ea3284d64e05f89999abb9f111c52e1a6a6ada273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156138d45750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561392c57507f0000000000000000000000009ea3284d64e05f89999abb9f111c52e1a6a6ada273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613984575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156139de5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613a385750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613aee576000613a4886612162565b9050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613aec576004548582613aaa919061572a565b1115613aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae290615a38565b60405180910390fd5b5b505b7f0000000000000000000000009ea3284d64e05f89999abb9f111c52e1a6a6ada273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015613b555750601b60019054906101000a900460ff165b8015613bab5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c935742601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2890615aca565b60405180910390fd5b601b60029054906101000a900460ff1660ff1642613c4f919061572a565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613cef57613cee868561414f565b5b613d78846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136029092919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008490508115613de3576000600b541115613dde57613ddb87866141ec565b90505b613e1b565b613dec87614355565b613df65784613e02565b613e018786856143ac565b5b9050613e0c614524565b15613e1a57613e196145f9565b5b5b613e6d81601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410d90919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f0d9190614bf2565b60405180910390a3600193505050505b9392505050565b60008183613f329190615aea565b905092915050565b6000613fc5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136029092919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061405a82601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410d90919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516140fa9190614bf2565b60405180910390a3600190509392505050565b6000818361411b919061572a565b905092915050565b6000818361413191906153ef565b905092915050565b600081836141479190615460565b905092915050565b600354811115806141a95750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6141e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141df90615b6a565b60405180910390fd5b5050565b600080600b549050600061423c6064600c5461420891906153ef565b61422e6064614220868961412390919063ffffffff16565b61412390919063ffffffff16565b61413990919063ffffffff16565b905061429081601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410d90919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143309190614bf2565b60405180910390a361434b8185613f2490919063ffffffff16565b9250505092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080826143bc576006546143c0565b600a545b9050600061440a6064600c546143d691906153ef565b6143fc60646143ee868a61412390919063ffffffff16565b61412390919063ffffffff16565b61413990919063ffffffff16565b905061445e81601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410d90919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144fe9190614bf2565b60405180910390a36145198186613f2490919063ffffffff16565b925050509392505050565b60007f0000000000000000000000009ea3284d64e05f89999abb9f111c52e1a6a6ada273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561458f5750602060009054906101000a900460ff16155b80156145a75750601d60009054906101000a900460ff165b80156145f45750601e54601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff0219169083151502179055506000614624601954601a54611177565b61463057600754614633565b60005b905060006146736002614665600a5461465786601f5461412390919063ffffffff16565b61413990919063ffffffff16565b61413990919063ffffffff16565b9050600061468c82601f54613f2490919063ffffffff16565b90506000600267ffffffffffffffff8111156146ab576146aa615b8a565b5b6040519080825280602002602001820160405280156146d95781602001602082028036833780820191505090505b50905030816000815181106146f1576146f061558f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147ba9190615bce565b816001815181106147ce576147cd61558f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040161486f959493929190615cf4565b600060405180830381600087803b15801561488957600080fd5b505af115801561489d573d6000803e3d6000fd5b5050505060006148b68247613f2490919063ffffffff16565b905060006148e26148d160028961413990919063ffffffff16565b600a54613f2490919063ffffffff16565b905060006149206002614912846149046007548861412390919063ffffffff16565b61413990919063ffffffff16565b61413990919063ffffffff16565b9050600061494b8361493d6008548761412390919063ffffffff16565b61413990919063ffffffff16565b90506000614976846149686009548861412390919063ffffffff16565b61413990919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516149c390615d7f565b600060405180830381858888f193505050503d8060008114614a01576040519150601f19603f3d011682016040523d82523d6000602084013e614a06565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051614a5490615d7f565b600060405180830381858888f193505050503d8060008114614a92576040519150601f19603f3d011682016040523d82523d6000602084013e614a97565b606091505b5050809150506000905060008a1115614bb1577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614b3196959493929190615d94565b60606040518083038185885af1158015614b4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614b749190615e0a565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051614ba8929190615e5d565b60405180910390a15b50505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000819050919050565b614bec81614bd9565b82525050565b6000602082019050614c076000830184614be3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614c47578082015181840152602081019050614c2c565b60008484015250505050565b6000601f19601f8301169050919050565b6000614c6f82614c0d565b614c798185614c18565b9350614c89818560208601614c29565b614c9281614c53565b840191505092915050565b60006020820190508181036000830152614cb78184614c64565b905092915050565b600080fd5b600080fd5b614cd281614bd9565b8114614cdd57600080fd5b50565b600081359050614cef81614cc9565b92915050565b600060208284031215614d0b57614d0a614cbf565b5b6000614d1984828501614ce0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614d4d82614d22565b9050919050565b614d5d81614d42565b8114614d6857600080fd5b50565b600081359050614d7a81614d54565b92915050565b60008060408385031215614d9757614d96614cbf565b5b6000614da585828601614d6b565b9250506020614db685828601614ce0565b9150509250929050565b60008115159050919050565b614dd581614dc0565b82525050565b6000602082019050614df06000830184614dcc565b92915050565b614dff81614dc0565b8114614e0a57600080fd5b50565b600081359050614e1c81614df6565b92915050565b600060208284031215614e3857614e37614cbf565b5b6000614e4684828501614e0d565b91505092915050565b60008060408385031215614e6657614e65614cbf565b5b6000614e7485828601614ce0565b9250506020614e8585828601614ce0565b9150509250929050565b600060208284031215614ea557614ea4614cbf565b5b6000614eb384828501614d6b565b91505092915050565b600080600060608486031215614ed557614ed4614cbf565b5b6000614ee386828701614d6b565b9350506020614ef486828701614d6b565b9250506040614f0586828701614ce0565b9150509250925092565b600060ff82169050919050565b614f2581614f0f565b8114614f3057600080fd5b50565b600081359050614f4281614f1c565b92915050565b60008060408385031215614f5f57614f5e614cbf565b5b6000614f6d85828601614e0d565b9250506020614f7e85828601614f33565b9150509250929050565b614f9181614f0f565b82525050565b6000602082019050614fac6000830184614f88565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614fd757614fd6614fb2565b5b8235905067ffffffffffffffff811115614ff457614ff3614fb7565b5b6020830191508360208202830111156150105761500f614fbc565b5b9250929050565b6000806000806060858703121561503157615030614cbf565b5b600061503f87828801614d6b565b945050602085013567ffffffffffffffff8111156150605761505f614cc4565b5b61506c87828801614fc1565b9350935050604061507f87828801614ce0565b91505092959194509250565b61509481614d42565b82525050565b60006020820190506150af600083018461508b565b92915050565b600080604083850312156150cc576150cb614cbf565b5b60006150da85828601614d6b565b92505060206150eb85828601614e0d565b9150509250929050565b6000819050919050565b600061511a61511561511084614d22565b6150f5565b614d22565b9050919050565b600061512c826150ff565b9050919050565b600061513e82615121565b9050919050565b61514e81615133565b82525050565b60006020820190506151696000830184615145565b92915050565b60008083601f84011261518557615184614fb2565b5b8235905067ffffffffffffffff8111156151a2576151a1614fb7565b5b6020830191508360208202830111156151be576151bd614fbc565b5b9250929050565b6000806000806000606086880312156151e1576151e0614cbf565b5b60006151ef88828901614d6b565b955050602086013567ffffffffffffffff8111156152105761520f614cc4565b5b61521c88828901614fc1565b9450945050604086013567ffffffffffffffff81111561523f5761523e614cc4565b5b61524b8882890161516f565b92509250509295509295909350565b6000806000806080858703121561527457615273614cbf565b5b600061528287828801614ce0565b945050602061529387828801614ce0565b93505060406152a487828801614ce0565b92505060606152b587828801614ce0565b91505092959194509250565b6000806000606084860312156152da576152d9614cbf565b5b60006152e886828701614d6b565b93505060206152f986828701614d6b565b925050604061530a86828701614d6b565b9150509250925092565b6000806040838503121561532b5761532a614cbf565b5b600061533985828601614d6b565b925050602061534a85828601614d6b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061538a602083614c18565b915061539582615354565b602082019050919050565b600060208201905081810360008301526153b98161537d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153fa82614bd9565b915061540583614bd9565b925082820261541381614bd9565b9150828204841483151761542a576154296153c0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061546b82614bd9565b915061547683614bd9565b92508261548657615485615431565b5b828204905092915050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3830302061646472657373657300000000000000000000000000000000000000602082015250565b60006154ed602d83614c18565b91506154f882615491565b604082019050919050565b6000602082019050818103600083015261551c816154e0565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b6000615559601b83614c18565b915061556482615523565b602082019050919050565b600060208201905081810360008301526155888161554c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006155c982614bd9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155fb576155fa6153c0565b5b600182019050919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b6000615662602d83614c18565b915061566d82615606565b604082019050919050565b6000602082019050818103600083015261569181615655565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b60006156f4602883614c18565b91506156ff82615698565b604082019050919050565b60006020820190508181036000830152615723816156e7565b9050919050565b600061573582614bd9565b915061574083614bd9565b9250828201905080821115615758576157576153c0565b5b92915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b6000615794601883614c18565b915061579f8261575e565b602082019050919050565b600060208201905081810360008301526157c381615787565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000615826602383614c18565b9150615831826157ca565b604082019050919050565b6000602082019050818103600083015261585581615819565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615892601f83614c18565b915061589d8261585c565b602082019050919050565b600060208201905081810360008301526158c181615885565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615924602683614c18565b915061592f826158c8565b604082019050919050565b6000602082019050818103600083015261595381615917565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000615990601483614c18565b915061599b8261595a565b602082019050919050565b600060208201905081810360008301526159bf81615983565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615a22603e83614c18565b9150615a2d826159c6565b604082019050919050565b60006020820190508181036000830152615a5181615a15565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000615ab4602583614c18565b9150615abf82615a58565b604082019050919050565b60006020820190508181036000830152615ae381615aa7565b9050919050565b6000615af582614bd9565b9150615b0083614bd9565b9250828203905081811115615b1857615b176153c0565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000615b54601183614c18565b9150615b5f82615b1e565b602082019050919050565b60006020820190508181036000830152615b8381615b47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615bc881614d54565b92915050565b600060208284031215615be457615be3614cbf565b5b6000615bf284828501615bb9565b91505092915050565b6000819050919050565b6000615c20615c1b615c1684615bfb565b6150f5565b614bd9565b9050919050565b615c3081615c05565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c6b81614d42565b82525050565b6000615c7d8383615c62565b60208301905092915050565b6000602082019050919050565b6000615ca182615c36565b615cab8185615c41565b9350615cb683615c52565b8060005b83811015615ce7578151615cce8882615c71565b9750615cd983615c89565b925050600181019050615cba565b5085935050505092915050565b600060a082019050615d096000830188614be3565b615d166020830187615c27565b8181036040830152615d288186615c96565b9050615d37606083018561508b565b615d446080830184614be3565b9695505050505050565b600081905092915050565b50565b6000615d69600083615d4e565b9150615d7482615d59565b600082019050919050565b6000615d8a82615d5c565b9150819050919050565b600060c082019050615da9600083018961508b565b615db66020830188614be3565b615dc36040830187615c27565b615dd06060830186615c27565b615ddd608083018561508b565b615dea60a0830184614be3565b979650505050505050565b600081519050615e0481614cc9565b92915050565b600080600060608486031215615e2357615e22614cbf565b5b6000615e3186828701615df5565b9350506020615e4286828701615df5565b9250506040615e5386828701615df5565b9150509250925092565b6000604082019050615e726000830185614be3565b615e7f6020830184614be3565b939250505056fea2646970667358221220f3a6c23e3517fb2e3871eb3bb7f464bbc4695380717d71506930554493afe2cf64736f6c63430008120033
Deployed Bytecode Sourcemap
18313:16376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;985:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19293:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20917:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22237:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21341:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27882:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33338:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1207:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20647:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31400:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27413:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1161:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32812:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21859:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32423:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33004:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28023:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19356:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20741:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;890:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34171:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27635:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;941:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;846;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19023:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30424:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21565:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22675:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31604:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19110:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30029:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18966:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22935:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19256:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21089:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33515:648;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8973:148;;;;;;;;;;;;;:::i;:::-;;19154:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;324:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;776:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;667:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30753:486;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21003:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8330:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;406:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20827:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9995:305;;;;;;;;;;;;;:::i;:::-;;21695:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9528:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22456:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18837:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33154:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31861:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31247:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30158:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9693:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21200:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1073:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32543:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30657:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9276:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1029:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30287:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19070:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;985:37;;;;:::o;19293:56::-;;;;:::o;20917:80::-;20965:13;20989:5;;;;;;;;;;;;;;;;;20982:12;;20917:80;:::o;22237:213::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22362:1:::1;22338:25;;22436:4;22408:23;22393:12;;:38;;;;:::i;:::-;22392:48;;;;:::i;:::-;22374:15;:66;;;;22237:213:::0;:::o;21341:216::-;21416:4;21468:6;21433:11;:23;21445:10;21433:23;;;;;;;;;;;;;;;:32;21457:7;21433:32;;;;;;;;;;;;;;;:41;;;;21511:7;21490:37;;21499:10;21490:37;;;21520:6;21490:37;;;;;;:::i;:::-;;;;;;;;21545:4;21538:11;;21341:216;;;;:::o;27882:94::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27961:7:::1;27947:11;;:21;;;;;;;;;;;;;;;;;;27882:94:::0;:::o;33338:150::-;33418:4;33474:6;33442:29;33462:8;33442:19;:29::i;:::-;:38;33435:45;;33338:150;;;;:::o;1207:39::-;;;;:::o;20647:88::-;20702:7;20720:12;;20713:19;;20647:88;:::o;31400:196::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31509:5:::1;31484:11;:22;31496:9;;;;;;;;;;;31484:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31551:4;31525:11;:23;31537:10;31525:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31578:10;31566:9;;:22;;;;;;;;;;;;;;;;;;31400:196:::0;:::o;27413:214::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27498:17:::1;27518:21;27498:41;;27558:15;::::0;::::1;;;;;;;;27550:33;;:69;27615:3;27596:16;27584:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;27550:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27487:140;27413:214:::0;:::o;1161:37::-;;;;:::o;32812:184::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32929:7:::1;32911:15;:25;;;;32976:12;32947:26;:41;;;;32812:184:::0;;:::o;21859:370::-;21959:4;22014:17;21979:11;:19;21991:6;21979:19;;;;;;;;;;;;;;;:31;21999:10;21979:31;;;;;;;;;;;;;;;;:52;21976:186;;22081:69;22117:6;22081:69;;;;;;;;;;;;;;;;;:11;:19;22093:6;22081:19;;;;;;;;;;;;;;;:31;22101:10;22081:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;22047:11;:19;22059:6;22047:19;;;;;;;;;;;;;;;:31;22067:10;22047:31;;;;;;;;;;;;;;;:103;;;;21976:186;22181:40;22195:6;22203:9;22214:6;22181:13;:40::i;:::-;22174:47;;21859:370;;;;;:::o;32423:112::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32520:7:::1;32504:13;:23;;;;32423:112:::0;:::o;33004:142::-;33057:7;33084:54;33122:15;33132:4;;;;;;;;;;;33122:9;:15::i;:::-;33084:33;33101:15;33111:4;;;;;;;;;;;33101:9;:15::i;:::-;33084:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;33077:61;;33004:142;:::o;28023:164::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28128:7:::1;28107:18;;:28;;;;;;;;;;;;;;;;;;28170:9;28146:21;;:33;;;;;;;;;;;;;;;;;;28023:164:::0;;:::o;19356:53::-;;;;:::o;20741:80::-;20793:5;596:2;20802:16;;20741:80;:::o;890:42::-;;;;:::o;34171:449::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34312:3:::1;34293:9;;:16;;:22;34285:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34377:12;34401:9;;:16;;34392:6;:25;;;;:::i;:::-;34377:40;;34457:4;34438:15;34448:4;34438:9;:15::i;:::-;:23;;34430:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34510:6;34506:107;34524:9;;:16;;34520:1;:20;34506:107;;;34561:40;34576:4;34581:9;;34591:1;34581:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34594:6;34561:14;:40::i;:::-;;34542:3;;;;;:::i;:::-;;;;34506:107;;;;34272:348;34171:449:::0;;;;:::o;27635:216::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27727:17:::1;27747:21;27727:41;;27787:10;27779:28;;:64;27839:3;27820:16;27808:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;27779:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27716:135;27635:216:::0;:::o;941:37::-;;;;:::o;846:::-;;;;:::o;19023:38::-;;;:::o;30424:131::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30541:6:::1;30514:16;:24;30531:6;30514:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;30424:131:::0;;:::o;21565:122::-;21620:4;21644:35;21652:7;21661:17;21644:7;:35::i;:::-;21637:42;;21565:122;;;:::o;22675:97::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22758:6:::1;22743:12;:21;;;;22675:97:::0;:::o;31604:249::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31715:5:::1;31684:11;:28;31696:15:::0;::::1;;;;;;;;;;31684:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31757:4;31731:11;:23;31743:10;31731:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31800:4;31774:11;:23;31786:10;31774:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31835:10;31817:15;::::0;:28:::1;;;;;;;;;;;;;;;;;;31604:249:::0;:::o;19110:37::-;;;;;;;;;;;;;:::o;30029:121::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30136:6:::1;30114:11;:19;30126:6;30114:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30029:121:::0;;:::o;18966:50::-;;;:::o;22935:231::-;23084:6;23060:9;:21;23070:10;23060:21;;;;;;;;;;;;;;;;:30;23057:102;;;23107:40;23122:10;23134:4;;;;;;;;;;;23140:6;23107:14;:40::i;:::-;;23057:102;22935:231;:::o;19256:30::-;;;;;;;;;;;;;:::o;21089:105::-;21155:7;21173:9;:18;21183:7;21173:18;;;;;;;;;;;;;;;;21166:25;;21089:105;;;:::o;33515:648::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33668:3:::1;33649:9;;:16;;:22;33641:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;33759:6;;:13;;33739:9;;:16;;:33;33731:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33829:12;33862:6:::0;33858:90:::1;33876:9;;:16;;33872:1;:20;33858:90;;;33927:6;;33934:1;33927:9;;;;;;;:::i;:::-;;;;;;;;33920:4;:16;;;;:::i;:::-;33913:23;;33894:3;;;;;:::i;:::-;;;;33858:90;;;;33987:4;33968:15;33978:4;33968:9;:15::i;:::-;:23;;33960:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34040:6;34036:110;34054:9;;:16;;34050:1;:20;34036:110;;;34091:43;34106:4;34111:9;;34121:1;34111:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34124:6;;34131:1;34124:9;;;;;;;:::i;:::-;;;;;;;;34091:14;:43::i;:::-;;34072:3;;;;;:::i;:::-;;;;34036:110;;;;33628:535;33515:648:::0;;;;;:::o;8973:148::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9080:1:::1;9043:40;;9064:6;;;;;;;;;;;9043:40;;;;;;;;;;;;9111:1;9094:6;;:19;;;;;;;;;;;;;;;;;;8973:148::o:0;19154:39::-;;;;;;;;;;;;;:::o;324:75::-;;;;;;;;;;;;:::o;776:58::-;;;;:::o;667:55::-;;;;:::o;30753:486::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30925:13:::1;30913:9;:25;;;;30965:20;30949:13;:36;;;;31014:19;30996:15;:37;;;;31059:64;31103:19;31059:39;31077:20;31059:13;:17;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;31044:12;:79;;;;31151:15;31134:14;:32;;;;31200:2;31185:12;;:17;31177:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;30753:486:::0;;;;:::o;21003:80::-;21055:7;21073;:5;:7::i;:::-;21066:14;;21003:80;:::o;8330:79::-;8368:7;8395:6;;;;;;;;;;;8388:13;;8330:79;:::o;406:69::-;;;;;;;;;;;;;:::o;20827:84::-;20877:13;20901:7;;;;;;;;;;;;;;;;;20894:14;;20827:84;:::o;9995:305::-;10065:10;10047:28;;:14;;;;;;;;;;;:28;;;10039:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10152:9;;10134:15;:27;10126:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10243:14;;;;;;;;;;;10214:44;;10235:6;;;;;;;;;;;10214:44;;;;;;;;;;;;10278:14;;;;;;;;;;;10269:6;;:23;;;;;;;;;;;;;;;;;;9995:305::o;21695:156::-;21775:4;21799:44;21813:10;21825:9;21836:6;21799:13;:44::i;:::-;21792:51;;21695:156;;;;:::o;9528:89::-;9573:7;9600:9;;9593:16;;9528:89;:::o;22456:211::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22581:1:::1;22556:26;;22653:4;22624:24;22609:12;;:39;;;;:::i;:::-;22608:49;;;;:::i;:::-;22593:12;:64;;;;22456:211:::0;:::o;18837:36::-;;;;;;;;;;;;;:::o;33154:176::-;33222:7;33249:73;33299:22;:20;:22::i;:::-;33249:45;33262:31;33291:1;33262:24;33272:13;33262:9;:24::i;:::-;:28;;:31;;;;:::i;:::-;33249:8;:12;;:45;;;;:::i;:::-;:49;;:73;;;;:::i;:::-;33242:80;;33154:176;;;:::o;31861:518::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32030:5:::1;32005:11;:22;32017:9;;;;;;;;;;;32005:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;32075:4;32046:11;:26;32058:13;32046:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;32121:5;32090:11;:28;32102:15:::0;::::1;;;;;;;;;;32090:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32172:4;32137:11;:32;32149:19;32137:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32224:4;32189:11;:32;32201:19;32189:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32265:22;32241:21;;:46;;;;;;;;;;;;;;;;;;32316:19;32298:15;::::0;:37:::1;;;;;;;;;;;;;;;;;;32358:13;32346:9;;:25;;;;;;;;;;;;;;;;;;31861:518:::0;;;:::o;31247:96::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31329:6:::1;31315:11;:20;;;;31247:96:::0;:::o;30158:121::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30265:6:::1;30243:11;:19;30255:6;30243:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30158:121:::0;;:::o;9693:226::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9774:6:::1;;;;;;;;;;;9757:14;;:23;;;;;;;;;;;;;;;;;;9808:1;9791:6;;:19;;;;;;;;;;;;;;;;;;9851:4;9833:15;:22;;;;:::i;:::-;9821:9;:34;;;;9908:1;9871:40;;9892:6;;;;;;;;;;;9871:40;;;;;;;;;;;;9693:226:::0;:::o;21200:133::-;21284:7;21302:11;:19;21314:6;21302:19;;;;;;;;;;;;;;;:28;21322:7;21302:28;;;;;;;;;;;;;;;;21295:35;;21200:133;;;;:::o;1073:79::-;;;;:::o;32543:221::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32628:13:::1;;32618:7;:23;32615:134;;;32671:13;;32658:10;:26;;;;32615:134;;;32730:7;32717:10;:20;;;;32615:134;32543:221:::0;:::o;30657:88::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30734:3:::1;30723:8;:14;;;;30657:88:::0;:::o;9276:244::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9385:1:::1;9365:22;;:8;:22;;::::0;9357:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9475:8;9446:38;;9467:6;;;;;;;;;;;9446:38;;;;;;;;;;;;9504:8;9495:6;;:17;;;;;;;;;;;;;;;;;;9276:244:::0;:::o;1029:37::-;;;;:::o;30287:129::-;8552:12;:10;:12::i;:::-;8542:22;;:6;;;;;;;;;;;:22;;;8534:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30402:6:::1;30376:15;:23;30392:6;30376:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30287:129:::0;;:::o;19070:31::-;;;;;;;;;;;;;:::o;6914:98::-;6967:7;6994:10;6987:17;;6914:98;:::o;4003:240::-;4123:7;4181:1;4176;:6;;4184:12;4168:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4223:1;4219;:5;4212:12;;4003:240;;;;;:::o;23241:2380::-;23333:4;23353:6;;;;;;;;;;;23350:63;;;23369:41;23384:6;23392:9;23403:6;23369:14;:41::i;:::-;23362:48;;;;23350:63;23438:7;:5;:7::i;:::-;23428:17;;:6;:17;;;;:41;;;;;23462:7;:5;:7::i;:::-;23449:20;;:9;:20;;;;23428:41;23425:115;;;23493:11;;;;;;;;;;;23485:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;23425:115;23552:11;23580:13;23567:26;;:9;:26;;;23552:42;;23605:15;23637:13;23624:26;;:9;:26;;;;:53;;;;;23664:13;23654:23;;:6;:23;;;;23624:53;23605:73;;23716:4;23695:26;;:9;:26;;;;:70;;;;;23760:4;;;;;;;;;;;23739:26;;:9;:26;;;;23695:70;:114;;;;;23796:13;23783:26;;:9;:26;;;;23695:114;:160;;;;;23840:15;;;;;;;;;;23827:28;;:9;:28;;;;23695:160;:200;;;;;23886:9;;;;;;;;;;;23873:22;;:9;:22;;;;23695:200;:252;;;;;23926:21;;;;;;;;;;;23913:34;;:9;:34;;;;23695:252;23691:526;;;23973:18;23994:20;24004:9;23994;:20::i;:::-;23973:41;;24033:11;:22;24045:9;24033:22;;;;;;;;;;;;;;;;;;;;;;;;;24029:177;;24109:15;;24098:6;24085:10;:19;;;;:::i;:::-;24084:40;;24076:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;24029:177;23958:259;23691:526;24243:13;24233:23;;:6;:23;;;:58;;;;;24273:18;;;;;;;;;;;24233:58;:103;;;;;24309:16;:27;24326:9;24309:27;;;;;;;;;;;;;;;;;;;;;;;;;24308:28;24233:103;24229:317;;;24397:15;24370:13;:24;24384:9;24370:24;;;;;;;;;;;;;;;;:42;24362:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24513:21;;;;;;;;;;;24495:39;;:15;:39;;;;:::i;:::-;24468:13;:24;24482:9;24468:24;;;;;;;;;;;;;;;:66;;;;24229:317;24768:15;:26;24784:9;24768:26;;;;;;;;;;;;;;;;;;;;;;;;;24764:87;;24811:28;24824:6;24832;24811:12;:28::i;:::-;24764:87;24910:53;24932:6;24910:53;;;;;;;;;;;;;;;;;:9;:17;24920:6;24910:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24890:9;:17;24900:6;24890:17;;;;;;;;;;;;;;;:73;;;;24976:22;25001:6;24976:31;;25140:10;25137:318;;;25181:1;25170:8;;:12;25167:100;;;25220:31;25236:6;25244;25220:15;:31::i;:::-;25203:48;;25167:100;25137:318;;;25316:21;25330:6;25316:13;:21::i;:::-;:64;;25374:6;25316:64;;;25340:31;25348:6;25356;25364;25340:7;:31::i;:::-;25316:64;25299:81;;25412:16;:14;:16::i;:::-;25409:35;;;25431:10;:8;:10::i;:::-;25409:35;25137:318;25490:40;25515:14;25490:9;:20;25500:9;25490:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;25467:9;:20;25477:9;25467:20;;;;;;;;;;;;;;;:63;;;;25565:9;25548:43;;25557:6;25548:43;;;25576:14;25548:43;;;;;;:::i;:::-;;;;;;;;25609:4;25602:11;;;;;23241:2380;;;;;;:::o;2105:98::-;2163:7;2194:1;2190;:5;;;;:::i;:::-;2183:12;;2105:98;;;;:::o;25629:330::-;25722:4;25759:53;25781:6;25759:53;;;;;;;;;;;;;;;;;:9;:17;25769:6;25759:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25739:9;:17;25749:6;25739:17;;;;;;;;;;;;;;;:73;;;;25846:32;25871:6;25846:9;:20;25856:9;25846:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25823:9;:20;25833:9;25823:20;;;;;;;;;;;;;;;:55;;;;25911:9;25894:35;;25903:6;25894:35;;;25922:6;25894:35;;;;;;:::i;:::-;;;;;;;;25947:4;25940:11;;25629:330;;;;;:::o;1724:98::-;1782:7;1813:1;1809;:5;;;;:::i;:::-;1802:12;;1724:98;;;;:::o;2462:::-;2520:7;2551:1;2547;:5;;;;:::i;:::-;2540:12;;2462:98;;;;:::o;2861:::-;2919:7;2950:1;2946;:5;;;;:::i;:::-;2939:12;;2861:98;;;;:::o;25967:166::-;26064:12;;26054:6;:22;;:49;;;;26080:15;:23;26096:6;26080:23;;;;;;;;;;;;;;;;;;;;;;;;;26054:49;26046:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25967:166;;:::o;26299:406::-;26374:7;26396:17;26416:8;;26396:28;;26435:17;26455:56;26507:3;26490:14;;:20;;;;:::i;:::-;26455:30;26481:3;26455:21;26466:9;26455:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;26435:76;;26559:39;26588:9;26559;:24;26577:4;26559:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26532:9;:24;26550:4;26532:24;;;;;;;;;;;;;;;:66;;;;26639:4;26614:42;;26623:6;26614:42;;;26646:9;26614:42;;;;;;:::i;:::-;;;;;;;;26676:21;26687:9;26676:6;:10;;:21;;;;:::i;:::-;26669:28;;;;26299:406;;;;:::o;26141:114::-;26203:4;26228:11;:19;26240:6;26228:19;;;;;;;;;;;;;;;;;;;;;;;;;26227:20;26220:27;;26141:114;;;:::o;26713:438::-;26793:7;26815:17;26835:6;:35;;26859:11;;26835:35;;;26844:12;;26835:35;26815:55;;26881:17;26901:56;26953:3;26936:14;;:20;;;;:::i;:::-;26901:30;26927:3;26901:21;26912:9;26901:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;26881:76;;27005:39;27034:9;27005;:24;27023:4;27005:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26978:9;:24;26996:4;26978:24;;;;;;;;;;;;;;;:66;;;;27085:4;27060:42;;27069:6;27060:42;;;27092:9;27060:42;;;;;;:::i;:::-;;;;;;;;27122:21;27133:9;27122:6;:10;;:21;;;;:::i;:::-;27115:28;;;;26713:438;;;;;:::o;27199:206::-;27248:4;27286:13;27272:27;;:10;:27;;;;:47;;;;;27313:6;;;;;;;;;;;27312:7;27272:47;:71;;;;;27332:11;;;;;;;;;;;27272:71;:125;;;;;27384:13;;27356:9;:24;27374:4;27356:24;;;;;;;;;;;;;;;;:41;;27272:125;27265:132;;27199:206;:::o;28195:1777::-;19467:4;19458:6;;:13;;;;;;;;;;;;;;;;;;28244:27:::1;28274:60;28290:15;;28307:26;;28274:15;:60::i;:::-;:76;;28341:9;;28274:76;;;28337:1;28274:76;28244:106;;28361:23;28387:60;28445:1;28387:53;28427:12;;28387:35;28402:19;28387:10;;:14;;:35;;;;:::i;:::-;:39;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;28361:86;;28458:20;28481:31;28496:15;28481:10;;:14;;:31;;;;:::i;:::-;28458:54;;28525:21;28563:1;28549:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28525:40;;28594:4;28576;28581:1;28576:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28620:14;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28610:4;28615:1;28610:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;::::0;::::1;28654:21;28678;28654:45;;28712:14;:65;;;28792:12;28819:1;28835:4;28862;28882:15;28712:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28921:17;28941:40;28967:13;28941:21;:25;;:40;;;;:::i;:::-;28921:60;;28994:19;29016:44;29033:26;29057:1;29033:19;:23;;:26;;;;:::i;:::-;29016:12;;:16;;:44;;;;:::i;:::-;28994:66;;29073:26;29102:48;29148:1;29102:41;29131:11;29102:24;29116:9;;29102;:13;;:24;;;;:::i;:::-;:28;;:41;;;;:::i;:::-;:45;;:48;;;;:::i;:::-;29073:77;;29161:26;29190:45;29223:11;29190:28;29204:13;;29190:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;29161:74;;29246:25;29274:47;29309:11;29274:30;29288:15;;29274:9;:13;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;29246:75;;29335:15;29363::::0;::::1;;;;;;;;;;29355:29;;29392:18;29417:5;29355:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29334:93;;;29462:9;;;;;;;;;;;29454:23;;29485:17;29509:5;29454:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29438:81;;;;;29577:5;29564:18;;29616:1;29598:15;:19;29595:370;;;29633:14;:30;;;29671:18;29717:4;29741:15;29775:1;29795::::0;29815:21:::1;;;;;;;;;;;29855:15;29633:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29905:48;29917:18;29937:15;29905:48;;;;;;;:::i;:::-;;;;;;;;29595:370;28233:1739;;;;;;;;;;;19485:5:::0;19476:6;;:14;;;;;;;;;;;;;;;;;;28195:1777::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:122;2184:24;2202:5;2184:24;:::i;:::-;2177:5;2174:35;2164:63;;2223:1;2220;2213:12;2164:63;2111:122;:::o;2239:139::-;2285:5;2323:6;2310:20;2301:29;;2339:33;2366:5;2339:33;:::i;:::-;2239:139;;;;:::o;2384:329::-;2443:6;2492:2;2480:9;2471:7;2467:23;2463:32;2460:119;;;2498:79;;:::i;:::-;2460:119;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2384:329;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:116::-;4203:21;4218:5;4203:21;:::i;:::-;4196:5;4193:32;4183:60;;4239:1;4236;4229:12;4183:60;4133:116;:::o;4255:133::-;4298:5;4336:6;4323:20;4314:29;;4352:30;4376:5;4352:30;:::i;:::-;4255:133;;;;:::o;4394:323::-;4450:6;4499:2;4487:9;4478:7;4474:23;4470:32;4467:119;;;4505:79;;:::i;:::-;4467:119;4625:1;4650:50;4692:7;4683:6;4672:9;4668:22;4650:50;:::i;:::-;4640:60;;4596:114;4394:323;;;;:::o;4723:474::-;4791:6;4799;4848:2;4836:9;4827:7;4823:23;4819:32;4816:119;;;4854:79;;:::i;:::-;4816:119;4974:1;4999:53;5044:7;5035:6;5024:9;5020:22;4999:53;:::i;:::-;4989:63;;4945:117;5101:2;5127:53;5172:7;5163:6;5152:9;5148:22;5127:53;:::i;:::-;5117:63;;5072:118;4723:474;;;;;:::o;5203:329::-;5262:6;5311:2;5299:9;5290:7;5286:23;5282:32;5279:119;;;5317:79;;:::i;:::-;5279:119;5437:1;5462:53;5507:7;5498:6;5487:9;5483:22;5462:53;:::i;:::-;5452:63;;5408:117;5203:329;;;;:::o;5538:619::-;5615:6;5623;5631;5680:2;5668:9;5659:7;5655:23;5651:32;5648:119;;;5686:79;;:::i;:::-;5648:119;5806:1;5831:53;5876:7;5867:6;5856:9;5852:22;5831:53;:::i;:::-;5821:63;;5777:117;5933:2;5959:53;6004:7;5995:6;5984:9;5980:22;5959:53;:::i;:::-;5949:63;;5904:118;6061:2;6087:53;6132:7;6123:6;6112:9;6108:22;6087:53;:::i;:::-;6077:63;;6032:118;5538:619;;;;;:::o;6163:86::-;6198:7;6238:4;6231:5;6227:16;6216:27;;6163:86;;;:::o;6255:118::-;6326:22;6342:5;6326:22;:::i;:::-;6319:5;6316:33;6306:61;;6363:1;6360;6353:12;6306:61;6255:118;:::o;6379:135::-;6423:5;6461:6;6448:20;6439:29;;6477:31;6502:5;6477:31;:::i;:::-;6379:135;;;;:::o;6520:464::-;6583:6;6591;6640:2;6628:9;6619:7;6615:23;6611:32;6608:119;;;6646:79;;:::i;:::-;6608:119;6766:1;6791:50;6833:7;6824:6;6813:9;6809:22;6791:50;:::i;:::-;6781:60;;6737:114;6890:2;6916:51;6959:7;6950:6;6939:9;6935:22;6916:51;:::i;:::-;6906:61;;6861:116;6520:464;;;;;:::o;6990:112::-;7073:22;7089:5;7073:22;:::i;:::-;7068:3;7061:35;6990:112;;:::o;7108:214::-;7197:4;7235:2;7224:9;7220:18;7212:26;;7248:67;7312:1;7301:9;7297:17;7288:6;7248:67;:::i;:::-;7108:214;;;;:::o;7328:117::-;7437:1;7434;7427:12;7451:117;7560:1;7557;7550:12;7574:117;7683:1;7680;7673:12;7714:568;7787:8;7797:6;7847:3;7840:4;7832:6;7828:17;7824:27;7814:122;;7855:79;;:::i;:::-;7814:122;7968:6;7955:20;7945:30;;7998:18;7990:6;7987:30;7984:117;;;8020:79;;:::i;:::-;7984:117;8134:4;8126:6;8122:17;8110:29;;8188:3;8180:4;8172:6;8168:17;8158:8;8154:32;8151:41;8148:128;;;8195:79;;:::i;:::-;8148:128;7714:568;;;;;:::o;8288:849::-;8392:6;8400;8408;8416;8465:2;8453:9;8444:7;8440:23;8436:32;8433:119;;;8471:79;;:::i;:::-;8433:119;8591:1;8616:53;8661:7;8652:6;8641:9;8637:22;8616:53;:::i;:::-;8606:63;;8562:117;8746:2;8735:9;8731:18;8718:32;8777:18;8769:6;8766:30;8763:117;;;8799:79;;:::i;:::-;8763:117;8912:80;8984:7;8975:6;8964:9;8960:22;8912:80;:::i;:::-;8894:98;;;;8689:313;9041:2;9067:53;9112:7;9103:6;9092:9;9088:22;9067:53;:::i;:::-;9057:63;;9012:118;8288:849;;;;;;;:::o;9143:118::-;9230:24;9248:5;9230:24;:::i;:::-;9225:3;9218:37;9143:118;;:::o;9267:222::-;9360:4;9398:2;9387:9;9383:18;9375:26;;9411:71;9479:1;9468:9;9464:17;9455:6;9411:71;:::i;:::-;9267:222;;;;:::o;9495:468::-;9560:6;9568;9617:2;9605:9;9596:7;9592:23;9588:32;9585:119;;;9623:79;;:::i;:::-;9585:119;9743:1;9768:53;9813:7;9804:6;9793:9;9789:22;9768:53;:::i;:::-;9758:63;;9714:117;9870:2;9896:50;9938:7;9929:6;9918:9;9914:22;9896:50;:::i;:::-;9886:60;;9841:115;9495:468;;;;;:::o;9969:60::-;9997:3;10018:5;10011:12;;9969:60;;;:::o;10035:142::-;10085:9;10118:53;10136:34;10145:24;10163:5;10145:24;:::i;:::-;10136:34;:::i;:::-;10118:53;:::i;:::-;10105:66;;10035:142;;;:::o;10183:126::-;10233:9;10266:37;10297:5;10266:37;:::i;:::-;10253:50;;10183:126;;;:::o;10315:153::-;10392:9;10425:37;10456:5;10425:37;:::i;:::-;10412:50;;10315:153;;;:::o;10474:185::-;10588:64;10646:5;10588:64;:::i;:::-;10583:3;10576:77;10474:185;;:::o;10665:276::-;10785:4;10823:2;10812:9;10808:18;10800:26;;10836:98;10931:1;10920:9;10916:17;10907:6;10836:98;:::i;:::-;10665:276;;;;:::o;10964:568::-;11037:8;11047:6;11097:3;11090:4;11082:6;11078:17;11074:27;11064:122;;11105:79;;:::i;:::-;11064:122;11218:6;11205:20;11195:30;;11248:18;11240:6;11237:30;11234:117;;;11270:79;;:::i;:::-;11234:117;11384:4;11376:6;11372:17;11360:29;;11438:3;11430:4;11422:6;11418:17;11408:8;11404:32;11401:41;11398:128;;;11445:79;;:::i;:::-;11398:128;10964:568;;;;;:::o;11538:1079::-;11669:6;11677;11685;11693;11701;11750:2;11738:9;11729:7;11725:23;11721:32;11718:119;;;11756:79;;:::i;:::-;11718:119;11876:1;11901:53;11946:7;11937:6;11926:9;11922:22;11901:53;:::i;:::-;11891:63;;11847:117;12031:2;12020:9;12016:18;12003:32;12062:18;12054:6;12051:30;12048:117;;;12084:79;;:::i;:::-;12048:117;12197:80;12269:7;12260:6;12249:9;12245:22;12197:80;:::i;:::-;12179:98;;;;11974:313;12354:2;12343:9;12339:18;12326:32;12385:18;12377:6;12374:30;12371:117;;;12407:79;;:::i;:::-;12371:117;12520:80;12592:7;12583:6;12572:9;12568:22;12520:80;:::i;:::-;12502:98;;;;12297:313;11538:1079;;;;;;;;:::o;12623:765::-;12709:6;12717;12725;12733;12782:3;12770:9;12761:7;12757:23;12753:33;12750:120;;;12789:79;;:::i;:::-;12750:120;12909:1;12934:53;12979:7;12970:6;12959:9;12955:22;12934:53;:::i;:::-;12924:63;;12880:117;13036:2;13062:53;13107:7;13098:6;13087:9;13083:22;13062:53;:::i;:::-;13052:63;;13007:118;13164:2;13190:53;13235:7;13226:6;13215:9;13211:22;13190:53;:::i;:::-;13180:63;;13135:118;13292:2;13318:53;13363:7;13354:6;13343:9;13339:22;13318:53;:::i;:::-;13308:63;;13263:118;12623:765;;;;;;;:::o;13394:619::-;13471:6;13479;13487;13536:2;13524:9;13515:7;13511:23;13507:32;13504:119;;;13542:79;;:::i;:::-;13504:119;13662:1;13687:53;13732:7;13723:6;13712:9;13708:22;13687:53;:::i;:::-;13677:63;;13633:117;13789:2;13815:53;13860:7;13851:6;13840:9;13836:22;13815:53;:::i;:::-;13805:63;;13760:118;13917:2;13943:53;13988:7;13979:6;13968:9;13964:22;13943:53;:::i;:::-;13933:63;;13888:118;13394:619;;;;;:::o;14019:474::-;14087:6;14095;14144:2;14132:9;14123:7;14119:23;14115:32;14112:119;;;14150:79;;:::i;:::-;14112:119;14270:1;14295:53;14340:7;14331:6;14320:9;14316:22;14295:53;:::i;:::-;14285:63;;14241:117;14397:2;14423:53;14468:7;14459:6;14448:9;14444:22;14423:53;:::i;:::-;14413:63;;14368:118;14019:474;;;;;:::o;14499:182::-;14639:34;14635:1;14627:6;14623:14;14616:58;14499:182;:::o;14687:366::-;14829:3;14850:67;14914:2;14909:3;14850:67;:::i;:::-;14843:74;;14926:93;15015:3;14926:93;:::i;:::-;15044:2;15039:3;15035:12;15028:19;;14687:366;;;:::o;15059:419::-;15225:4;15263:2;15252:9;15248:18;15240:26;;15312:9;15306:4;15302:20;15298:1;15287:9;15283:17;15276:47;15340:131;15466:4;15340:131;:::i;:::-;15332:139;;15059:419;;;:::o;15484:180::-;15532:77;15529:1;15522:88;15629:4;15626:1;15619:15;15653:4;15650:1;15643:15;15670:410;15710:7;15733:20;15751:1;15733:20;:::i;:::-;15728:25;;15767:20;15785:1;15767:20;:::i;:::-;15762:25;;15822:1;15819;15815:9;15844:30;15862:11;15844:30;:::i;:::-;15833:41;;16023:1;16014:7;16010:15;16007:1;16004:22;15984:1;15977:9;15957:83;15934:139;;16053:18;;:::i;:::-;15934:139;15718:362;15670:410;;;;:::o;16086:180::-;16134:77;16131:1;16124:88;16231:4;16228:1;16221:15;16255:4;16252:1;16245:15;16272:185;16312:1;16329:20;16347:1;16329:20;:::i;:::-;16324:25;;16363:20;16381:1;16363:20;:::i;:::-;16358:25;;16402:1;16392:35;;16407:18;;:::i;:::-;16392:35;16449:1;16446;16442:9;16437:14;;16272:185;;;;:::o;16463:232::-;16603:34;16599:1;16591:6;16587:14;16580:58;16672:15;16667:2;16659:6;16655:15;16648:40;16463:232;:::o;16701:366::-;16843:3;16864:67;16928:2;16923:3;16864:67;:::i;:::-;16857:74;;16940:93;17029:3;16940:93;:::i;:::-;17058:2;17053:3;17049:12;17042:19;;16701:366;;;:::o;17073:419::-;17239:4;17277:2;17266:9;17262:18;17254:26;;17326:9;17320:4;17316:20;17312:1;17301:9;17297:17;17290:47;17354:131;17480:4;17354:131;:::i;:::-;17346:139;;17073:419;;;:::o;17498:177::-;17638:29;17634:1;17626:6;17622:14;17615:53;17498:177;:::o;17681:366::-;17823:3;17844:67;17908:2;17903:3;17844:67;:::i;:::-;17837:74;;17920:93;18009:3;17920:93;:::i;:::-;18038:2;18033:3;18029:12;18022:19;;17681:366;;;:::o;18053:419::-;18219:4;18257:2;18246:9;18242:18;18234:26;;18306:9;18300:4;18296:20;18292:1;18281:9;18277:17;18270:47;18334:131;18460:4;18334:131;:::i;:::-;18326:139;;18053:419;;;:::o;18478:180::-;18526:77;18523:1;18516:88;18623:4;18620:1;18613:15;18647:4;18644:1;18637:15;18664:233;18703:3;18726:24;18744:5;18726:24;:::i;:::-;18717:33;;18772:66;18765:5;18762:77;18759:103;;18842:18;;:::i;:::-;18759:103;18889:1;18882:5;18878:13;18871:20;;18664:233;;;:::o;18903:232::-;19043:34;19039:1;19031:6;19027:14;19020:58;19112:15;19107:2;19099:6;19095:15;19088:40;18903:232;:::o;19141:366::-;19283:3;19304:67;19368:2;19363:3;19304:67;:::i;:::-;19297:74;;19380:93;19469:3;19380:93;:::i;:::-;19498:2;19493:3;19489:12;19482:19;;19141:366;;;:::o;19513:419::-;19679:4;19717:2;19706:9;19702:18;19694:26;;19766:9;19760:4;19756:20;19752:1;19741:9;19737:17;19730:47;19794:131;19920:4;19794:131;:::i;:::-;19786:139;;19513:419;;;:::o;19938:227::-;20078:34;20074:1;20066:6;20062:14;20055:58;20147:10;20142:2;20134:6;20130:15;20123:35;19938:227;:::o;20171:366::-;20313:3;20334:67;20398:2;20393:3;20334:67;:::i;:::-;20327:74;;20410:93;20499:3;20410:93;:::i;:::-;20528:2;20523:3;20519:12;20512:19;;20171:366;;;:::o;20543:419::-;20709:4;20747:2;20736:9;20732:18;20724:26;;20796:9;20790:4;20786:20;20782:1;20771:9;20767:17;20760:47;20824:131;20950:4;20824:131;:::i;:::-;20816:139;;20543:419;;;:::o;20968:191::-;21008:3;21027:20;21045:1;21027:20;:::i;:::-;21022:25;;21061:20;21079:1;21061:20;:::i;:::-;21056:25;;21104:1;21101;21097:9;21090:16;;21125:3;21122:1;21119:10;21116:36;;;21132:18;;:::i;:::-;21116:36;20968:191;;;;:::o;21165:174::-;21305:26;21301:1;21293:6;21289:14;21282:50;21165:174;:::o;21345:366::-;21487:3;21508:67;21572:2;21567:3;21508:67;:::i;:::-;21501:74;;21584:93;21673:3;21584:93;:::i;:::-;21702:2;21697:3;21693:12;21686:19;;21345:366;;;:::o;21717:419::-;21883:4;21921:2;21910:9;21906:18;21898:26;;21970:9;21964:4;21960:20;21956:1;21945:9;21941:17;21934:47;21998:131;22124:4;21998:131;:::i;:::-;21990:139;;21717:419;;;:::o;22142:222::-;22282:34;22278:1;22270:6;22266:14;22259:58;22351:5;22346:2;22338:6;22334:15;22327:30;22142:222;:::o;22370:366::-;22512:3;22533:67;22597:2;22592:3;22533:67;:::i;:::-;22526:74;;22609:93;22698:3;22609:93;:::i;:::-;22727:2;22722:3;22718:12;22711:19;;22370:366;;;:::o;22742:419::-;22908:4;22946:2;22935:9;22931:18;22923:26;;22995:9;22989:4;22985:20;22981:1;22970:9;22966:17;22959:47;23023:131;23149:4;23023:131;:::i;:::-;23015:139;;22742:419;;;:::o;23167:181::-;23307:33;23303:1;23295:6;23291:14;23284:57;23167:181;:::o;23354:366::-;23496:3;23517:67;23581:2;23576:3;23517:67;:::i;:::-;23510:74;;23593:93;23682:3;23593:93;:::i;:::-;23711:2;23706:3;23702:12;23695:19;;23354:366;;;:::o;23726:419::-;23892:4;23930:2;23919:9;23915:18;23907:26;;23979:9;23973:4;23969:20;23965:1;23954:9;23950:17;23943:47;24007:131;24133:4;24007:131;:::i;:::-;23999:139;;23726:419;;;:::o;24151:225::-;24291:34;24287:1;24279:6;24275:14;24268:58;24360:8;24355:2;24347:6;24343:15;24336:33;24151:225;:::o;24382:366::-;24524:3;24545:67;24609:2;24604:3;24545:67;:::i;:::-;24538:74;;24621:93;24710:3;24621:93;:::i;:::-;24739:2;24734:3;24730:12;24723:19;;24382:366;;;:::o;24754:419::-;24920:4;24958:2;24947:9;24943:18;24935:26;;25007:9;25001:4;24997:20;24993:1;24982:9;24978:17;24971:47;25035:131;25161:4;25035:131;:::i;:::-;25027:139;;24754:419;;;:::o;25179:170::-;25319:22;25315:1;25307:6;25303:14;25296:46;25179:170;:::o;25355:366::-;25497:3;25518:67;25582:2;25577:3;25518:67;:::i;:::-;25511:74;;25594:93;25683:3;25594:93;:::i;:::-;25712:2;25707:3;25703:12;25696:19;;25355:366;;;:::o;25727:419::-;25893:4;25931:2;25920:9;25916:18;25908:26;;25980:9;25974:4;25970:20;25966:1;25955:9;25951:17;25944:47;26008:131;26134:4;26008:131;:::i;:::-;26000:139;;25727:419;;;:::o;26152:249::-;26292:34;26288:1;26280:6;26276:14;26269:58;26361:32;26356:2;26348:6;26344:15;26337:57;26152:249;:::o;26407:366::-;26549:3;26570:67;26634:2;26629:3;26570:67;:::i;:::-;26563:74;;26646:93;26735:3;26646:93;:::i;:::-;26764:2;26759:3;26755:12;26748:19;;26407:366;;;:::o;26779:419::-;26945:4;26983:2;26972:9;26968:18;26960:26;;27032:9;27026:4;27022:20;27018:1;27007:9;27003:17;26996:47;27060:131;27186:4;27060:131;:::i;:::-;27052:139;;26779:419;;;:::o;27204:224::-;27344:34;27340:1;27332:6;27328:14;27321:58;27413:7;27408:2;27400:6;27396:15;27389:32;27204:224;:::o;27434:366::-;27576:3;27597:67;27661:2;27656:3;27597:67;:::i;:::-;27590:74;;27673:93;27762:3;27673:93;:::i;:::-;27791:2;27786:3;27782:12;27775:19;;27434:366;;;:::o;27806:419::-;27972:4;28010:2;27999:9;27995:18;27987:26;;28059:9;28053:4;28049:20;28045:1;28034:9;28030:17;28023:47;28087:131;28213:4;28087:131;:::i;:::-;28079:139;;27806:419;;;:::o;28231:194::-;28271:4;28291:20;28309:1;28291:20;:::i;:::-;28286:25;;28325:20;28343:1;28325:20;:::i;:::-;28320:25;;28369:1;28366;28362:9;28354:17;;28393:1;28387:4;28384:11;28381:37;;;28398:18;;:::i;:::-;28381:37;28231:194;;;;:::o;28431:167::-;28571:19;28567:1;28559:6;28555:14;28548:43;28431:167;:::o;28604:366::-;28746:3;28767:67;28831:2;28826:3;28767:67;:::i;:::-;28760:74;;28843:93;28932:3;28843:93;:::i;:::-;28961:2;28956:3;28952:12;28945:19;;28604:366;;;:::o;28976:419::-;29142:4;29180:2;29169:9;29165:18;29157:26;;29229:9;29223:4;29219:20;29215:1;29204:9;29200:17;29193:47;29257:131;29383:4;29257:131;:::i;:::-;29249:139;;28976:419;;;:::o;29401:180::-;29449:77;29446:1;29439:88;29546:4;29543:1;29536:15;29570:4;29567:1;29560:15;29587:143;29644:5;29675:6;29669:13;29660:22;;29691:33;29718:5;29691:33;:::i;:::-;29587:143;;;;:::o;29736:351::-;29806:6;29855:2;29843:9;29834:7;29830:23;29826:32;29823:119;;;29861:79;;:::i;:::-;29823:119;29981:1;30006:64;30062:7;30053:6;30042:9;30038:22;30006:64;:::i;:::-;29996:74;;29952:128;29736:351;;;;:::o;30093:85::-;30138:7;30167:5;30156:16;;30093:85;;;:::o;30184:158::-;30242:9;30275:61;30293:42;30302:32;30328:5;30302:32;:::i;:::-;30293:42;:::i;:::-;30275:61;:::i;:::-;30262:74;;30184:158;;;:::o;30348:147::-;30443:45;30482:5;30443:45;:::i;:::-;30438:3;30431:58;30348:147;;:::o;30501:114::-;30568:6;30602:5;30596:12;30586:22;;30501:114;;;:::o;30621:184::-;30720:11;30754:6;30749:3;30742:19;30794:4;30789:3;30785:14;30770:29;;30621:184;;;;:::o;30811:132::-;30878:4;30901:3;30893:11;;30931:4;30926:3;30922:14;30914:22;;30811:132;;;:::o;30949:108::-;31026:24;31044:5;31026:24;:::i;:::-;31021:3;31014:37;30949:108;;:::o;31063:179::-;31132:10;31153:46;31195:3;31187:6;31153:46;:::i;:::-;31231:4;31226:3;31222:14;31208:28;;31063:179;;;;:::o;31248:113::-;31318:4;31350;31345:3;31341:14;31333:22;;31248:113;;;:::o;31397:732::-;31516:3;31545:54;31593:5;31545:54;:::i;:::-;31615:86;31694:6;31689:3;31615:86;:::i;:::-;31608:93;;31725:56;31775:5;31725:56;:::i;:::-;31804:7;31835:1;31820:284;31845:6;31842:1;31839:13;31820:284;;;31921:6;31915:13;31948:63;32007:3;31992:13;31948:63;:::i;:::-;31941:70;;32034:60;32087:6;32034:60;:::i;:::-;32024:70;;31880:224;31867:1;31864;31860:9;31855:14;;31820:284;;;31824:14;32120:3;32113:10;;31521:608;;;31397:732;;;;:::o;32135:831::-;32398:4;32436:3;32425:9;32421:19;32413:27;;32450:71;32518:1;32507:9;32503:17;32494:6;32450:71;:::i;:::-;32531:80;32607:2;32596:9;32592:18;32583:6;32531:80;:::i;:::-;32658:9;32652:4;32648:20;32643:2;32632:9;32628:18;32621:48;32686:108;32789:4;32780:6;32686:108;:::i;:::-;32678:116;;32804:72;32872:2;32861:9;32857:18;32848:6;32804:72;:::i;:::-;32886:73;32954:3;32943:9;32939:19;32930:6;32886:73;:::i;:::-;32135:831;;;;;;;;:::o;32972:147::-;33073:11;33110:3;33095:18;;32972:147;;;;:::o;33125:114::-;;:::o;33245:398::-;33404:3;33425:83;33506:1;33501:3;33425:83;:::i;:::-;33418:90;;33517:93;33606:3;33517:93;:::i;:::-;33635:1;33630:3;33626:11;33619:18;;33245:398;;;:::o;33649:379::-;33833:3;33855:147;33998:3;33855:147;:::i;:::-;33848:154;;34019:3;34012:10;;33649:379;;;:::o;34034:807::-;34283:4;34321:3;34310:9;34306:19;34298:27;;34335:71;34403:1;34392:9;34388:17;34379:6;34335:71;:::i;:::-;34416:72;34484:2;34473:9;34469:18;34460:6;34416:72;:::i;:::-;34498:80;34574:2;34563:9;34559:18;34550:6;34498:80;:::i;:::-;34588;34664:2;34653:9;34649:18;34640:6;34588:80;:::i;:::-;34678:73;34746:3;34735:9;34731:19;34722:6;34678:73;:::i;:::-;34761;34829:3;34818:9;34814:19;34805:6;34761:73;:::i;:::-;34034:807;;;;;;;;;:::o;34847:143::-;34904:5;34935:6;34929:13;34920:22;;34951:33;34978:5;34951:33;:::i;:::-;34847:143;;;;:::o;34996:663::-;35084:6;35092;35100;35149:2;35137:9;35128:7;35124:23;35120:32;35117:119;;;35155:79;;:::i;:::-;35117:119;35275:1;35300:64;35356:7;35347:6;35336:9;35332:22;35300:64;:::i;:::-;35290:74;;35246:128;35413:2;35439:64;35495:7;35486:6;35475:9;35471:22;35439:64;:::i;:::-;35429:74;;35384:129;35552:2;35578:64;35634:7;35625:6;35614:9;35610:22;35578:64;:::i;:::-;35568:74;;35523:129;34996:663;;;;;:::o;35665:332::-;35786:4;35824:2;35813:9;35809:18;35801:26;;35837:71;35905:1;35894:9;35890:17;35881:6;35837:71;:::i;:::-;35918:72;35986:2;35975:9;35971:18;35962:6;35918:72;:::i;:::-;35665:332;;;;;:::o
Swarm Source
ipfs://f3a6c23e3517fb2e3871eb3bb7f464bbc4695380717d71506930554493afe2cf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,521.54 | 0.1676 | $422.53 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.