ERC-20
Finance
Overview
Max Total Supply
1,000,000,000 ADRT
Holders
269 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
530,406.093301517 ADRTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Adrenaline
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-21 */ pragma solidity ^0.8.12; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != - 1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? - a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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 Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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; 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; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } contract Adrenaline is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public uniswapV2Pair = address(0); mapping(address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private botWallets; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private isExchangeWallet; mapping (address => bool) private _isExcludedFromRewards; string private _name = "ADRENALINE"; string private _symbol = "ADRT"; uint8 private _decimals = 9; uint256 private _tTotal = 1000000000 * 10 ** _decimals; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool isTaxFreeTransfer = false; uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH uint public ethSellAmount = 1000000000000000000; //1 ETH uint256 public _maxBuyAmount = 5000000 * 10** _decimals; uint256 public _maxWalletAmount = 5000000 * 10** _decimals; address public buyBackAddress = 0xd2c4e99e293439Db0A9a27d2168753eaBD939acE; address public investmentAddress = 0x088b2777282DCdEE86e2832E7b4DF49B77C0519F; address public devAddress = 0xcd9Bc9e17164B430663a97BD74b278bDBaB5b1bC; address public deadWallet = 0x000000000000000000000000000000000000dEaD; uint256 public gasForProcessing = 50000; event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor); event SendDividends(uint256 EthAmount); struct Distribution { uint256 devTeam; uint256 investment; uint256 dividend; uint256 buyBack; } struct TaxFees { uint256 buyFee; uint256 sellFee; uint256 largeSellFee; } bool private doTakeFees; bool private isSellTxn; TaxFees public taxFees; Distribution public distribution; DividendTracker private dividendTracker; constructor () { _balances[_msgSender()] = _tTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[buyBackAddress] = true; _isExcludedFromFee[investmentAddress] = true; _isExcludedFromFee[devAddress] = true; _isExcludedFromRewards[investmentAddress] = true; _isExcludedFromRewards[_msgSender()] = true; _isExcludedFromRewards[owner()] = true; _isExcludedFromRewards[buyBackAddress] = true; _isExcludedFromRewards[devAddress] = true; _isExcludedFromRewards[deadWallet] = true; taxFees = TaxFees(12,12,25); distribution = Distribution(34, 17, 33, 16); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function airDrops(address[] calldata newholders, uint256[] calldata amounts) external { uint256 iterator = 0; require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee"); require(newholders.length == amounts.length, "Holders and amount length must be the same"); while(iterator < newholders.length){ _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false); iterator += 1; } } function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() { _maxWalletAmount = maxWalletAmount * 10**9; } function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner { addRemoveFee(addresses, isExcludeFromFee); } function addRemoveExchange(address[] calldata addresses, bool isAddExchange) public onlyOwner { _addRemoveExchange(addresses, isAddExchange); } function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner { addRemoveRewards(addresses, isExcluded); } function isExcludedFromRewards(address addr) public view returns(bool) { return _isExcludedFromRewards[addr]; } function addRemoveRewards(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromRewards[addr] = flag; } } function setEthSwapSellSettings(uint ethSellAmount_, uint256 ethPriceToSwap_) external onlyOwner { ethSellAmount = ethSellAmount_; ethPriceToSwap = ethPriceToSwap_; } function createV2Pair() external onlyOwner { require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set"); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _isExcludedFromRewards[uniswapV2Pair] = true; } function _addRemoveExchange(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; isExchangeWallet[addr] = flag; } } function addRemoveFee(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromFee[addr] = flag; } } function setMaxBuyAmount(uint256 maxBuyAmount) external onlyOwner() { _maxBuyAmount = maxBuyAmount * 10**9; } function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 largeSellFee) external onlyOwner { taxFees.buyFee = buyFee; taxFees.sellFee = sellFee; taxFees.largeSellFee = largeSellFee; } function setDistribution(uint256 dividend, uint256 devTeam, uint256 investment, uint256 buyBack) external onlyOwner { distribution.dividend = dividend; distribution.devTeam = devTeam; distribution.investment = investment; distribution.buyBack = buyBack; } function setWalletAddresses(address devAddr, address buyBack, address investmentAddr) external onlyOwner { devAddress = devAddr; buyBackAddress = buyBack; investmentAddress = investmentAddr; } function isAddressBlocked(address addr) public view returns (bool) { return botWallets[addr]; } function blockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, true); } function unblockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, false); } function blockUnblockAddress(address[] memory addresses, bool doBlock) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; if(doBlock) { botWallets[addr] = true; } else { delete botWallets[addr]; } } } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function getEthPrice(uint tokenAmount) public view returns (uint) { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); return uniswapV2Router.getAmountsOut(tokenAmount, path)[1]; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner { isTaxFreeTransfer = enableDisable; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set"); bool isSell = false; bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner(); uint256 holderBalance = balanceOf(to).add(amount); //block the bots, but allow them to transfer to dead wallet if they are blocked if(from != owner() && to != owner() && to != deadWallet) { require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens"); } if(from == uniswapV2Pair || isExchangeWallet[from]) { require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount."); require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit"); } if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell //only tax if tokens are going back to Uniswap isSell = true; sellTaxTokens(); // dividendTracker.calculateDividendDistribution(); } if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to]) { if(takeFees) { takeFees = isTaxFreeTransfer ? false : true; } require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit"); } _tokenTransfer(from, to, amount, takeFees, isSell, true); } function sellTaxTokens() private { uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance > 0) { uint ethPrice = getEthPrice(contractTokenBalance); if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) { //send eth to wallets investment and dev distributeShares(contractTokenBalance); } } } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value"); gasForProcessing = newValue; } function distributeShares(uint256 balanceToShareTokens) private lockTheSwap { swapTokensForEth(balanceToShareTokens); uint256 distributionEth = address(this).balance; uint256 investmentShare = distributionEth.mul(distribution.investment).div(100); uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100); uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100); uint256 buyBackShare = distributionEth.mul(distribution.buyBack).div(100); payable(investmentAddress).transfer(investmentShare); sendEthDividends(dividendShare); payable(devAddress).transfer(devTeamShare); payable(buyBackAddress).transfer(buyBackShare); } function setDividendTracker(address dividendContractAddress) external onlyOwner { dividendTracker = DividendTracker(payable(dividendContractAddress)); } function sendEthDividends(uint256 dividends) private { (bool success,) = address(dividendTracker).call{value : dividends}(""); if (success) { emit SendDividends(dividends); } } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private { uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0; if(takeFees && isSell) { taxAmount = amount.mul(taxFees.sellFee).div(100); if(taxFees.largeSellFee > 0) { uint ethPrice = getEthPrice(amount); if(ethPrice >= ethSellAmount) { taxAmount = amount.mul(taxFees.largeSellFee).div(100); } } } uint256 transferAmount = amount.sub(taxAmount); _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(transferAmount); _balances[address(this)] = _balances[address(this)].add(taxAmount); emit Transfer(sender, recipient, amount); if(doUpdateDividends) { try dividendTracker.setTokenBalance(sender) {} catch{} try dividendTracker.setTokenBalance(recipient) {} catch{} try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin); }catch {} } } } contract IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } Map private map; function get(address key) public view returns (uint) { return map.values[key]; } function keyExists(address key) public view returns(bool) { return (getIndexOfKey(key) != -1); } function getIndexOfKey(address key) public view returns (int) { if (!map.inserted[key]) { return - 1; } return int(map.indexOf[key]); } function getKeyAtIndex(uint index) public view returns (address) { return map.keys[index]; } function size() public view returns (uint) { return map.keys.length; } function set(address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } contract DividendTracker is IERC20, Context, Ownable { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2 ** 128; uint256 internal magnifiedDividendPerShare; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; mapping(address => uint256) internal claimedDividends; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name = "ADRENALINE SHOTS"; string private _symbol = "ADRS"; uint8 private _decimals = 9; uint256 public totalDividendsDistributed; IterableMapping private tokenHoldersMap = new IterableMapping(); uint256 public minimumTokenBalanceForDividends = 1000000 * 10 ** _decimals; Adrenaline private adrenaline; bool public doCalculation = false; event updateBalance(address addr, uint256 amount); event DividendsDistributed(address indexed from,uint256 weiAmount); event DividendWithdrawn(address indexed to,uint256 weiAmount); uint256 public lastProcessedIndex; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait = 3600; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() { emit Transfer(address(0), _msgSender(), 0); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address, uint256) public pure returns (bool) { require(false, "No transfers allowed in dividend tracker"); return true; } function transferFrom(address, address, uint256) public pure override returns (bool) { require(false, "No transfers allowed in dividend tracker"); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function setTokenBalance(address account) external { uint256 balance = adrenaline.balanceOf(account); if(!adrenaline.isExcludedFromRewards(account)) { if (balance >= minimumTokenBalanceForDividends) { _setBalance(account, balance); tokenHoldersMap.set(account, balance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } } else { if(balanceOf(account) > 0) { _setBalance(account, 0); tokenHoldersMap.remove(account); } } processAccount(payable(account), true); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe()); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe()); } receive() external payable { distributeDividends(); } function setERC20Contract(address contractAddr) external onlyOwner { adrenaline = Adrenaline(payable(contractAddr)); } function excludeFromDividends(address account) external onlyOwner { _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function distributeDividends() public payable { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function withdrawDividend() public virtual { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); (bool success,) = user.call{value : _withdrawableDividend, gas : 3000}(""); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view returns (uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner { minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals); } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, "Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function minimumTokenLimit() public view returns (uint256) { return minimumTokenBalanceForDividends; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.size(); } function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = - 1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ? tokenHoldersMap.size().sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if (lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.size(); if (numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= tokenHoldersMap.size()) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex); if (canAutoClaim(lastClaimTimes[account])) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccountByDeployer(address payable account, bool automatic) external onlyOwner { processAccount(account, automatic); } function totalDividendClaimed(address account) public view returns (uint256) { return claimedDividends[account]; } function processAccount(address payable account, bool automatic) private returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { uint256 totalClaimed = claimedDividends[account]; claimedDividends[account] = amount.add(totalClaimed); lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner { for(uint index = 0; index < newholders.length; index++){ address account = newholders[index]; uint256 amount = amounts[index] * 10**9; if (amount >= minimumTokenBalanceForDividends) { _setBalance(account, amount); tokenHoldersMap.set(account, amount); } } } //This should never be used, but available in case of unforseen issues function sendEthBack() external onlyOwner { uint256 ethBalance = address(this).balance; payable(owner()).transfer(ethBalance); } }
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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isAddExchange","type":"bool"}],"name":"addRemoveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"investment","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"enableDisableTaxFreeTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"investment","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethSellAmount_","type":"uint256"},{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthSwapSellSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devAddr","type":"address"},{"internalType":"address","name":"buyBack","type":"address"},{"internalType":"address","name":"investmentAddr","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600a81526020017f414452454e414c494e450000000000000000000000000000000000000000000081525060099080519060200190620000e892919062000ac5565b506040518060400160405280600481526020017f4144525400000000000000000000000000000000000000000000000000000000815250600a90805190602001906200013692919062000ac5565b506009600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff16600a62000171919062000d0f565b633b9aca0062000182919062000d60565b600c556001600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff021916908315150217905550670429d069189e0000600e55670de0b6b3a7640000600f55600b60009054906101000a900460ff16600a620001f1919062000d0f565b624c4b4062000201919062000d60565b601055600b60009054906101000a900460ff16600a62000222919062000d0f565b624c4b4062000232919062000d60565b60115573d2c4e99e293439db0a9a27d2168753eabd939ace601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073088b2777282dcdee86e2832e7b4df49b77c0519f601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cd9bc9e17164b430663a97bd74b278bdbab5b1bc601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c3506016553480156200038a57600080fd5b5060006200039d62000a9460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600360006200045262000a9460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160066000620004a662000a9c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660006200050d62000a9460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006200075c62000a9460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620007c362000a9c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060600160405280600c8152602001600c81526020016019815250601860008201518160000155602082015181600101556040820151816002015590505060405180608001604052806022815260200160118152602001602181526020016010815250601b6000820151816000015560208201518160010155604082015181600201556060820151816003015590505062000a2562000a9460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000a86919062000dd2565b60405180910390a362000e53565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000ad39062000e1e565b90600052602060002090601f01602090048101928262000af7576000855562000b43565b82601f1062000b1257805160ff191683800117855562000b43565b8280016001018555821562000b43579182015b8281111562000b4257825182559160200191906001019062000b25565b5b50905062000b52919062000b56565b5090565b5b8082111562000b7157600081600090555060010162000b57565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c035780860481111562000bdb5762000bda62000b75565b5b600185161562000beb5780820291505b808102905062000bfb8562000ba4565b945062000bbb565b94509492505050565b60008262000c1e576001905062000cf1565b8162000c2e576000905062000cf1565b816001811462000c47576002811462000c525762000c88565b600191505062000cf1565b60ff84111562000c675762000c6662000b75565b5b8360020a91508482111562000c815762000c8062000b75565b5b5062000cf1565b5060208310610133831016604e8410600b841016171562000cc25782820a90508381111562000cbc5762000cbb62000b75565b5b62000cf1565b62000cd1848484600162000bb1565b9250905081840481111562000ceb5762000cea62000b75565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000d1c8262000cf8565b915062000d298362000d02565b925062000d587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c0c565b905092915050565b600062000d6d8262000cf8565b915062000d7a8362000cf8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000db65762000db562000b75565b5b828202905092915050565b62000dcc8162000cf8565b82525050565b600060208201905062000de9600083018462000dc1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e3757607f821691505b60208210810362000e4d5762000e4c62000def565b5b50919050565b615c218062000e636000396000f3fe6080604052600436106102b25760003560e01c806371cd56af1161017557806398acb5d8116100dc578063c49b9a8011610095578063e7dad4f91161006f578063e7dad4f914610ac2578063f2fde38b14610aff578063f34eb0b814610b28578063fb6287d214610b51576102b9565b8063c49b9a8014610a33578063dcda6af314610a5c578063dd62ed3e14610a85576102b9565b806398acb5d8146109255780639b0e2e861461094e5780639c1b8af514610977578063a457c2d7146109a2578063a9059cbb146109df578063b6a9987214610a1c576102b9565b8063871c128d1161012e578063871c128d146108295780638da5cb5b1461085257806391142cb31461087d57806395d89b41146108a857806396848136146108d35780639758f61d146108fc576102b9565b806371cd56af1461071b578063783478ad146107445780637bde92bc1461076f57806385141a771461079857806385d4787b146107c3578063870d365d146107ec576102b9565b80633ad10ef6116102195780635342acb4116101d25780635342acb41461060657806354a5df1f146106435780635ee58efc1461066e5780636c0a24eb1461069c57806370a08231146106c7578063715018a614610704576102b9565b80633ad10ef614610508578063441d801f1461053357806349bd5a5e1461055c5780634a74bb02146105875780634e781233146105b257806353030d91146105db576102b9565b80631694505e1161026b5780631694505e146103e457806318160ddd1461040f57806323b872dd1461043a57806327a14fc214610477578063313ce567146104a057806339509351146104cb576102b9565b80630492f055146102be57806306fdde03146102e9578063095ea7b3146103145780630ddc0976146103515780630e8322731461037e5780630fc709e5146103bb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7a565b6040516102e09190614375565b60405180910390f35b3480156102f557600080fd5b506102fe610b80565b60405161030b9190614429565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906144e9565b610c12565b6040516103489190614544565b60405180910390f35b34801561035d57600080fd5b50610366610c30565b6040516103759392919061455f565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190614596565b610c48565b6040516103b29190614544565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906145c3565b610c9e565b005b3480156103f057600080fd5b506103f9610d61565b6040516104069190614689565b60405180910390f35b34801561041b57600080fd5b50610424610d87565b6040516104319190614375565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c91906146a4565b610d91565b60405161046e9190614544565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906146f7565b610e6a565b005b3480156104ac57600080fd5b506104b5610f18565b6040516104c29190614740565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906144e9565b610f2f565b6040516104ff9190614544565b60405180910390f35b34801561051457600080fd5b5061051d610fe2565b60405161052a919061476a565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190614816565b611008565b005b34801561056857600080fd5b506105716110ad565b60405161057e919061476a565b60405180910390f35b34801561059357600080fd5b5061059c6110d3565b6040516105a99190614544565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190614876565b6110e6565b005b3480156105e757600080fd5b506105f0611198565b6040516105fd919061476a565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190614596565b6111be565b60405161063a9190614544565b60405180910390f35b34801561064f57600080fd5b50610658611214565b6040516106659190614375565b60405180910390f35b34801561067a57600080fd5b5061068361121a565b60405161069394939291906148a3565b60405180910390f35b3480156106a857600080fd5b506106b1611238565b6040516106be9190614375565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190614596565b61123e565b6040516106fb9190614375565b60405180910390f35b34801561071057600080fd5b50610719611287565b005b34801561072757600080fd5b50610742600480360381019061073d9190614816565b6113da565b005b34801561075057600080fd5b5061075961147f565b604051610766919061476a565b60405180910390f35b34801561077b57600080fd5b50610796600480360381019061079191906148e8565b6114a5565b005b3480156107a457600080fd5b506107ad61154c565b6040516107ba919061476a565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190614a66565b611572565b005b3480156107f857600080fd5b50610813600480360381019061080e91906146f7565b611615565b6040516108209190614375565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b91906146f7565b611858565b005b34801561085e57600080fd5b5061086761193b565b604051610874919061476a565b60405180910390f35b34801561088957600080fd5b50610892611964565b60405161089f9190614375565b60405180910390f35b3480156108b457600080fd5b506108bd61196a565b6040516108ca9190614429565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614816565b6119fc565b005b34801561090857600080fd5b50610923600480360381019061091e9190614aaf565b611aa1565b005b34801561093157600080fd5b5061094c60048036038101906109479190614596565b611b59565b005b34801561095a57600080fd5b5061097560048036038101906109709190614a66565b611c32565b005b34801561098357600080fd5b5061098c611cd5565b6040516109999190614375565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c491906144e9565b611cdb565b6040516109d69190614544565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a0191906144e9565b611da8565b604051610a139190614544565b60405180910390f35b348015610a2857600080fd5b50610a31611dc6565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a559190614876565b612146565b005b348015610a6857600080fd5b50610a836004803603810190610a7e9190614b58565b61222f565b005b348015610a9157600080fd5b50610aac6004803603810190610aa79190614bd9565b612399565b604051610ab99190614375565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae49190614596565b612420565b604051610af69190614544565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b219190614596565b612476565b005b348015610b3457600080fd5b50610b4f6004803603810190610b4a91906146f7565b612637565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190614c19565b6126e5565b005b60105481565b606060098054610b8f90614c9b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90614c9b565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000610c26610c1f612842565b848461284a565b6001905092915050565b60188060000154908060010154908060020154905083565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ca6612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614d18565b60405180910390fd5b83601b6002018190555082601b6000018190555081601b6001018190555080601b6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610d9e848484612a13565b610e5f84610daa612842565b610e5a85604051806060016040528060288152602001615b9f60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e10612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133419092919063ffffffff16565b61284a565b600190509392505050565b610e72612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614d18565b60405180910390fd5b633b9aca0081610f0f9190614d67565b60118190555050565b6000600b60009054906101000a900460ff16905090565b6000610fd8610f3c612842565b84610fd38560046000610f4d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b61284a565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611010612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490614d18565b60405180910390fd5b6110a8838383613403565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b6110ee612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117290614d18565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b601b8060000154908060010154908060020154908060030154905084565b60115481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614d18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113e2612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614d18565b60405180910390fd5b61147a8383836134ae565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114ad612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190614d18565b60405180910390fd5b81600f8190555080600e819055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61157a612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90614d18565b60405180910390fd5b611612816001613559565b50565b600080600267ffffffffffffffff81111561163357611632614928565b5b6040519080825280602002602001820160405280156116615781602001602082028036833780820191505090505b509050308160008151811061167957611678614dc1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190614e05565b8160018151811061175857611757614dc1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016117ef929190614ef0565b600060405180830381865afa15801561180c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906118359190614ff8565b60018151811061184857611847614dc1565b5b6020026020010151915050919050565b611860612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e490614d18565b60405180910390fd5b6016548103611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906150b3565b60405180910390fd5b8060168190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600a805461197990614c9b565b80601f01602080910402602001604051908101604052809291908181526020018280546119a590614c9b565b80156119f25780601f106119c7576101008083540402835291602001916119f2565b820191906000526020600020905b8154815290600101906020018083116119d557829003601f168201915b5050505050905090565b611a04612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890614d18565b60405180910390fd5b611a9c838383613650565b505050565b611aa9612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90614d18565b60405180910390fd5b826018600001819055508160186001018190555080601860020181905550505050565b611b61612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590614d18565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3a612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614d18565b60405180910390fd5b611cd2816000613559565b50565b60165481565b6000611d9e611ce8612842565b84611d9985604051806060016040528060258152602001615bc76025913960046000611d12612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133419092919063ffffffff16565b61284a565b6001905092915050565b6000611dbc611db5612842565b8484612a13565b6001905092915050565b611dce612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290614d18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390615145565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d9190614e05565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614e05565b6040518363ffffffff1660e01b8152600401612047929190615165565b6020604051808303816000875af1158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190614e05565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b61214e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290614d18565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122249190614544565b60405180910390a150565b60006006600061223d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90615200565b60405180910390fd5b82829050858590501461230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390615292565b60405180910390fd5b5b848490508110156123925761237e612323612842565b86868481811061233657612335614dc1565b5b905060200201602081019061234b9190614596565b633b9aca0086868681811061236357612362614dc1565b5b905060200201356123749190614d67565b60008060006136fb565b60018161238b91906152b2565b905061230d565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61247e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290614d18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125719061537a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61263f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614d18565b60405180910390fd5b633b9aca00816126dc9190614d67565b60108190555050565b6126ed612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277190614d18565b60405180910390fd5b82601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b09061540c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f9061549e565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a069190614375565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7990615530565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae8906155c2565b60405180910390fd5b60008111612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90615654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906156c0565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6c5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cab5750612c7b61193b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cea5750612cba61193b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612d0984612cfb8761123e565b6133a590919063ffffffff16565b9050612d1361193b565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d5161193b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ddb5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ec457600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e845750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba90615752565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612f695750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ff957601054841115612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906157e4565b60405180910390fd5b601154811115612ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fef90615876565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130a45750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061314e5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561314d5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15613160576001925061315f613c1e565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561320c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132625750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b85750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332a5781156132e457600d60029054906101000a900460ff166132de5760016132e1565b60005b91505b601154811115613329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332090615876565b60405180910390fd5b5b613339868686858760016136fb565b505050505050565b6000838311158290613389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133809190614429565b60405180910390fd5b50600083856133989190615896565b9050809150509392505050565b60008082846133b491906152b2565b9050838110156133f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f090615916565b60405180910390fd5b8091505092915050565b60005b838390508110156134a857600084848381811061342657613425614dc1565b5b905060200201602081019061343b9190614596565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806134a090615936565b915050613406565b50505050565b60005b838390508110156135535760008484838181106134d1576134d0614dc1565b5b90506020020160208101906134e69190614596565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061354b90615936565b9150506134b1565b50505050565b60005b825181101561364b57600083828151811061357a57613579614dc1565b5b6020026020010151905082156135e7576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613637565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061364390615936565b91505061355c565b505050565b60005b838390508110156136f557600084848381811061367357613672614dc1565b5b90506020020160208101906136889190614596565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806136ed90615936565b915050613653565b50505050565b600083613709576000613735565b613734606461372660186000015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b5b90508380156137415750825b156137c857613771606461376360186001015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b9050600060186002015411156137c757600061378c86611615565b9050600f5481106137c5576137c260646137b460186002015489613c8c90919063ffffffff16565b613d0690919063ffffffff16565b91505b505b5b60006137dd8287613d5090919063ffffffff16565b905061383186600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138c681600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395b82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139fb9190614375565b60405180910390a38215613c1457601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613a64919061476a565b600060405180830381600087803b158015613a7e57600080fd5b505af1925050508015613a8f575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613aeb919061476a565b600060405180830381600087803b158015613b0557600080fd5b505af1925050508015613b16575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796016546040518263ffffffff1660e01b8152600401613b749190614375565b6060604051808303816000875af1925050508015613bb057506040513d601f19601f82011682018060405250810190613bad919061597e565b60015b15613c13573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601654604051613c0794939291906148a3565b60405180910390a35050505b5b5050505050505050565b6000613c293061123e565b90506000811115613c89576000613c3f82611615565b9050600e548110158015613c605750600d60009054906101000a900460ff16155b8015613c785750600d60019054906101000a900460ff165b15613c8757613c8682613d9a565b5b505b50565b6000808303613c9e5760009050613d00565b60008284613cac9190614d67565b9050828482613cbb9190615a00565b14613cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf290615aa3565b60405180910390fd5b809150505b92915050565b6000613d4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fe6565b905092915050565b6000613d9283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613341565b905092915050565b6001600d60006101000a81548160ff021916908315150217905550613dbe81614049565b60004790506000613df06064613de2601b6001015485613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e1f6064613e11601b6002015486613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e4e6064613e40601b6000015487613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e7d6064613e6f601b6003015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613ee7573d6000803e3d6000fd5b50613ef18361428c565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613f59573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613fc2573d6000803e3d6000fd5b5050505050506000600d60006101000a81548160ff02191690831515021790555050565b6000808311829061402d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140249190614429565b60405180910390fd5b506000838561403c9190615a00565b9050809150509392505050565b6000600267ffffffffffffffff81111561406657614065614928565b5b6040519080825280602002602001820160405280156140945781602001602082028036833780820191505090505b50905030816000815181106140ac576140ab614dc1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141779190614e05565b8160018151811061418b5761418a614dc1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141f230600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461284a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614256959493929190615afe565b600060405180830381600087803b15801561427057600080fd5b505af1158015614284573d6000803e3d6000fd5b505050505050565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516142d490615b89565b60006040518083038185875af1925050503d8060008114614311576040519150601f19603f3d011682016040523d82523d6000602084013e614316565b606091505b505090508015614358577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161434f9190614375565b60405180910390a15b5050565b6000819050919050565b61436f8161435c565b82525050565b600060208201905061438a6000830184614366565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143ca5780820151818401526020810190506143af565b838111156143d9576000848401525b50505050565b6000601f19601f8301169050919050565b60006143fb82614390565b614405818561439b565b93506144158185602086016143ac565b61441e816143df565b840191505092915050565b6000602082019050818103600083015261444381846143f0565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061448a8261445f565b9050919050565b61449a8161447f565b81146144a557600080fd5b50565b6000813590506144b781614491565b92915050565b6144c68161435c565b81146144d157600080fd5b50565b6000813590506144e3816144bd565b92915050565b60008060408385031215614500576144ff614455565b5b600061450e858286016144a8565b925050602061451f858286016144d4565b9150509250929050565b60008115159050919050565b61453e81614529565b82525050565b60006020820190506145596000830184614535565b92915050565b60006060820190506145746000830186614366565b6145816020830185614366565b61458e6040830184614366565b949350505050565b6000602082840312156145ac576145ab614455565b5b60006145ba848285016144a8565b91505092915050565b600080600080608085870312156145dd576145dc614455565b5b60006145eb878288016144d4565b94505060206145fc878288016144d4565b935050604061460d878288016144d4565b925050606061461e878288016144d4565b91505092959194509250565b6000819050919050565b600061464f61464a6146458461445f565b61462a565b61445f565b9050919050565b600061466182614634565b9050919050565b600061467382614656565b9050919050565b61468381614668565b82525050565b600060208201905061469e600083018461467a565b92915050565b6000806000606084860312156146bd576146bc614455565b5b60006146cb868287016144a8565b93505060206146dc868287016144a8565b92505060406146ed868287016144d4565b9150509250925092565b60006020828403121561470d5761470c614455565b5b600061471b848285016144d4565b91505092915050565b600060ff82169050919050565b61473a81614724565b82525050565b60006020820190506147556000830184614731565b92915050565b6147648161447f565b82525050565b600060208201905061477f600083018461475b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147aa576147a9614785565b5b8235905067ffffffffffffffff8111156147c7576147c661478a565b5b6020830191508360208202830111156147e3576147e261478f565b5b9250929050565b6147f381614529565b81146147fe57600080fd5b50565b600081359050614810816147ea565b92915050565b60008060006040848603121561482f5761482e614455565b5b600084013567ffffffffffffffff81111561484d5761484c61445a565b5b61485986828701614794565b9350935050602061486c86828701614801565b9150509250925092565b60006020828403121561488c5761488b614455565b5b600061489a84828501614801565b91505092915050565b60006080820190506148b86000830187614366565b6148c56020830186614366565b6148d26040830185614366565b6148df6060830184614366565b95945050505050565b600080604083850312156148ff576148fe614455565b5b600061490d858286016144d4565b925050602061491e858286016144d4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614960826143df565b810181811067ffffffffffffffff8211171561497f5761497e614928565b5b80604052505050565b600061499261444b565b905061499e8282614957565b919050565b600067ffffffffffffffff8211156149be576149bd614928565b5b602082029050602081019050919050565b60006149e26149dd846149a3565b614988565b90508083825260208201905060208402830185811115614a0557614a0461478f565b5b835b81811015614a2e5780614a1a88826144a8565b845260208401935050602081019050614a07565b5050509392505050565b600082601f830112614a4d57614a4c614785565b5b8135614a5d8482602086016149cf565b91505092915050565b600060208284031215614a7c57614a7b614455565b5b600082013567ffffffffffffffff811115614a9a57614a9961445a565b5b614aa684828501614a38565b91505092915050565b600080600060608486031215614ac857614ac7614455565b5b6000614ad6868287016144d4565b9350506020614ae7868287016144d4565b9250506040614af8868287016144d4565b9150509250925092565b60008083601f840112614b1857614b17614785565b5b8235905067ffffffffffffffff811115614b3557614b3461478a565b5b602083019150836020820283011115614b5157614b5061478f565b5b9250929050565b60008060008060408587031215614b7257614b71614455565b5b600085013567ffffffffffffffff811115614b9057614b8f61445a565b5b614b9c87828801614794565b9450945050602085013567ffffffffffffffff811115614bbf57614bbe61445a565b5b614bcb87828801614b02565b925092505092959194509250565b60008060408385031215614bf057614bef614455565b5b6000614bfe858286016144a8565b9250506020614c0f858286016144a8565b9150509250929050565b600080600060608486031215614c3257614c31614455565b5b6000614c40868287016144a8565b9350506020614c51868287016144a8565b9250506040614c62868287016144a8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cb357607f821691505b602082108103614cc657614cc5614c6c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d0260208361439b565b9150614d0d82614ccc565b602082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d728261435c565b9150614d7d8361435c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614db657614db5614d38565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614dff81614491565b92915050565b600060208284031215614e1b57614e1a614455565b5b6000614e2984828501614df0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e678161447f565b82525050565b6000614e798383614e5e565b60208301905092915050565b6000602082019050919050565b6000614e9d82614e32565b614ea78185614e3d565b9350614eb283614e4e565b8060005b83811015614ee3578151614eca8882614e6d565b9750614ed583614e85565b925050600181019050614eb6565b5085935050505092915050565b6000604082019050614f056000830185614366565b8181036020830152614f178184614e92565b90509392505050565b600067ffffffffffffffff821115614f3b57614f3a614928565b5b602082029050602081019050919050565b600081519050614f5b816144bd565b92915050565b6000614f74614f6f84614f20565b614988565b90508083825260208201905060208402830185811115614f9757614f9661478f565b5b835b81811015614fc05780614fac8882614f4c565b845260208401935050602081019050614f99565b5050509392505050565b600082601f830112614fdf57614fde614785565b5b8151614fef848260208601614f61565b91505092915050565b60006020828403121561500e5761500d614455565b5b600082015167ffffffffffffffff81111561502c5761502b61445a565b5b61503884828501614fca565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b600061509d602c8361439b565b91506150a882615041565b604082019050919050565b600060208201905081810360008301526150cc81615090565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061512f60228361439b565b915061513a826150d3565b604082019050919050565b6000602082019050818103600083015261515e81615122565b9050919050565b600060408201905061517a600083018561475b565b615187602083018461475b565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006151ea602d8361439b565b91506151f58261518e565b604082019050919050565b60006020820190508181036000830152615219816151dd565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b600061527c602a8361439b565b915061528782615220565b604082019050919050565b600060208201905081810360008301526152ab8161526f565b9050919050565b60006152bd8261435c565b91506152c88361435c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152fd576152fc614d38565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536460268361439b565b915061536f82615308565b604082019050919050565b6000602082019050818103600083015261539381615357565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153f660248361439b565b91506154018261539a565b604082019050919050565b60006020820190508181036000830152615425816153e9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061548860228361439b565b91506154938261542c565b604082019050919050565b600060208201905081810360008301526154b78161547b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061551a60258361439b565b9150615525826154be565b604082019050919050565b600060208201905081810360008301526155498161550d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155ac60238361439b565b91506155b782615550565b604082019050919050565b600060208201905081810360008301526155db8161559f565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061563e60298361439b565b9150615649826155e2565b604082019050919050565b6000602082019050818103600083015261566d81615631565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b60006156aa601e8361439b565b91506156b582615674565b602082019050919050565b600060208201905081810360008301526156d98161569d565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b600061573c602f8361439b565b9150615747826156e0565b604082019050919050565b6000602082019050818103600083015261576b8161572f565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006157ce60288361439b565b91506157d982615772565b604082019050919050565b600060208201905081810360008301526157fd816157c1565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b600061586060258361439b565b915061586b82615804565b604082019050919050565b6000602082019050818103600083015261588f81615853565b9050919050565b60006158a18261435c565b91506158ac8361435c565b9250828210156158bf576158be614d38565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615900601b8361439b565b915061590b826158ca565b602082019050919050565b6000602082019050818103600083015261592f816158f3565b9050919050565b60006159418261435c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361597357615972614d38565b5b600182019050919050565b60008060006060848603121561599757615996614455565b5b60006159a586828701614f4c565b93505060206159b686828701614f4c565b92505060406159c786828701614f4c565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a0b8261435c565b9150615a168361435c565b925082615a2657615a256159d1565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a8d60218361439b565b9150615a9882615a31565b604082019050919050565b60006020820190508181036000830152615abc81615a80565b9050919050565b6000819050919050565b6000615ae8615ae3615ade84615ac3565b61462a565b61435c565b9050919050565b615af881615acd565b82525050565b600060a082019050615b136000830188614366565b615b206020830187615aef565b8181036040830152615b328186614e92565b9050615b41606083018561475b565b615b4e6080830184614366565b9695505050505050565b600081905092915050565b50565b6000615b73600083615b58565b9150615b7e82615b63565b600082019050919050565b6000615b9482615b66565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f8f7ca5f58f273afdc25b8c47e836fa7a07be471ad9a42f616db62e3f5f480e264736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c806371cd56af1161017557806398acb5d8116100dc578063c49b9a8011610095578063e7dad4f91161006f578063e7dad4f914610ac2578063f2fde38b14610aff578063f34eb0b814610b28578063fb6287d214610b51576102b9565b8063c49b9a8014610a33578063dcda6af314610a5c578063dd62ed3e14610a85576102b9565b806398acb5d8146109255780639b0e2e861461094e5780639c1b8af514610977578063a457c2d7146109a2578063a9059cbb146109df578063b6a9987214610a1c576102b9565b8063871c128d1161012e578063871c128d146108295780638da5cb5b1461085257806391142cb31461087d57806395d89b41146108a857806396848136146108d35780639758f61d146108fc576102b9565b806371cd56af1461071b578063783478ad146107445780637bde92bc1461076f57806385141a771461079857806385d4787b146107c3578063870d365d146107ec576102b9565b80633ad10ef6116102195780635342acb4116101d25780635342acb41461060657806354a5df1f146106435780635ee58efc1461066e5780636c0a24eb1461069c57806370a08231146106c7578063715018a614610704576102b9565b80633ad10ef614610508578063441d801f1461053357806349bd5a5e1461055c5780634a74bb02146105875780634e781233146105b257806353030d91146105db576102b9565b80631694505e1161026b5780631694505e146103e457806318160ddd1461040f57806323b872dd1461043a57806327a14fc214610477578063313ce567146104a057806339509351146104cb576102b9565b80630492f055146102be57806306fdde03146102e9578063095ea7b3146103145780630ddc0976146103515780630e8322731461037e5780630fc709e5146103bb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7a565b6040516102e09190614375565b60405180910390f35b3480156102f557600080fd5b506102fe610b80565b60405161030b9190614429565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906144e9565b610c12565b6040516103489190614544565b60405180910390f35b34801561035d57600080fd5b50610366610c30565b6040516103759392919061455f565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190614596565b610c48565b6040516103b29190614544565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906145c3565b610c9e565b005b3480156103f057600080fd5b506103f9610d61565b6040516104069190614689565b60405180910390f35b34801561041b57600080fd5b50610424610d87565b6040516104319190614375565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c91906146a4565b610d91565b60405161046e9190614544565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906146f7565b610e6a565b005b3480156104ac57600080fd5b506104b5610f18565b6040516104c29190614740565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906144e9565b610f2f565b6040516104ff9190614544565b60405180910390f35b34801561051457600080fd5b5061051d610fe2565b60405161052a919061476a565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190614816565b611008565b005b34801561056857600080fd5b506105716110ad565b60405161057e919061476a565b60405180910390f35b34801561059357600080fd5b5061059c6110d3565b6040516105a99190614544565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190614876565b6110e6565b005b3480156105e757600080fd5b506105f0611198565b6040516105fd919061476a565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190614596565b6111be565b60405161063a9190614544565b60405180910390f35b34801561064f57600080fd5b50610658611214565b6040516106659190614375565b60405180910390f35b34801561067a57600080fd5b5061068361121a565b60405161069394939291906148a3565b60405180910390f35b3480156106a857600080fd5b506106b1611238565b6040516106be9190614375565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190614596565b61123e565b6040516106fb9190614375565b60405180910390f35b34801561071057600080fd5b50610719611287565b005b34801561072757600080fd5b50610742600480360381019061073d9190614816565b6113da565b005b34801561075057600080fd5b5061075961147f565b604051610766919061476a565b60405180910390f35b34801561077b57600080fd5b50610796600480360381019061079191906148e8565b6114a5565b005b3480156107a457600080fd5b506107ad61154c565b6040516107ba919061476a565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190614a66565b611572565b005b3480156107f857600080fd5b50610813600480360381019061080e91906146f7565b611615565b6040516108209190614375565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b91906146f7565b611858565b005b34801561085e57600080fd5b5061086761193b565b604051610874919061476a565b60405180910390f35b34801561088957600080fd5b50610892611964565b60405161089f9190614375565b60405180910390f35b3480156108b457600080fd5b506108bd61196a565b6040516108ca9190614429565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614816565b6119fc565b005b34801561090857600080fd5b50610923600480360381019061091e9190614aaf565b611aa1565b005b34801561093157600080fd5b5061094c60048036038101906109479190614596565b611b59565b005b34801561095a57600080fd5b5061097560048036038101906109709190614a66565b611c32565b005b34801561098357600080fd5b5061098c611cd5565b6040516109999190614375565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c491906144e9565b611cdb565b6040516109d69190614544565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a0191906144e9565b611da8565b604051610a139190614544565b60405180910390f35b348015610a2857600080fd5b50610a31611dc6565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a559190614876565b612146565b005b348015610a6857600080fd5b50610a836004803603810190610a7e9190614b58565b61222f565b005b348015610a9157600080fd5b50610aac6004803603810190610aa79190614bd9565b612399565b604051610ab99190614375565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae49190614596565b612420565b604051610af69190614544565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b219190614596565b612476565b005b348015610b3457600080fd5b50610b4f6004803603810190610b4a91906146f7565b612637565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190614c19565b6126e5565b005b60105481565b606060098054610b8f90614c9b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90614c9b565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000610c26610c1f612842565b848461284a565b6001905092915050565b60188060000154908060010154908060020154905083565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ca6612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614d18565b60405180910390fd5b83601b6002018190555082601b6000018190555081601b6001018190555080601b6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610d9e848484612a13565b610e5f84610daa612842565b610e5a85604051806060016040528060288152602001615b9f60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e10612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133419092919063ffffffff16565b61284a565b600190509392505050565b610e72612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614d18565b60405180910390fd5b633b9aca0081610f0f9190614d67565b60118190555050565b6000600b60009054906101000a900460ff16905090565b6000610fd8610f3c612842565b84610fd38560046000610f4d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b61284a565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611010612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490614d18565b60405180910390fd5b6110a8838383613403565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b6110ee612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117290614d18565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b601b8060000154908060010154908060020154908060030154905084565b60115481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614d18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113e2612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614d18565b60405180910390fd5b61147a8383836134ae565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114ad612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190614d18565b60405180910390fd5b81600f8190555080600e819055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61157a612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90614d18565b60405180910390fd5b611612816001613559565b50565b600080600267ffffffffffffffff81111561163357611632614928565b5b6040519080825280602002602001820160405280156116615781602001602082028036833780820191505090505b509050308160008151811061167957611678614dc1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190614e05565b8160018151811061175857611757614dc1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016117ef929190614ef0565b600060405180830381865afa15801561180c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906118359190614ff8565b60018151811061184857611847614dc1565b5b6020026020010151915050919050565b611860612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e490614d18565b60405180910390fd5b6016548103611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906150b3565b60405180910390fd5b8060168190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600a805461197990614c9b565b80601f01602080910402602001604051908101604052809291908181526020018280546119a590614c9b565b80156119f25780601f106119c7576101008083540402835291602001916119f2565b820191906000526020600020905b8154815290600101906020018083116119d557829003601f168201915b5050505050905090565b611a04612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890614d18565b60405180910390fd5b611a9c838383613650565b505050565b611aa9612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90614d18565b60405180910390fd5b826018600001819055508160186001018190555080601860020181905550505050565b611b61612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590614d18565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3a612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614d18565b60405180910390fd5b611cd2816000613559565b50565b60165481565b6000611d9e611ce8612842565b84611d9985604051806060016040528060258152602001615bc76025913960046000611d12612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133419092919063ffffffff16565b61284a565b6001905092915050565b6000611dbc611db5612842565b8484612a13565b6001905092915050565b611dce612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290614d18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390615145565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d9190614e05565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614e05565b6040518363ffffffff1660e01b8152600401612047929190615165565b6020604051808303816000875af1158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190614e05565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b61214e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290614d18565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122249190614544565b60405180910390a150565b60006006600061223d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90615200565b60405180910390fd5b82829050858590501461230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390615292565b60405180910390fd5b5b848490508110156123925761237e612323612842565b86868481811061233657612335614dc1565b5b905060200201602081019061234b9190614596565b633b9aca0086868681811061236357612362614dc1565b5b905060200201356123749190614d67565b60008060006136fb565b60018161238b91906152b2565b905061230d565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61247e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290614d18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125719061537a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61263f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614d18565b60405180910390fd5b633b9aca00816126dc9190614d67565b60108190555050565b6126ed612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277190614d18565b60405180910390fd5b82601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b09061540c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f9061549e565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a069190614375565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7990615530565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae8906155c2565b60405180910390fd5b60008111612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90615654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906156c0565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6c5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cab5750612c7b61193b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cea5750612cba61193b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612d0984612cfb8761123e565b6133a590919063ffffffff16565b9050612d1361193b565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d5161193b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ddb5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ec457600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e845750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba90615752565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612f695750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ff957601054841115612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906157e4565b60405180910390fd5b601154811115612ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fef90615876565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130a45750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061314e5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561314d5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15613160576001925061315f613c1e565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561320c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132625750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b85750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332a5781156132e457600d60029054906101000a900460ff166132de5760016132e1565b60005b91505b601154811115613329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332090615876565b60405180910390fd5b5b613339868686858760016136fb565b505050505050565b6000838311158290613389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133809190614429565b60405180910390fd5b50600083856133989190615896565b9050809150509392505050565b60008082846133b491906152b2565b9050838110156133f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f090615916565b60405180910390fd5b8091505092915050565b60005b838390508110156134a857600084848381811061342657613425614dc1565b5b905060200201602081019061343b9190614596565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806134a090615936565b915050613406565b50505050565b60005b838390508110156135535760008484838181106134d1576134d0614dc1565b5b90506020020160208101906134e69190614596565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061354b90615936565b9150506134b1565b50505050565b60005b825181101561364b57600083828151811061357a57613579614dc1565b5b6020026020010151905082156135e7576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613637565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061364390615936565b91505061355c565b505050565b60005b838390508110156136f557600084848381811061367357613672614dc1565b5b90506020020160208101906136889190614596565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806136ed90615936565b915050613653565b50505050565b600083613709576000613735565b613734606461372660186000015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b5b90508380156137415750825b156137c857613771606461376360186001015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b9050600060186002015411156137c757600061378c86611615565b9050600f5481106137c5576137c260646137b460186002015489613c8c90919063ffffffff16565b613d0690919063ffffffff16565b91505b505b5b60006137dd8287613d5090919063ffffffff16565b905061383186600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138c681600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395b82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139fb9190614375565b60405180910390a38215613c1457601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613a64919061476a565b600060405180830381600087803b158015613a7e57600080fd5b505af1925050508015613a8f575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613aeb919061476a565b600060405180830381600087803b158015613b0557600080fd5b505af1925050508015613b16575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796016546040518263ffffffff1660e01b8152600401613b749190614375565b6060604051808303816000875af1925050508015613bb057506040513d601f19601f82011682018060405250810190613bad919061597e565b60015b15613c13573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601654604051613c0794939291906148a3565b60405180910390a35050505b5b5050505050505050565b6000613c293061123e565b90506000811115613c89576000613c3f82611615565b9050600e548110158015613c605750600d60009054906101000a900460ff16155b8015613c785750600d60019054906101000a900460ff165b15613c8757613c8682613d9a565b5b505b50565b6000808303613c9e5760009050613d00565b60008284613cac9190614d67565b9050828482613cbb9190615a00565b14613cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf290615aa3565b60405180910390fd5b809150505b92915050565b6000613d4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fe6565b905092915050565b6000613d9283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613341565b905092915050565b6001600d60006101000a81548160ff021916908315150217905550613dbe81614049565b60004790506000613df06064613de2601b6001015485613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e1f6064613e11601b6002015486613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e4e6064613e40601b6000015487613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e7d6064613e6f601b6003015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613ee7573d6000803e3d6000fd5b50613ef18361428c565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613f59573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613fc2573d6000803e3d6000fd5b5050505050506000600d60006101000a81548160ff02191690831515021790555050565b6000808311829061402d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140249190614429565b60405180910390fd5b506000838561403c9190615a00565b9050809150509392505050565b6000600267ffffffffffffffff81111561406657614065614928565b5b6040519080825280602002602001820160405280156140945781602001602082028036833780820191505090505b50905030816000815181106140ac576140ab614dc1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141779190614e05565b8160018151811061418b5761418a614dc1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141f230600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461284a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614256959493929190615afe565b600060405180830381600087803b15801561427057600080fd5b505af1158015614284573d6000803e3d6000fd5b505050505050565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516142d490615b89565b60006040518083038185875af1925050503d8060008114614311576040519150601f19603f3d011682016040523d82523d6000602084013e614316565b606091505b505090508015614358577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161434f9190614375565b60405180910390a15b5050565b6000819050919050565b61436f8161435c565b82525050565b600060208201905061438a6000830184614366565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143ca5780820151818401526020810190506143af565b838111156143d9576000848401525b50505050565b6000601f19601f8301169050919050565b60006143fb82614390565b614405818561439b565b93506144158185602086016143ac565b61441e816143df565b840191505092915050565b6000602082019050818103600083015261444381846143f0565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061448a8261445f565b9050919050565b61449a8161447f565b81146144a557600080fd5b50565b6000813590506144b781614491565b92915050565b6144c68161435c565b81146144d157600080fd5b50565b6000813590506144e3816144bd565b92915050565b60008060408385031215614500576144ff614455565b5b600061450e858286016144a8565b925050602061451f858286016144d4565b9150509250929050565b60008115159050919050565b61453e81614529565b82525050565b60006020820190506145596000830184614535565b92915050565b60006060820190506145746000830186614366565b6145816020830185614366565b61458e6040830184614366565b949350505050565b6000602082840312156145ac576145ab614455565b5b60006145ba848285016144a8565b91505092915050565b600080600080608085870312156145dd576145dc614455565b5b60006145eb878288016144d4565b94505060206145fc878288016144d4565b935050604061460d878288016144d4565b925050606061461e878288016144d4565b91505092959194509250565b6000819050919050565b600061464f61464a6146458461445f565b61462a565b61445f565b9050919050565b600061466182614634565b9050919050565b600061467382614656565b9050919050565b61468381614668565b82525050565b600060208201905061469e600083018461467a565b92915050565b6000806000606084860312156146bd576146bc614455565b5b60006146cb868287016144a8565b93505060206146dc868287016144a8565b92505060406146ed868287016144d4565b9150509250925092565b60006020828403121561470d5761470c614455565b5b600061471b848285016144d4565b91505092915050565b600060ff82169050919050565b61473a81614724565b82525050565b60006020820190506147556000830184614731565b92915050565b6147648161447f565b82525050565b600060208201905061477f600083018461475b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147aa576147a9614785565b5b8235905067ffffffffffffffff8111156147c7576147c661478a565b5b6020830191508360208202830111156147e3576147e261478f565b5b9250929050565b6147f381614529565b81146147fe57600080fd5b50565b600081359050614810816147ea565b92915050565b60008060006040848603121561482f5761482e614455565b5b600084013567ffffffffffffffff81111561484d5761484c61445a565b5b61485986828701614794565b9350935050602061486c86828701614801565b9150509250925092565b60006020828403121561488c5761488b614455565b5b600061489a84828501614801565b91505092915050565b60006080820190506148b86000830187614366565b6148c56020830186614366565b6148d26040830185614366565b6148df6060830184614366565b95945050505050565b600080604083850312156148ff576148fe614455565b5b600061490d858286016144d4565b925050602061491e858286016144d4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614960826143df565b810181811067ffffffffffffffff8211171561497f5761497e614928565b5b80604052505050565b600061499261444b565b905061499e8282614957565b919050565b600067ffffffffffffffff8211156149be576149bd614928565b5b602082029050602081019050919050565b60006149e26149dd846149a3565b614988565b90508083825260208201905060208402830185811115614a0557614a0461478f565b5b835b81811015614a2e5780614a1a88826144a8565b845260208401935050602081019050614a07565b5050509392505050565b600082601f830112614a4d57614a4c614785565b5b8135614a5d8482602086016149cf565b91505092915050565b600060208284031215614a7c57614a7b614455565b5b600082013567ffffffffffffffff811115614a9a57614a9961445a565b5b614aa684828501614a38565b91505092915050565b600080600060608486031215614ac857614ac7614455565b5b6000614ad6868287016144d4565b9350506020614ae7868287016144d4565b9250506040614af8868287016144d4565b9150509250925092565b60008083601f840112614b1857614b17614785565b5b8235905067ffffffffffffffff811115614b3557614b3461478a565b5b602083019150836020820283011115614b5157614b5061478f565b5b9250929050565b60008060008060408587031215614b7257614b71614455565b5b600085013567ffffffffffffffff811115614b9057614b8f61445a565b5b614b9c87828801614794565b9450945050602085013567ffffffffffffffff811115614bbf57614bbe61445a565b5b614bcb87828801614b02565b925092505092959194509250565b60008060408385031215614bf057614bef614455565b5b6000614bfe858286016144a8565b9250506020614c0f858286016144a8565b9150509250929050565b600080600060608486031215614c3257614c31614455565b5b6000614c40868287016144a8565b9350506020614c51868287016144a8565b9250506040614c62868287016144a8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cb357607f821691505b602082108103614cc657614cc5614c6c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d0260208361439b565b9150614d0d82614ccc565b602082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d728261435c565b9150614d7d8361435c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614db657614db5614d38565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614dff81614491565b92915050565b600060208284031215614e1b57614e1a614455565b5b6000614e2984828501614df0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e678161447f565b82525050565b6000614e798383614e5e565b60208301905092915050565b6000602082019050919050565b6000614e9d82614e32565b614ea78185614e3d565b9350614eb283614e4e565b8060005b83811015614ee3578151614eca8882614e6d565b9750614ed583614e85565b925050600181019050614eb6565b5085935050505092915050565b6000604082019050614f056000830185614366565b8181036020830152614f178184614e92565b90509392505050565b600067ffffffffffffffff821115614f3b57614f3a614928565b5b602082029050602081019050919050565b600081519050614f5b816144bd565b92915050565b6000614f74614f6f84614f20565b614988565b90508083825260208201905060208402830185811115614f9757614f9661478f565b5b835b81811015614fc05780614fac8882614f4c565b845260208401935050602081019050614f99565b5050509392505050565b600082601f830112614fdf57614fde614785565b5b8151614fef848260208601614f61565b91505092915050565b60006020828403121561500e5761500d614455565b5b600082015167ffffffffffffffff81111561502c5761502b61445a565b5b61503884828501614fca565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b600061509d602c8361439b565b91506150a882615041565b604082019050919050565b600060208201905081810360008301526150cc81615090565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061512f60228361439b565b915061513a826150d3565b604082019050919050565b6000602082019050818103600083015261515e81615122565b9050919050565b600060408201905061517a600083018561475b565b615187602083018461475b565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006151ea602d8361439b565b91506151f58261518e565b604082019050919050565b60006020820190508181036000830152615219816151dd565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b600061527c602a8361439b565b915061528782615220565b604082019050919050565b600060208201905081810360008301526152ab8161526f565b9050919050565b60006152bd8261435c565b91506152c88361435c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152fd576152fc614d38565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536460268361439b565b915061536f82615308565b604082019050919050565b6000602082019050818103600083015261539381615357565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153f660248361439b565b91506154018261539a565b604082019050919050565b60006020820190508181036000830152615425816153e9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061548860228361439b565b91506154938261542c565b604082019050919050565b600060208201905081810360008301526154b78161547b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061551a60258361439b565b9150615525826154be565b604082019050919050565b600060208201905081810360008301526155498161550d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155ac60238361439b565b91506155b782615550565b604082019050919050565b600060208201905081810360008301526155db8161559f565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061563e60298361439b565b9150615649826155e2565b604082019050919050565b6000602082019050818103600083015261566d81615631565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b60006156aa601e8361439b565b91506156b582615674565b602082019050919050565b600060208201905081810360008301526156d98161569d565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b600061573c602f8361439b565b9150615747826156e0565b604082019050919050565b6000602082019050818103600083015261576b8161572f565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006157ce60288361439b565b91506157d982615772565b604082019050919050565b600060208201905081810360008301526157fd816157c1565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b600061586060258361439b565b915061586b82615804565b604082019050919050565b6000602082019050818103600083015261588f81615853565b9050919050565b60006158a18261435c565b91506158ac8361435c565b9250828210156158bf576158be614d38565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615900601b8361439b565b915061590b826158ca565b602082019050919050565b6000602082019050818103600083015261592f816158f3565b9050919050565b60006159418261435c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361597357615972614d38565b5b600182019050919050565b60008060006060848603121561599757615996614455565b5b60006159a586828701614f4c565b93505060206159b686828701614f4c565b92505060406159c786828701614f4c565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a0b8261435c565b9150615a168361435c565b925082615a2657615a256159d1565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a8d60218361439b565b9150615a9882615a31565b604082019050919050565b60006020820190508181036000830152615abc81615a80565b9050919050565b6000819050919050565b6000615ae8615ae3615ade84615ac3565b61462a565b61435c565b9050919050565b615af881615acd565b82525050565b600060a082019050615b136000830188614366565b615b206020830187615aef565b8181036040830152615b328186614e92565b9050615b41606083018561475b565b615b4e6080830184614366565b9695505050505050565b600081905092915050565b50565b6000615b73600083615b58565b9150615b7e82615b63565b600082019050919050565b6000615b9482615b66565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f8f7ca5f58f273afdc25b8c47e836fa7a07be471ad9a42f616db62e3f5f480e264736f6c634300080d0033
Deployed Bytecode Sourcemap
18901:16167:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20264:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22199:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23032:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21283:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25202:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26950:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19329:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22476:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23201:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24560:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22385:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23522:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20556:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24703:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19442:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20051:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28859:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20472:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28728:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20135:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21312:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;20326:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22579:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;25037:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20391:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25587:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20633:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27603:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28448:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31646:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20201:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22290:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24872:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26724:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32623:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27739:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20710:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23748:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22706:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25784:311;;;;;;;;;;;;;:::i;:::-;;28232:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24027:525;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22881:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27486:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26593:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27254:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20264:55;;;;:::o;22199:83::-;22236:13;22269:5;22262:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22199:83;:::o;23032:161::-;23107:4;23124:39;23133:12;:10;:12::i;:::-;23147:7;23156:6;23124:8;:39::i;:::-;23181:4;23174:11;;23032:161;;;;:::o;21283:22::-;;;;;;;;;;;;;;;;;;;:::o;25202:125::-;25267:4;25291:22;:28;25314:4;25291:28;;;;;;;;;;;;;;;;;;;;;;;;;25284:35;;25202:125;;;:::o;26950:296::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27101:8:::1;27077:12;:21;;:32;;;;27143:7;27120:12;:20;;:30;;;;27187:10;27161:12;:23;;:36;;;;27231:7;27208:12;:20;;:30;;;;26950:296:::0;;;;:::o;19329:106::-;;;;;;;;;;;;;:::o;22476:95::-;22529:7;22556;;22549:14;;22476:95;:::o;23201:313::-;23299:4;23316:36;23326:6;23334:9;23345:6;23316:9;:36::i;:::-;23363:121;23372:6;23380:12;:10;:12::i;:::-;23394:89;23432:6;23394:89;;;;;;;;;;;;;;;;;:11;:19;23406:6;23394:19;;;;;;;;;;;;;;;:33;23414:12;:10;:12::i;:::-;23394:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23363:8;:121::i;:::-;23502:4;23495:11;;23201:313;;;;;:::o;24560:135::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24682:5:::1;24664:15;:23;;;;:::i;:::-;24645:16;:42;;;;24560:135:::0;:::o;22385:83::-;22426:5;22451:9;;;;;;;;;;;22444:16;;22385:83;:::o;23522:218::-;23610:4;23627:83;23636:12;:10;:12::i;:::-;23650:7;23659:50;23698:10;23659:11;:25;23671:12;:10;:12::i;:::-;23659:25;;;;;;;;;;;;;;;:34;23685:7;23659:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23627:8;:83::i;:::-;23728:4;23721:11;;23522:218;;;;:::o;20556:70::-;;;;;;;;;;;;;:::o;24703:161::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24815:41:::1;24828:9;;24839:16;24815:12;:41::i;:::-;24703:161:::0;;;:::o;19442:41::-;;;;;;;;;;;;;:::o;20051:40::-;;;;;;;;;;;;;:::o;28859:130::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28968:13:::1;28948:17;;:33;;;;;;;;;;;;;;;;;;28859:130:::0;:::o;20472:77::-;;;;;;;;;;;;;:::o;28728:123::-;28792:4;28816:18;:27;28835:7;28816:27;;;;;;;;;;;;;;;;;;;;;;;;;28809:34;;28728:123;;;:::o;20135:50::-;;;;:::o;21312:32::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20326:58::-;;;;:::o;22579:119::-;22645:7;22672:9;:18;22682:7;22672:18;;;;;;;;;;;;;;;;22665:25;;22579:119;;;:::o;17743:148::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17850:1:::1;17813:40;;17834:6;::::0;::::1;;;;;;;;17813:40;;;;;;;;;;;;17881:1;17864:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17743:148::o:0;25037:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25147:39:::1;25164:9;;25175:10;25147:16;:39::i;:::-;25037:157:::0;;;:::o;20391:74::-;;;;;;;;;;;;;:::o;25587:189::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25711:14:::1;25695:13;:30;;;;25753:15;25736:14;:32;;;;25587:189:::0;;:::o;20633:70::-;;;;;;;;;;;;;:::o;27603:128::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27687:36:::1;27707:9;27718:4;27687:19;:36::i;:::-;27603:128:::0;:::o;28448:272::-;28508:4;28526:21;28564:1;28550:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28526:40;;28595:4;28577;28582:1;28577:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28621:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28611:4;28616:1;28611:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28661:15;;;;;;;;;;;:29;;;28691:11;28704:4;28661:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28710:1;28661:51;;;;;;;;:::i;:::-;;;;;;;;28654:58;;;28448:272;;;:::o;31646:209::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31744:16:::1;;31732:8;:28:::0;31724:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31839:8;31820:16;:27;;;;31646:209:::0;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;20201:47::-;;;;:::o;22290:87::-;22329:13;22362:7;22355:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22290:87;:::o;24872:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24977:44:::1;24996:9;;25007:13;24977:18;:44::i;:::-;24872:157:::0;;;:::o;26724:218::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26846:6:::1;26829:7;:14;;:23;;;;26881:7;26863;:15;;:25;;;;26922:12;26899:7;:20;;:35;;;;26724:218:::0;;;:::o;32623:166::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32756:23:::1;32714:15;;:67;;;;;;;;;;;;;;;;;;32623:166:::0;:::o;27739:131::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27825:37:::1;27845:9;27856:5;27825:19;:37::i;:::-;27739:131:::0;:::o;20710:39::-;;;;:::o;23748:269::-;23841:4;23858:129;23867:12;:10;:12::i;:::-;23881:7;23890:96;23929:15;23890:96;;;;;;;;;;;;;;;;;:11;:25;23902:12;:10;:12::i;:::-;23890:25;;;;;;;;;;;;;;;:34;23916:7;23890:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23858:8;:129::i;:::-;24005:4;23998:11;;23748:269;;;;:::o;22706:167::-;22784:4;22801:42;22811:12;:10;:12::i;:::-;22825:9;22836:6;22801:9;:42::i;:::-;22861:4;22854:11;;22706:167;;;;:::o;25784:311::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25871:1:::1;25846:27;;:13;;;;;;;;;;;:27;;;25838:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25956:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25938:55;;;26002:4;26009:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25938:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25922:13;;:110;;;;;;;;;;;;;;;;;;26083:4;26043:22;:37;26066:13;;;;;;;;;;;26043:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;25784:311::o:0;28232:171::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28333:8:::1;28309:21;;:32;;;;;;;;;;;;;;;;;;28357:38;28386:8;28357:38;;;;;;:::i;:::-;;;;;;;;28232:171:::0;:::o;24027:525::-;24124:16;24163:18;:32;24182:12;:10;:12::i;:::-;24163:32;;;;;;;;;;;;;;;;;;;;;;;;;24155:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24285:7;;:14;;24264:10;;:17;;:35;24256:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24357:188;24374:10;;:17;;24363:8;:28;24357:188;;;24407:98;24422:12;:10;:12::i;:::-;24436:10;;24447:8;24436:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24478:5;24458:7;;24466:8;24458:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;24485:5;24492;24499;24407:14;:98::i;:::-;24532:1;24520:13;;;;;:::i;:::-;;;24357:188;;;24113:439;24027:525;;;;:::o;22881:143::-;22962:7;22989:11;:18;23001:5;22989:18;;;;;;;;;;;;;;;:27;23008:7;22989:27;;;;;;;;;;;;;;;;22982:34;;22881:143;;;;:::o;27486:109::-;27547:4;27571:10;:16;27582:4;27571:16;;;;;;;;;;;;;;;;;;;;;;;;;27564:23;;27486:109;;;:::o;18046:244::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:1:::1;18135:22;;:8;:22;;::::0;18127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18245:8;18216:38;;18237:6;::::0;::::1;;;;;;;;18216:38;;;;;;;;;;;;18274:8;18265:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18046:244:::0;:::o;26593:123::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26703:5:::1;26688:12;:20;;;;:::i;:::-;26672:13;:36;;;;26593:123:::0;:::o;27254:224::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27383:7:::1;27370:10;;:20;;;;;;;;;;;;;;;;;;27418:7;27401:14;;:24;;;;;;;;;;;;;;;;;;27456:14;27436:17;;:34;;;;;;;;;;;;;;;;;;27254:224:::0;;;:::o;9599:98::-;9652:7;9679:10;9672:17;;9599:98;:::o;28997:337::-;29107:1;29090:19;;:5;:19;;;29082:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29188:1;29169:21;;:7;:21;;;29161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29272:6;29242:11;:18;29254:5;29242:18;;;;;;;;;;;;;;;:27;29261:7;29242:27;;;;;;;;;;;;;;;:36;;;;29310:7;29294:32;;29303:5;29294:32;;;29319:6;29294:32;;;;;;:::i;:::-;;;;;;;;28997:337;;;:::o;29342:1843::-;29446:1;29430:18;;:4;:18;;;29422:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29523:1;29509:16;;:2;:16;;;29501:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29593:1;29584:6;:10;29576:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29684:1;29659:27;;:13;;;;;;;;;;;:27;;;29651:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29731:11;29761:13;29778:18;:24;29797:4;29778:24;;;;;;;;;;;;;;;;;;;;;;;;;29777:25;:52;;;;;29807:18;:22;29826:2;29807:22;;;;;;;;;;;;;;;;;;;;;;;;;29806:23;29777:52;:71;;;;;29841:7;:5;:7::i;:::-;29833:15;;:4;:15;;;;29777:71;:88;;;;;29858:7;:5;:7::i;:::-;29852:13;;:2;:13;;;;29777:88;29761:104;;29876:21;29900:25;29918:6;29900:13;29910:2;29900:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;29876:49;;30036:7;:5;:7::i;:::-;30028:15;;:4;:15;;;;:32;;;;;30053:7;:5;:7::i;:::-;30047:13;;:2;:13;;;;30028:32;:52;;;;;30070:10;;;;;;;;;;;30064:16;;:2;:16;;;;30028:52;30025:180;;;30106:10;:16;30117:4;30106:16;;;;;;;;;;;;;;;;;;;;;;;;;30105:17;:36;;;;;30127:10;:14;30138:2;30127:14;;;;;;;;;;;;;;;;;;;;;;;;;30126:15;30105:36;30097:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;30025:180;30226:13;;;;;;;;;;;30218:21;;:4;:21;;;:47;;;;30243:16;:22;30260:4;30243:22;;;;;;;;;;;;;;;;;;;;;;;;;30218:47;30215:253;;;30300:13;;30290:6;:23;;30282:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30398:16;;30381:13;:33;;30373:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30215:253;30489:13;;;;;;;;;;;30481:21;;:4;:21;;;;:44;;;;;30512:13;;;;;;;;;;;30506:19;;:2;:19;;;30481:44;:97;;;;30531:16;:22;30548:4;30531:22;;;;;;;;;;;;;;;;;;;;;;;;;30530:23;:47;;;;;30557:16;:20;30574:2;30557:20;;;;;;;;;;;;;;;;;;;;;;;;;30530:47;30481:97;30478:307;;;30674:4;30665:13;;30693:15;:13;:15::i;:::-;30478:307;30806:13;;;;;;;;;;;30798:21;;:4;:21;;;;:44;;;;;30829:13;;;;;;;;;;;30823:19;;:2;:19;;;;30798:44;:71;;;;;30847:16;:22;30864:4;30847:22;;;;;;;;;;;;;;;;;;;;;;;;;30846:23;30798:71;:96;;;;;30874:16;:20;30891:2;30874:20;;;;;;;;;;;;;;;;;;;;;;;;;30873:21;30798:96;30795:316;;;30914:8;30911:91;;;30954:17;;;;;;;;;;;:32;;30982:4;30954:32;;;30974:5;30954:32;30943:43;;30911:91;31041:16;;31024:13;:33;;31016:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30795:316;31121:56;31136:4;31142:2;31146:6;31154:8;31164:6;31172:4;31121:14;:56::i;:::-;29411:1774;;;29342:1843;;;:::o;5930:192::-;6016:7;6049:1;6044;:6;;6052:12;6036:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6076:9;6092:1;6088;:5;;;;:::i;:::-;6076:17;;6113:1;6106:8;;;5930:192;;;;;:::o;5027:181::-;5085:7;5105:9;5121:1;5117;:5;;;;:::i;:::-;5105:17;;5146:1;5141;:6;;5133:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:1;5192:8;;;5027:181;;;;:::o;26349:236::-;26436:9;26431:147;26455:9;;:16;;26451:1;:20;26431:147;;;26493:12;26508:9;;26518:1;26508:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26493:27;;26562:4;26535:18;:24;26554:4;26535:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26478:100;26473:3;;;;;:::i;:::-;;;;26431:147;;;;26349:236;;;:::o;25335:244::-;25426:9;25421:151;25445:9;;:16;;25441:1;:20;25421:151;;;25483:12;25498:9;;25508:1;25498:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25483:27;;25556:4;25525:22;:28;25548:4;25525:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25468:104;25463:3;;;;;:::i;:::-;;;;25421:151;;;;25335:244;;;:::o;27878:346::-;27973:9;27968:249;27992:9;:16;27988:1;:20;27968:249;;;28030:12;28045:9;28055:1;28045:12;;;;;;;;:::i;:::-;;;;;;;;28030:27;;28075:7;28072:134;;;28122:4;28103:10;:16;28114:4;28103:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;28072:134;;;28174:10;:16;28185:4;28174:16;;;;;;;;;;;;;;;;28167:23;;;;;;;;;;;28072:134;28015:202;28010:3;;;;;:::i;:::-;;;;27968:249;;;;27878:346;;:::o;26101:240::-;26194:9;26189:145;26213:9;;:16;;26209:1;:20;26189:145;;;26251:12;26266:9;;26276:1;26266:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26251:27;;26318:4;26293:16;:22;26310:4;26293:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26236:98;26231:3;;;;;:::i;:::-;;;;26189:145;;;;26101:240;;;:::o;33692:1373::-;33838:17;33858:8;:50;;33907:1;33858:50;;;33869:35;33900:3;33869:26;33880:7;:14;;;33869:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;33858:50;33838:70;;33922:8;:18;;;;;33934:6;33922:18;33919:355;;;33969:36;34001:3;33969:27;33980:7;:15;;;33969:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;33957:48;;34046:1;34023:7;:20;;;:24;34020:243;;;34068:13;34084:19;34096:6;34084:11;:19::i;:::-;34068:35;;34137:13;;34125:8;:25;34122:126;;34187:41;34224:3;34187:32;34198:7;:20;;;34187:6;:10;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;34175:53;;34122:126;34049:214;34020:243;33919:355;34284:22;34309:21;34320:9;34309:6;:10;;:21;;;;:::i;:::-;34284:46;;34361:29;34383:6;34361:9;:17;34371:6;34361:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;34341:9;:17;34351:6;34341:17;;;;;;;;;;;;;;;:49;;;;34424:40;34449:14;34424:9;:20;34434:9;34424:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;34401:9;:20;34411:9;34401:20;;;;;;;;;;;;;;;:63;;;;34502:39;34531:9;34502;:24;34520:4;34502:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;34475:9;:24;34493:4;34475:24;;;;;;;;;;;;;;;:66;;;;34574:9;34557:35;;34566:6;34557:35;;;34585:6;34557:35;;;;;;:::i;:::-;;;;;;;;34608:17;34605:453;;;34646:15;;;;;;;;;;;:31;;;34678:6;34646:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34642:54;34714:15;;;;;;;;;;;:31;;;34746:9;34714:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34710:57;34785:15;;;;;;;;;;;:23;;;34809:16;;34785:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34781:266;;;35013:9;34924:99;;34989:4;34924:99;;;34949:10;34961:6;34969:18;34995:16;;34924:99;;;;;;;;;:::i;:::-;;;;;;;;34827:212;;;34781:266;34605:453;33827:1238;;33692:1373;;;;;;:::o;31193:445::-;31237:28;31268:24;31286:4;31268:9;:24::i;:::-;31237:55;;31329:1;31306:20;:24;31303:328;;;31347:13;31363:33;31375:20;31363:11;:33::i;:::-;31347:49;;31427:14;;31415:8;:26;;:47;;;;;31446:16;;;;;;;;;;;31445:17;31415:47;:72;;;;;31466:21;;;;;;;;;;;31415:72;31411:209;;;31566:38;31583:20;31566:16;:38::i;:::-;31411:209;31332:299;31303:328;31226:412;31193:445::o;6381:471::-;6439:7;6689:1;6684;:6;6680:47;;6714:1;6707:8;;;;6680:47;6739:9;6755:1;6751;:5;;;;:::i;:::-;6739:17;;6784:1;6779;6775;:5;;;;:::i;:::-;:10;6767:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:1;6836:8;;;6381:471;;;;;:::o;7328:132::-;7386:7;7413:39;7417:1;7420;7413:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7406:46;;7328:132;;;;:::o;5491:136::-;5549:7;5576:43;5580:1;5583;5576:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5569:50;;5491:136;;;;:::o;31863:752::-;19264:4;19245:16;;:23;;;;;;;;;;;;;;;;;;31950:38:::1;31967:20;31950:16;:38::i;:::-;31999:23;32025:21;31999:47;;32057:23;32083:53;32132:3;32083:44;32103:12;:23;;;32083:15;:19;;:44;;;;:::i;:::-;:48;;:53;;;;:::i;:::-;32057:79;;32147:21;32171:51;32218:3;32171:42;32191:12;:21;;;32171:15;:19;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;32147:75;;32233:20;32256:50;32302:3;32256:41;32276:12;:20;;;32256:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;32233:73;;32317:20;32340:50;32386:3;32340:41;32360:12;:20;;;32340:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;32317:73;;32409:17;;;;;;;;;;;32401:35;;:52;32437:15;32401:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32464:31;32481:13;32464:16;:31::i;:::-;32514:10;;;;;;;;;;;32506:28;;:42;32535:12;32506:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32567:14;;;;;;;;;;;32559:32;;:46;32592:12;32559:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31939:676;;;;;19310:5:::0;19291:16;;:24;;;;;;;;;;;;;;;;;;31863:752;:::o;7956:278::-;8042:7;8074:1;8070;:5;8077:12;8062:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8101:9;8117:1;8113;:5;;;;:::i;:::-;8101:17;;8225:1;8218:8;;;7956:278;;;;;:::o;33026:585::-;33152:21;33190:1;33176:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33152:40;;33221:4;33203;33208:1;33203:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33247:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33237:4;33242:1;33237:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33280:62;33297:4;33312:15;;;;;;;;;;;33330:11;33280:8;:62::i;:::-;33379:15;;;;;;;;;;;:66;;;33460:11;33486:1;33530:4;33557;33577:15;33379:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33081:530;33026:585;:::o;32797:221::-;32862:12;32887:15;;;;;;;;;;;32879:29;;32917:9;32879:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32861:70;;;32946:7;32942:69;;;32975:24;32989:9;32975:24;;;;;;:::i;:::-;;;;;;;;32942:69;32850:168;32797:221;:::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:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:442::-;3995:4;4033:2;4022:9;4018:18;4010:26;;4046:71;4114:1;4103:9;4099:17;4090:6;4046:71;:::i;:::-;4127:72;4195:2;4184:9;4180:18;4171:6;4127:72;:::i;:::-;4209;4277:2;4266:9;4262:18;4253:6;4209:72;:::i;:::-;3846:442;;;;;;:::o;4294:329::-;4353:6;4402:2;4390:9;4381:7;4377:23;4373:32;4370:119;;;4408:79;;:::i;:::-;4370:119;4528:1;4553:53;4598:7;4589:6;4578:9;4574:22;4553:53;:::i;:::-;4543:63;;4499:117;4294:329;;;;:::o;4629:765::-;4715:6;4723;4731;4739;4788:3;4776:9;4767:7;4763:23;4759:33;4756:120;;;4795:79;;:::i;:::-;4756:120;4915:1;4940:53;4985:7;4976:6;4965:9;4961:22;4940:53;:::i;:::-;4930:63;;4886:117;5042:2;5068:53;5113:7;5104:6;5093:9;5089:22;5068:53;:::i;:::-;5058:63;;5013:118;5170:2;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5141:118;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;4629:765;;;;;;;:::o;5400:60::-;5428:3;5449:5;5442:12;;5400:60;;;:::o;5466:142::-;5516:9;5549:53;5567:34;5576:24;5594:5;5576:24;:::i;:::-;5567:34;:::i;:::-;5549:53;:::i;:::-;5536:66;;5466:142;;;:::o;5614:126::-;5664:9;5697:37;5728:5;5697:37;:::i;:::-;5684:50;;5614:126;;;:::o;5746:152::-;5822:9;5855:37;5886:5;5855:37;:::i;:::-;5842:50;;5746:152;;;:::o;5904:183::-;6017:63;6074:5;6017:63;:::i;:::-;6012:3;6005:76;5904:183;;:::o;6093:274::-;6212:4;6250:2;6239:9;6235:18;6227:26;;6263:97;6357:1;6346:9;6342:17;6333:6;6263:97;:::i;:::-;6093:274;;;;:::o;6373:619::-;6450:6;6458;6466;6515:2;6503:9;6494:7;6490:23;6486:32;6483:119;;;6521:79;;:::i;:::-;6483:119;6641:1;6666:53;6711:7;6702:6;6691:9;6687:22;6666:53;:::i;:::-;6656:63;;6612:117;6768:2;6794:53;6839:7;6830:6;6819:9;6815:22;6794:53;:::i;:::-;6784:63;;6739:118;6896:2;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6867:118;6373:619;;;;;:::o;6998:329::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:86::-;7368:7;7408:4;7401:5;7397:16;7386:27;;7333:86;;;:::o;7425:112::-;7508:22;7524:5;7508:22;:::i;:::-;7503:3;7496:35;7425:112;;:::o;7543:214::-;7632:4;7670:2;7659:9;7655:18;7647:26;;7683:67;7747:1;7736:9;7732:17;7723:6;7683:67;:::i;:::-;7543:214;;;;:::o;7763:118::-;7850:24;7868:5;7850:24;:::i;:::-;7845:3;7838:37;7763:118;;:::o;7887:222::-;7980:4;8018:2;8007:9;8003:18;7995:26;;8031:71;8099:1;8088:9;8084:17;8075:6;8031:71;:::i;:::-;7887:222;;;;:::o;8115:117::-;8224:1;8221;8214:12;8238:117;8347:1;8344;8337:12;8361:117;8470:1;8467;8460:12;8501:568;8574:8;8584:6;8634:3;8627:4;8619:6;8615:17;8611:27;8601:122;;8642:79;;:::i;:::-;8601:122;8755:6;8742:20;8732:30;;8785:18;8777:6;8774:30;8771:117;;;8807:79;;:::i;:::-;8771:117;8921:4;8913:6;8909:17;8897:29;;8975:3;8967:4;8959:6;8955:17;8945:8;8941:32;8938:41;8935:128;;;8982:79;;:::i;:::-;8935:128;8501:568;;;;;:::o;9075:116::-;9145:21;9160:5;9145:21;:::i;:::-;9138:5;9135:32;9125:60;;9181:1;9178;9171:12;9125:60;9075:116;:::o;9197:133::-;9240:5;9278:6;9265:20;9256:29;;9294:30;9318:5;9294:30;:::i;:::-;9197:133;;;;:::o;9336:698::-;9428:6;9436;9444;9493:2;9481:9;9472:7;9468:23;9464:32;9461:119;;;9499:79;;:::i;:::-;9461:119;9647:1;9636:9;9632:17;9619:31;9677:18;9669:6;9666:30;9663:117;;;9699:79;;:::i;:::-;9663:117;9812:80;9884:7;9875:6;9864:9;9860:22;9812:80;:::i;:::-;9794:98;;;;9590:312;9941:2;9967:50;10009:7;10000:6;9989:9;9985:22;9967:50;:::i;:::-;9957:60;;9912:115;9336:698;;;;;:::o;10040:323::-;10096:6;10145:2;10133:9;10124:7;10120:23;10116:32;10113:119;;;10151:79;;:::i;:::-;10113:119;10271:1;10296:50;10338:7;10329:6;10318:9;10314:22;10296:50;:::i;:::-;10286:60;;10242:114;10040:323;;;;:::o;10369:553::-;10546:4;10584:3;10573:9;10569:19;10561:27;;10598:71;10666:1;10655:9;10651:17;10642:6;10598:71;:::i;:::-;10679:72;10747:2;10736:9;10732:18;10723:6;10679:72;:::i;:::-;10761;10829:2;10818:9;10814:18;10805:6;10761:72;:::i;:::-;10843;10911:2;10900:9;10896:18;10887:6;10843:72;:::i;:::-;10369:553;;;;;;;:::o;10928:474::-;10996:6;11004;11053:2;11041:9;11032:7;11028:23;11024:32;11021:119;;;11059:79;;:::i;:::-;11021:119;11179:1;11204:53;11249:7;11240:6;11229:9;11225:22;11204:53;:::i;:::-;11194:63;;11150:117;11306:2;11332:53;11377:7;11368:6;11357:9;11353:22;11332:53;:::i;:::-;11322:63;;11277:118;10928:474;;;;;:::o;11408:180::-;11456:77;11453:1;11446:88;11553:4;11550:1;11543:15;11577:4;11574:1;11567:15;11594:281;11677:27;11699:4;11677:27;:::i;:::-;11669:6;11665:40;11807:6;11795:10;11792:22;11771:18;11759:10;11756:34;11753:62;11750:88;;;11818:18;;:::i;:::-;11750:88;11858:10;11854:2;11847:22;11637:238;11594:281;;:::o;11881:129::-;11915:6;11942:20;;:::i;:::-;11932:30;;11971:33;11999:4;11991:6;11971:33;:::i;:::-;11881:129;;;:::o;12016:311::-;12093:4;12183:18;12175:6;12172:30;12169:56;;;12205:18;;:::i;:::-;12169:56;12255:4;12247:6;12243:17;12235:25;;12315:4;12309;12305:15;12297:23;;12016:311;;;:::o;12350:710::-;12446:5;12471:81;12487:64;12544:6;12487:64;:::i;:::-;12471:81;:::i;:::-;12462:90;;12572:5;12601:6;12594:5;12587:21;12635:4;12628:5;12624:16;12617:23;;12688:4;12680:6;12676:17;12668:6;12664:30;12717:3;12709:6;12706:15;12703:122;;;12736:79;;:::i;:::-;12703:122;12851:6;12834:220;12868:6;12863:3;12860:15;12834:220;;;12943:3;12972:37;13005:3;12993:10;12972:37;:::i;:::-;12967:3;12960:50;13039:4;13034:3;13030:14;13023:21;;12910:144;12894:4;12889:3;12885:14;12878:21;;12834:220;;;12838:21;12452:608;;12350:710;;;;;:::o;13083:370::-;13154:5;13203:3;13196:4;13188:6;13184:17;13180:27;13170:122;;13211:79;;:::i;:::-;13170:122;13328:6;13315:20;13353:94;13443:3;13435:6;13428:4;13420:6;13416:17;13353:94;:::i;:::-;13344:103;;13160:293;13083:370;;;;:::o;13459:539::-;13543:6;13592:2;13580:9;13571:7;13567:23;13563:32;13560:119;;;13598:79;;:::i;:::-;13560:119;13746:1;13735:9;13731:17;13718:31;13776:18;13768:6;13765:30;13762:117;;;13798:79;;:::i;:::-;13762:117;13903:78;13973:7;13964:6;13953:9;13949:22;13903:78;:::i;:::-;13893:88;;13689:302;13459:539;;;;:::o;14004:619::-;14081:6;14089;14097;14146:2;14134:9;14125:7;14121:23;14117:32;14114:119;;;14152:79;;:::i;:::-;14114:119;14272:1;14297:53;14342:7;14333:6;14322:9;14318:22;14297:53;:::i;:::-;14287:63;;14243:117;14399:2;14425:53;14470:7;14461:6;14450:9;14446:22;14425:53;:::i;:::-;14415:63;;14370:118;14527:2;14553:53;14598:7;14589:6;14578:9;14574:22;14553:53;:::i;:::-;14543:63;;14498:118;14004:619;;;;;:::o;14646:568::-;14719:8;14729:6;14779:3;14772:4;14764:6;14760:17;14756:27;14746:122;;14787:79;;:::i;:::-;14746:122;14900:6;14887:20;14877:30;;14930:18;14922:6;14919:30;14916:117;;;14952:79;;:::i;:::-;14916:117;15066:4;15058:6;15054:17;15042:29;;15120:3;15112:4;15104:6;15100:17;15090:8;15086:32;15083:41;15080:128;;;15127:79;;:::i;:::-;15080:128;14646:568;;;;;:::o;15220:934::-;15342:6;15350;15358;15366;15415:2;15403:9;15394:7;15390:23;15386:32;15383:119;;;15421:79;;:::i;:::-;15383:119;15569:1;15558:9;15554:17;15541:31;15599:18;15591:6;15588:30;15585:117;;;15621:79;;:::i;:::-;15585:117;15734:80;15806:7;15797:6;15786:9;15782:22;15734:80;:::i;:::-;15716:98;;;;15512:312;15891:2;15880:9;15876:18;15863:32;15922:18;15914:6;15911:30;15908:117;;;15944:79;;:::i;:::-;15908:117;16057:80;16129:7;16120:6;16109:9;16105:22;16057:80;:::i;:::-;16039:98;;;;15834:313;15220:934;;;;;;;:::o;16160:474::-;16228:6;16236;16285:2;16273:9;16264:7;16260:23;16256:32;16253:119;;;16291:79;;:::i;:::-;16253:119;16411:1;16436:53;16481:7;16472:6;16461:9;16457:22;16436:53;:::i;:::-;16426:63;;16382:117;16538:2;16564:53;16609:7;16600:6;16589:9;16585:22;16564:53;:::i;:::-;16554:63;;16509:118;16160:474;;;;;:::o;16640:619::-;16717:6;16725;16733;16782:2;16770:9;16761:7;16757:23;16753:32;16750:119;;;16788:79;;:::i;:::-;16750:119;16908:1;16933:53;16978:7;16969:6;16958:9;16954:22;16933:53;:::i;:::-;16923:63;;16879:117;17035:2;17061:53;17106:7;17097:6;17086:9;17082:22;17061:53;:::i;:::-;17051:63;;17006:118;17163:2;17189:53;17234:7;17225:6;17214:9;17210:22;17189:53;:::i;:::-;17179:63;;17134:118;16640:619;;;;;:::o;17265:180::-;17313:77;17310:1;17303:88;17410:4;17407:1;17400:15;17434:4;17431:1;17424:15;17451:320;17495:6;17532:1;17526:4;17522:12;17512:22;;17579:1;17573:4;17569:12;17600:18;17590:81;;17656:4;17648:6;17644:17;17634:27;;17590:81;17718:2;17710:6;17707:14;17687:18;17684:38;17681:84;;17737:18;;:::i;:::-;17681:84;17502:269;17451:320;;;:::o;17777:182::-;17917:34;17913:1;17905:6;17901:14;17894:58;17777:182;:::o;17965:366::-;18107:3;18128:67;18192:2;18187:3;18128:67;:::i;:::-;18121:74;;18204:93;18293:3;18204:93;:::i;:::-;18322:2;18317:3;18313:12;18306:19;;17965:366;;;:::o;18337:419::-;18503:4;18541:2;18530:9;18526:18;18518:26;;18590:9;18584:4;18580:20;18576:1;18565:9;18561:17;18554:47;18618:131;18744:4;18618:131;:::i;:::-;18610:139;;18337:419;;;:::o;18762:180::-;18810:77;18807:1;18800:88;18907:4;18904:1;18897:15;18931:4;18928:1;18921:15;18948:348;18988:7;19011:20;19029:1;19011:20;:::i;:::-;19006:25;;19045:20;19063:1;19045:20;:::i;:::-;19040:25;;19233:1;19165:66;19161:74;19158:1;19155:81;19150:1;19143:9;19136:17;19132:105;19129:131;;;19240:18;;:::i;:::-;19129:131;19288:1;19285;19281:9;19270:20;;18948:348;;;;:::o;19302:180::-;19350:77;19347:1;19340:88;19447:4;19444:1;19437:15;19471:4;19468:1;19461:15;19488:143;19545:5;19576:6;19570:13;19561:22;;19592:33;19619:5;19592:33;:::i;:::-;19488:143;;;;:::o;19637:351::-;19707:6;19756:2;19744:9;19735:7;19731:23;19727:32;19724:119;;;19762:79;;:::i;:::-;19724:119;19882:1;19907:64;19963:7;19954:6;19943:9;19939:22;19907:64;:::i;:::-;19897:74;;19853:128;19637:351;;;;:::o;19994:114::-;20061:6;20095:5;20089:12;20079:22;;19994:114;;;:::o;20114:184::-;20213:11;20247:6;20242:3;20235:19;20287:4;20282:3;20278:14;20263:29;;20114:184;;;;:::o;20304:132::-;20371:4;20394:3;20386:11;;20424:4;20419:3;20415:14;20407:22;;20304:132;;;:::o;20442:108::-;20519:24;20537:5;20519:24;:::i;:::-;20514:3;20507:37;20442:108;;:::o;20556:179::-;20625:10;20646:46;20688:3;20680:6;20646:46;:::i;:::-;20724:4;20719:3;20715:14;20701:28;;20556:179;;;;:::o;20741:113::-;20811:4;20843;20838:3;20834:14;20826:22;;20741:113;;;:::o;20890:732::-;21009:3;21038:54;21086:5;21038:54;:::i;:::-;21108:86;21187:6;21182:3;21108:86;:::i;:::-;21101:93;;21218:56;21268:5;21218:56;:::i;:::-;21297:7;21328:1;21313:284;21338:6;21335:1;21332:13;21313:284;;;21414:6;21408:13;21441:63;21500:3;21485:13;21441:63;:::i;:::-;21434:70;;21527:60;21580:6;21527:60;:::i;:::-;21517:70;;21373:224;21360:1;21357;21353:9;21348:14;;21313:284;;;21317:14;21613:3;21606:10;;21014:608;;;20890:732;;;;:::o;21628:483::-;21799:4;21837:2;21826:9;21822:18;21814:26;;21850:71;21918:1;21907:9;21903:17;21894:6;21850:71;:::i;:::-;21968:9;21962:4;21958:20;21953:2;21942:9;21938:18;21931:48;21996:108;22099:4;22090:6;21996:108;:::i;:::-;21988:116;;21628:483;;;;;:::o;22117:311::-;22194:4;22284:18;22276:6;22273:30;22270:56;;;22306:18;;:::i;:::-;22270:56;22356:4;22348:6;22344:17;22336:25;;22416:4;22410;22406:15;22398:23;;22117:311;;;:::o;22434:143::-;22491:5;22522:6;22516:13;22507:22;;22538:33;22565:5;22538:33;:::i;:::-;22434:143;;;;:::o;22600:732::-;22707:5;22732:81;22748:64;22805:6;22748:64;:::i;:::-;22732:81;:::i;:::-;22723:90;;22833:5;22862:6;22855:5;22848:21;22896:4;22889:5;22885:16;22878:23;;22949:4;22941:6;22937:17;22929:6;22925:30;22978:3;22970:6;22967:15;22964:122;;;22997:79;;:::i;:::-;22964:122;23112:6;23095:231;23129:6;23124:3;23121:15;23095:231;;;23204:3;23233:48;23277:3;23265:10;23233:48;:::i;:::-;23228:3;23221:61;23311:4;23306:3;23302:14;23295:21;;23171:155;23155:4;23150:3;23146:14;23139:21;;23095:231;;;23099:21;22713:619;;22600:732;;;;;:::o;23355:385::-;23437:5;23486:3;23479:4;23471:6;23467:17;23463:27;23453:122;;23494:79;;:::i;:::-;23453:122;23604:6;23598:13;23629:105;23730:3;23722:6;23715:4;23707:6;23703:17;23629:105;:::i;:::-;23620:114;;23443:297;23355:385;;;;:::o;23746:554::-;23841:6;23890:2;23878:9;23869:7;23865:23;23861:32;23858:119;;;23896:79;;:::i;:::-;23858:119;24037:1;24026:9;24022:17;24016:24;24067:18;24059:6;24056:30;24053:117;;;24089:79;;:::i;:::-;24053:117;24194:89;24275:7;24266:6;24255:9;24251:22;24194:89;:::i;:::-;24184:99;;23987:306;23746:554;;;;:::o;24306:231::-;24446:34;24442:1;24434:6;24430:14;24423:58;24515:14;24510:2;24502:6;24498:15;24491:39;24306:231;:::o;24543:366::-;24685:3;24706:67;24770:2;24765:3;24706:67;:::i;:::-;24699:74;;24782:93;24871:3;24782:93;:::i;:::-;24900:2;24895:3;24891:12;24884:19;;24543:366;;;:::o;24915:419::-;25081:4;25119:2;25108:9;25104:18;25096:26;;25168:9;25162:4;25158:20;25154:1;25143:9;25139:17;25132:47;25196:131;25322:4;25196:131;:::i;:::-;25188:139;;24915:419;;;:::o;25340:221::-;25480:34;25476:1;25468:6;25464:14;25457:58;25549:4;25544:2;25536:6;25532:15;25525:29;25340:221;:::o;25567:366::-;25709:3;25730:67;25794:2;25789:3;25730:67;:::i;:::-;25723:74;;25806:93;25895:3;25806:93;:::i;:::-;25924:2;25919:3;25915:12;25908:19;;25567:366;;;:::o;25939:419::-;26105:4;26143:2;26132:9;26128:18;26120:26;;26192:9;26186:4;26182:20;26178:1;26167:9;26163:17;26156:47;26220:131;26346:4;26220:131;:::i;:::-;26212:139;;25939:419;;;:::o;26364:332::-;26485:4;26523:2;26512:9;26508:18;26500:26;;26536:71;26604:1;26593:9;26589:17;26580:6;26536:71;:::i;:::-;26617:72;26685:2;26674:9;26670:18;26661:6;26617:72;:::i;:::-;26364:332;;;;;:::o;26702:232::-;26842:34;26838:1;26830:6;26826:14;26819:58;26911:15;26906:2;26898:6;26894:15;26887:40;26702:232;:::o;26940:366::-;27082:3;27103:67;27167:2;27162:3;27103:67;:::i;:::-;27096:74;;27179:93;27268:3;27179:93;:::i;:::-;27297:2;27292:3;27288:12;27281:19;;26940:366;;;:::o;27312:419::-;27478:4;27516:2;27505:9;27501:18;27493:26;;27565:9;27559:4;27555:20;27551:1;27540:9;27536:17;27529:47;27593:131;27719:4;27593:131;:::i;:::-;27585:139;;27312:419;;;:::o;27737:229::-;27877:34;27873:1;27865:6;27861:14;27854:58;27946:12;27941:2;27933:6;27929:15;27922:37;27737:229;:::o;27972:366::-;28114:3;28135:67;28199:2;28194:3;28135:67;:::i;:::-;28128:74;;28211:93;28300:3;28211:93;:::i;:::-;28329:2;28324:3;28320:12;28313:19;;27972:366;;;:::o;28344:419::-;28510:4;28548:2;28537:9;28533:18;28525:26;;28597:9;28591:4;28587:20;28583:1;28572:9;28568:17;28561:47;28625:131;28751:4;28625:131;:::i;:::-;28617:139;;28344:419;;;:::o;28769:305::-;28809:3;28828:20;28846:1;28828:20;:::i;:::-;28823:25;;28862:20;28880:1;28862:20;:::i;:::-;28857:25;;29016:1;28948:66;28944:74;28941:1;28938:81;28935:107;;;29022:18;;:::i;:::-;28935:107;29066:1;29063;29059:9;29052:16;;28769:305;;;;:::o;29080:225::-;29220:34;29216:1;29208:6;29204:14;29197:58;29289:8;29284:2;29276:6;29272:15;29265:33;29080:225;:::o;29311:366::-;29453:3;29474:67;29538:2;29533:3;29474:67;:::i;:::-;29467:74;;29550:93;29639:3;29550:93;:::i;:::-;29668:2;29663:3;29659:12;29652:19;;29311:366;;;:::o;29683:419::-;29849:4;29887:2;29876:9;29872:18;29864:26;;29936:9;29930:4;29926:20;29922:1;29911:9;29907:17;29900:47;29964:131;30090:4;29964:131;:::i;:::-;29956:139;;29683:419;;;:::o;30108:223::-;30248:34;30244:1;30236:6;30232:14;30225:58;30317:6;30312:2;30304:6;30300:15;30293:31;30108:223;:::o;30337:366::-;30479:3;30500:67;30564:2;30559:3;30500:67;:::i;:::-;30493:74;;30576:93;30665:3;30576:93;:::i;:::-;30694:2;30689:3;30685:12;30678:19;;30337:366;;;:::o;30709:419::-;30875:4;30913:2;30902:9;30898:18;30890:26;;30962:9;30956:4;30952:20;30948:1;30937:9;30933:17;30926:47;30990:131;31116:4;30990:131;:::i;:::-;30982:139;;30709:419;;;:::o;31134:221::-;31274:34;31270:1;31262:6;31258:14;31251:58;31343:4;31338:2;31330:6;31326:15;31319:29;31134:221;:::o;31361:366::-;31503:3;31524:67;31588:2;31583:3;31524:67;:::i;:::-;31517:74;;31600:93;31689:3;31600:93;:::i;:::-;31718:2;31713:3;31709:12;31702:19;;31361:366;;;:::o;31733:419::-;31899:4;31937:2;31926:9;31922:18;31914:26;;31986:9;31980:4;31976:20;31972:1;31961:9;31957:17;31950:47;32014:131;32140:4;32014:131;:::i;:::-;32006:139;;31733:419;;;:::o;32158:224::-;32298:34;32294:1;32286:6;32282:14;32275:58;32367:7;32362:2;32354:6;32350:15;32343:32;32158:224;:::o;32388:366::-;32530:3;32551:67;32615:2;32610:3;32551:67;:::i;:::-;32544:74;;32627:93;32716:3;32627:93;:::i;:::-;32745:2;32740:3;32736:12;32729:19;;32388:366;;;:::o;32760:419::-;32926:4;32964:2;32953:9;32949:18;32941:26;;33013:9;33007:4;33003:20;32999:1;32988:9;32984:17;32977:47;33041:131;33167:4;33041:131;:::i;:::-;33033:139;;32760:419;;;:::o;33185:222::-;33325:34;33321:1;33313:6;33309:14;33302:58;33394:5;33389:2;33381:6;33377:15;33370:30;33185:222;:::o;33413:366::-;33555:3;33576:67;33640:2;33635:3;33576:67;:::i;:::-;33569:74;;33652:93;33741:3;33652:93;:::i;:::-;33770:2;33765:3;33761:12;33754:19;;33413:366;;;:::o;33785:419::-;33951:4;33989:2;33978:9;33974:18;33966:26;;34038:9;34032:4;34028:20;34024:1;34013:9;34009:17;34002:47;34066:131;34192:4;34066:131;:::i;:::-;34058:139;;33785:419;;;:::o;34210:228::-;34350:34;34346:1;34338:6;34334:14;34327:58;34419:11;34414:2;34406:6;34402:15;34395:36;34210:228;:::o;34444:366::-;34586:3;34607:67;34671:2;34666:3;34607:67;:::i;:::-;34600:74;;34683:93;34772:3;34683:93;:::i;:::-;34801:2;34796:3;34792:12;34785:19;;34444:366;;;:::o;34816:419::-;34982:4;35020:2;35009:9;35005:18;34997:26;;35069:9;35063:4;35059:20;35055:1;35044:9;35040:17;35033:47;35097:131;35223:4;35097:131;:::i;:::-;35089:139;;34816:419;;;:::o;35241:180::-;35381:32;35377:1;35369:6;35365:14;35358:56;35241:180;:::o;35427:366::-;35569:3;35590:67;35654:2;35649:3;35590:67;:::i;:::-;35583:74;;35666:93;35755:3;35666:93;:::i;:::-;35784:2;35779:3;35775:12;35768:19;;35427:366;;;:::o;35799:419::-;35965:4;36003:2;35992:9;35988:18;35980:26;;36052:9;36046:4;36042:20;36038:1;36027:9;36023:17;36016:47;36080:131;36206:4;36080:131;:::i;:::-;36072:139;;35799:419;;;:::o;36224:234::-;36364:34;36360:1;36352:6;36348:14;36341:58;36433:17;36428:2;36420:6;36416:15;36409:42;36224:234;:::o;36464:366::-;36606:3;36627:67;36691:2;36686:3;36627:67;:::i;:::-;36620:74;;36703:93;36792:3;36703:93;:::i;:::-;36821:2;36816:3;36812:12;36805:19;;36464:366;;;:::o;36836:419::-;37002:4;37040:2;37029:9;37025:18;37017:26;;37089:9;37083:4;37079:20;37075:1;37064:9;37060:17;37053:47;37117:131;37243:4;37117:131;:::i;:::-;37109:139;;36836:419;;;:::o;37261:227::-;37401:34;37397:1;37389:6;37385:14;37378:58;37470:10;37465:2;37457:6;37453:15;37446:35;37261:227;:::o;37494:366::-;37636:3;37657:67;37721:2;37716:3;37657:67;:::i;:::-;37650:74;;37733:93;37822:3;37733:93;:::i;:::-;37851:2;37846:3;37842:12;37835:19;;37494:366;;;:::o;37866:419::-;38032:4;38070:2;38059:9;38055:18;38047:26;;38119:9;38113:4;38109:20;38105:1;38094:9;38090:17;38083:47;38147:131;38273:4;38147:131;:::i;:::-;38139:139;;37866:419;;;:::o;38291:224::-;38431:34;38427:1;38419:6;38415:14;38408:58;38500:7;38495:2;38487:6;38483:15;38476:32;38291:224;:::o;38521:366::-;38663:3;38684:67;38748:2;38743:3;38684:67;:::i;:::-;38677:74;;38760:93;38849:3;38760:93;:::i;:::-;38878:2;38873:3;38869:12;38862:19;;38521:366;;;:::o;38893:419::-;39059:4;39097:2;39086:9;39082:18;39074:26;;39146:9;39140:4;39136:20;39132:1;39121:9;39117:17;39110:47;39174:131;39300:4;39174:131;:::i;:::-;39166:139;;38893:419;;;:::o;39318:191::-;39358:4;39378:20;39396:1;39378:20;:::i;:::-;39373:25;;39412:20;39430:1;39412:20;:::i;:::-;39407:25;;39451:1;39448;39445:8;39442:34;;;39456:18;;:::i;:::-;39442:34;39501:1;39498;39494:9;39486:17;;39318:191;;;;:::o;39515:177::-;39655:29;39651:1;39643:6;39639:14;39632:53;39515:177;:::o;39698:366::-;39840:3;39861:67;39925:2;39920:3;39861:67;:::i;:::-;39854:74;;39937:93;40026:3;39937:93;:::i;:::-;40055:2;40050:3;40046:12;40039:19;;39698:366;;;:::o;40070:419::-;40236:4;40274:2;40263:9;40259:18;40251:26;;40323:9;40317:4;40313:20;40309:1;40298:9;40294:17;40287:47;40351:131;40477:4;40351:131;:::i;:::-;40343:139;;40070:419;;;:::o;40495:233::-;40534:3;40557:24;40575:5;40557:24;:::i;:::-;40548:33;;40603:66;40596:5;40593:77;40590:103;;40673:18;;:::i;:::-;40590:103;40720:1;40713:5;40709:13;40702:20;;40495:233;;;:::o;40734:663::-;40822:6;40830;40838;40887:2;40875:9;40866:7;40862:23;40858:32;40855:119;;;40893:79;;:::i;:::-;40855:119;41013:1;41038:64;41094:7;41085:6;41074:9;41070:22;41038:64;:::i;:::-;41028:74;;40984:128;41151:2;41177:64;41233:7;41224:6;41213:9;41209:22;41177:64;:::i;:::-;41167:74;;41122:129;41290:2;41316:64;41372:7;41363:6;41352:9;41348:22;41316:64;:::i;:::-;41306:74;;41261:129;40734:663;;;;;:::o;41403:180::-;41451:77;41448:1;41441:88;41548:4;41545:1;41538:15;41572:4;41569:1;41562:15;41589:185;41629:1;41646:20;41664:1;41646:20;:::i;:::-;41641:25;;41680:20;41698:1;41680:20;:::i;:::-;41675:25;;41719:1;41709:35;;41724:18;;:::i;:::-;41709:35;41766:1;41763;41759:9;41754:14;;41589:185;;;;:::o;41780:220::-;41920:34;41916:1;41908:6;41904:14;41897:58;41989:3;41984:2;41976:6;41972:15;41965:28;41780:220;:::o;42006:366::-;42148:3;42169:67;42233:2;42228:3;42169:67;:::i;:::-;42162:74;;42245:93;42334:3;42245:93;:::i;:::-;42363:2;42358:3;42354:12;42347:19;;42006:366;;;:::o;42378:419::-;42544:4;42582:2;42571:9;42567:18;42559:26;;42631:9;42625:4;42621:20;42617:1;42606:9;42602:17;42595:47;42659:131;42785:4;42659:131;:::i;:::-;42651:139;;42378:419;;;:::o;42803:85::-;42848:7;42877:5;42866:16;;42803:85;;;:::o;42894:158::-;42952:9;42985:61;43003:42;43012:32;43038:5;43012:32;:::i;:::-;43003:42;:::i;:::-;42985:61;:::i;:::-;42972:74;;42894:158;;;:::o;43058:147::-;43153:45;43192:5;43153:45;:::i;:::-;43148:3;43141:58;43058:147;;:::o;43211:831::-;43474:4;43512:3;43501:9;43497:19;43489:27;;43526:71;43594:1;43583:9;43579:17;43570:6;43526:71;:::i;:::-;43607:80;43683:2;43672:9;43668:18;43659:6;43607:80;:::i;:::-;43734:9;43728:4;43724:20;43719:2;43708:9;43704:18;43697:48;43762:108;43865:4;43856:6;43762:108;:::i;:::-;43754:116;;43880:72;43948:2;43937:9;43933:18;43924:6;43880:72;:::i;:::-;43962:73;44030:3;44019:9;44015:19;44006:6;43962:73;:::i;:::-;43211:831;;;;;;;;:::o;44048:147::-;44149:11;44186:3;44171:18;;44048:147;;;;:::o;44201:114::-;;:::o;44321:398::-;44480:3;44501:83;44582:1;44577:3;44501:83;:::i;:::-;44494:90;;44593:93;44682:3;44593:93;:::i;:::-;44711:1;44706:3;44702:11;44695:18;;44321:398;;;:::o;44725:379::-;44909:3;44931:147;45074:3;44931:147;:::i;:::-;44924:154;;45095:3;45088:10;;44725:379;;;:::o
Swarm Source
ipfs://f8f7ca5f58f273afdc25b8c47e836fa7a07be471ad9a42f616db62e3f5f480e2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.