ERC-20
Overview
Max Total Supply
1,000,000,000 CTIP
Holders
408
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
245,203 CTIPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CrypTIP
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-17 */ 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 CrypTIP 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 = "CrypTIP"; string private _symbol = "CTIP"; uint8 private _decimals = 9; uint256 private _tTotal = 1000000000 * 10 ** _decimals; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool isTaxFreeTransfer = false; uint256 public _maxBuyAmount = 5000000 * 10** _decimals; uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH uint public ethSellAmount = 1000000000000000000; //1 ETH address public buyBackAddress = 0x800C3C9b2b132543917cbB5a54A6E99d47e39A7B; address public marketingAddress = 0x72B75111d243Cba98C8746cE261E390366616aA9; address public devAddress = 0x16ce829696166C382e1Dbbb5A1E23e4203Bd06D1; 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 marketing; 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[marketingAddress] = true; _isExcludedFromFee[devAddress] = true; _isExcludedFromRewards[marketingAddress] = true; _isExcludedFromRewards[_msgSender()] = true; _isExcludedFromRewards[owner()] = true; _isExcludedFromRewards[buyBackAddress] = true; _isExcludedFromRewards[devAddress] = true; //multisig addresses _isExcludedFromRewards[0x7a38eD4B61F5484B28E75505dD019C94A1537fed] = true; _isExcludedFromRewards[0xa6C8e281dC35eC14082A8FBe542DF40E1AC81eeD] = true; _isExcludedFromRewards[0xc633D6733b26fdf9f2209a91994F236291aE91B2] = true; taxFees = TaxFees(8,12,10); distribution = Distribution(30, 20, 30, 20); 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 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 marketing, uint256 buyBack) external onlyOwner { distribution.dividend = dividend; distribution.devTeam = devTeam; distribution.marketing = marketing; distribution.buyBack = buyBack; } function setWalletAddresses(address devAddr, address buyBack, address marketingAddr) external onlyOwner { devAddress = devAddr; buyBackAddress = buyBack; marketingAddress = marketingAddr; } 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(); //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."); } 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] && isTaxFreeTransfer) { takeFees = false; } _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 marketing 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 marketingShare = distributionEth.mul(distribution.marketing).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(marketingAddress).transfer(marketingShare); 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; uint256 public totalDividendsDistributed; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name = "CrypTIPTracker"; string private _symbol = "CTIPTRACKER"; uint8 private _decimals = 9; uint public processedEthFromContract = 0; IterableMapping private tokenHoldersMap = new IterableMapping(); address[] keys; uint256 public minimumTokenBalanceForDividends = 1000000 * 10 ** _decimals; CrypTIP private crypTIP; 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 crypTIPBalance = crypTIP.balanceOf(account); if(!crypTIP.isExcludedFromRewards(account)) { if (crypTIPBalance >= minimumTokenBalanceForDividends) { _setBalance(account, crypTIPBalance); tokenHoldersMap.set(account, crypTIPBalance); } 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 setCrypTIPContract(address contractAddr) external onlyOwner { crypTIP = CrypTIP(payable(contractAddr)); } function totalClaimedDividends(address account) external view returns (uint256){ return withdrawnDividends[account]; } function excludeFromDividends(address account) external onlyOwner { require(!crypTIP.isExcludedFromRewards(account), "Account already excluded from dividends"); _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 processAccount(address payable account, bool automatic) private returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { 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":[{"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":"marketing","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":[{"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":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"marketing","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":"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":"marketingAddr","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
6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600781526020017f437279705449500000000000000000000000000000000000000000000000000081525060099080519060200190620000e892919062000b5e565b506040518060400160405280600481526020017f4354495000000000000000000000000000000000000000000000000000000000815250600a90805190602001906200013692919062000b5e565b506009600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff16600a62000171919062000da8565b633b9aca0062000182919062000df9565b600c556001600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff021916908315150217905550600b60009054906101000a900460ff16600a620001d9919062000da8565b624c4b40620001e9919062000df9565b600e55670429d069189e0000600f55670de0b6b3a764000060105573800c3c9b2b132543917cbb5a54a6e99d47e39a7b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507372b75111d243cba98c8746ce261e390366616aa9601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507316ce829696166c382e1dbbb5a1e23e4203bd06d1601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c3506015553480156200035957600080fd5b5060006200036c62000b2d60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600360006200042162000b2d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600660006200047562000b3560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620004dc62000b2d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006200072b62000b2d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006200079262000b3560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000737a38ed4b61f5484b28e75505dd019c94a1537fed73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600073a6c8e281dc35ec14082a8fbe542df40e1ac81eed73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600073c633d6733b26fdf9f2209a91994f236291ae91b273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550604051806060016040528060088152602001600c8152602001600a81525060176000820151816000015560208201518160010155604082015181600201559050506040518060800160405280601e815260200160148152602001601e81526020016014815250601a6000820151816000015560208201518160010155604082015181600201556060820151816003015590505062000abe62000b2d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000b1f919062000e6b565b60405180910390a362000eec565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000b6c9062000eb7565b90600052602060002090601f01602090048101928262000b90576000855562000bdc565b82601f1062000bab57805160ff191683800117855562000bdc565b8280016001018555821562000bdc579182015b8281111562000bdb57825182559160200191906001019062000bbe565b5b50905062000beb919062000bef565b5090565b5b8082111562000c0a57600081600090555060010162000bf0565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c9c5780860481111562000c745762000c7362000c0e565b5b600185161562000c845780820291505b808102905062000c948562000c3d565b945062000c54565b94509492505050565b60008262000cb7576001905062000d8a565b8162000cc7576000905062000d8a565b816001811462000ce0576002811462000ceb5762000d21565b600191505062000d8a565b60ff84111562000d005762000cff62000c0e565b5b8360020a91508482111562000d1a5762000d1962000c0e565b5b5062000d8a565b5060208310610133831016604e8410600b841016171562000d5b5782820a90508381111562000d555762000d5462000c0e565b5b62000d8a565b62000d6a848484600162000c4a565b9250905081840481111562000d845762000d8362000c0e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000db58262000d91565b915062000dc28362000d9b565b925062000df17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ca5565b905092915050565b600062000e068262000d91565b915062000e138362000d91565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e4f5762000e4e62000c0e565b5b828202905092915050565b62000e658162000d91565b82525050565b600060208201905062000e82600083018462000e5a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ed057607f821691505b60208210810362000ee65762000ee562000e88565b5b50919050565b6159ac8062000efc6000396000f3fe60806040526004361061028c5760003560e01c80637bde92bc1161015a5780639c1b8af5116100c1578063dcda6af31161007a578063dcda6af3146109e2578063dd62ed3e14610a0b578063e7dad4f914610a48578063f2fde38b14610a85578063f34eb0b814610aae578063fb6287d214610ad757610293565b80639c1b8af5146108d2578063a457c2d7146108fd578063a5ece9411461093a578063a9059cbb14610965578063b6a99872146109a2578063c49b9a80146109b957610293565b806391142cb31161011357806391142cb3146107d857806395d89b4114610803578063968481361461082e5780639758f61d1461085757806398acb5d8146108805780639b0e2e86146108a957610293565b80637bde92bc146106ca57806385141a77146106f357806385d4787b1461071e578063870d365d14610747578063871c128d146107845780638da5cb5b146107ad57610293565b80633ad10ef6116101fe57806354a5df1f116101b757806354a5df1f146105c95780635ee58efc146105f457806370a0823114610622578063715018a61461065f57806371cd56af14610676578063783478ad1461069f57610293565b80633ad10ef6146104b9578063441d801f146104e457806349bd5a5e1461050d5780634a74bb02146105385780634e781233146105635780635342acb41461058c57610293565b80630fc709e5116102505780630fc709e5146103955780631694505e146103be57806318160ddd146103e957806323b872dd14610414578063313ce56714610451578063395093511461047c57610293565b80630492f0551461029857806306fdde03146102c3578063095ea7b3146102ee5780630ddc09761461032b5780630e8322731461035857610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b00565b6040516102ba9190614192565b60405180910390f35b3480156102cf57600080fd5b506102d8610b06565b6040516102e59190614246565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190614306565b610b98565b6040516103229190614361565b60405180910390f35b34801561033757600080fd5b50610340610bb6565b60405161034f9392919061437c565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906143b3565b610bce565b60405161038c9190614361565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906143e0565b610c24565b005b3480156103ca57600080fd5b506103d3610ce7565b6040516103e091906144a6565b60405180910390f35b3480156103f557600080fd5b506103fe610d0d565b60405161040b9190614192565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906144c1565b610d17565b6040516104489190614361565b60405180910390f35b34801561045d57600080fd5b50610466610df0565b6040516104739190614530565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190614306565b610e07565b6040516104b09190614361565b60405180910390f35b3480156104c557600080fd5b506104ce610eba565b6040516104db919061455a565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190614606565b610ee0565b005b34801561051957600080fd5b50610522610f85565b60405161052f919061455a565b60405180910390f35b34801561054457600080fd5b5061054d610fab565b60405161055a9190614361565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190614666565b610fbe565b005b34801561059857600080fd5b506105b360048036038101906105ae91906143b3565b611070565b6040516105c09190614361565b60405180910390f35b3480156105d557600080fd5b506105de6110c6565b6040516105eb9190614192565b60405180910390f35b34801561060057600080fd5b506106096110cc565b6040516106199493929190614693565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906143b3565b6110ea565b6040516106569190614192565b60405180910390f35b34801561066b57600080fd5b50610674611133565b005b34801561068257600080fd5b5061069d60048036038101906106989190614606565b611286565b005b3480156106ab57600080fd5b506106b461132b565b6040516106c1919061455a565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec91906146d8565b611351565b005b3480156106ff57600080fd5b506107086113f8565b604051610715919061455a565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190614856565b61141e565b005b34801561075357600080fd5b5061076e6004803603810190610769919061489f565b6114c1565b60405161077b9190614192565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a6919061489f565b611704565b005b3480156107b957600080fd5b506107c26117e7565b6040516107cf919061455a565b60405180910390f35b3480156107e457600080fd5b506107ed611810565b6040516107fa9190614192565b60405180910390f35b34801561080f57600080fd5b50610818611816565b6040516108259190614246565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190614606565b6118a8565b005b34801561086357600080fd5b5061087e600480360381019061087991906148cc565b61194d565b005b34801561088c57600080fd5b506108a760048036038101906108a291906143b3565b611a05565b005b3480156108b557600080fd5b506108d060048036038101906108cb9190614856565b611ade565b005b3480156108de57600080fd5b506108e7611b81565b6040516108f49190614192565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190614306565b611b87565b6040516109319190614361565b60405180910390f35b34801561094657600080fd5b5061094f611c54565b60405161095c919061455a565b60405180910390f35b34801561097157600080fd5b5061098c60048036038101906109879190614306565b611c7a565b6040516109999190614361565b60405180910390f35b3480156109ae57600080fd5b506109b7611c98565b005b3480156109c557600080fd5b506109e060048036038101906109db9190614666565b612018565b005b3480156109ee57600080fd5b50610a096004803603810190610a049190614975565b612101565b005b348015610a1757600080fd5b50610a326004803603810190610a2d91906149f6565b61226b565b604051610a3f9190614192565b60405180910390f35b348015610a5457600080fd5b50610a6f6004803603810190610a6a91906143b3565b6122f2565b604051610a7c9190614361565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa791906143b3565b612348565b005b348015610aba57600080fd5b50610ad56004803603810190610ad0919061489f565b612509565b005b348015610ae357600080fd5b50610afe6004803603810190610af99190614a36565b6125b7565b005b600e5481565b606060098054610b1590614ab8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4190614ab8565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b5050505050905090565b6000610bac610ba5612714565b848461271c565b6001905092915050565b60178060000154908060010154908060020154905083565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c2c612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb090614b35565b60405180910390fd5b83601a6002018190555082601a6000018190555081601a6001018190555080601a6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610d248484846128e5565b610de584610d30612714565b610de08560405180606001604052806028815260200161592a60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d96612714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461315e9092919063ffffffff16565b61271c565b600190509392505050565b6000600b60009054906101000a900460ff16905090565b6000610eb0610e14612714565b84610eab8560046000610e25612714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c290919063ffffffff16565b61271c565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ee8612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90614b35565b60405180910390fd5b610f80838383613220565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b610fc6612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a90614b35565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b601a8060000154908060010154908060020154908060030154905084565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61113b612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90614b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61128e612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290614b35565b60405180910390fd5b6113268383836132cb565b505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611359612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90614b35565b60405180910390fd5b8160108190555080600f819055505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611426612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614b35565b60405180910390fd5b6114be816001613376565b50565b600080600267ffffffffffffffff8111156114df576114de614718565b5b60405190808252806020026020018201604052801561150d5781602001602082028036833780820191505090505b509050308160008151811061152557611524614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f09190614b99565b8160018151811061160457611603614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b815260040161169b929190614c84565b600060405180830381865afa1580156116b8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116e19190614d8c565b6001815181106116f4576116f3614b55565b5b6020026020010151915050919050565b61170c612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090614b35565b60405180910390fd5b60155481036117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490614e47565b60405180910390fd5b8060158190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6060600a805461182590614ab8565b80601f016020809104026020016040519081016040528092919081815260200182805461185190614ab8565b801561189e5780601f106118735761010080835404028352916020019161189e565b820191906000526020600020905b81548152906001019060200180831161188157829003601f168201915b5050505050905090565b6118b0612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614b35565b60405180910390fd5b61194883838361346d565b505050565b611955612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990614b35565b60405180910390fd5b826017600001819055508160176001018190555080601760020181905550505050565b611a0d612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190614b35565b60405180910390fd5b80601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ae6612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614b35565b60405180910390fd5b611b7e816000613376565b50565b60155481565b6000611c4a611b94612714565b84611c45856040518060600160405280602581526020016159526025913960046000611bbe612714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461315e9092919063ffffffff16565b61271c565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c8e611c87612714565b84846128e5565b6001905092915050565b611ca0612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490614b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614ed9565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f9190614b99565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efc9190614b99565b6040518363ffffffff1660e01b8152600401611f19929190614ef9565b6020604051808303816000875af1158015611f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5c9190614b99565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b612020612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490614b35565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120f69190614361565b60405180910390a150565b60006006600061210f612714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d90614f94565b60405180910390fd5b8282905085859050146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590615026565b60405180910390fd5b5b84849050811015612264576122506121f5612714565b86868481811061220857612207614b55565b5b905060200201602081019061221d91906143b3565b633b9aca0086868681811061223557612234614b55565b5b905060200201356122469190615075565b6000806000613518565b60018161225d91906150cf565b90506121df565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612350612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d490614b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361244c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244390615197565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612511612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614b35565b60405180910390fd5b633b9aca00816125ae9190615075565b600e8190555050565b6125bf612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264390614b35565b60405180910390fd5b82601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278290615229565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f1906152bb565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128d89190614192565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294b9061534d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ba906153df565b60405180910390fd5b60008111612a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fd90615471565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e906154dd565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b3e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b7d5750612b4d6117e7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bbc5750612b8c6117e7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050612bc66117e7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612c345750612c046117e7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612c8e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612d7757600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d375750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d9061556f565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612e1c5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e6757600e54831115612e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5d90615601565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f125750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612fbc5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fbb5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612fce5760019150612fcd613a3b565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561307a5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156130d05750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131265750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561313e5750600d60029054906101000a900460ff165b1561314857600090505b61315785858584866001613518565b5050505050565b60008383111582906131a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319d9190614246565b60405180910390fd5b50600083856131b59190615621565b9050809150509392505050565b60008082846131d191906150cf565b905083811015613216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320d906156a1565b60405180910390fd5b8091505092915050565b60005b838390508110156132c557600084848381811061324357613242614b55565b5b905060200201602081019061325891906143b3565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806132bd906156c1565b915050613223565b50505050565b60005b838390508110156133705760008484838181106132ee576132ed614b55565b5b905060200201602081019061330391906143b3565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080613368906156c1565b9150506132ce565b50505050565b60005b825181101561346857600083828151811061339757613396614b55565b5b602002602001015190508215613404576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613454565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613460906156c1565b915050613379565b505050565b60005b838390508110156135125760008484838181106134905761348f614b55565b5b90506020020160208101906134a591906143b3565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061350a906156c1565b915050613470565b50505050565b600083613526576000613552565b613551606461354360176000015488613aa990919063ffffffff16565b613b2390919063ffffffff16565b5b905083801561355e5750825b156135e55761358e606461358060176001015488613aa990919063ffffffff16565b613b2390919063ffffffff16565b9050600060176002015411156135e45760006135a9866114c1565b905060105481106135e2576135df60646135d160176002015489613aa990919063ffffffff16565b613b2390919063ffffffff16565b91505b505b5b60006135fa8287613b6d90919063ffffffff16565b905061364e86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6d90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e381600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c290919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377882600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c290919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516138189190614192565b60405180910390a38215613a3157601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613881919061455a565b600060405180830381600087803b15801561389b57600080fd5b505af19250505080156138ac575060015b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613908919061455a565b600060405180830381600087803b15801561392257600080fd5b505af1925050508015613933575060015b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796015546040518263ffffffff1660e01b81526004016139919190614192565b6060604051808303816000875af19250505080156139cd57506040513d601f19601f820116820180604052508101906139ca9190615709565b60015b15613a30573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601554604051613a249493929190614693565b60405180910390a35050505b5b5050505050505050565b6000613a46306110ea565b90506000811115613aa6576000613a5c826114c1565b9050600f548110158015613a7d5750600d60009054906101000a900460ff16155b8015613a955750600d60019054906101000a900460ff165b15613aa457613aa382613bb7565b5b505b50565b6000808303613abb5760009050613b1d565b60008284613ac99190615075565b9050828482613ad8919061578b565b14613b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0f9061582e565b60405180910390fd5b809150505b92915050565b6000613b6583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e03565b905092915050565b6000613baf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061315e565b905092915050565b6001600d60006101000a81548160ff021916908315150217905550613bdb81613e66565b60004790506000613c0d6064613bff601a6001015485613aa990919063ffffffff16565b613b2390919063ffffffff16565b90506000613c3c6064613c2e601a6002015486613aa990919063ffffffff16565b613b2390919063ffffffff16565b90506000613c6b6064613c5d601a6000015487613aa990919063ffffffff16565b613b2390919063ffffffff16565b90506000613c9a6064613c8c601a6003015488613aa990919063ffffffff16565b613b2390919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613d04573d6000803e3d6000fd5b50613d0e836140a9565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613d76573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613ddf573d6000803e3d6000fd5b5050505050506000600d60006101000a81548160ff02191690831515021790555050565b60008083118290613e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e419190614246565b60405180910390fd5b5060008385613e59919061578b565b9050809150509392505050565b6000600267ffffffffffffffff811115613e8357613e82614718565b5b604051908082528060200260200182016040528015613eb15781602001602082028036833780820191505090505b5090503081600081518110613ec957613ec8614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f949190614b99565b81600181518110613fa857613fa7614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061400f30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461271c565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614073959493929190615889565b600060405180830381600087803b15801561408d57600080fd5b505af11580156140a1573d6000803e3d6000fd5b505050505050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516140f190615914565b60006040518083038185875af1925050503d806000811461412e576040519150601f19603f3d011682016040523d82523d6000602084013e614133565b606091505b505090508015614175577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161416c9190614192565b60405180910390a15b5050565b6000819050919050565b61418c81614179565b82525050565b60006020820190506141a76000830184614183565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141e75780820151818401526020810190506141cc565b838111156141f6576000848401525b50505050565b6000601f19601f8301169050919050565b6000614218826141ad565b61422281856141b8565b93506142328185602086016141c9565b61423b816141fc565b840191505092915050565b60006020820190508181036000830152614260818461420d565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142a78261427c565b9050919050565b6142b78161429c565b81146142c257600080fd5b50565b6000813590506142d4816142ae565b92915050565b6142e381614179565b81146142ee57600080fd5b50565b600081359050614300816142da565b92915050565b6000806040838503121561431d5761431c614272565b5b600061432b858286016142c5565b925050602061433c858286016142f1565b9150509250929050565b60008115159050919050565b61435b81614346565b82525050565b60006020820190506143766000830184614352565b92915050565b60006060820190506143916000830186614183565b61439e6020830185614183565b6143ab6040830184614183565b949350505050565b6000602082840312156143c9576143c8614272565b5b60006143d7848285016142c5565b91505092915050565b600080600080608085870312156143fa576143f9614272565b5b6000614408878288016142f1565b9450506020614419878288016142f1565b935050604061442a878288016142f1565b925050606061443b878288016142f1565b91505092959194509250565b6000819050919050565b600061446c6144676144628461427c565b614447565b61427c565b9050919050565b600061447e82614451565b9050919050565b600061449082614473565b9050919050565b6144a081614485565b82525050565b60006020820190506144bb6000830184614497565b92915050565b6000806000606084860312156144da576144d9614272565b5b60006144e8868287016142c5565b93505060206144f9868287016142c5565b925050604061450a868287016142f1565b9150509250925092565b600060ff82169050919050565b61452a81614514565b82525050565b60006020820190506145456000830184614521565b92915050565b6145548161429c565b82525050565b600060208201905061456f600083018461454b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261459a57614599614575565b5b8235905067ffffffffffffffff8111156145b7576145b661457a565b5b6020830191508360208202830111156145d3576145d261457f565b5b9250929050565b6145e381614346565b81146145ee57600080fd5b50565b600081359050614600816145da565b92915050565b60008060006040848603121561461f5761461e614272565b5b600084013567ffffffffffffffff81111561463d5761463c614277565b5b61464986828701614584565b9350935050602061465c868287016145f1565b9150509250925092565b60006020828403121561467c5761467b614272565b5b600061468a848285016145f1565b91505092915050565b60006080820190506146a86000830187614183565b6146b56020830186614183565b6146c26040830185614183565b6146cf6060830184614183565b95945050505050565b600080604083850312156146ef576146ee614272565b5b60006146fd858286016142f1565b925050602061470e858286016142f1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614750826141fc565b810181811067ffffffffffffffff8211171561476f5761476e614718565b5b80604052505050565b6000614782614268565b905061478e8282614747565b919050565b600067ffffffffffffffff8211156147ae576147ad614718565b5b602082029050602081019050919050565b60006147d26147cd84614793565b614778565b905080838252602082019050602084028301858111156147f5576147f461457f565b5b835b8181101561481e578061480a88826142c5565b8452602084019350506020810190506147f7565b5050509392505050565b600082601f83011261483d5761483c614575565b5b813561484d8482602086016147bf565b91505092915050565b60006020828403121561486c5761486b614272565b5b600082013567ffffffffffffffff81111561488a57614889614277565b5b61489684828501614828565b91505092915050565b6000602082840312156148b5576148b4614272565b5b60006148c3848285016142f1565b91505092915050565b6000806000606084860312156148e5576148e4614272565b5b60006148f3868287016142f1565b9350506020614904868287016142f1565b9250506040614915868287016142f1565b9150509250925092565b60008083601f84011261493557614934614575565b5b8235905067ffffffffffffffff8111156149525761495161457a565b5b60208301915083602082028301111561496e5761496d61457f565b5b9250929050565b6000806000806040858703121561498f5761498e614272565b5b600085013567ffffffffffffffff8111156149ad576149ac614277565b5b6149b987828801614584565b9450945050602085013567ffffffffffffffff8111156149dc576149db614277565b5b6149e88782880161491f565b925092505092959194509250565b60008060408385031215614a0d57614a0c614272565b5b6000614a1b858286016142c5565b9250506020614a2c858286016142c5565b9150509250929050565b600080600060608486031215614a4f57614a4e614272565b5b6000614a5d868287016142c5565b9350506020614a6e868287016142c5565b9250506040614a7f868287016142c5565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ad057607f821691505b602082108103614ae357614ae2614a89565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b1f6020836141b8565b9150614b2a82614ae9565b602082019050919050565b60006020820190508181036000830152614b4e81614b12565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b93816142ae565b92915050565b600060208284031215614baf57614bae614272565b5b6000614bbd84828501614b84565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bfb8161429c565b82525050565b6000614c0d8383614bf2565b60208301905092915050565b6000602082019050919050565b6000614c3182614bc6565b614c3b8185614bd1565b9350614c4683614be2565b8060005b83811015614c77578151614c5e8882614c01565b9750614c6983614c19565b925050600181019050614c4a565b5085935050505092915050565b6000604082019050614c996000830185614183565b8181036020830152614cab8184614c26565b90509392505050565b600067ffffffffffffffff821115614ccf57614cce614718565b5b602082029050602081019050919050565b600081519050614cef816142da565b92915050565b6000614d08614d0384614cb4565b614778565b90508083825260208201905060208402830185811115614d2b57614d2a61457f565b5b835b81811015614d545780614d408882614ce0565b845260208401935050602081019050614d2d565b5050509392505050565b600082601f830112614d7357614d72614575565b5b8151614d83848260208601614cf5565b91505092915050565b600060208284031215614da257614da1614272565b5b600082015167ffffffffffffffff811115614dc057614dbf614277565b5b614dcc84828501614d5e565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000614e31602c836141b8565b9150614e3c82614dd5565b604082019050919050565b60006020820190508181036000830152614e6081614e24565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec36022836141b8565b9150614ece82614e67565b604082019050919050565b60006020820190508181036000830152614ef281614eb6565b9050919050565b6000604082019050614f0e600083018561454b565b614f1b602083018461454b565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000614f7e602d836141b8565b9150614f8982614f22565b604082019050919050565b60006020820190508181036000830152614fad81614f71565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615010602a836141b8565b915061501b82614fb4565b604082019050919050565b6000602082019050818103600083015261503f81615003565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061508082614179565b915061508b83614179565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150c4576150c3615046565b5b828202905092915050565b60006150da82614179565b91506150e583614179565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561511a57615119615046565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151816026836141b8565b915061518c82615125565b604082019050919050565b600060208201905081810360008301526151b081615174565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152136024836141b8565b915061521e826151b7565b604082019050919050565b6000602082019050818103600083015261524281615206565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152a56022836141b8565b91506152b082615249565b604082019050919050565b600060208201905081810360008301526152d481615298565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153376025836141b8565b9150615342826152db565b604082019050919050565b600060208201905081810360008301526153668161532a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153c96023836141b8565b91506153d48261536d565b604082019050919050565b600060208201905081810360008301526153f8816153bc565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061545b6029836141b8565b9150615466826153ff565b604082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b60006154c7601e836141b8565b91506154d282615491565b602082019050919050565b600060208201905081810360008301526154f6816154ba565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615559602f836141b8565b9150615564826154fd565b604082019050919050565b600060208201905081810360008301526155888161554c565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006155eb6028836141b8565b91506155f68261558f565b604082019050919050565b6000602082019050818103600083015261561a816155de565b9050919050565b600061562c82614179565b915061563783614179565b92508282101561564a57615649615046565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061568b601b836141b8565b915061569682615655565b602082019050919050565b600060208201905081810360008301526156ba8161567e565b9050919050565b60006156cc82614179565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036156fe576156fd615046565b5b600182019050919050565b60008060006060848603121561572257615721614272565b5b600061573086828701614ce0565b935050602061574186828701614ce0565b925050604061575286828701614ce0565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061579682614179565b91506157a183614179565b9250826157b1576157b061575c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006158186021836141b8565b9150615823826157bc565b604082019050919050565b600060208201905081810360008301526158478161580b565b9050919050565b6000819050919050565b600061587361586e6158698461584e565b614447565b614179565b9050919050565b61588381615858565b82525050565b600060a08201905061589e6000830188614183565b6158ab602083018761587a565b81810360408301526158bd8186614c26565b90506158cc606083018561454b565b6158d96080830184614183565b9695505050505050565b600081905092915050565b50565b60006158fe6000836158e3565b9150615909826158ee565b600082019050919050565b600061591f826158f1565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d3e5e58f671c229e9de68b8d1e6007c6386330df8dd3dfa021b427fbda026a6664736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061028c5760003560e01c80637bde92bc1161015a5780639c1b8af5116100c1578063dcda6af31161007a578063dcda6af3146109e2578063dd62ed3e14610a0b578063e7dad4f914610a48578063f2fde38b14610a85578063f34eb0b814610aae578063fb6287d214610ad757610293565b80639c1b8af5146108d2578063a457c2d7146108fd578063a5ece9411461093a578063a9059cbb14610965578063b6a99872146109a2578063c49b9a80146109b957610293565b806391142cb31161011357806391142cb3146107d857806395d89b4114610803578063968481361461082e5780639758f61d1461085757806398acb5d8146108805780639b0e2e86146108a957610293565b80637bde92bc146106ca57806385141a77146106f357806385d4787b1461071e578063870d365d14610747578063871c128d146107845780638da5cb5b146107ad57610293565b80633ad10ef6116101fe57806354a5df1f116101b757806354a5df1f146105c95780635ee58efc146105f457806370a0823114610622578063715018a61461065f57806371cd56af14610676578063783478ad1461069f57610293565b80633ad10ef6146104b9578063441d801f146104e457806349bd5a5e1461050d5780634a74bb02146105385780634e781233146105635780635342acb41461058c57610293565b80630fc709e5116102505780630fc709e5146103955780631694505e146103be57806318160ddd146103e957806323b872dd14610414578063313ce56714610451578063395093511461047c57610293565b80630492f0551461029857806306fdde03146102c3578063095ea7b3146102ee5780630ddc09761461032b5780630e8322731461035857610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b00565b6040516102ba9190614192565b60405180910390f35b3480156102cf57600080fd5b506102d8610b06565b6040516102e59190614246565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190614306565b610b98565b6040516103229190614361565b60405180910390f35b34801561033757600080fd5b50610340610bb6565b60405161034f9392919061437c565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906143b3565b610bce565b60405161038c9190614361565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906143e0565b610c24565b005b3480156103ca57600080fd5b506103d3610ce7565b6040516103e091906144a6565b60405180910390f35b3480156103f557600080fd5b506103fe610d0d565b60405161040b9190614192565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906144c1565b610d17565b6040516104489190614361565b60405180910390f35b34801561045d57600080fd5b50610466610df0565b6040516104739190614530565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190614306565b610e07565b6040516104b09190614361565b60405180910390f35b3480156104c557600080fd5b506104ce610eba565b6040516104db919061455a565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190614606565b610ee0565b005b34801561051957600080fd5b50610522610f85565b60405161052f919061455a565b60405180910390f35b34801561054457600080fd5b5061054d610fab565b60405161055a9190614361565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190614666565b610fbe565b005b34801561059857600080fd5b506105b360048036038101906105ae91906143b3565b611070565b6040516105c09190614361565b60405180910390f35b3480156105d557600080fd5b506105de6110c6565b6040516105eb9190614192565b60405180910390f35b34801561060057600080fd5b506106096110cc565b6040516106199493929190614693565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906143b3565b6110ea565b6040516106569190614192565b60405180910390f35b34801561066b57600080fd5b50610674611133565b005b34801561068257600080fd5b5061069d60048036038101906106989190614606565b611286565b005b3480156106ab57600080fd5b506106b461132b565b6040516106c1919061455a565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec91906146d8565b611351565b005b3480156106ff57600080fd5b506107086113f8565b604051610715919061455a565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190614856565b61141e565b005b34801561075357600080fd5b5061076e6004803603810190610769919061489f565b6114c1565b60405161077b9190614192565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a6919061489f565b611704565b005b3480156107b957600080fd5b506107c26117e7565b6040516107cf919061455a565b60405180910390f35b3480156107e457600080fd5b506107ed611810565b6040516107fa9190614192565b60405180910390f35b34801561080f57600080fd5b50610818611816565b6040516108259190614246565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190614606565b6118a8565b005b34801561086357600080fd5b5061087e600480360381019061087991906148cc565b61194d565b005b34801561088c57600080fd5b506108a760048036038101906108a291906143b3565b611a05565b005b3480156108b557600080fd5b506108d060048036038101906108cb9190614856565b611ade565b005b3480156108de57600080fd5b506108e7611b81565b6040516108f49190614192565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190614306565b611b87565b6040516109319190614361565b60405180910390f35b34801561094657600080fd5b5061094f611c54565b60405161095c919061455a565b60405180910390f35b34801561097157600080fd5b5061098c60048036038101906109879190614306565b611c7a565b6040516109999190614361565b60405180910390f35b3480156109ae57600080fd5b506109b7611c98565b005b3480156109c557600080fd5b506109e060048036038101906109db9190614666565b612018565b005b3480156109ee57600080fd5b50610a096004803603810190610a049190614975565b612101565b005b348015610a1757600080fd5b50610a326004803603810190610a2d91906149f6565b61226b565b604051610a3f9190614192565b60405180910390f35b348015610a5457600080fd5b50610a6f6004803603810190610a6a91906143b3565b6122f2565b604051610a7c9190614361565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa791906143b3565b612348565b005b348015610aba57600080fd5b50610ad56004803603810190610ad0919061489f565b612509565b005b348015610ae357600080fd5b50610afe6004803603810190610af99190614a36565b6125b7565b005b600e5481565b606060098054610b1590614ab8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4190614ab8565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b5050505050905090565b6000610bac610ba5612714565b848461271c565b6001905092915050565b60178060000154908060010154908060020154905083565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c2c612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb090614b35565b60405180910390fd5b83601a6002018190555082601a6000018190555081601a6001018190555080601a6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610d248484846128e5565b610de584610d30612714565b610de08560405180606001604052806028815260200161592a60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d96612714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461315e9092919063ffffffff16565b61271c565b600190509392505050565b6000600b60009054906101000a900460ff16905090565b6000610eb0610e14612714565b84610eab8560046000610e25612714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c290919063ffffffff16565b61271c565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ee8612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90614b35565b60405180910390fd5b610f80838383613220565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b610fc6612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a90614b35565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b601a8060000154908060010154908060020154908060030154905084565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61113b612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90614b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61128e612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290614b35565b60405180910390fd5b6113268383836132cb565b505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611359612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90614b35565b60405180910390fd5b8160108190555080600f819055505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611426612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614b35565b60405180910390fd5b6114be816001613376565b50565b600080600267ffffffffffffffff8111156114df576114de614718565b5b60405190808252806020026020018201604052801561150d5781602001602082028036833780820191505090505b509050308160008151811061152557611524614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f09190614b99565b8160018151811061160457611603614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b815260040161169b929190614c84565b600060405180830381865afa1580156116b8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116e19190614d8c565b6001815181106116f4576116f3614b55565b5b6020026020010151915050919050565b61170c612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090614b35565b60405180910390fd5b60155481036117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490614e47565b60405180910390fd5b8060158190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6060600a805461182590614ab8565b80601f016020809104026020016040519081016040528092919081815260200182805461185190614ab8565b801561189e5780601f106118735761010080835404028352916020019161189e565b820191906000526020600020905b81548152906001019060200180831161188157829003601f168201915b5050505050905090565b6118b0612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614b35565b60405180910390fd5b61194883838361346d565b505050565b611955612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990614b35565b60405180910390fd5b826017600001819055508160176001018190555080601760020181905550505050565b611a0d612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190614b35565b60405180910390fd5b80601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ae6612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614b35565b60405180910390fd5b611b7e816000613376565b50565b60155481565b6000611c4a611b94612714565b84611c45856040518060600160405280602581526020016159526025913960046000611bbe612714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461315e9092919063ffffffff16565b61271c565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c8e611c87612714565b84846128e5565b6001905092915050565b611ca0612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490614b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614ed9565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f9190614b99565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efc9190614b99565b6040518363ffffffff1660e01b8152600401611f19929190614ef9565b6020604051808303816000875af1158015611f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5c9190614b99565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b612020612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490614b35565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120f69190614361565b60405180910390a150565b60006006600061210f612714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d90614f94565b60405180910390fd5b8282905085859050146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590615026565b60405180910390fd5b5b84849050811015612264576122506121f5612714565b86868481811061220857612207614b55565b5b905060200201602081019061221d91906143b3565b633b9aca0086868681811061223557612234614b55565b5b905060200201356122469190615075565b6000806000613518565b60018161225d91906150cf565b90506121df565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612350612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d490614b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361244c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244390615197565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612511612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614b35565b60405180910390fd5b633b9aca00816125ae9190615075565b600e8190555050565b6125bf612714565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264390614b35565b60405180910390fd5b82601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278290615229565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f1906152bb565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128d89190614192565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294b9061534d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ba906153df565b60405180910390fd5b60008111612a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fd90615471565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e906154dd565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b3e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b7d5750612b4d6117e7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bbc5750612b8c6117e7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050612bc66117e7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612c345750612c046117e7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612c8e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612d7757600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d375750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d9061556f565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612e1c5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e6757600e54831115612e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5d90615601565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f125750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612fbc5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fbb5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612fce5760019150612fcd613a3b565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561307a5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156130d05750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131265750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561313e5750600d60029054906101000a900460ff165b1561314857600090505b61315785858584866001613518565b5050505050565b60008383111582906131a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319d9190614246565b60405180910390fd5b50600083856131b59190615621565b9050809150509392505050565b60008082846131d191906150cf565b905083811015613216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320d906156a1565b60405180910390fd5b8091505092915050565b60005b838390508110156132c557600084848381811061324357613242614b55565b5b905060200201602081019061325891906143b3565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806132bd906156c1565b915050613223565b50505050565b60005b838390508110156133705760008484838181106132ee576132ed614b55565b5b905060200201602081019061330391906143b3565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080613368906156c1565b9150506132ce565b50505050565b60005b825181101561346857600083828151811061339757613396614b55565b5b602002602001015190508215613404576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613454565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613460906156c1565b915050613379565b505050565b60005b838390508110156135125760008484838181106134905761348f614b55565b5b90506020020160208101906134a591906143b3565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061350a906156c1565b915050613470565b50505050565b600083613526576000613552565b613551606461354360176000015488613aa990919063ffffffff16565b613b2390919063ffffffff16565b5b905083801561355e5750825b156135e55761358e606461358060176001015488613aa990919063ffffffff16565b613b2390919063ffffffff16565b9050600060176002015411156135e45760006135a9866114c1565b905060105481106135e2576135df60646135d160176002015489613aa990919063ffffffff16565b613b2390919063ffffffff16565b91505b505b5b60006135fa8287613b6d90919063ffffffff16565b905061364e86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6d90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e381600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c290919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377882600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c290919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516138189190614192565b60405180910390a38215613a3157601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613881919061455a565b600060405180830381600087803b15801561389b57600080fd5b505af19250505080156138ac575060015b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613908919061455a565b600060405180830381600087803b15801561392257600080fd5b505af1925050508015613933575060015b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796015546040518263ffffffff1660e01b81526004016139919190614192565b6060604051808303816000875af19250505080156139cd57506040513d601f19601f820116820180604052508101906139ca9190615709565b60015b15613a30573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601554604051613a249493929190614693565b60405180910390a35050505b5b5050505050505050565b6000613a46306110ea565b90506000811115613aa6576000613a5c826114c1565b9050600f548110158015613a7d5750600d60009054906101000a900460ff16155b8015613a955750600d60019054906101000a900460ff165b15613aa457613aa382613bb7565b5b505b50565b6000808303613abb5760009050613b1d565b60008284613ac99190615075565b9050828482613ad8919061578b565b14613b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0f9061582e565b60405180910390fd5b809150505b92915050565b6000613b6583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e03565b905092915050565b6000613baf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061315e565b905092915050565b6001600d60006101000a81548160ff021916908315150217905550613bdb81613e66565b60004790506000613c0d6064613bff601a6001015485613aa990919063ffffffff16565b613b2390919063ffffffff16565b90506000613c3c6064613c2e601a6002015486613aa990919063ffffffff16565b613b2390919063ffffffff16565b90506000613c6b6064613c5d601a6000015487613aa990919063ffffffff16565b613b2390919063ffffffff16565b90506000613c9a6064613c8c601a6003015488613aa990919063ffffffff16565b613b2390919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613d04573d6000803e3d6000fd5b50613d0e836140a9565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613d76573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613ddf573d6000803e3d6000fd5b5050505050506000600d60006101000a81548160ff02191690831515021790555050565b60008083118290613e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e419190614246565b60405180910390fd5b5060008385613e59919061578b565b9050809150509392505050565b6000600267ffffffffffffffff811115613e8357613e82614718565b5b604051908082528060200260200182016040528015613eb15781602001602082028036833780820191505090505b5090503081600081518110613ec957613ec8614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f949190614b99565b81600181518110613fa857613fa7614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061400f30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461271c565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614073959493929190615889565b600060405180830381600087803b15801561408d57600080fd5b505af11580156140a1573d6000803e3d6000fd5b505050505050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516140f190615914565b60006040518083038185875af1925050503d806000811461412e576040519150601f19603f3d011682016040523d82523d6000602084013e614133565b606091505b505090508015614175577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161416c9190614192565b60405180910390a15b5050565b6000819050919050565b61418c81614179565b82525050565b60006020820190506141a76000830184614183565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141e75780820151818401526020810190506141cc565b838111156141f6576000848401525b50505050565b6000601f19601f8301169050919050565b6000614218826141ad565b61422281856141b8565b93506142328185602086016141c9565b61423b816141fc565b840191505092915050565b60006020820190508181036000830152614260818461420d565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142a78261427c565b9050919050565b6142b78161429c565b81146142c257600080fd5b50565b6000813590506142d4816142ae565b92915050565b6142e381614179565b81146142ee57600080fd5b50565b600081359050614300816142da565b92915050565b6000806040838503121561431d5761431c614272565b5b600061432b858286016142c5565b925050602061433c858286016142f1565b9150509250929050565b60008115159050919050565b61435b81614346565b82525050565b60006020820190506143766000830184614352565b92915050565b60006060820190506143916000830186614183565b61439e6020830185614183565b6143ab6040830184614183565b949350505050565b6000602082840312156143c9576143c8614272565b5b60006143d7848285016142c5565b91505092915050565b600080600080608085870312156143fa576143f9614272565b5b6000614408878288016142f1565b9450506020614419878288016142f1565b935050604061442a878288016142f1565b925050606061443b878288016142f1565b91505092959194509250565b6000819050919050565b600061446c6144676144628461427c565b614447565b61427c565b9050919050565b600061447e82614451565b9050919050565b600061449082614473565b9050919050565b6144a081614485565b82525050565b60006020820190506144bb6000830184614497565b92915050565b6000806000606084860312156144da576144d9614272565b5b60006144e8868287016142c5565b93505060206144f9868287016142c5565b925050604061450a868287016142f1565b9150509250925092565b600060ff82169050919050565b61452a81614514565b82525050565b60006020820190506145456000830184614521565b92915050565b6145548161429c565b82525050565b600060208201905061456f600083018461454b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261459a57614599614575565b5b8235905067ffffffffffffffff8111156145b7576145b661457a565b5b6020830191508360208202830111156145d3576145d261457f565b5b9250929050565b6145e381614346565b81146145ee57600080fd5b50565b600081359050614600816145da565b92915050565b60008060006040848603121561461f5761461e614272565b5b600084013567ffffffffffffffff81111561463d5761463c614277565b5b61464986828701614584565b9350935050602061465c868287016145f1565b9150509250925092565b60006020828403121561467c5761467b614272565b5b600061468a848285016145f1565b91505092915050565b60006080820190506146a86000830187614183565b6146b56020830186614183565b6146c26040830185614183565b6146cf6060830184614183565b95945050505050565b600080604083850312156146ef576146ee614272565b5b60006146fd858286016142f1565b925050602061470e858286016142f1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614750826141fc565b810181811067ffffffffffffffff8211171561476f5761476e614718565b5b80604052505050565b6000614782614268565b905061478e8282614747565b919050565b600067ffffffffffffffff8211156147ae576147ad614718565b5b602082029050602081019050919050565b60006147d26147cd84614793565b614778565b905080838252602082019050602084028301858111156147f5576147f461457f565b5b835b8181101561481e578061480a88826142c5565b8452602084019350506020810190506147f7565b5050509392505050565b600082601f83011261483d5761483c614575565b5b813561484d8482602086016147bf565b91505092915050565b60006020828403121561486c5761486b614272565b5b600082013567ffffffffffffffff81111561488a57614889614277565b5b61489684828501614828565b91505092915050565b6000602082840312156148b5576148b4614272565b5b60006148c3848285016142f1565b91505092915050565b6000806000606084860312156148e5576148e4614272565b5b60006148f3868287016142f1565b9350506020614904868287016142f1565b9250506040614915868287016142f1565b9150509250925092565b60008083601f84011261493557614934614575565b5b8235905067ffffffffffffffff8111156149525761495161457a565b5b60208301915083602082028301111561496e5761496d61457f565b5b9250929050565b6000806000806040858703121561498f5761498e614272565b5b600085013567ffffffffffffffff8111156149ad576149ac614277565b5b6149b987828801614584565b9450945050602085013567ffffffffffffffff8111156149dc576149db614277565b5b6149e88782880161491f565b925092505092959194509250565b60008060408385031215614a0d57614a0c614272565b5b6000614a1b858286016142c5565b9250506020614a2c858286016142c5565b9150509250929050565b600080600060608486031215614a4f57614a4e614272565b5b6000614a5d868287016142c5565b9350506020614a6e868287016142c5565b9250506040614a7f868287016142c5565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ad057607f821691505b602082108103614ae357614ae2614a89565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b1f6020836141b8565b9150614b2a82614ae9565b602082019050919050565b60006020820190508181036000830152614b4e81614b12565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b93816142ae565b92915050565b600060208284031215614baf57614bae614272565b5b6000614bbd84828501614b84565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bfb8161429c565b82525050565b6000614c0d8383614bf2565b60208301905092915050565b6000602082019050919050565b6000614c3182614bc6565b614c3b8185614bd1565b9350614c4683614be2565b8060005b83811015614c77578151614c5e8882614c01565b9750614c6983614c19565b925050600181019050614c4a565b5085935050505092915050565b6000604082019050614c996000830185614183565b8181036020830152614cab8184614c26565b90509392505050565b600067ffffffffffffffff821115614ccf57614cce614718565b5b602082029050602081019050919050565b600081519050614cef816142da565b92915050565b6000614d08614d0384614cb4565b614778565b90508083825260208201905060208402830185811115614d2b57614d2a61457f565b5b835b81811015614d545780614d408882614ce0565b845260208401935050602081019050614d2d565b5050509392505050565b600082601f830112614d7357614d72614575565b5b8151614d83848260208601614cf5565b91505092915050565b600060208284031215614da257614da1614272565b5b600082015167ffffffffffffffff811115614dc057614dbf614277565b5b614dcc84828501614d5e565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000614e31602c836141b8565b9150614e3c82614dd5565b604082019050919050565b60006020820190508181036000830152614e6081614e24565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec36022836141b8565b9150614ece82614e67565b604082019050919050565b60006020820190508181036000830152614ef281614eb6565b9050919050565b6000604082019050614f0e600083018561454b565b614f1b602083018461454b565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000614f7e602d836141b8565b9150614f8982614f22565b604082019050919050565b60006020820190508181036000830152614fad81614f71565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615010602a836141b8565b915061501b82614fb4565b604082019050919050565b6000602082019050818103600083015261503f81615003565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061508082614179565b915061508b83614179565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150c4576150c3615046565b5b828202905092915050565b60006150da82614179565b91506150e583614179565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561511a57615119615046565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151816026836141b8565b915061518c82615125565b604082019050919050565b600060208201905081810360008301526151b081615174565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152136024836141b8565b915061521e826151b7565b604082019050919050565b6000602082019050818103600083015261524281615206565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152a56022836141b8565b91506152b082615249565b604082019050919050565b600060208201905081810360008301526152d481615298565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153376025836141b8565b9150615342826152db565b604082019050919050565b600060208201905081810360008301526153668161532a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153c96023836141b8565b91506153d48261536d565b604082019050919050565b600060208201905081810360008301526153f8816153bc565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061545b6029836141b8565b9150615466826153ff565b604082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b60006154c7601e836141b8565b91506154d282615491565b602082019050919050565b600060208201905081810360008301526154f6816154ba565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615559602f836141b8565b9150615564826154fd565b604082019050919050565b600060208201905081810360008301526155888161554c565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006155eb6028836141b8565b91506155f68261558f565b604082019050919050565b6000602082019050818103600083015261561a816155de565b9050919050565b600061562c82614179565b915061563783614179565b92508282101561564a57615649615046565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061568b601b836141b8565b915061569682615655565b602082019050919050565b600060208201905081810360008301526156ba8161567e565b9050919050565b60006156cc82614179565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036156fe576156fd615046565b5b600182019050919050565b60008060006060848603121561572257615721614272565b5b600061573086828701614ce0565b935050602061574186828701614ce0565b925050604061575286828701614ce0565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061579682614179565b91506157a183614179565b9250826157b1576157b061575c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006158186021836141b8565b9150615823826157bc565b604082019050919050565b600060208201905081810360008301526158478161580b565b9050919050565b6000819050919050565b600061587361586e6158698461584e565b614447565b614179565b9050919050565b61588381615858565b82525050565b600060a08201905061589e6000830188614183565b6158ab602083018761587a565b81810360408301526158bd8186614c26565b90506158cc606083018561454b565b6158d96080830184614183565b9695505050505050565b600081905092915050565b50565b60006158fe6000836158e3565b9150615909826158ee565b600082019050919050565b600061591f826158f1565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d3e5e58f671c229e9de68b8d1e6007c6386330df8dd3dfa021b427fbda026a6664736f6c634300080d0033
Deployed Bytecode Sourcemap
18901:15863:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20132:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22360:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23193:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21219:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25220:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26968:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19326:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22637:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23362:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22546:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23683:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20487:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24721:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19439:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20048:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28871:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28740:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20194:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21248:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;22740:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;25055:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20323:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25605:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20564:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27615:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28460:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31348:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20260:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22451:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24890:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26742:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32321:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27751:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20641:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23909:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20404:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22867:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25802:311;;;;;;;;;;;;;:::i;:::-;;28244:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24188:525;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23042:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27498:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26611:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27269:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20132:55;;;;:::o;22360:83::-;22397:13;22430:5;22423:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22360:83;:::o;23193:161::-;23268:4;23285:39;23294:12;:10;:12::i;:::-;23308:7;23317:6;23285:8;:39::i;:::-;23342:4;23335:11;;23193:161;;;;:::o;21219:22::-;;;;;;;;;;;;;;;;;;;:::o;25220:125::-;25285:4;25309:22;:28;25332:4;25309:28;;;;;;;;;;;;;;;;;;;;;;;;;25302:35;;25220:125;;;:::o;26968:293::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27118:8:::1;27094:12;:21;;:32;;;;27160:7;27137:12;:20;;:30;;;;27203:9;27178:12;:22;;:34;;;;27246:7;27223:12;:20;;:30;;;;26968:293:::0;;;;:::o;19326:106::-;;;;;;;;;;;;;:::o;22637:95::-;22690:7;22717;;22710:14;;22637:95;:::o;23362:313::-;23460:4;23477:36;23487:6;23495:9;23506:6;23477:9;:36::i;:::-;23524:121;23533:6;23541:12;:10;:12::i;:::-;23555:89;23593:6;23555:89;;;;;;;;;;;;;;;;;:11;:19;23567:6;23555:19;;;;;;;;;;;;;;;:33;23575:12;:10;:12::i;:::-;23555:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23524:8;:121::i;:::-;23663:4;23656:11;;23362:313;;;;;:::o;22546:83::-;22587:5;22612:9;;;;;;;;;;;22605:16;;22546:83;:::o;23683:218::-;23771:4;23788:83;23797:12;:10;:12::i;:::-;23811:7;23820:50;23859:10;23820:11;:25;23832:12;:10;:12::i;:::-;23820:25;;;;;;;;;;;;;;;:34;23846:7;23820:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23788:8;:83::i;:::-;23889:4;23882:11;;23683:218;;;;:::o;20487:70::-;;;;;;;;;;;;;:::o;24721:161::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24833:41:::1;24846:9;;24857:16;24833:12;:41::i;:::-;24721:161:::0;;;:::o;19439:41::-;;;;;;;;;;;;;:::o;20048:40::-;;;;;;;;;;;;;:::o;28871:130::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28980:13:::1;28960:17;;:33;;;;;;;;;;;;;;;;;;28871:130:::0;:::o;28740:123::-;28804:4;28828:18;:27;28847:7;28828:27;;;;;;;;;;;;;;;;;;;;;;;;;28821:34;;28740:123;;;:::o;20194:50::-;;;;:::o;21248:32::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;22740:119::-;22806:7;22833:9;:18;22843:7;22833:18;;;;;;;;;;;;;;;;22826:25;;22740: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;25055:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25165:39:::1;25182:9;;25193:10;25165:16;:39::i;:::-;25055:157:::0;;;:::o;20323:74::-;;;;;;;;;;;;;:::o;25605:189::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25729:14:::1;25713:13;:30;;;;25771:15;25754:14;:32;;;;25605:189:::0;;:::o;20564:70::-;;;;;;;;;;;;;:::o;27615:128::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27699:36:::1;27719:9;27730:4;27699:19;:36::i;:::-;27615:128:::0;:::o;28460:272::-;28520:4;28538:21;28576:1;28562:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28538:40;;28607:4;28589;28594:1;28589:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28633:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28623:4;28628:1;28623:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28673:15;;;;;;;;;;;:29;;;28703:11;28716:4;28673:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28722:1;28673:51;;;;;;;;:::i;:::-;;;;;;;;28666:58;;;28460:272;;;:::o;31348:209::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31446:16:::1;;31434:8;:28:::0;31426:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31541:8;31522:16;:27;;;;31348:209:::0;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;20260:47::-;;;;:::o;22451:87::-;22490:13;22523:7;22516:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22451:87;:::o;24890:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24995:44:::1;25014:9;;25025:13;24995:18;:44::i;:::-;24890:157:::0;;;:::o;26742:218::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26864:6:::1;26847:7;:14;;:23;;;;26899:7;26881;:15;;:25;;;;26940:12;26917:7;:20;;:35;;;;26742:218:::0;;;:::o;32321:166::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32454:23:::1;32412:15;;:67;;;;;;;;;;;;;;;;;;32321:166:::0;:::o;27751:131::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27837:37:::1;27857:9;27868:5;27837:19;:37::i;:::-;27751:131:::0;:::o;20641:39::-;;;;:::o;23909:269::-;24002:4;24019:129;24028:12;:10;:12::i;:::-;24042:7;24051:96;24090:15;24051:96;;;;;;;;;;;;;;;;;:11;:25;24063:12;:10;:12::i;:::-;24051:25;;;;;;;;;;;;;;;:34;24077:7;24051:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24019:8;:129::i;:::-;24166:4;24159:11;;23909:269;;;;:::o;20404:76::-;;;;;;;;;;;;;:::o;22867:167::-;22945:4;22962:42;22972:12;:10;:12::i;:::-;22986:9;22997:6;22962:9;:42::i;:::-;23022:4;23015:11;;22867:167;;;;:::o;25802:311::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25889:1:::1;25864:27;;:13;;;;;;;;;;;:27;;;25856:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25974:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25956:55;;;26020:4;26027:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25956:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25940:13;;:110;;;;;;;;;;;;;;;;;;26101:4;26061:22;:37;26084:13;;;;;;;;;;;26061:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;25802:311::o:0;28244:171::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28345:8:::1;28321:21;;:32;;;;;;;;;;;;;;;;;;28369:38;28398:8;28369:38;;;;;;:::i;:::-;;;;;;;;28244:171:::0;:::o;24188:525::-;24285:16;24324:18;:32;24343:12;:10;:12::i;:::-;24324:32;;;;;;;;;;;;;;;;;;;;;;;;;24316:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24446:7;;:14;;24425:10;;:17;;:35;24417:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24518:188;24535:10;;:17;;24524:8;:28;24518:188;;;24568:98;24583:12;:10;:12::i;:::-;24597:10;;24608:8;24597:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24639:5;24619:7;;24627:8;24619:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;24646:5;24653;24660;24568:14;:98::i;:::-;24693:1;24681:13;;;;;:::i;:::-;;;24518:188;;;24274:439;24188:525;;;;:::o;23042:143::-;23123:7;23150:11;:18;23162:5;23150:18;;;;;;;;;;;;;;;:27;23169:7;23150:27;;;;;;;;;;;;;;;;23143:34;;23042:143;;;;:::o;27498:109::-;27559:4;27583:10;:16;27594:4;27583:16;;;;;;;;;;;;;;;;;;;;;;;;;27576:23;;27498: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;26611:123::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26721:5:::1;26706:12;:20;;;;:::i;:::-;26690:13;:36;;;;26611:123:::0;:::o;27269:221::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27397:7:::1;27384:10;;:20;;;;;;;;;;;;;;;;;;27432:7;27415:14;;:24;;;;;;;;;;;;;;;;;;27469:13;27450:16;;:32;;;;;;;;;;;;;;;;;;27269:221:::0;;;:::o;9599:98::-;9652:7;9679:10;9672:17;;9599:98;:::o;29009:337::-;29119:1;29102:19;;:5;:19;;;29094:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29200:1;29181:21;;:7;:21;;;29173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29284:6;29254:11;:18;29266:5;29254:18;;;;;;;;;;;;;;;:27;29273:7;29254:27;;;;;;;;;;;;;;;:36;;;;29322:7;29306:32;;29315:5;29306:32;;;29331:6;29306:32;;;;;;:::i;:::-;;;;;;;;29009:337;;;:::o;29354:1534::-;29458:1;29442:18;;:4;:18;;;29434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29535:1;29521:16;;:2;:16;;;29513:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29605:1;29596:6;:10;29588:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29696:1;29671:27;;:13;;;;;;;;;;;:27;;;29663:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29743:11;29773:13;29790:18;:24;29809:4;29790:24;;;;;;;;;;;;;;;;;;;;;;;;;29789:25;:52;;;;;29819:18;:22;29838:2;29819:22;;;;;;;;;;;;;;;;;;;;;;;;;29818:23;29789:52;:71;;;;;29853:7;:5;:7::i;:::-;29845:15;;:4;:15;;;;29789:71;:88;;;;;29870:7;:5;:7::i;:::-;29864:13;;:2;:13;;;;29789:88;29773:104;;29988:7;:5;:7::i;:::-;29980:15;;:4;:15;;;;:32;;;;;30005:7;:5;:7::i;:::-;29999:13;;:2;:13;;;;29980:32;:52;;;;;30022:10;;;;;;;;;;;30016:16;;:2;:16;;;;29980:52;29977:180;;;30058:10;:16;30069:4;30058:16;;;;;;;;;;;;;;;;;;;;;;;;;30057:17;:36;;;;;30079:10;:14;30090:2;30079:14;;;;;;;;;;;;;;;;;;;;;;;;;30078:15;30057:36;30049:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;29977:180;30178:13;;;;;;;;;;;30170:21;;:4;:21;;;:47;;;;30195:16;:22;30212:4;30195:22;;;;;;;;;;;;;;;;;;;;;;;;;30170:47;30167:155;;;30252:13;;30242:6;:23;;30234:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30167:155;30343:13;;;;;;;;;;;30335:21;;:4;:21;;;;:44;;;;;30366:13;;;;;;;;;;;30360:19;;:2;:19;;;30335:44;:97;;;;30385:16;:22;30402:4;30385:22;;;;;;;;;;;;;;;;;;;;;;;;;30384:23;:47;;;;;30411:16;:20;30428:2;30411:20;;;;;;;;;;;;;;;;;;;;;;;;;30384:47;30335:97;30332:307;;;30528:4;30519:13;;30547:15;:13;:15::i;:::-;30332:307;30660:13;;;;;;;;;;;30652:21;;:4;:21;;;;:44;;;;;30683:13;;;;;;;;;;;30677:19;;:2;:19;;;;30652:44;:71;;;;;30701:16;:22;30718:4;30701:22;;;;;;;;;;;;;;;;;;;;;;;;;30700:23;30652:71;:96;;;;;30728:16;:20;30745:2;30728:20;;;;;;;;;;;;;;;;;;;;;;;;;30727:21;30652:96;:117;;;;;30752:17;;;;;;;;;;;30652:117;30649:165;;;30797:5;30786:16;;30649:165;30824:56;30839:4;30845:2;30849:6;30857:8;30867:6;30875:4;30824:14;:56::i;:::-;29423:1465;;29354:1534;;;:::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;26367:236::-;26454:9;26449:147;26473:9;;:16;;26469:1;:20;26449:147;;;26511:12;26526:9;;26536:1;26526:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26511:27;;26580:4;26553:18;:24;26572:4;26553:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26496:100;26491:3;;;;;:::i;:::-;;;;26449:147;;;;26367:236;;;:::o;25353:244::-;25444:9;25439:151;25463:9;;:16;;25459:1;:20;25439:151;;;25501:12;25516:9;;25526:1;25516:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25501:27;;25574:4;25543:22;:28;25566:4;25543:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25486:104;25481:3;;;;;:::i;:::-;;;;25439:151;;;;25353:244;;;:::o;27890:346::-;27985:9;27980:249;28004:9;:16;28000:1;:20;27980:249;;;28042:12;28057:9;28067:1;28057:12;;;;;;;;:::i;:::-;;;;;;;;28042:27;;28087:7;28084:134;;;28134:4;28115:10;:16;28126:4;28115:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;28084:134;;;28186:10;:16;28197:4;28186:16;;;;;;;;;;;;;;;;28179:23;;;;;;;;;;;28084:134;28027:202;28022:3;;;;;:::i;:::-;;;;27980:249;;;;27890:346;;:::o;26119:240::-;26212:9;26207:145;26231:9;;:16;;26227:1;:20;26207:145;;;26269:12;26284:9;;26294:1;26284:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26269:27;;26336:4;26311:16;:22;26328:4;26311:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26254:98;26249:3;;;;;:::i;:::-;;;;26207:145;;;;26119:240;;;:::o;33388:1373::-;33534:17;33554:8;:50;;33603:1;33554:50;;;33565:35;33596:3;33565:26;33576:7;:14;;;33565:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;33554:50;33534:70;;33618:8;:18;;;;;33630:6;33618:18;33615:355;;;33665:36;33697:3;33665:27;33676:7;:15;;;33665:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;33653:48;;33742:1;33719:7;:20;;;:24;33716:243;;;33764:13;33780:19;33792:6;33780:11;:19::i;:::-;33764:35;;33833:13;;33821:8;:25;33818:126;;33883:41;33920:3;33883:32;33894:7;:20;;;33883:6;:10;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;33871:53;;33818:126;33745:214;33716:243;33615:355;33980:22;34005:21;34016:9;34005:6;:10;;:21;;;;:::i;:::-;33980:46;;34057:29;34079:6;34057:9;:17;34067:6;34057:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;34037:9;:17;34047:6;34037:17;;;;;;;;;;;;;;;:49;;;;34120:40;34145:14;34120:9;:20;34130:9;34120:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;34097:9;:20;34107:9;34097:20;;;;;;;;;;;;;;;:63;;;;34198:39;34227:9;34198;:24;34216:4;34198:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;34171:9;:24;34189:4;34171:24;;;;;;;;;;;;;;;:66;;;;34270:9;34253:35;;34262:6;34253:35;;;34281:6;34253:35;;;;;;:::i;:::-;;;;;;;;34304:17;34301:453;;;34342:15;;;;;;;;;;;:31;;;34374:6;34342:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34338:54;34410:15;;;;;;;;;;;:31;;;34442:9;34410:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34406:57;34481:15;;;;;;;;;;;:23;;;34505:16;;34481:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34477:266;;;34709:9;34620:99;;34685:4;34620:99;;;34645:10;34657:6;34665:18;34691:16;;34620:99;;;;;;;;;:::i;:::-;;;;;;;;34523:212;;;34477:266;34301:453;33523:1238;;33388:1373;;;;;;:::o;30896:444::-;30940:28;30971:24;30989:4;30971:9;:24::i;:::-;30940:55;;31032:1;31009:20;:24;31006:327;;;31050:13;31066:33;31078:20;31066:11;:33::i;:::-;31050:49;;31130:14;;31118:8;:26;;:47;;;;;31149:16;;;;;;;;;;;31148:17;31118:47;:72;;;;;31169:21;;;;;;;;;;;31118:72;31114:208;;;31268:38;31285:20;31268:16;:38::i;:::-;31114:208;31035:298;31006:327;30929:411;30896:444::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;31565:748::-;19261:4;19242:16;;:23;;;;;;;;;;;;;;;;;;31652:38:::1;31669:20;31652:16;:38::i;:::-;31701:23;31727:21;31701:47;;31759:22;31784:52;31832:3;31784:43;31804:12;:22;;;31784:15;:19;;:43;;;;:::i;:::-;:47;;:52;;;;:::i;:::-;31759:77;;31847:21;31871:51;31918:3;31871:42;31891:12;:21;;;31871:15;:19;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;31847:75;;31933:20;31956:50;32002:3;31956:41;31976:12;:20;;;31956:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;31933:73;;32017:20;32040:50;32086:3;32040:41;32060:12;:20;;;32040:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;32017:73;;32109:16;;;;;;;;;;;32101:34;;:50;32136:14;32101:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32162:31;32179:13;32162:16;:31::i;:::-;32212:10;;;;;;;;;;;32204:28;;:42;32233:12;32204:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32265:14;;;;;;;;;;;32257:32;;:46;32290:12;32257:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31641:672;;;;;19307:5:::0;19288:16;;:24;;;;;;;;;;;;;;;;;;31565:748;:::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;32722:585::-;32848:21;32886:1;32872:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32848:40;;32917:4;32899;32904:1;32899:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32943:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32933:4;32938:1;32933:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32976:62;32993:4;33008:15;;;;;;;;;;;33026:11;32976:8;:62::i;:::-;33075:15;;;;;;;;;;;:66;;;33156:11;33182:1;33226:4;33253;33273:15;33075:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32777:530;32722:585;:::o;32495:221::-;32560:12;32585:15;;;;;;;;;;;32577:29;;32615:9;32577:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32559:70;;;32644:7;32640:69;;;32673:24;32687:9;32673:24;;;;;;:::i;:::-;;;;;;;;32640:69;32548:168;32495: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:86::-;7033:7;7073:4;7066:5;7062:16;7051:27;;6998:86;;;:::o;7090:112::-;7173:22;7189:5;7173:22;:::i;:::-;7168:3;7161:35;7090:112;;:::o;7208:214::-;7297:4;7335:2;7324:9;7320:18;7312:26;;7348:67;7412:1;7401:9;7397:17;7388:6;7348:67;:::i;:::-;7208:214;;;;:::o;7428:118::-;7515:24;7533:5;7515:24;:::i;:::-;7510:3;7503:37;7428:118;;:::o;7552:222::-;7645:4;7683:2;7672:9;7668:18;7660:26;;7696:71;7764:1;7753:9;7749:17;7740:6;7696:71;:::i;:::-;7552:222;;;;:::o;7780:117::-;7889:1;7886;7879:12;7903:117;8012:1;8009;8002:12;8026:117;8135:1;8132;8125:12;8166:568;8239:8;8249:6;8299:3;8292:4;8284:6;8280:17;8276:27;8266:122;;8307:79;;:::i;:::-;8266:122;8420:6;8407:20;8397:30;;8450:18;8442:6;8439:30;8436:117;;;8472:79;;:::i;:::-;8436:117;8586:4;8578:6;8574:17;8562:29;;8640:3;8632:4;8624:6;8620:17;8610:8;8606:32;8603:41;8600:128;;;8647:79;;:::i;:::-;8600:128;8166:568;;;;;:::o;8740:116::-;8810:21;8825:5;8810:21;:::i;:::-;8803:5;8800:32;8790:60;;8846:1;8843;8836:12;8790:60;8740:116;:::o;8862:133::-;8905:5;8943:6;8930:20;8921:29;;8959:30;8983:5;8959:30;:::i;:::-;8862:133;;;;:::o;9001:698::-;9093:6;9101;9109;9158:2;9146:9;9137:7;9133:23;9129:32;9126:119;;;9164:79;;:::i;:::-;9126:119;9312:1;9301:9;9297:17;9284:31;9342:18;9334:6;9331:30;9328:117;;;9364:79;;:::i;:::-;9328:117;9477:80;9549:7;9540:6;9529:9;9525:22;9477:80;:::i;:::-;9459:98;;;;9255:312;9606:2;9632:50;9674:7;9665:6;9654:9;9650:22;9632:50;:::i;:::-;9622:60;;9577:115;9001:698;;;;;:::o;9705:323::-;9761:6;9810:2;9798:9;9789:7;9785:23;9781:32;9778:119;;;9816:79;;:::i;:::-;9778:119;9936:1;9961:50;10003:7;9994:6;9983:9;9979:22;9961:50;:::i;:::-;9951:60;;9907:114;9705:323;;;;:::o;10034:553::-;10211:4;10249:3;10238:9;10234:19;10226:27;;10263:71;10331:1;10320:9;10316:17;10307:6;10263:71;:::i;:::-;10344:72;10412:2;10401:9;10397:18;10388:6;10344:72;:::i;:::-;10426;10494:2;10483:9;10479:18;10470:6;10426:72;:::i;:::-;10508;10576:2;10565:9;10561:18;10552:6;10508:72;:::i;:::-;10034:553;;;;;;;:::o;10593:474::-;10661:6;10669;10718:2;10706:9;10697:7;10693:23;10689:32;10686:119;;;10724:79;;:::i;:::-;10686:119;10844:1;10869:53;10914:7;10905:6;10894:9;10890:22;10869:53;:::i;:::-;10859:63;;10815:117;10971:2;10997:53;11042:7;11033:6;11022:9;11018:22;10997:53;:::i;:::-;10987:63;;10942:118;10593:474;;;;;:::o;11073:180::-;11121:77;11118:1;11111:88;11218:4;11215:1;11208:15;11242:4;11239:1;11232:15;11259:281;11342:27;11364:4;11342:27;:::i;:::-;11334:6;11330:40;11472:6;11460:10;11457:22;11436:18;11424:10;11421:34;11418:62;11415:88;;;11483:18;;:::i;:::-;11415:88;11523:10;11519:2;11512:22;11302:238;11259:281;;:::o;11546:129::-;11580:6;11607:20;;:::i;:::-;11597:30;;11636:33;11664:4;11656:6;11636:33;:::i;:::-;11546:129;;;:::o;11681:311::-;11758:4;11848:18;11840:6;11837:30;11834:56;;;11870:18;;:::i;:::-;11834:56;11920:4;11912:6;11908:17;11900:25;;11980:4;11974;11970:15;11962:23;;11681:311;;;:::o;12015:710::-;12111:5;12136:81;12152:64;12209:6;12152:64;:::i;:::-;12136:81;:::i;:::-;12127:90;;12237:5;12266:6;12259:5;12252:21;12300:4;12293:5;12289:16;12282:23;;12353:4;12345:6;12341:17;12333:6;12329:30;12382:3;12374:6;12371:15;12368:122;;;12401:79;;:::i;:::-;12368:122;12516:6;12499:220;12533:6;12528:3;12525:15;12499:220;;;12608:3;12637:37;12670:3;12658:10;12637:37;:::i;:::-;12632:3;12625:50;12704:4;12699:3;12695:14;12688:21;;12575:144;12559:4;12554:3;12550:14;12543:21;;12499:220;;;12503:21;12117:608;;12015:710;;;;;:::o;12748:370::-;12819:5;12868:3;12861:4;12853:6;12849:17;12845:27;12835:122;;12876:79;;:::i;:::-;12835:122;12993:6;12980:20;13018:94;13108:3;13100:6;13093:4;13085:6;13081:17;13018:94;:::i;:::-;13009:103;;12825:293;12748:370;;;;:::o;13124:539::-;13208:6;13257:2;13245:9;13236:7;13232:23;13228:32;13225:119;;;13263:79;;:::i;:::-;13225:119;13411:1;13400:9;13396:17;13383:31;13441:18;13433:6;13430:30;13427:117;;;13463:79;;:::i;:::-;13427:117;13568:78;13638:7;13629:6;13618:9;13614:22;13568:78;:::i;:::-;13558:88;;13354:302;13124:539;;;;:::o;13669:329::-;13728:6;13777:2;13765:9;13756:7;13752:23;13748:32;13745:119;;;13783:79;;:::i;:::-;13745:119;13903:1;13928:53;13973:7;13964:6;13953:9;13949:22;13928:53;:::i;:::-;13918:63;;13874:117;13669:329;;;;:::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:143;19005:5;19036:6;19030:13;19021:22;;19052:33;19079:5;19052:33;:::i;:::-;18948:143;;;;:::o;19097:351::-;19167:6;19216:2;19204:9;19195:7;19191:23;19187:32;19184:119;;;19222:79;;:::i;:::-;19184:119;19342:1;19367:64;19423:7;19414:6;19403:9;19399:22;19367:64;:::i;:::-;19357:74;;19313:128;19097:351;;;;:::o;19454:114::-;19521:6;19555:5;19549:12;19539:22;;19454:114;;;:::o;19574:184::-;19673:11;19707:6;19702:3;19695:19;19747:4;19742:3;19738:14;19723:29;;19574:184;;;;:::o;19764:132::-;19831:4;19854:3;19846:11;;19884:4;19879:3;19875:14;19867:22;;19764:132;;;:::o;19902:108::-;19979:24;19997:5;19979:24;:::i;:::-;19974:3;19967:37;19902:108;;:::o;20016:179::-;20085:10;20106:46;20148:3;20140:6;20106:46;:::i;:::-;20184:4;20179:3;20175:14;20161:28;;20016:179;;;;:::o;20201:113::-;20271:4;20303;20298:3;20294:14;20286:22;;20201:113;;;:::o;20350:732::-;20469:3;20498:54;20546:5;20498:54;:::i;:::-;20568:86;20647:6;20642:3;20568:86;:::i;:::-;20561:93;;20678:56;20728:5;20678:56;:::i;:::-;20757:7;20788:1;20773:284;20798:6;20795:1;20792:13;20773:284;;;20874:6;20868:13;20901:63;20960:3;20945:13;20901:63;:::i;:::-;20894:70;;20987:60;21040:6;20987:60;:::i;:::-;20977:70;;20833:224;20820:1;20817;20813:9;20808:14;;20773:284;;;20777:14;21073:3;21066:10;;20474:608;;;20350:732;;;;:::o;21088:483::-;21259:4;21297:2;21286:9;21282:18;21274:26;;21310:71;21378:1;21367:9;21363:17;21354:6;21310:71;:::i;:::-;21428:9;21422:4;21418:20;21413:2;21402:9;21398:18;21391:48;21456:108;21559:4;21550:6;21456:108;:::i;:::-;21448:116;;21088:483;;;;;:::o;21577:311::-;21654:4;21744:18;21736:6;21733:30;21730:56;;;21766:18;;:::i;:::-;21730:56;21816:4;21808:6;21804:17;21796:25;;21876:4;21870;21866:15;21858:23;;21577:311;;;:::o;21894:143::-;21951:5;21982:6;21976:13;21967:22;;21998:33;22025:5;21998:33;:::i;:::-;21894:143;;;;:::o;22060:732::-;22167:5;22192:81;22208:64;22265:6;22208:64;:::i;:::-;22192:81;:::i;:::-;22183:90;;22293:5;22322:6;22315:5;22308:21;22356:4;22349:5;22345:16;22338:23;;22409:4;22401:6;22397:17;22389:6;22385:30;22438:3;22430:6;22427:15;22424:122;;;22457:79;;:::i;:::-;22424:122;22572:6;22555:231;22589:6;22584:3;22581:15;22555:231;;;22664:3;22693:48;22737:3;22725:10;22693:48;:::i;:::-;22688:3;22681:61;22771:4;22766:3;22762:14;22755:21;;22631:155;22615:4;22610:3;22606:14;22599:21;;22555:231;;;22559:21;22173:619;;22060:732;;;;;:::o;22815:385::-;22897:5;22946:3;22939:4;22931:6;22927:17;22923:27;22913:122;;22954:79;;:::i;:::-;22913:122;23064:6;23058:13;23089:105;23190:3;23182:6;23175:4;23167:6;23163:17;23089:105;:::i;:::-;23080:114;;22903:297;22815:385;;;;:::o;23206:554::-;23301:6;23350:2;23338:9;23329:7;23325:23;23321:32;23318:119;;;23356:79;;:::i;:::-;23318:119;23497:1;23486:9;23482:17;23476:24;23527:18;23519:6;23516:30;23513:117;;;23549:79;;:::i;:::-;23513:117;23654:89;23735:7;23726:6;23715:9;23711:22;23654:89;:::i;:::-;23644:99;;23447:306;23206:554;;;;:::o;23766:231::-;23906:34;23902:1;23894:6;23890:14;23883:58;23975:14;23970:2;23962:6;23958:15;23951:39;23766:231;:::o;24003:366::-;24145:3;24166:67;24230:2;24225:3;24166:67;:::i;:::-;24159:74;;24242:93;24331:3;24242:93;:::i;:::-;24360:2;24355:3;24351:12;24344:19;;24003:366;;;:::o;24375:419::-;24541:4;24579:2;24568:9;24564:18;24556:26;;24628:9;24622:4;24618:20;24614:1;24603:9;24599:17;24592:47;24656:131;24782:4;24656:131;:::i;:::-;24648:139;;24375:419;;;:::o;24800:221::-;24940:34;24936:1;24928:6;24924:14;24917:58;25009:4;25004:2;24996:6;24992:15;24985:29;24800:221;:::o;25027:366::-;25169:3;25190:67;25254:2;25249:3;25190:67;:::i;:::-;25183:74;;25266:93;25355:3;25266:93;:::i;:::-;25384:2;25379:3;25375:12;25368:19;;25027:366;;;:::o;25399:419::-;25565:4;25603:2;25592:9;25588:18;25580:26;;25652:9;25646:4;25642:20;25638:1;25627:9;25623:17;25616:47;25680:131;25806:4;25680:131;:::i;:::-;25672:139;;25399:419;;;:::o;25824:332::-;25945:4;25983:2;25972:9;25968:18;25960:26;;25996:71;26064:1;26053:9;26049:17;26040:6;25996:71;:::i;:::-;26077:72;26145:2;26134:9;26130:18;26121:6;26077:72;:::i;:::-;25824:332;;;;;:::o;26162:232::-;26302:34;26298:1;26290:6;26286:14;26279:58;26371:15;26366:2;26358:6;26354:15;26347:40;26162:232;:::o;26400:366::-;26542:3;26563:67;26627:2;26622:3;26563:67;:::i;:::-;26556:74;;26639:93;26728:3;26639:93;:::i;:::-;26757:2;26752:3;26748:12;26741:19;;26400:366;;;:::o;26772:419::-;26938:4;26976:2;26965:9;26961:18;26953:26;;27025:9;27019:4;27015:20;27011:1;27000:9;26996:17;26989:47;27053:131;27179:4;27053:131;:::i;:::-;27045:139;;26772:419;;;:::o;27197:229::-;27337:34;27333:1;27325:6;27321:14;27314:58;27406:12;27401:2;27393:6;27389:15;27382:37;27197:229;:::o;27432:366::-;27574:3;27595:67;27659:2;27654:3;27595:67;:::i;:::-;27588:74;;27671:93;27760:3;27671:93;:::i;:::-;27789:2;27784:3;27780:12;27773:19;;27432:366;;;:::o;27804:419::-;27970:4;28008:2;27997:9;27993:18;27985:26;;28057:9;28051:4;28047:20;28043:1;28032:9;28028:17;28021:47;28085:131;28211:4;28085:131;:::i;:::-;28077:139;;27804:419;;;:::o;28229:180::-;28277:77;28274:1;28267:88;28374:4;28371:1;28364:15;28398:4;28395:1;28388:15;28415:348;28455:7;28478:20;28496:1;28478:20;:::i;:::-;28473:25;;28512:20;28530:1;28512:20;:::i;:::-;28507:25;;28700:1;28632:66;28628:74;28625:1;28622:81;28617:1;28610:9;28603:17;28599:105;28596:131;;;28707:18;;:::i;:::-;28596:131;28755:1;28752;28748:9;28737:20;;28415:348;;;;:::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:191::-;38331:4;38351:20;38369:1;38351:20;:::i;:::-;38346:25;;38385:20;38403:1;38385:20;:::i;:::-;38380:25;;38424:1;38421;38418:8;38415:34;;;38429:18;;:::i;:::-;38415:34;38474:1;38471;38467:9;38459:17;;38291:191;;;;:::o;38488:177::-;38628:29;38624:1;38616:6;38612:14;38605:53;38488:177;:::o;38671:366::-;38813:3;38834:67;38898:2;38893:3;38834:67;:::i;:::-;38827:74;;38910:93;38999:3;38910:93;:::i;:::-;39028:2;39023:3;39019:12;39012:19;;38671:366;;;:::o;39043:419::-;39209:4;39247:2;39236:9;39232:18;39224:26;;39296:9;39290:4;39286:20;39282:1;39271:9;39267:17;39260:47;39324:131;39450:4;39324:131;:::i;:::-;39316:139;;39043:419;;;:::o;39468:233::-;39507:3;39530:24;39548:5;39530:24;:::i;:::-;39521:33;;39576:66;39569:5;39566:77;39563:103;;39646:18;;:::i;:::-;39563:103;39693:1;39686:5;39682:13;39675:20;;39468:233;;;:::o;39707:663::-;39795:6;39803;39811;39860:2;39848:9;39839:7;39835:23;39831:32;39828:119;;;39866:79;;:::i;:::-;39828:119;39986:1;40011:64;40067:7;40058:6;40047:9;40043:22;40011:64;:::i;:::-;40001:74;;39957:128;40124:2;40150:64;40206:7;40197:6;40186:9;40182:22;40150:64;:::i;:::-;40140:74;;40095:129;40263:2;40289:64;40345:7;40336:6;40325:9;40321:22;40289:64;:::i;:::-;40279:74;;40234:129;39707:663;;;;;:::o;40376:180::-;40424:77;40421:1;40414:88;40521:4;40518:1;40511:15;40545:4;40542:1;40535:15;40562:185;40602:1;40619:20;40637:1;40619:20;:::i;:::-;40614:25;;40653:20;40671:1;40653:20;:::i;:::-;40648:25;;40692:1;40682:35;;40697:18;;:::i;:::-;40682:35;40739:1;40736;40732:9;40727:14;;40562:185;;;;:::o;40753:220::-;40893:34;40889:1;40881:6;40877:14;40870:58;40962:3;40957:2;40949:6;40945:15;40938:28;40753:220;:::o;40979:366::-;41121:3;41142:67;41206:2;41201:3;41142:67;:::i;:::-;41135:74;;41218:93;41307:3;41218:93;:::i;:::-;41336:2;41331:3;41327:12;41320:19;;40979:366;;;:::o;41351:419::-;41517:4;41555:2;41544:9;41540:18;41532:26;;41604:9;41598:4;41594:20;41590:1;41579:9;41575:17;41568:47;41632:131;41758:4;41632:131;:::i;:::-;41624:139;;41351:419;;;:::o;41776:85::-;41821:7;41850:5;41839:16;;41776:85;;;:::o;41867:158::-;41925:9;41958:61;41976:42;41985:32;42011:5;41985:32;:::i;:::-;41976:42;:::i;:::-;41958:61;:::i;:::-;41945:74;;41867:158;;;:::o;42031:147::-;42126:45;42165:5;42126:45;:::i;:::-;42121:3;42114:58;42031:147;;:::o;42184:831::-;42447:4;42485:3;42474:9;42470:19;42462:27;;42499:71;42567:1;42556:9;42552:17;42543:6;42499:71;:::i;:::-;42580:80;42656:2;42645:9;42641:18;42632:6;42580:80;:::i;:::-;42707:9;42701:4;42697:20;42692:2;42681:9;42677:18;42670:48;42735:108;42838:4;42829:6;42735:108;:::i;:::-;42727:116;;42853:72;42921:2;42910:9;42906:18;42897:6;42853:72;:::i;:::-;42935:73;43003:3;42992:9;42988:19;42979:6;42935:73;:::i;:::-;42184:831;;;;;;;;:::o;43021:147::-;43122:11;43159:3;43144:18;;43021:147;;;;:::o;43174:114::-;;:::o;43294:398::-;43453:3;43474:83;43555:1;43550:3;43474:83;:::i;:::-;43467:90;;43566:93;43655:3;43566:93;:::i;:::-;43684:1;43679:3;43675:11;43668:18;;43294:398;;;:::o;43698:379::-;43882:3;43904:147;44047:3;43904:147;:::i;:::-;43897:154;;44068:3;44061:10;;43698:379;;;:::o
Swarm Source
ipfs://d3e5e58f671c229e9de68b8d1e6007c6386330df8dd3dfa021b427fbda026a66
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.