More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 11,367 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap ETH For Exa... | 17557682 | 520 days ago | IN | 0.01 ETH | 0.00051205 | ||||
Swap ETH For Exa... | 17557681 | 520 days ago | IN | 0.01 ETH | 0.0004566 | ||||
Swap ETH For Exa... | 17557680 | 520 days ago | IN | 0.01 ETH | 0.00044001 | ||||
Swap ETH For Exa... | 17557680 | 520 days ago | IN | 0.01 ETH | 0.00044001 | ||||
Swap ETH For Exa... | 17557679 | 520 days ago | IN | 0.01 ETH | 0.00045377 | ||||
Swap ETH For Exa... | 17557678 | 520 days ago | IN | 0.01 ETH | 0.00046537 | ||||
Swap ETH For Exa... | 17557678 | 520 days ago | IN | 0.01 ETH | 0.00046537 | ||||
Swap ETH For Exa... | 17557676 | 520 days ago | IN | 0.01 ETH | 0.00048018 | ||||
Swap ETH For Exa... | 17557676 | 520 days ago | IN | 0.01 ETH | 0.00048018 | ||||
Swap ETH For Exa... | 17557675 | 520 days ago | IN | 0.01 ETH | 0.00049674 | ||||
Swap ETH For Exa... | 17557675 | 520 days ago | IN | 0.01 ETH | 0.00049674 | ||||
Swap ETH For Exa... | 17557675 | 520 days ago | IN | 0.01 ETH | 0.00049674 | ||||
Swap ETH For Exa... | 17557675 | 520 days ago | IN | 0.01 ETH | 0.00049674 | ||||
Swap ETH For Exa... | 17557675 | 520 days ago | IN | 0.01 ETH | 0.00049674 | ||||
Swap ETH For Exa... | 17557674 | 520 days ago | IN | 0.01 ETH | 0.00044963 | ||||
Swap ETH For Exa... | 17557670 | 520 days ago | IN | 0.01 ETH | 0.00047617 | ||||
Swap ETH For Exa... | 17557670 | 520 days ago | IN | 0.01 ETH | 0.00047617 | ||||
Swap ETH For Exa... | 17557664 | 520 days ago | IN | 0.01 ETH | 0.00051386 | ||||
Swap ETH For Exa... | 17557664 | 520 days ago | IN | 0.01 ETH | 0.00051386 | ||||
Swap ETH For Exa... | 17557664 | 520 days ago | IN | 0.01 ETH | 0.00051386 | ||||
Swap ETH For Exa... | 17557663 | 520 days ago | IN | 0.01 ETH | 0.00052636 | ||||
Swap ETH For Exa... | 17557657 | 520 days ago | IN | 0.01 ETH | 0.00048544 | ||||
Swap ETH For Exa... | 17557654 | 520 days ago | IN | 0.01 ETH | 0.00046042 | ||||
Swap ETH For Exa... | 17557601 | 520 days ago | IN | 0.01 ETH | 0.00044695 | ||||
Swap ETH For Exa... | 17557600 | 520 days ago | IN | 0.01 ETH | 0.00046474 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16521826 | 666 days ago | 0.00000002 ETH | ||||
16521826 | 666 days ago | 0.00000002 ETH | ||||
15574027 | 799 days ago | 0.00452079 ETH | ||||
15574027 | 799 days ago | 0.00452079 ETH | ||||
15574023 | 799 days ago | 0.00492666 ETH | ||||
15574023 | 799 days ago | 0.00492666 ETH | ||||
15503138 | 809 days ago | 0.06719172 ETH | ||||
15503138 | 809 days ago | 0.06719172 ETH | ||||
15466346 | 815 days ago | 0.03047482 ETH | ||||
15466346 | 815 days ago | 0.03047482 ETH | ||||
15443298 | 819 days ago | 0.01455294 ETH | ||||
15443298 | 819 days ago | 0.01455294 ETH | ||||
15404320 | 825 days ago | 0.00927526 ETH | ||||
15404320 | 825 days ago | 0.00927526 ETH | ||||
15222224 | 854 days ago | 0.03593279 ETH | ||||
15222224 | 854 days ago | 0.03593279 ETH | ||||
15171288 | 862 days ago | 0.00000117 ETH | ||||
15171288 | 862 days ago | 0.00000117 ETH | ||||
15072059 | 877 days ago | 0.05377941 ETH | ||||
15072059 | 877 days ago | 0.05377941 ETH | ||||
15039388 | 883 days ago | 0.00029492 ETH | ||||
15039388 | 883 days ago | 0.00000297 ETH | ||||
15039355 | 883 days ago | 0.00028729 ETH | ||||
15039355 | 883 days ago | 0.0000029 ETH | ||||
15039330 | 883 days ago | 0.00027987 ETH |
Loading...
Loading
Contract Name:
DEGENSwapRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-05 */ pragma solidity =0.6.6; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } pragma solidity =0.6.6; abstract 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() public{ _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.6.2; interface IDEGENSwapRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } pragma solidity >=0.6.2; interface IDEGENSwapRouter is IDEGENSwapRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity >=0.5.0; interface IToken { function addPair(address pair, address token) external; function depositLPFee(uint amount, address token) external; } pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } pragma solidity =0.6.6; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } function div(uint x, uint y) internal pure returns (uint z) { require(y > 0, "ds-math-div-underflow"); z = x / y; } } pragma solidity >=0.5.0; interface IDEGENSwapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function baseToken() external view returns (address); function getTotalFee() external view returns (uint); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function updateTotalFee(uint totalFee) external returns (bool); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast, address _baseToken); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, uint amount0Fee, uint amount1Fee, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; function setBaseToken(address _baseToken) external; } pragma solidity >=0.5.0; interface IDEGENSwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function pairExist(address pair) external view returns (bool); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function routerInitialize(address) external; function routerAddress() external view returns (address); } pragma solidity =0.6.6; abstract contract FeeStore is Ownable { uint public adminFee; address public adminFeeAddress; address public factoryAddress; mapping (address => address) public pairFeeAddress; function initialize(address _factory, uint256 _adminFee, address _adminFeeAddress) internal { factoryAddress = _factory; adminFee = _adminFee; adminFeeAddress = _adminFeeAddress; } function feeAdddressSetWhileSwap(address pair,address tokenAddress) public onlyOwner { require(IDEGENSwapFactory(factoryAddress).pairExist(pair), "DEGENSwap FeeStore: Pair is not Exist"); require(IDEGENSwapPair(pair).token0() == tokenAddress || IDEGENSwapPair(pair).token1() == tokenAddress, "DEGENSwap FeeStore: Invalid token address"); pairFeeAddress[pair] = tokenAddress; } function feeAddressGet() public view returns (address) { return (adminFeeAddress == address(0) ? address(this) : adminFeeAddress); } function setAdminFee (address _adminFeeAddress, uint _adminFee) external onlyOwner { require (_adminFee <= 100, "DEGENSwap: Fee exceeds 1%"); adminFeeAddress = _adminFeeAddress; adminFee = _adminFee; } } pragma solidity >=0.5.0; library DEGENSwapLibrary { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'DEGENSwapLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'DEGENSwapLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'f3ec3606df6137332c87b08940f686afc830a0cb42ed13c97c14b8a35a75cd7f' // init code hash )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1,,) = IDEGENSwapPair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'DEGENSwapLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'DEGENSwapLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, bool tokenFee, uint totalFee) internal pure returns (uint amountOut) { require(amountIn > 0, 'DEGENSwapLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'DEGENSwapLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInMultiplier = tokenFee ? 10000 - totalFee : 10000; uint amountInWithFee = amountIn.mul(amountInMultiplier); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, bool tokenFee, uint totalFee) internal pure returns (uint amountIn) { require(amountOut > 0, 'DEGENSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'DEGENSwapLibrary: INSUFFICIENT_LIQUIDITY'); uint amountOutMultiplier = tokenFee ? 10000 - totalFee : 10000; uint numerator = reserveIn.mul(amountOut).mul(10000); uint denominator = reserveOut.sub(amountOut).mul(amountOutMultiplier); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'DEGENSwapLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { IDEGENSwapPair pair = IDEGENSwapPair(pairFor(factory, path[i], path[i + 1])); address baseToken = pair.baseToken(); uint totalFee = pair.getTotalFee(); (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, baseToken != address(0), totalFee); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'DEGENSwapLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { IDEGENSwapPair pair = IDEGENSwapPair(pairFor(factory, path[i - 1], path[i])); address baseToken = pair.baseToken(); uint totalFee = pair.getTotalFee(); (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut, baseToken != address(0), totalFee); } } function adminFeeCalculation(uint256 _amounts,uint256 _adminFee) internal pure returns (uint256,uint256) { uint adminFeeDeduct = (_amounts.mul(_adminFee)) / (10000); _amounts = _amounts.sub(adminFeeDeduct); return (_amounts,adminFeeDeduct); } } pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } } pragma solidity =0.6.6; abstract contract SupportingSwap is FeeStore, IDEGENSwapRouter { using SafeMath for uint; address public override factory; address public override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'DEGENSwapRouter: EXPIRED'); _; } function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = DEGENSwapLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); (uint amount0Fee, uint amount1Fee) = _calculateFees(input, output, amounts[i], amount0Out, amount1Out); address to = i < path.length - 2 ? DEGENSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; IDEGENSwapPair(DEGENSwapLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, amount0Fee, amount1Fee, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ (amountIn,adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amountIn, adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); } amounts = DEGENSwapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'DEGENSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]) { amounts = DEGENSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'DEGENSwapRouter: EXCESSIVE_INPUT_AMOUNT'); (amounts[0], adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amounts[0], adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); amounts = DEGENSwapLibrary.getAmountsOut(factory, amounts[0], path); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); } else { amounts = DEGENSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'DEGENSwapRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); } _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[0] == WETH, 'DEGENSwapRouter: INVALID_PATH'); uint bnb = msg.value; address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ (bnb, adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(bnb, adminFee); if(address(this) != feeAddressGet()){ payable(feeAddressGet()).transfer(adminFeeDeduct); } } amounts = DEGENSwapLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'DEGENSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(pair, amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[path.length - 1] == WETH, 'DEGENSwapRouter: INVALID_PATH'); uint adminFeeDeduct; address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); if(path[0] == pairFeeAddress[pair]){ amounts = DEGENSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'DEGENSwapRouter: EXCESSIVE_INPUT_AMOUNT'); (amounts[0],adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amounts[0],adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); amounts = DEGENSwapLibrary.getAmountsOut(factory, amounts[0], path); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); } else { amounts = DEGENSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'DEGENSwapRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); } _swap(amounts, path, address(this)); uint amountETHOut = amounts[amounts.length - 1]; if(path[1] == pairFeeAddress[pair]){ (amountETHOut,adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amountETHOut,adminFee); } IWETH(WETH).withdraw(amountETHOut); TransferHelper.safeTransferETH(to, amountETHOut); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[path.length - 1] == WETH, 'DEGENSwapRouter: INVALID_PATH'); uint adminFeeDeduct; address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); if(path[0] == pairFeeAddress[pair]){ (amountIn,adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amountIn, adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); } amounts = DEGENSwapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'DEGENSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amounts[0] ); _swap(amounts, path, address(this)); uint amountETHOut = amounts[amounts.length - 1]; if(path[1] == pairFeeAddress[pair]){ (amountETHOut,adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amountETHOut,adminFee); } IWETH(WETH).withdraw(amountETHOut); TransferHelper.safeTransferETH(to, amountETHOut); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[0] == WETH, 'DEGENSwapRouter: INVALID_PATH'); address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ amounts = DEGENSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'DEGENSwapRouter: EXCESSIVE_INPUT_AMOUNT'); (amounts[0], adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amounts[0], adminFee); if(address(this) != feeAddressGet()){ payable(feeAddressGet()).transfer(adminFeeDeduct); } amounts = DEGENSwapLibrary.getAmountsOut(factory, amounts[0], path); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(pair, amounts[0])); } else { amounts = DEGENSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'DEGENSwapRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(DEGENSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0])); } _swap(amounts, path, to); // refund dust eth, if any uint bal = amounts[0].add(adminFeeDeduct); if (msg.value > bal) TransferHelper.safeTransferETH(msg.sender, msg.value - bal); } function _calculateFees(address input, address output, uint amountIn, uint amount0Out, uint amount1Out) internal view virtual returns (uint amount0Fee, uint amount1Fee) { IDEGENSwapPair pair = IDEGENSwapPair(DEGENSwapLibrary.pairFor(factory, input, output)); (address token0,) = DEGENSwapLibrary.sortTokens(input, output); address baseToken = pair.baseToken(); uint totalFee = pair.getTotalFee(); amount0Fee = baseToken != token0 ? uint(0) : input == token0 ? amountIn.mul(totalFee).div(10**4) : amount0Out.mul(totalFee).div(10**4); amount1Fee = baseToken == token0 ? uint(0) : input != token0 ? amountIn.mul(totalFee).div(10**4) : amount1Out.mul(totalFee).div(10**4); } function _calculateAmounts(address input, address output, address token0) internal view returns (uint amountInput, uint amountOutput) { IDEGENSwapPair pair = IDEGENSwapPair(DEGENSwapLibrary.pairFor(factory, input, output)); (uint reserve0, uint reserve1,, address baseToken) = pair.getReserves(); uint totalFee = pair.getTotalFee(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = DEGENSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput, baseToken != address(0), totalFee); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = DEGENSwapLibrary.sortTokens(input, output); (uint amountInput, uint amountOutput) = _calculateAmounts(input, output, token0); (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); (uint amount0Fee, uint amount1Fee) = _calculateFees(input, output, amountInput, amount0Out, amount1Out); address to = i < path.length - 2 ? DEGENSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; IDEGENSwapPair pair = IDEGENSwapPair(DEGENSwapLibrary.pairFor(factory, input, output)); pair.swap(amount0Out, amount1Out, amount0Fee, amount1Fee, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ (amountIn,adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amountIn,adminFee); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); } TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); if(path[1] == pairFeeAddress[pair]){ (amountOutMin,adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amountOutMin,adminFee); } require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'DEGENSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[0] == WETH, 'DEGENSwapRouter: INVALID_PATH'); uint amountIn = msg.value; address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); uint adminFeeDeduct; if(path[0] == pairFeeAddress[pair]){ (amountIn,adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amountIn,adminFee); if(address(this) != feeAddressGet()){ payable(feeAddressGet()).transfer(adminFeeDeduct); } } IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(pair, amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); if(path[1] == pairFeeAddress[pair]){ (amountOutMin,adminFeeDeduct) = DEGENSwapLibrary.adminFeeCalculation(amountOutMin,adminFee); } require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'DEGENSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path.length == 2, "DEGENSwapRouter: ONLY_TWO_TOKENS_ALLOWED"); require(path[path.length - 1] == WETH, 'DEGENSwapRouter: INVALID_PATH'); address pair = DEGENSwapLibrary.pairFor(factory, path[0], path[1]); if(path[0] == pairFeeAddress[pair]){ uint adminFeeDeduct = (amountIn.mul(adminFee)) / (10000); amountIn = amountIn.sub(adminFeeDeduct); TransferHelper.safeTransferFrom( path[0], msg.sender, feeAddressGet(), adminFeeDeduct ); } TransferHelper.safeTransferFrom( path[0], msg.sender, pair, amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); amountOutMin; if(path[1] == pairFeeAddress[pair]){ uint adminFeeDeduct = (amountOut.mul(adminFee)) / (10000); amountOut = amountOut.sub(adminFeeDeduct); } IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return DEGENSwapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return DEGENSwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut, false, 0); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return DEGENSwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut, false, 0); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return DEGENSwapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return DEGENSwapLibrary.getAmountsIn(factory, amountOut, path); } } pragma solidity =0.6.6; contract DEGENSwapRouter is SupportingSwap { using SafeMath for uint; address private BUSD; constructor(address _factory, address _WETH, address _BUSD, uint256 _adminFee, address _adminFeeAddress) public { factory = _factory; WETH = _WETH; BUSD = _BUSD; initialize(_factory, _adminFee, _adminFeeAddress); IDEGENSwapFactory(_factory).routerInitialize(address(this)); } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (getPair(tokenA, tokenB) == address(0)) { if(tokenA == WETH) { IDEGENSwapFactory(factory).createPair(tokenB, tokenA); pairFeeAddress[getPair(tokenA,tokenB)] = tokenA; } else { IDEGENSwapFactory(factory).createPair(tokenA, tokenB); pairFeeAddress[getPair(tokenA,tokenB)] = tokenB; } } (uint reserveA, uint reserveB) = DEGENSwapLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); if (tokenA == WETH) { pairFeeAddress[getPair(tokenA,tokenB)] = tokenA; } else if (tokenA == BUSD) { pairFeeAddress[getPair(tokenA,tokenB)] = tokenA; } else { pairFeeAddress[getPair(tokenA,tokenB)] = tokenB; } } else { uint amountBOptimal = DEGENSwapLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'DEGENSwapRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = DEGENSwapLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'DEGENSwapRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function getPair(address tokenA,address tokenB) public view returns (address){ return IDEGENSwapFactory(factory).getPair(tokenA, tokenB); } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = DEGENSwapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IDEGENSwapPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountETH, uint amountToken, uint liquidity) { (amountETH, amountToken) = _addLiquidity( WETH, token, msg.value, amountTokenDesired, amountETHMin, amountTokenMin ); address pair = DEGENSwapLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IDEGENSwapPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = DEGENSwapLibrary.pairFor(factory, tokenA, tokenB); IDEGENSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IDEGENSwapPair(pair).burn(to); (address token0,) = DEGENSwapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'DEGENSwapRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'DEGENSwapRouter: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = DEGENSwapLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IDEGENSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = DEGENSwapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IDEGENSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = DEGENSwapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IDEGENSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_BUSD","type":"address"},{"internalType":"uint256","name":"_adminFee","type":"uint256"},{"internalType":"address","name":"_adminFeeAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"adminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factoryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"feeAdddressSetWhileSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddressGet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adminFeeAddress","type":"address"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"name":"setAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620061a7380380620061a7833981810160405260a08110156200003757600080fd5b508051602082015160408301516060840151608090940151929391929091906200007c6200006d6001600160e01b036200013b16565b6001600160e01b036200013f16565b600580546001600160a01b038088166001600160a01b031992831617909255600680548784169083161790556007805492861692909116919091179055620000cf8583836001600160e01b036200018f16565b6040805163b77fe18360e01b815230600482015290516001600160a01b0387169163b77fe18391602480830192600092919082900301818387803b1580156200011757600080fd5b505af11580156200012c573d6000803e3d6000fd5b505050505050505050620001c3565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600380546001600160a01b039485166001600160a01b03199182161790915560019290925560028054919093169116179055565b615fd480620001d36000396000f3fe6080604052600436106102085760003560e01c8063a0be06f911610118578063dcacce69116100a0578063e8e337001161006f578063e8e3370014610d0d578063f2fde38b14610d8d578063f305d71914610dc0578063f543a80214610e06578063fb3bdb4114610e4157610223565b8063dcacce6914610bf3578063ded9382a14610c26578063e07769ed14610c99578063e6a4390514610cd257610223565b8063af2979eb116100e7578063af2979eb146109f5578063b6f9de9514610a48578063baa2abde14610acc578063c45a015514610b29578063d06ca61f14610b3e57610223565b8063a0be06f914610980578063ad5c464814610995578063ad615dec146109aa578063add10aa2146109e057610223565b80635b0d59841161019b5780637ff36ab51161016a5780637ff36ab51461080657806385f8c2591461088a5780638803dbee146108c05780638da5cb5b14610956578063966dae0e1461096b57610223565b80635b0d5984146106525780635c11d795146106c5578063715018a61461075b578063791ac9471461077057610223565b80631f00ca74116101d75780631f00ca74146103f35780632195995c146104a857806338ed1739146105265780634a25d94a146105bc57610223565b806302751cec14610228578063054d50d41461029457806308a17149146102dc57806318cbafe51461030d57610223565b36610223576006546001600160a01b0316331461022157fe5b005b600080fd5b34801561023457600080fd5b5061027b600480360360c081101561024b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ec5565b6040805192835260208301919091528051918290030190f35b3480156102a057600080fd5b506102ca600480360360608110156102b757600080fd5b5080359060208101359060400135610fb3565b60408051918252519081900360200190f35b3480156102e857600080fd5b506102f1610fcb565b604080516001600160a01b039092168252519081900360200190f35b34801561031957600080fd5b506103a3600480360360a081101561033057600080fd5b813591602081013591810190606081016040820135600160201b81111561035657600080fd5b82018360208201111561036857600080fd5b803590602001918460208302840111600160201b8311171561038957600080fd5b91935091506001600160a01b038135169060200135610fda565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103df5781810151838201526020016103c7565b505050509050019250505060405180910390f35b3480156103ff57600080fd5b506103a36004803603604081101561041657600080fd5b81359190810190604081016020820135600160201b81111561043757600080fd5b82018360208201111561044957600080fd5b803590602001918460208302840111600160201b8311171561046a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113c1945050505050565b3480156104b457600080fd5b5061027b60048036036101608110156104cc57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356113e4565b34801561053257600080fd5b506103a3600480360360a081101561054957600080fd5b813591602081013591810190606081016040820135600160201b81111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460208302840111600160201b831117156105a257600080fd5b91935091506001600160a01b0381351690602001356114cc565b3480156105c857600080fd5b506103a3600480360360a08110156105df57600080fd5b813591602081013591810190606081016040820135600160201b81111561060557600080fd5b82018360208201111561061757600080fd5b803590602001918460208302840111600160201b8311171561063857600080fd5b91935091506001600160a01b03813516906020013561172e565b34801561065e57600080fd5b506102ca600480360361014081101561067657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611a92565b3480156106d157600080fd5b50610221600480360360a08110156106e857600080fd5b813591602081013591810190606081016040820135600160201b81111561070e57600080fd5b82018360208201111561072057600080fd5b803590602001918460208302840111600160201b8311171561074157600080fd5b91935091506001600160a01b038135169060200135611b75565b34801561076757600080fd5b50610221611ef8565b34801561077c57600080fd5b50610221600480360360a081101561079357600080fd5b813591602081013591810190606081016040820135600160201b8111156107b957600080fd5b8201836020820111156107cb57600080fd5b803590602001918460208302840111600160201b831117156107ec57600080fd5b91935091506001600160a01b038135169060200135611f66565b6103a36004803603608081101561081c57600080fd5b81359190810190604081016020820135600160201b81111561083d57600080fd5b82018360208201111561084f57600080fd5b803590602001918460208302840111600160201b8311171561087057600080fd5b91935091506001600160a01b0381351690602001356122e6565b34801561089657600080fd5b506102ca600480360360608110156108ad57600080fd5b50803590602081013590604001356126be565b3480156108cc57600080fd5b506103a3600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b0381351690602001356126ce565b34801561096257600080fd5b506102f1612968565b34801561097757600080fd5b506102f1612977565b34801561098c57600080fd5b506102ca612986565b3480156109a157600080fd5b506102f161298c565b3480156109b657600080fd5b506102ca600480360360608110156109cd57600080fd5b508035906020810135906040013561299b565b3480156109ec57600080fd5b506102f16129a8565b348015610a0157600080fd5b506102ca600480360360c0811015610a1857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129d4565b61022160048036036080811015610a5e57600080fd5b81359190810190604081016020820135600160201b811115610a7f57600080fd5b820183602082011115610a9157600080fd5b803590602001918460208302840111600160201b83111715610ab257600080fd5b91935091506001600160a01b038135169060200135612b34565b348015610ad857600080fd5b5061027b600480360360e0811015610aef57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612fa6565b348015610b3557600080fd5b506102f16131d7565b348015610b4a57600080fd5b506103a360048036036040811015610b6157600080fd5b81359190810190604081016020820135600160201b811115610b8257600080fd5b820183602082011115610b9457600080fd5b803590602001918460208302840111600160201b83111715610bb557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506131e6945050505050565b348015610bff57600080fd5b506102f160048036036020811015610c1657600080fd5b50356001600160a01b0316613200565b348015610c3257600080fd5b5061027b6004803603610140811015610c4a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561321b565b348015610ca557600080fd5b5061022160048036036040811015610cbc57600080fd5b506001600160a01b038135169060200135613319565b348015610cde57600080fd5b506102f160048036036040811015610cf557600080fd5b506001600160a01b03813581169160200135166133f7565b348015610d1957600080fd5b50610d6f6004803603610100811015610d3157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613483565b60408051938452602084019290925282820152519081900360600190f35b348015610d9957600080fd5b5061022160048036036020811015610db057600080fd5b50356001600160a01b03166135ac565b610d6f600480360360c0811015610dd657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561365f565b348015610e1257600080fd5b5061022160048036036040811015610e2957600080fd5b506001600160a01b038135811691602001351661388e565b6103a360048036036080811015610e5757600080fd5b81359190810190604081016020820135600160201b811115610e7857600080fd5b820183602082011115610e8a57600080fd5b803590602001918460208302840111600160201b83111715610eab57600080fd5b91935091506001600160a01b038135169060200135613b06565b6000808242811015610f0c576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600654610f28908a906001600160a01b03168a8a8a308a612fa6565b9093509150610f38898685614133565b60065460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015610f8557600080fd5b505af1158015610f99573d6000803e3d6000fd5b50505050610fa78583614287565b50965096945050505050565b6000610fc384848460008061437f565b949350505050565b6002546001600160a01b031681565b60608142811015611020576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b6002851461105f5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b03168686600019810181811061107b57fe5b905060200201356001600160a01b03166001600160a01b0316146110d4576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b6005546000908190611125906001600160a01b0316898984816110f357fe5b905060200201356001600160a01b03168a8a600181811061111057fe5b905060200201356001600160a01b0316614487565b6001600160a01b03808216600090815260046020526040812054929350911690899089908161115057fe5b905060200201356001600160a01b03166001600160a01b031614156111ad5761117b8a600154614547565b909a5091506111ad888860008161118e57fe5b905060200201356001600160a01b0316336111a76129a8565b85614587565b600554604080516020808b0282810182019093528a82526111f7936001600160a01b0316928e92918d918d918291908501908490808284376000920191909152506146e492505050565b9350888460018651038151811061120a57fe5b6020026020010151101561124f5760405162461bcd60e51b815260040180806020018281038252602b815260200180615cf4602b913960400191505060405180910390fd5b61128b8888600081811061125f57fe5b905060200201356001600160a01b031633838760008151811061127e57fe5b6020026020010151614587565b6112ca84898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614969915050565b6000846001865103815181106112dc57fe5b6020908102919091018101516001600160a01b0380851660009081526004909352604090922054909250168989600181811061131457fe5b905060200201356001600160a01b03166001600160a01b031614156113445761133f81600154614547565b935090505b60065460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b505050506113b38782614287565b505050509695505050505050565b6005546060906113db906001600160a01b03168484614bb8565b90505b92915050565b60055460009081908190611402906001600160a01b03168f8f614487565b9050600087611411578c611415565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561148b57600080fd5b505af115801561149f573d6000803e3d6000fd5b505050506114b28f8f8f8f8f8f8f612fa6565b809450819550505050509b509b9950505050505050505050565b60608142811015611512576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600285146115515760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b60055460009061158b906001600160a01b03168888848161156e57fe5b905060200201356001600160a01b03168989600181811061111057fe5b6001600160a01b038082166000908152600460205260408120549293509116888883816115b457fe5b905060200201356001600160a01b03166001600160a01b03161415611611576115df8a600154614547565b909a50905061161188886000816115f257fe5b905060200201356001600160a01b03163361160b6129a8565b84614587565b600554604080516020808b0282810182019093528a825261165b936001600160a01b0316928e92918d918d918291908501908490808284376000920191909152506146e492505050565b9350888460018651038151811061166e57fe5b602002602001015110156116b35760405162461bcd60e51b815260040180806020018281038252602b815260200180615cf4602b913960400191505060405180910390fd5b6116e2888860008181106116c357fe5b905060200201356001600160a01b031633848760008151811061127e57fe5b611721848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614969915050565b5050509695505050505050565b60608142811015611774576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600285146117b35760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b0316868660001981018181106117cf57fe5b905060200201356001600160a01b03166001600160a01b031614611828576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b6005546000908190611847906001600160a01b0316898984816110f357fe5b6001600160a01b03808216600090815260046020526040812054929350911690899089908161187257fe5b905060200201356001600160a01b03166001600160a01b031614156119f357600554604080516020808b0282810182019093528a82526118db936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b935088846000815181106118eb57fe5b602002602001015111156119305760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b6119508460008151811061194057fe5b6020026020010151600154614547565b8560008151811061195d57fe5b6020026020010181945082815250505061197d8888600081811061118e57fe5b60055484516119dc916001600160a01b031690869060009061199b57fe5b60200260200101518a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506146e492505050565b93506119ee8888600081811061125f57fe5b61128b565b600554604080516020808b0282810182019093528a8252611a3d936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b93508884600081518110611a4d57fe5b6020026020010151111561124f5760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b6005546006546000918291611ab5916001600160a01b03908116918f9116614487565b9050600086611ac4578b611ac8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611b3e57600080fd5b505af1158015611b52573d6000803e3d6000fd5b50505050611b648d8d8d8d8d8d6129d4565b9d9c50505050505050505050505050565b8042811015611bb9576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b60028414611bf85760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b600554600090611c32906001600160a01b031687878481611c1557fe5b905060200201356001600160a01b03168888600181811061111057fe5b6001600160a01b03808216600090815260046020526040812054929350911687878381611c5b57fe5b905060200201356001600160a01b03166001600160a01b03161415611c9957611c8689600154614547565b9099509050611c9987876000816115f257fe5b611cc187876000818110611ca957fe5b905060200201356001600160a01b031633848c614587565b600087876000198101818110611cd357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d3857600080fd5b505afa158015611d4c573d6000803e3d6000fd5b505050506040513d6020811015611d6257600080fd5b50516040805160208a810282810182019093528a8252929350611da49290918b918b9182918501908490808284376000920191909152508a9250614e1d915050565b6001600160a01b038084166000908152600460205260409020541688886001818110611dcc57fe5b905060200201356001600160a01b03166001600160a01b03161415611dfd57611df789600154614547565b90995091505b88611eaf828a8a6000198101818110611e1257fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b505afa158015611e8b573d6000803e3d6000fd5b505050506040513d6020811015611ea157600080fd5b50519063ffffffff61505716565b1015611eec5760405162461bcd60e51b815260040180806020018281038252602b815260200180615cf4602b913960400191505060405180910390fd5b50505050505050505050565b611f006150a7565b6001600160a01b0316611f11612968565b6001600160a01b031614611f5a576040805162461bcd60e51b81526020600482018190526024820152600080516020615e6b833981519152604482015290519081900360640190fd5b611f6460006150ab565b565b8042811015611faa576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b60028414611fe95760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b03168585600019810181811061200557fe5b905060200201356001600160a01b03166001600160a01b03161461205e576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b60055460009061207b906001600160a01b031687878481611c1557fe5b6001600160a01b0380821660009081526004602052604081205492935091169087908790816120a657fe5b905060200201356001600160a01b03166001600160a01b0316141561210d5760006127106120df6001548b6150fb90919063ffffffff16565b816120e657fe5b0490506120f9898263ffffffff61505716565b985061210b878760008181106115f257fe5b505b6121358686600081811061211d57fe5b905060200201356001600160a01b031633838b614587565b612173868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614e1d915050565b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156121be57600080fd5b505afa1580156121d2573d6000803e3d6000fd5b505050506040513d60208110156121e857600080fd5b50516001600160a01b03808416600090815260046020526040902054919250168787600181811061221557fe5b905060200201356001600160a01b03166001600160a01b0316141561226c57600061271061224e600154846150fb90919063ffffffff16565b8161225557fe5b049050612268828263ffffffff61505716565b9150505b60065460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156122b957600080fd5b505af11580156122cd573d6000803e3d6000fd5b505050506122db8582614287565b505050505050505050565b6060814281101561232c576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b6002851461236b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b0316868660008161238257fe5b905060200201356001600160a01b03166001600160a01b0316146123db576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b60055434906000906123fa906001600160a01b0316898984816110f357fe5b6001600160a01b0380821660009081526004602052604081205492935091168989838161242357fe5b905060200201356001600160a01b03166001600160a01b031614156124b55761244e83600154614547565b909350905061245b6129a8565b6001600160a01b0316306001600160a01b0316146124b55761247b6129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156124b3573d6000803e3d6000fd5b505b600554604080516020808c0282810182019093528b82526124ff936001600160a01b0316923492918e918e918291908501908490808284376000920191909152506146e492505050565b9450898560018751038151811061251257fe5b602002602001015110156125575760405162461bcd60e51b815260040180806020018281038252602b815260200180615cf4602b913960400191505060405180910390fd5b60065485516001600160a01b039091169063d0e30db090879060009061257957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b505060065488516001600160a01b03909116935063a9059cbb925085915088906000906125e957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050506040513d602081101561266a57600080fd5b505161267257fe5b6126b1858a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250614969915050565b5050505095945050505050565b6000610fc384848460008061515e565b60608142811015612714576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600285146127535760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b600554600090612770906001600160a01b03168888848161156e57fe5b6001600160a01b0380821660009081526004602052604081205492935091168888838161279957fe5b905060200201356001600160a01b03166001600160a01b031614156128c957600554604080516020808b0282810182019093528a8252612802936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b9350888460008151811061281257fe5b602002602001015111156128575760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b6128678460008151811061194057fe5b8560008151811061287457fe5b60200260200101819350828152505050612894888860008181106115f257fe5b60055484516128b2916001600160a01b031690869060009061199b57fe5b93506128c4888860008181106116c357fe5b6116e2565b600554604080516020808b0282810182019093528a8252612913936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b9350888460008151811061292357fe5b602002602001015111156116b35760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b6000546001600160a01b031690565b6003546001600160a01b031681565b60015481565b6006546001600160a01b031681565b6000610fc3848484615266565b6002546000906001600160a01b0316156129cd576002546001600160a01b03166129cf565b305b905090565b60008142811015612a1a576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600654612a369089906001600160a01b03168989893089612fa6565b604080516370a0823160e01b81523060048201529051919450612aba92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612a8957600080fd5b505afa158015612a9d573d6000803e3d6000fd5b505050506040513d6020811015612ab357600080fd5b5051614133565b60065460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b50505050612b298483614287565b509695505050505050565b8042811015612b78576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b60028414612bb75760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b03168585600081612bce57fe5b905060200201356001600160a01b03166001600160a01b031614612c27576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b6005543490600090612c46906001600160a01b03168888848161156e57fe5b6001600160a01b03808216600090815260046020526040812054929350911688888381612c6f57fe5b905060200201356001600160a01b03166001600160a01b03161415612d0157612c9a83600154614547565b9093509050612ca76129a8565b6001600160a01b0316306001600160a01b031614612d0157612cc76129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612cff573d6000803e3d6000fd5b505b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d5157600080fd5b505af1158015612d65573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018a9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b158015612dbe57600080fd5b505af1158015612dd2573d6000803e3d6000fd5b505050506040513d6020811015612de857600080fd5b5051612df057fe5b600088886000198101818110612e0257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e6757600080fd5b505afa158015612e7b573d6000803e3d6000fd5b505050506040513d6020811015612e9157600080fd5b50516040805160208b810282810182019093528b8252929350612ed39290918c918c9182918501908490808284376000920191909152508b9250614e1d915050565b6001600160a01b038084166000908152600460205260409020541689896001818110612efb57fe5b905060200201356001600160a01b03166001600160a01b03161415612f2c57612f268a600154614547565b909a5091505b89611eaf828b8b6000198101818110612f4157fe5b905060200201356001600160a01b03166001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b6000808242811015612fed576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600554600090613007906001600160a01b03168c8c614487565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b505050506040513d602081101561308c57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156130d957600080fd5b505af11580156130ed573d6000803e3d6000fd5b505050506040513d604081101561310357600080fd5b5080516020909101519092509050600061311d8e8e615312565b509050806001600160a01b03168e6001600160a01b031614613140578183613143565b82825b90975095508a8710156131875760405162461bcd60e51b8152600401808060200182810382526026815260200180615dd16026913960400191505060405180910390fd5b898610156131c65760405162461bcd60e51b8152600401808060200182810382526026815260200180615f506026913960400191505060405180910390fd5b505050505097509795505050505050565b6005546001600160a01b031681565b6005546060906113db906001600160a01b031684846146e4565b6004602052600090815260409020546001600160a01b031681565b6000806000613255600560009054906101000a90046001600160a01b03168e600660009054906101000a90046001600160a01b0316614487565b9050600087613264578c613268565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156132de57600080fd5b505af11580156132f2573d6000803e3d6000fd5b505050506133048e8e8e8e8e8e610ec5565b909f909e509c50505050505050505050505050565b6133216150a7565b6001600160a01b0316613332612968565b6001600160a01b03161461337b576040805162461bcd60e51b81526020600482018190526024820152600080516020615e6b833981519152604482015290519081900360640190fd5b60648111156133d1576040805162461bcd60e51b815260206004820152601960248201527f444547454e537761703a20466565206578636565647320312500000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b039390931692909217909155600155565b6005546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561345057600080fd5b505afa158015613464573d6000803e3d6000fd5b505050506040513d602081101561347a57600080fd5b50519392505050565b600080600083428110156134cc576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b6134da8c8c8c8c8c8c6153e9565b60055491955093506000906134f9906001600160a01b03168e8e614487565b90506135078d338388614587565b6135138c338387614587565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561356b57600080fd5b505af115801561357f573d6000803e3d6000fd5b505050506040513d602081101561359557600080fd5b5051949d939c50939a509198505050505050505050565b6135b46150a7565b6001600160a01b03166135c5612968565b6001600160a01b03161461360e576040805162461bcd60e51b81526020600482018190526024820152600080516020615e6b833981519152604482015290519081900360640190fd5b6001600160a01b0381166136535760405162461bcd60e51b8152600401808060200182810382526026815260200180615d1f6026913960400191505060405180910390fd5b61365c816150ab565b50565b600080600083428110156136a8576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b6006546136c2906001600160a01b03168b348c8b8d6153e9565b6005546006549296509094506000916136e9916001600160a01b03908116918e9116614487565b90506136f78b338387614587565b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b15801561374757600080fd5b505af115801561375b573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018c9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b1580156137b457600080fd5b505af11580156137c8573d6000803e3d6000fd5b505050506040513d60208110156137de57600080fd5b50516137e657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561383e57600080fd5b505af1158015613852573d6000803e3d6000fd5b505050506040513d602081101561386857600080fd5b50519250348510156138805761388033863403614287565b505096509650969350505050565b6138966150a7565b6001600160a01b03166138a7612968565b6001600160a01b0316146138f0576040805162461bcd60e51b81526020600482018190526024820152600080516020615e6b833981519152604482015290519081900360640190fd5b6003546040805163ac393aff60e01b81526001600160a01b0385811660048301529151919092169163ac393aff916024808301926020929190829003018186803b15801561393d57600080fd5b505afa158015613951573d6000803e3d6000fd5b505050506040513d602081101561396757600080fd5b50516139a45760405162461bcd60e51b8152600401808060200182810382526025815260200180615ccf6025913960400191505060405180910390fd5b806001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156139e757600080fd5b505afa1580156139fb573d6000803e3d6000fd5b505050506040513d6020811015613a1157600080fd5b50516001600160a01b03161480613a9d5750806001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015613a6657600080fd5b505afa158015613a7a573d6000803e3d6000fd5b505050506040513d6020811015613a9057600080fd5b50516001600160a01b0316145b613ad85760405162461bcd60e51b8152600401808060200182810382526029815260200180615f766029913960400191505060405180910390fd5b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b60608142811015613b4c576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b60028514613b8b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b03168686600081613ba257fe5b905060200201356001600160a01b03166001600160a01b031614613bfb576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b600554600090613c18906001600160a01b03168888848161156e57fe5b6001600160a01b03808216600090815260046020526040812054929350911688888381613c4157fe5b905060200201356001600160a01b03166001600160a01b03161415613ecd57600554604080516020808b0282810182019093528a8252613caa936001600160a01b0316928d92918d918d91829190850190849080828437600092019190915250614bb892505050565b93503484600081518110613cba57fe5b60200260200101511115613cff5760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b613d0f8460008151811061194057fe5b85600081518110613d1c57fe5b60200260200101819350828152505050613d346129a8565b6001600160a01b0316306001600160a01b031614613d8e57613d546129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015613d8c573d6000803e3d6000fd5b505b6005548451613dac916001600160a01b031690869060009061199b57fe5b60065481519195506001600160a01b03169063d0e30db0908690600090613dcf57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505060065487516001600160a01b03909116935063a9059cbb92508591508790600090613e3f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613e9657600080fd5b505af1158015613eaa573d6000803e3d6000fd5b505050506040513d6020811015613ec057600080fd5b5051613ec857fe5b6140b5565b600554604080516020808b0282810182019093528a8252613f17936001600160a01b0316928d92918d918d91829190850190849080828437600092019190915250614bb892505050565b93503484600081518110613f2757fe5b60200260200101511115613f6c5760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b60065484516001600160a01b039091169063d0e30db0908690600090613f8e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fc157600080fd5b505af1158015613fd5573d6000803e3d6000fd5b50506006546005546001600160a01b03918216945063a9059cbb935061401f9250168b8b60008161400257fe5b905060200201356001600160a01b03168c8c600181811061111057fe5b8660008151811061402c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561408357600080fd5b505af1158015614097573d6000803e3d6000fd5b505050506040513d60208110156140ad57600080fd5b50516140b557fe5b6140f4848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614969915050565b600061411d828660008151811061410757fe5b602002602001015161577690919063ffffffff16565b9050803411156126b1576126b133823403614287565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106141b05780518252601f199092019160209182019101614191565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614212576040519150601f19603f3d011682016040523d82523d6000602084013e614217565b606091505b5091509150818015614245575080511580614245575080806020019051602081101561424257600080fd5b50515b6142805760405162461bcd60e51b815260040180806020018281038252602d815260200180615edb602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106142d35780518252601f1990920191602091820191016142b4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614335576040519150601f19603f3d011682016040523d82523d6000602084013e61433a565b606091505b505090508061437a5760405162461bcd60e51b8152600401808060200182810382526034815260200180615d766034913960400191505060405180910390fd5b505050565b60008086116143bf5760405162461bcd60e51b815260040180806020018281038252602b815260200180615eb0602b913960400191505060405180910390fd5b6000851180156143cf5750600084115b61440a5760405162461bcd60e51b8152600401808060200182810382526028815260200180615e176028913960400191505060405180910390fd5b6000836144195761271061441f565b82612710035b90506000614433888363ffffffff6150fb16565b90506000614447828863ffffffff6150fb16565b9050600061446d836144618b61271063ffffffff6150fb16565b9063ffffffff61577616565b905080828161447857fe5b049a9950505050505050505050565b60008060006144968585615312565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff3ec3606df6137332c87b08940f686afc830a0cb42ed13c97c14b8a35a75cd7f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000808061271061455e868663ffffffff6150fb16565b8161456557fe5b049050614578858263ffffffff61505716565b945084925090505b9250929050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061460c5780518252601f1990920191602091820191016145ed565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461466e576040519150601f19603f3d011682016040523d82523d6000602084013e614673565b606091505b50915091508180156146a15750805115806146a1575080806020019051602081101561469e57600080fd5b50515b6146dc5760405162461bcd60e51b8152600401808060200182810382526031815260200180615d456031913960400191505060405180910390fd5b505050505050565b606060028251101561473d576040805162461bcd60e51b815260206004820152601e60248201527f444547454e537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561475557600080fd5b5060405190808252806020026020018201604052801561477f578160200160208202803683370190505b509050828160008151811061479057fe5b60200260200101818152505060005b60018351038110156149615760006147e1868584815181106147bd57fe5b60200260200101518685600101815181106147d457fe5b6020026020010151614487565b90506000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561481e57600080fd5b505afa158015614832573d6000803e3d6000fd5b505050506040513d602081101561484857600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03851691637ae316d0916004808301926020929190829003018186803b15801561489057600080fd5b505afa1580156148a4573d6000803e3d6000fd5b505050506040513d60208110156148ba57600080fd5b5051865190915060009081906148fc908b908a90899081106148d857fe5b60200260200101518a89600101815181106148ef57fe5b60200260200101516157c5565b9150915061493687878151811061490f57fe5b6020026020010151838360006001600160a01b0316886001600160a01b031614158761437f565b87876001018151811061494557fe5b602090810291909101015250506001909301925061479f915050565b509392505050565b60005b6001835103811015614bb25760008084838151811061498757fe5b602002602001015185846001018151811061499e57fe5b60200260200101519150915060006149b68383615312565b50905060008785600101815181106149ca57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146149f8578260006149fc565b6000835b91509150600080614a2388888e8c81518110614a1457fe5b6020026020010151878761588c565b91509150600060028c51038a10614a3a578a614a5e565b6005548c51614a5e916001600160a01b0316908a908f9060028f019081106147d457fe5b600554909150614a78906001600160a01b03168a8a614487565b6001600160a01b031663f8b134c6868686868660006040519080825280601f01601f191660200182016040528015614ab7576020820181803683370190505b506040518763ffffffff1660e01b815260040180878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b34578181015183820152602001614b1c565b50505050905090810190601f168015614b615780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b158015614b8557600080fd5b505af1158015614b99573d6000803e3d6000fd5b50506001909b019a5061496c9950505050505050505050565b50505050565b6060600282511015614c11576040805162461bcd60e51b815260206004820152601e60248201527f444547454e537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614c2957600080fd5b50604051908082528060200260200182016040528015614c53578160200160208202803683370190505b5090508281600183510381518110614c6757fe5b60209081029190910101528151600019015b8015614961576000614ca886856001850381518110614c9457fe5b60200260200101518685815181106147d457fe5b90506000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b158015614ce557600080fd5b505afa158015614cf9573d6000803e3d6000fd5b505050506040513d6020811015614d0f57600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03851691637ae316d0916004808301926020929190829003018186803b158015614d5757600080fd5b505afa158015614d6b573d6000803e3d6000fd5b505050506040513d6020811015614d8157600080fd5b505186519091506000908190614db7908b908a906000198a01908110614da357fe5b60200260200101518a89815181106148ef57fe5b91509150614df1878781518110614dca57fe5b6020026020010151838360006001600160a01b0316886001600160a01b031614158761515e565b876001880381518110614e0057fe5b602090810291909101015250506000199093019250614c79915050565b60005b600183510381101561437a57600080848381518110614e3b57fe5b6020026020010151858460010181518110614e5257fe5b6020026020010151915091506000614e6a8383615312565b509050600080614e7b858585615a86565b91509150600080846001600160a01b0316876001600160a01b031614614ea357826000614ea7565b6000835b91509150600080614ebb898988878761588c565b91509150600060028d51038b10614ed2578b614efb565b614efb600560009054906101000a90046001600160a01b03168a8f8e600201815181106147d457fe5b600554909150600090614f18906001600160a01b03168c8c614487565b90506001600160a01b03811663f8b134c6878787878760006040519080825280601f01601f191660200182016040528015614f5a576020820181803683370190505b506040518763ffffffff1660e01b815260040180878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614fd7578181015183820152602001614fbf565b50505050905090810190601f1680156150045780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b15801561502857600080fd5b505af115801561503c573d6000803e3d6000fd5b50506001909d019c50614e209b505050505050505050505050565b808203828111156113de576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008115806151165750508082028282828161511357fe5b04145b6113de576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b600080861161519e5760405162461bcd60e51b815260040180806020018281038252602c815260200180615e3f602c913960400191505060405180910390fd5b6000851180156151ae5750600084115b6151e95760405162461bcd60e51b8152600401808060200182810382526028815260200180615e176028913960400191505060405180910390fd5b6000836151f8576127106151fe565b82612710035b90506000615224612710615218898b63ffffffff6150fb16565b9063ffffffff6150fb16565b9050600061523c83615218898c63ffffffff61505716565b9050615259600182848161524c57fe5b049063ffffffff61577616565b9998505050505050505050565b60008084116152a65760405162461bcd60e51b8152600401808060200182810382526025815260200180615caa6025913960400191505060405180910390fd5b6000831180156152b65750600082115b6152f15760405162461bcd60e51b8152600401808060200182810382526028815260200180615e176028913960400191505060405180910390fd5b82615302858463ffffffff6150fb16565b8161530957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156153665760405162461bcd60e51b8152600401808060200182810382526025815260200180615e8b6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610615386578284615389565b83835b90925090506001600160a01b038216614580576040805162461bcd60e51b815260206004820152601e60248201527f444547454e537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b600080806153f789896133f7565b6001600160a01b031614156155aa576006546001600160a01b03898116911614156154e557600554604080516364e329cb60e11b81526001600160a01b038a811660048301528b811660248301529151919092169163c9c653969160448083019260209291908290030181600087803b15801561547357600080fd5b505af1158015615487573d6000803e3d6000fd5b505050506040513d602081101561549d57600080fd5b50889050600460006154af838b6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790556155aa565b600554604080516364e329cb60e11b81526001600160a01b038b811660048301528a811660248301529151919092169163c9c653969160448083019260209291908290030181600087803b15801561553c57600080fd5b505af1158015615550573d6000803e3d6000fd5b505050506040513d602081101561556657600080fd5b50879050600460006155788b846133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b60055460009081906155c6906001600160a01b03168b8b6157c5565b915091508160001480156155d8575080155b156156a9576006548894508793506001600160a01b038b81169116141561563e5789600460006156088d8d6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790556156a4565b6007546001600160a01b038b8116911614156156635789600460006156088d8d6133f7565b88600460006156728d8d6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b615769565b60006156b6898484615266565b905087811161570957858110156156fe5760405162461bcd60e51b8152600401808060200182810382526026815260200180615f506026913960400191505060405180910390fd5b889450925082615767565b6000615716898486615266565b90508981111561572257fe5b878110156157615760405162461bcd60e51b8152600401808060200182810382526026815260200180615dd16026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b808201828110156113de576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006157d48585615312565b5090506000806157e5888888614487565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b15801561581d57600080fd5b505afa158015615831573d6000803e3d6000fd5b505050506040513d608081101561584757600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461587a57808261587d565b81815b90999098509650505050505050565b600554600090819081906158aa906001600160a01b03168989614487565b905060006158b88989615312565b5090506000826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b1580156158f657600080fd5b505afa15801561590a573d6000803e3d6000fd5b505050506040513d602081101561592057600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03861691637ae316d0916004808301926020929190829003018186803b15801561596857600080fd5b505afa15801561597c573d6000803e3d6000fd5b505050506040513d602081101561599257600080fd5b505190506001600160a01b038281169084161415615a0557826001600160a01b03168b6001600160a01b0316146159ea576159e56127106159d98a8463ffffffff6150fb16565b9063ffffffff615c4a16565b615a00565b615a006127106159d98b8463ffffffff6150fb16565b615a08565b60005b9550826001600160a01b0316826001600160a01b031614615a7357826001600160a01b03168b6001600160a01b03161415615a5857615a536127106159d9898463ffffffff6150fb16565b615a6e565b615a6e6127106159d98b8463ffffffff6150fb16565b615a76565b60005b9450505050509550959350505050565b60055460009081908190615aa4906001600160a01b03168787614487565b90506000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b158015615ae457600080fd5b505afa158015615af8573d6000803e3d6000fd5b505050506040513d6080811015615b0e57600080fd5b508051602080830151606090930151604080516307ae316d60e41b815290516001600160701b03948516985093909416955093506000926001600160a01b03881692637ae316d092600480840193919291829003018186803b158015615b7357600080fd5b505afa158015615b87573d6000803e3d6000fd5b505050506040513d6020811015615b9d57600080fd5b505190506000806001600160a01b038c8116908b1614615bbe578486615bc1565b85855b91509150615c1f828d6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b9850615c398983836001600160a01b03881615158761437f565b975050505050505050935093915050565b6000808211615c98576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d6469762d756e646572666c6f7760581b604482015290519081900360640190fd5b818381615ca157fe5b04939250505056fe444547454e537761704c6962726172793a20494e53554646494349454e545f414d4f554e54444547454e537761702046656553746f72653a2050616972206973206e6f74204578697374444547454e53776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564444547454e53776170526f757465723a204558434553534956455f494e5055545f414d4f554e54444547454e53776170526f757465723a20494e53554646494349454e545f415f414d4f554e54444547454e53776170526f757465723a20494e56414c49445f50415448000000444547454e537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459444547454e537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572444547454e537761704c6962726172793a204944454e544943414c5f414444524553534553444547454e537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564444547454e53776170526f757465723a20455850495245440000000000000000444547454e53776170526f757465723a204f4e4c595f54574f5f544f4b454e535f414c4c4f574544444547454e53776170526f757465723a20494e53554646494349454e545f425f414d4f554e54444547454e537761702046656553746f72653a20496e76616c696420746f6b656e2061646472657373a264697066735822122023f78b157ba6aa3b85fdc5358f9b08f60ff09433a9e16285fd935eaa8470e63764736f6c634300060600330000000000000000000000005c515455efb90308689579993c11a84fc41229c0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000912da1028f5593610598a402004ba2d61a829fc
Deployed Bytecode
0x6080604052600436106102085760003560e01c8063a0be06f911610118578063dcacce69116100a0578063e8e337001161006f578063e8e3370014610d0d578063f2fde38b14610d8d578063f305d71914610dc0578063f543a80214610e06578063fb3bdb4114610e4157610223565b8063dcacce6914610bf3578063ded9382a14610c26578063e07769ed14610c99578063e6a4390514610cd257610223565b8063af2979eb116100e7578063af2979eb146109f5578063b6f9de9514610a48578063baa2abde14610acc578063c45a015514610b29578063d06ca61f14610b3e57610223565b8063a0be06f914610980578063ad5c464814610995578063ad615dec146109aa578063add10aa2146109e057610223565b80635b0d59841161019b5780637ff36ab51161016a5780637ff36ab51461080657806385f8c2591461088a5780638803dbee146108c05780638da5cb5b14610956578063966dae0e1461096b57610223565b80635b0d5984146106525780635c11d795146106c5578063715018a61461075b578063791ac9471461077057610223565b80631f00ca74116101d75780631f00ca74146103f35780632195995c146104a857806338ed1739146105265780634a25d94a146105bc57610223565b806302751cec14610228578063054d50d41461029457806308a17149146102dc57806318cbafe51461030d57610223565b36610223576006546001600160a01b0316331461022157fe5b005b600080fd5b34801561023457600080fd5b5061027b600480360360c081101561024b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ec5565b6040805192835260208301919091528051918290030190f35b3480156102a057600080fd5b506102ca600480360360608110156102b757600080fd5b5080359060208101359060400135610fb3565b60408051918252519081900360200190f35b3480156102e857600080fd5b506102f1610fcb565b604080516001600160a01b039092168252519081900360200190f35b34801561031957600080fd5b506103a3600480360360a081101561033057600080fd5b813591602081013591810190606081016040820135600160201b81111561035657600080fd5b82018360208201111561036857600080fd5b803590602001918460208302840111600160201b8311171561038957600080fd5b91935091506001600160a01b038135169060200135610fda565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103df5781810151838201526020016103c7565b505050509050019250505060405180910390f35b3480156103ff57600080fd5b506103a36004803603604081101561041657600080fd5b81359190810190604081016020820135600160201b81111561043757600080fd5b82018360208201111561044957600080fd5b803590602001918460208302840111600160201b8311171561046a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113c1945050505050565b3480156104b457600080fd5b5061027b60048036036101608110156104cc57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356113e4565b34801561053257600080fd5b506103a3600480360360a081101561054957600080fd5b813591602081013591810190606081016040820135600160201b81111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460208302840111600160201b831117156105a257600080fd5b91935091506001600160a01b0381351690602001356114cc565b3480156105c857600080fd5b506103a3600480360360a08110156105df57600080fd5b813591602081013591810190606081016040820135600160201b81111561060557600080fd5b82018360208201111561061757600080fd5b803590602001918460208302840111600160201b8311171561063857600080fd5b91935091506001600160a01b03813516906020013561172e565b34801561065e57600080fd5b506102ca600480360361014081101561067657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611a92565b3480156106d157600080fd5b50610221600480360360a08110156106e857600080fd5b813591602081013591810190606081016040820135600160201b81111561070e57600080fd5b82018360208201111561072057600080fd5b803590602001918460208302840111600160201b8311171561074157600080fd5b91935091506001600160a01b038135169060200135611b75565b34801561076757600080fd5b50610221611ef8565b34801561077c57600080fd5b50610221600480360360a081101561079357600080fd5b813591602081013591810190606081016040820135600160201b8111156107b957600080fd5b8201836020820111156107cb57600080fd5b803590602001918460208302840111600160201b831117156107ec57600080fd5b91935091506001600160a01b038135169060200135611f66565b6103a36004803603608081101561081c57600080fd5b81359190810190604081016020820135600160201b81111561083d57600080fd5b82018360208201111561084f57600080fd5b803590602001918460208302840111600160201b8311171561087057600080fd5b91935091506001600160a01b0381351690602001356122e6565b34801561089657600080fd5b506102ca600480360360608110156108ad57600080fd5b50803590602081013590604001356126be565b3480156108cc57600080fd5b506103a3600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b0381351690602001356126ce565b34801561096257600080fd5b506102f1612968565b34801561097757600080fd5b506102f1612977565b34801561098c57600080fd5b506102ca612986565b3480156109a157600080fd5b506102f161298c565b3480156109b657600080fd5b506102ca600480360360608110156109cd57600080fd5b508035906020810135906040013561299b565b3480156109ec57600080fd5b506102f16129a8565b348015610a0157600080fd5b506102ca600480360360c0811015610a1857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129d4565b61022160048036036080811015610a5e57600080fd5b81359190810190604081016020820135600160201b811115610a7f57600080fd5b820183602082011115610a9157600080fd5b803590602001918460208302840111600160201b83111715610ab257600080fd5b91935091506001600160a01b038135169060200135612b34565b348015610ad857600080fd5b5061027b600480360360e0811015610aef57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612fa6565b348015610b3557600080fd5b506102f16131d7565b348015610b4a57600080fd5b506103a360048036036040811015610b6157600080fd5b81359190810190604081016020820135600160201b811115610b8257600080fd5b820183602082011115610b9457600080fd5b803590602001918460208302840111600160201b83111715610bb557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506131e6945050505050565b348015610bff57600080fd5b506102f160048036036020811015610c1657600080fd5b50356001600160a01b0316613200565b348015610c3257600080fd5b5061027b6004803603610140811015610c4a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561321b565b348015610ca557600080fd5b5061022160048036036040811015610cbc57600080fd5b506001600160a01b038135169060200135613319565b348015610cde57600080fd5b506102f160048036036040811015610cf557600080fd5b506001600160a01b03813581169160200135166133f7565b348015610d1957600080fd5b50610d6f6004803603610100811015610d3157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613483565b60408051938452602084019290925282820152519081900360600190f35b348015610d9957600080fd5b5061022160048036036020811015610db057600080fd5b50356001600160a01b03166135ac565b610d6f600480360360c0811015610dd657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561365f565b348015610e1257600080fd5b5061022160048036036040811015610e2957600080fd5b506001600160a01b038135811691602001351661388e565b6103a360048036036080811015610e5757600080fd5b81359190810190604081016020820135600160201b811115610e7857600080fd5b820183602082011115610e8a57600080fd5b803590602001918460208302840111600160201b83111715610eab57600080fd5b91935091506001600160a01b038135169060200135613b06565b6000808242811015610f0c576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600654610f28908a906001600160a01b03168a8a8a308a612fa6565b9093509150610f38898685614133565b60065460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015610f8557600080fd5b505af1158015610f99573d6000803e3d6000fd5b50505050610fa78583614287565b50965096945050505050565b6000610fc384848460008061437f565b949350505050565b6002546001600160a01b031681565b60608142811015611020576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b6002851461105f5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b03168686600019810181811061107b57fe5b905060200201356001600160a01b03166001600160a01b0316146110d4576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b6005546000908190611125906001600160a01b0316898984816110f357fe5b905060200201356001600160a01b03168a8a600181811061111057fe5b905060200201356001600160a01b0316614487565b6001600160a01b03808216600090815260046020526040812054929350911690899089908161115057fe5b905060200201356001600160a01b03166001600160a01b031614156111ad5761117b8a600154614547565b909a5091506111ad888860008161118e57fe5b905060200201356001600160a01b0316336111a76129a8565b85614587565b600554604080516020808b0282810182019093528a82526111f7936001600160a01b0316928e92918d918d918291908501908490808284376000920191909152506146e492505050565b9350888460018651038151811061120a57fe5b6020026020010151101561124f5760405162461bcd60e51b815260040180806020018281038252602b815260200180615cf4602b913960400191505060405180910390fd5b61128b8888600081811061125f57fe5b905060200201356001600160a01b031633838760008151811061127e57fe5b6020026020010151614587565b6112ca84898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614969915050565b6000846001865103815181106112dc57fe5b6020908102919091018101516001600160a01b0380851660009081526004909352604090922054909250168989600181811061131457fe5b905060200201356001600160a01b03166001600160a01b031614156113445761133f81600154614547565b935090505b60065460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b505050506113b38782614287565b505050509695505050505050565b6005546060906113db906001600160a01b03168484614bb8565b90505b92915050565b60055460009081908190611402906001600160a01b03168f8f614487565b9050600087611411578c611415565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561148b57600080fd5b505af115801561149f573d6000803e3d6000fd5b505050506114b28f8f8f8f8f8f8f612fa6565b809450819550505050509b509b9950505050505050505050565b60608142811015611512576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600285146115515760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b60055460009061158b906001600160a01b03168888848161156e57fe5b905060200201356001600160a01b03168989600181811061111057fe5b6001600160a01b038082166000908152600460205260408120549293509116888883816115b457fe5b905060200201356001600160a01b03166001600160a01b03161415611611576115df8a600154614547565b909a50905061161188886000816115f257fe5b905060200201356001600160a01b03163361160b6129a8565b84614587565b600554604080516020808b0282810182019093528a825261165b936001600160a01b0316928e92918d918d918291908501908490808284376000920191909152506146e492505050565b9350888460018651038151811061166e57fe5b602002602001015110156116b35760405162461bcd60e51b815260040180806020018281038252602b815260200180615cf4602b913960400191505060405180910390fd5b6116e2888860008181106116c357fe5b905060200201356001600160a01b031633848760008151811061127e57fe5b611721848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614969915050565b5050509695505050505050565b60608142811015611774576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600285146117b35760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b0316868660001981018181106117cf57fe5b905060200201356001600160a01b03166001600160a01b031614611828576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b6005546000908190611847906001600160a01b0316898984816110f357fe5b6001600160a01b03808216600090815260046020526040812054929350911690899089908161187257fe5b905060200201356001600160a01b03166001600160a01b031614156119f357600554604080516020808b0282810182019093528a82526118db936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b935088846000815181106118eb57fe5b602002602001015111156119305760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b6119508460008151811061194057fe5b6020026020010151600154614547565b8560008151811061195d57fe5b6020026020010181945082815250505061197d8888600081811061118e57fe5b60055484516119dc916001600160a01b031690869060009061199b57fe5b60200260200101518a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506146e492505050565b93506119ee8888600081811061125f57fe5b61128b565b600554604080516020808b0282810182019093528a8252611a3d936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b93508884600081518110611a4d57fe5b6020026020010151111561124f5760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b6005546006546000918291611ab5916001600160a01b03908116918f9116614487565b9050600086611ac4578b611ac8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611b3e57600080fd5b505af1158015611b52573d6000803e3d6000fd5b50505050611b648d8d8d8d8d8d6129d4565b9d9c50505050505050505050505050565b8042811015611bb9576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b60028414611bf85760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b600554600090611c32906001600160a01b031687878481611c1557fe5b905060200201356001600160a01b03168888600181811061111057fe5b6001600160a01b03808216600090815260046020526040812054929350911687878381611c5b57fe5b905060200201356001600160a01b03166001600160a01b03161415611c9957611c8689600154614547565b9099509050611c9987876000816115f257fe5b611cc187876000818110611ca957fe5b905060200201356001600160a01b031633848c614587565b600087876000198101818110611cd357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d3857600080fd5b505afa158015611d4c573d6000803e3d6000fd5b505050506040513d6020811015611d6257600080fd5b50516040805160208a810282810182019093528a8252929350611da49290918b918b9182918501908490808284376000920191909152508a9250614e1d915050565b6001600160a01b038084166000908152600460205260409020541688886001818110611dcc57fe5b905060200201356001600160a01b03166001600160a01b03161415611dfd57611df789600154614547565b90995091505b88611eaf828a8a6000198101818110611e1257fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b505afa158015611e8b573d6000803e3d6000fd5b505050506040513d6020811015611ea157600080fd5b50519063ffffffff61505716565b1015611eec5760405162461bcd60e51b815260040180806020018281038252602b815260200180615cf4602b913960400191505060405180910390fd5b50505050505050505050565b611f006150a7565b6001600160a01b0316611f11612968565b6001600160a01b031614611f5a576040805162461bcd60e51b81526020600482018190526024820152600080516020615e6b833981519152604482015290519081900360640190fd5b611f6460006150ab565b565b8042811015611faa576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b60028414611fe95760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b03168585600019810181811061200557fe5b905060200201356001600160a01b03166001600160a01b03161461205e576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b60055460009061207b906001600160a01b031687878481611c1557fe5b6001600160a01b0380821660009081526004602052604081205492935091169087908790816120a657fe5b905060200201356001600160a01b03166001600160a01b0316141561210d5760006127106120df6001548b6150fb90919063ffffffff16565b816120e657fe5b0490506120f9898263ffffffff61505716565b985061210b878760008181106115f257fe5b505b6121358686600081811061211d57fe5b905060200201356001600160a01b031633838b614587565b612173868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614e1d915050565b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156121be57600080fd5b505afa1580156121d2573d6000803e3d6000fd5b505050506040513d60208110156121e857600080fd5b50516001600160a01b03808416600090815260046020526040902054919250168787600181811061221557fe5b905060200201356001600160a01b03166001600160a01b0316141561226c57600061271061224e600154846150fb90919063ffffffff16565b8161225557fe5b049050612268828263ffffffff61505716565b9150505b60065460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156122b957600080fd5b505af11580156122cd573d6000803e3d6000fd5b505050506122db8582614287565b505050505050505050565b6060814281101561232c576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b6002851461236b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b0316868660008161238257fe5b905060200201356001600160a01b03166001600160a01b0316146123db576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b60055434906000906123fa906001600160a01b0316898984816110f357fe5b6001600160a01b0380821660009081526004602052604081205492935091168989838161242357fe5b905060200201356001600160a01b03166001600160a01b031614156124b55761244e83600154614547565b909350905061245b6129a8565b6001600160a01b0316306001600160a01b0316146124b55761247b6129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156124b3573d6000803e3d6000fd5b505b600554604080516020808c0282810182019093528b82526124ff936001600160a01b0316923492918e918e918291908501908490808284376000920191909152506146e492505050565b9450898560018751038151811061251257fe5b602002602001015110156125575760405162461bcd60e51b815260040180806020018281038252602b815260200180615cf4602b913960400191505060405180910390fd5b60065485516001600160a01b039091169063d0e30db090879060009061257957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b505060065488516001600160a01b03909116935063a9059cbb925085915088906000906125e957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050506040513d602081101561266a57600080fd5b505161267257fe5b6126b1858a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250614969915050565b5050505095945050505050565b6000610fc384848460008061515e565b60608142811015612714576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600285146127535760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b600554600090612770906001600160a01b03168888848161156e57fe5b6001600160a01b0380821660009081526004602052604081205492935091168888838161279957fe5b905060200201356001600160a01b03166001600160a01b031614156128c957600554604080516020808b0282810182019093528a8252612802936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b9350888460008151811061281257fe5b602002602001015111156128575760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b6128678460008151811061194057fe5b8560008151811061287457fe5b60200260200101819350828152505050612894888860008181106115f257fe5b60055484516128b2916001600160a01b031690869060009061199b57fe5b93506128c4888860008181106116c357fe5b6116e2565b600554604080516020808b0282810182019093528a8252612913936001600160a01b0316928e92918d918d91829190850190849080828437600092019190915250614bb892505050565b9350888460008151811061292357fe5b602002602001015111156116b35760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b6000546001600160a01b031690565b6003546001600160a01b031681565b60015481565b6006546001600160a01b031681565b6000610fc3848484615266565b6002546000906001600160a01b0316156129cd576002546001600160a01b03166129cf565b305b905090565b60008142811015612a1a576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600654612a369089906001600160a01b03168989893089612fa6565b604080516370a0823160e01b81523060048201529051919450612aba92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612a8957600080fd5b505afa158015612a9d573d6000803e3d6000fd5b505050506040513d6020811015612ab357600080fd5b5051614133565b60065460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b50505050612b298483614287565b509695505050505050565b8042811015612b78576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b60028414612bb75760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b03168585600081612bce57fe5b905060200201356001600160a01b03166001600160a01b031614612c27576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b6005543490600090612c46906001600160a01b03168888848161156e57fe5b6001600160a01b03808216600090815260046020526040812054929350911688888381612c6f57fe5b905060200201356001600160a01b03166001600160a01b03161415612d0157612c9a83600154614547565b9093509050612ca76129a8565b6001600160a01b0316306001600160a01b031614612d0157612cc76129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612cff573d6000803e3d6000fd5b505b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d5157600080fd5b505af1158015612d65573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018a9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b158015612dbe57600080fd5b505af1158015612dd2573d6000803e3d6000fd5b505050506040513d6020811015612de857600080fd5b5051612df057fe5b600088886000198101818110612e0257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e6757600080fd5b505afa158015612e7b573d6000803e3d6000fd5b505050506040513d6020811015612e9157600080fd5b50516040805160208b810282810182019093528b8252929350612ed39290918c918c9182918501908490808284376000920191909152508b9250614e1d915050565b6001600160a01b038084166000908152600460205260409020541689896001818110612efb57fe5b905060200201356001600160a01b03166001600160a01b03161415612f2c57612f268a600154614547565b909a5091505b89611eaf828b8b6000198101818110612f4157fe5b905060200201356001600160a01b03166001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b6000808242811015612fed576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b600554600090613007906001600160a01b03168c8c614487565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b505050506040513d602081101561308c57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156130d957600080fd5b505af11580156130ed573d6000803e3d6000fd5b505050506040513d604081101561310357600080fd5b5080516020909101519092509050600061311d8e8e615312565b509050806001600160a01b03168e6001600160a01b031614613140578183613143565b82825b90975095508a8710156131875760405162461bcd60e51b8152600401808060200182810382526026815260200180615dd16026913960400191505060405180910390fd5b898610156131c65760405162461bcd60e51b8152600401808060200182810382526026815260200180615f506026913960400191505060405180910390fd5b505050505097509795505050505050565b6005546001600160a01b031681565b6005546060906113db906001600160a01b031684846146e4565b6004602052600090815260409020546001600160a01b031681565b6000806000613255600560009054906101000a90046001600160a01b03168e600660009054906101000a90046001600160a01b0316614487565b9050600087613264578c613268565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156132de57600080fd5b505af11580156132f2573d6000803e3d6000fd5b505050506133048e8e8e8e8e8e610ec5565b909f909e509c50505050505050505050505050565b6133216150a7565b6001600160a01b0316613332612968565b6001600160a01b03161461337b576040805162461bcd60e51b81526020600482018190526024820152600080516020615e6b833981519152604482015290519081900360640190fd5b60648111156133d1576040805162461bcd60e51b815260206004820152601960248201527f444547454e537761703a20466565206578636565647320312500000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b039390931692909217909155600155565b6005546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561345057600080fd5b505afa158015613464573d6000803e3d6000fd5b505050506040513d602081101561347a57600080fd5b50519392505050565b600080600083428110156134cc576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b6134da8c8c8c8c8c8c6153e9565b60055491955093506000906134f9906001600160a01b03168e8e614487565b90506135078d338388614587565b6135138c338387614587565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561356b57600080fd5b505af115801561357f573d6000803e3d6000fd5b505050506040513d602081101561359557600080fd5b5051949d939c50939a509198505050505050505050565b6135b46150a7565b6001600160a01b03166135c5612968565b6001600160a01b03161461360e576040805162461bcd60e51b81526020600482018190526024820152600080516020615e6b833981519152604482015290519081900360640190fd5b6001600160a01b0381166136535760405162461bcd60e51b8152600401808060200182810382526026815260200180615d1f6026913960400191505060405180910390fd5b61365c816150ab565b50565b600080600083428110156136a8576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b6006546136c2906001600160a01b03168b348c8b8d6153e9565b6005546006549296509094506000916136e9916001600160a01b03908116918e9116614487565b90506136f78b338387614587565b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b15801561374757600080fd5b505af115801561375b573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018c9052915191909216945063a9059cbb9350604480830193506020928290030181600087803b1580156137b457600080fd5b505af11580156137c8573d6000803e3d6000fd5b505050506040513d60208110156137de57600080fd5b50516137e657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561383e57600080fd5b505af1158015613852573d6000803e3d6000fd5b505050506040513d602081101561386857600080fd5b50519250348510156138805761388033863403614287565b505096509650969350505050565b6138966150a7565b6001600160a01b03166138a7612968565b6001600160a01b0316146138f0576040805162461bcd60e51b81526020600482018190526024820152600080516020615e6b833981519152604482015290519081900360640190fd5b6003546040805163ac393aff60e01b81526001600160a01b0385811660048301529151919092169163ac393aff916024808301926020929190829003018186803b15801561393d57600080fd5b505afa158015613951573d6000803e3d6000fd5b505050506040513d602081101561396757600080fd5b50516139a45760405162461bcd60e51b8152600401808060200182810382526025815260200180615ccf6025913960400191505060405180910390fd5b806001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156139e757600080fd5b505afa1580156139fb573d6000803e3d6000fd5b505050506040513d6020811015613a1157600080fd5b50516001600160a01b03161480613a9d5750806001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015613a6657600080fd5b505afa158015613a7a573d6000803e3d6000fd5b505050506040513d6020811015613a9057600080fd5b50516001600160a01b0316145b613ad85760405162461bcd60e51b8152600401808060200182810382526029815260200180615f766029913960400191505060405180910390fd5b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b60608142811015613b4c576040805162461bcd60e51b81526020600482015260186024820152600080516020615f08833981519152604482015290519081900360640190fd5b60028514613b8b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f286028913960400191505060405180910390fd5b6006546001600160a01b03168686600081613ba257fe5b905060200201356001600160a01b03166001600160a01b031614613bfb576040805162461bcd60e51b815260206004820152601d6024820152600080516020615df7833981519152604482015290519081900360640190fd5b600554600090613c18906001600160a01b03168888848161156e57fe5b6001600160a01b03808216600090815260046020526040812054929350911688888381613c4157fe5b905060200201356001600160a01b03166001600160a01b03161415613ecd57600554604080516020808b0282810182019093528a8252613caa936001600160a01b0316928d92918d918d91829190850190849080828437600092019190915250614bb892505050565b93503484600081518110613cba57fe5b60200260200101511115613cff5760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b613d0f8460008151811061194057fe5b85600081518110613d1c57fe5b60200260200101819350828152505050613d346129a8565b6001600160a01b0316306001600160a01b031614613d8e57613d546129a8565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015613d8c573d6000803e3d6000fd5b505b6005548451613dac916001600160a01b031690869060009061199b57fe5b60065481519195506001600160a01b03169063d0e30db0908690600090613dcf57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505060065487516001600160a01b03909116935063a9059cbb92508591508790600090613e3f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613e9657600080fd5b505af1158015613eaa573d6000803e3d6000fd5b505050506040513d6020811015613ec057600080fd5b5051613ec857fe5b6140b5565b600554604080516020808b0282810182019093528a8252613f17936001600160a01b0316928d92918d918d91829190850190849080828437600092019190915250614bb892505050565b93503484600081518110613f2757fe5b60200260200101511115613f6c5760405162461bcd60e51b8152600401808060200182810382526027815260200180615daa6027913960400191505060405180910390fd5b60065484516001600160a01b039091169063d0e30db0908690600090613f8e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fc157600080fd5b505af1158015613fd5573d6000803e3d6000fd5b50506006546005546001600160a01b03918216945063a9059cbb935061401f9250168b8b60008161400257fe5b905060200201356001600160a01b03168c8c600181811061111057fe5b8660008151811061402c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561408357600080fd5b505af1158015614097573d6000803e3d6000fd5b505050506040513d60208110156140ad57600080fd5b50516140b557fe5b6140f4848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250614969915050565b600061411d828660008151811061410757fe5b602002602001015161577690919063ffffffff16565b9050803411156126b1576126b133823403614287565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106141b05780518252601f199092019160209182019101614191565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614212576040519150601f19603f3d011682016040523d82523d6000602084013e614217565b606091505b5091509150818015614245575080511580614245575080806020019051602081101561424257600080fd5b50515b6142805760405162461bcd60e51b815260040180806020018281038252602d815260200180615edb602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106142d35780518252601f1990920191602091820191016142b4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614335576040519150601f19603f3d011682016040523d82523d6000602084013e61433a565b606091505b505090508061437a5760405162461bcd60e51b8152600401808060200182810382526034815260200180615d766034913960400191505060405180910390fd5b505050565b60008086116143bf5760405162461bcd60e51b815260040180806020018281038252602b815260200180615eb0602b913960400191505060405180910390fd5b6000851180156143cf5750600084115b61440a5760405162461bcd60e51b8152600401808060200182810382526028815260200180615e176028913960400191505060405180910390fd5b6000836144195761271061441f565b82612710035b90506000614433888363ffffffff6150fb16565b90506000614447828863ffffffff6150fb16565b9050600061446d836144618b61271063ffffffff6150fb16565b9063ffffffff61577616565b905080828161447857fe5b049a9950505050505050505050565b60008060006144968585615312565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff3ec3606df6137332c87b08940f686afc830a0cb42ed13c97c14b8a35a75cd7f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000808061271061455e868663ffffffff6150fb16565b8161456557fe5b049050614578858263ffffffff61505716565b945084925090505b9250929050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061460c5780518252601f1990920191602091820191016145ed565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461466e576040519150601f19603f3d011682016040523d82523d6000602084013e614673565b606091505b50915091508180156146a15750805115806146a1575080806020019051602081101561469e57600080fd5b50515b6146dc5760405162461bcd60e51b8152600401808060200182810382526031815260200180615d456031913960400191505060405180910390fd5b505050505050565b606060028251101561473d576040805162461bcd60e51b815260206004820152601e60248201527f444547454e537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561475557600080fd5b5060405190808252806020026020018201604052801561477f578160200160208202803683370190505b509050828160008151811061479057fe5b60200260200101818152505060005b60018351038110156149615760006147e1868584815181106147bd57fe5b60200260200101518685600101815181106147d457fe5b6020026020010151614487565b90506000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561481e57600080fd5b505afa158015614832573d6000803e3d6000fd5b505050506040513d602081101561484857600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03851691637ae316d0916004808301926020929190829003018186803b15801561489057600080fd5b505afa1580156148a4573d6000803e3d6000fd5b505050506040513d60208110156148ba57600080fd5b5051865190915060009081906148fc908b908a90899081106148d857fe5b60200260200101518a89600101815181106148ef57fe5b60200260200101516157c5565b9150915061493687878151811061490f57fe5b6020026020010151838360006001600160a01b0316886001600160a01b031614158761437f565b87876001018151811061494557fe5b602090810291909101015250506001909301925061479f915050565b509392505050565b60005b6001835103811015614bb25760008084838151811061498757fe5b602002602001015185846001018151811061499e57fe5b60200260200101519150915060006149b68383615312565b50905060008785600101815181106149ca57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146149f8578260006149fc565b6000835b91509150600080614a2388888e8c81518110614a1457fe5b6020026020010151878761588c565b91509150600060028c51038a10614a3a578a614a5e565b6005548c51614a5e916001600160a01b0316908a908f9060028f019081106147d457fe5b600554909150614a78906001600160a01b03168a8a614487565b6001600160a01b031663f8b134c6868686868660006040519080825280601f01601f191660200182016040528015614ab7576020820181803683370190505b506040518763ffffffff1660e01b815260040180878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b34578181015183820152602001614b1c565b50505050905090810190601f168015614b615780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b158015614b8557600080fd5b505af1158015614b99573d6000803e3d6000fd5b50506001909b019a5061496c9950505050505050505050565b50505050565b6060600282511015614c11576040805162461bcd60e51b815260206004820152601e60248201527f444547454e537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614c2957600080fd5b50604051908082528060200260200182016040528015614c53578160200160208202803683370190505b5090508281600183510381518110614c6757fe5b60209081029190910101528151600019015b8015614961576000614ca886856001850381518110614c9457fe5b60200260200101518685815181106147d457fe5b90506000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b158015614ce557600080fd5b505afa158015614cf9573d6000803e3d6000fd5b505050506040513d6020811015614d0f57600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03851691637ae316d0916004808301926020929190829003018186803b158015614d5757600080fd5b505afa158015614d6b573d6000803e3d6000fd5b505050506040513d6020811015614d8157600080fd5b505186519091506000908190614db7908b908a906000198a01908110614da357fe5b60200260200101518a89815181106148ef57fe5b91509150614df1878781518110614dca57fe5b6020026020010151838360006001600160a01b0316886001600160a01b031614158761515e565b876001880381518110614e0057fe5b602090810291909101015250506000199093019250614c79915050565b60005b600183510381101561437a57600080848381518110614e3b57fe5b6020026020010151858460010181518110614e5257fe5b6020026020010151915091506000614e6a8383615312565b509050600080614e7b858585615a86565b91509150600080846001600160a01b0316876001600160a01b031614614ea357826000614ea7565b6000835b91509150600080614ebb898988878761588c565b91509150600060028d51038b10614ed2578b614efb565b614efb600560009054906101000a90046001600160a01b03168a8f8e600201815181106147d457fe5b600554909150600090614f18906001600160a01b03168c8c614487565b90506001600160a01b03811663f8b134c6878787878760006040519080825280601f01601f191660200182016040528015614f5a576020820181803683370190505b506040518763ffffffff1660e01b815260040180878152602001868152602001858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614fd7578181015183820152602001614fbf565b50505050905090810190601f1680156150045780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b15801561502857600080fd5b505af115801561503c573d6000803e3d6000fd5b50506001909d019c50614e209b505050505050505050505050565b808203828111156113de576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008115806151165750508082028282828161511357fe5b04145b6113de576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b600080861161519e5760405162461bcd60e51b815260040180806020018281038252602c815260200180615e3f602c913960400191505060405180910390fd5b6000851180156151ae5750600084115b6151e95760405162461bcd60e51b8152600401808060200182810382526028815260200180615e176028913960400191505060405180910390fd5b6000836151f8576127106151fe565b82612710035b90506000615224612710615218898b63ffffffff6150fb16565b9063ffffffff6150fb16565b9050600061523c83615218898c63ffffffff61505716565b9050615259600182848161524c57fe5b049063ffffffff61577616565b9998505050505050505050565b60008084116152a65760405162461bcd60e51b8152600401808060200182810382526025815260200180615caa6025913960400191505060405180910390fd5b6000831180156152b65750600082115b6152f15760405162461bcd60e51b8152600401808060200182810382526028815260200180615e176028913960400191505060405180910390fd5b82615302858463ffffffff6150fb16565b8161530957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156153665760405162461bcd60e51b8152600401808060200182810382526025815260200180615e8b6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610615386578284615389565b83835b90925090506001600160a01b038216614580576040805162461bcd60e51b815260206004820152601e60248201527f444547454e537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b600080806153f789896133f7565b6001600160a01b031614156155aa576006546001600160a01b03898116911614156154e557600554604080516364e329cb60e11b81526001600160a01b038a811660048301528b811660248301529151919092169163c9c653969160448083019260209291908290030181600087803b15801561547357600080fd5b505af1158015615487573d6000803e3d6000fd5b505050506040513d602081101561549d57600080fd5b50889050600460006154af838b6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790556155aa565b600554604080516364e329cb60e11b81526001600160a01b038b811660048301528a811660248301529151919092169163c9c653969160448083019260209291908290030181600087803b15801561553c57600080fd5b505af1158015615550573d6000803e3d6000fd5b505050506040513d602081101561556657600080fd5b50879050600460006155788b846133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b60055460009081906155c6906001600160a01b03168b8b6157c5565b915091508160001480156155d8575080155b156156a9576006548894508793506001600160a01b038b81169116141561563e5789600460006156088d8d6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790556156a4565b6007546001600160a01b038b8116911614156156635789600460006156088d8d6133f7565b88600460006156728d8d6133f7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b615769565b60006156b6898484615266565b905087811161570957858110156156fe5760405162461bcd60e51b8152600401808060200182810382526026815260200180615f506026913960400191505060405180910390fd5b889450925082615767565b6000615716898486615266565b90508981111561572257fe5b878110156157615760405162461bcd60e51b8152600401808060200182810382526026815260200180615dd16026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b808201828110156113de576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006157d48585615312565b5090506000806157e5888888614487565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b15801561581d57600080fd5b505afa158015615831573d6000803e3d6000fd5b505050506040513d608081101561584757600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461587a57808261587d565b81815b90999098509650505050505050565b600554600090819081906158aa906001600160a01b03168989614487565b905060006158b88989615312565b5090506000826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b1580156158f657600080fd5b505afa15801561590a573d6000803e3d6000fd5b505050506040513d602081101561592057600080fd5b5051604080516307ae316d60e41b815290519192506000916001600160a01b03861691637ae316d0916004808301926020929190829003018186803b15801561596857600080fd5b505afa15801561597c573d6000803e3d6000fd5b505050506040513d602081101561599257600080fd5b505190506001600160a01b038281169084161415615a0557826001600160a01b03168b6001600160a01b0316146159ea576159e56127106159d98a8463ffffffff6150fb16565b9063ffffffff615c4a16565b615a00565b615a006127106159d98b8463ffffffff6150fb16565b615a08565b60005b9550826001600160a01b0316826001600160a01b031614615a7357826001600160a01b03168b6001600160a01b03161415615a5857615a536127106159d9898463ffffffff6150fb16565b615a6e565b615a6e6127106159d98b8463ffffffff6150fb16565b615a76565b60005b9450505050509550959350505050565b60055460009081908190615aa4906001600160a01b03168787614487565b90506000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b158015615ae457600080fd5b505afa158015615af8573d6000803e3d6000fd5b505050506040513d6080811015615b0e57600080fd5b508051602080830151606090930151604080516307ae316d60e41b815290516001600160701b03948516985093909416955093506000926001600160a01b03881692637ae316d092600480840193919291829003018186803b158015615b7357600080fd5b505afa158015615b87573d6000803e3d6000fd5b505050506040513d6020811015615b9d57600080fd5b505190506000806001600160a01b038c8116908b1614615bbe578486615bc1565b85855b91509150615c1f828d6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e7757600080fd5b9850615c398983836001600160a01b03881615158761437f565b975050505050505050935093915050565b6000808211615c98576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d6469762d756e646572666c6f7760581b604482015290519081900360640190fd5b818381615ca157fe5b04939250505056fe444547454e537761704c6962726172793a20494e53554646494349454e545f414d4f554e54444547454e537761702046656553746f72653a2050616972206973206e6f74204578697374444547454e53776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564444547454e53776170526f757465723a204558434553534956455f494e5055545f414d4f554e54444547454e53776170526f757465723a20494e53554646494349454e545f415f414d4f554e54444547454e53776170526f757465723a20494e56414c49445f50415448000000444547454e537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459444547454e537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572444547454e537761704c6962726172793a204944454e544943414c5f414444524553534553444547454e537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564444547454e53776170526f757465723a20455850495245440000000000000000444547454e53776170526f757465723a204f4e4c595f54574f5f544f4b454e535f414c4c4f574544444547454e53776170526f757465723a20494e53554646494349454e545f425f414d4f554e54444547454e537761702046656553746f72653a20496e76616c696420746f6b656e2061646472657373a264697066735822122023f78b157ba6aa3b85fdc5358f9b08f60ff09433a9e16285fd935eaa8470e63764736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005c515455efb90308689579993c11a84fc41229c0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000912da1028f5593610598a402004ba2d61a829fc
-----Decoded View---------------
Arg [0] : _factory (address): 0x5c515455EFB90308689579993C11A84fC41229C0
Arg [1] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _BUSD (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [3] : _adminFee (uint256): 100
Arg [4] : _adminFeeAddress (address): 0x0912dA1028f5593610598A402004ba2D61a829fC
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c515455efb90308689579993c11a84fc41229c0
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 0000000000000000000000000912da1028f5593610598a402004ba2d61a829fc
Deployed Bytecode Sourcemap
39415:8903:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39918:4;;-1:-1:-1;;;;;39918:4:0;39904:10;:18;39897:26;;;;39415:8903;;12:1:-1;9;2:12;44781:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44781:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;44781:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38388:252;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38388:252:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38388:252:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13334:30;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13334:30:0;;;:::i;:::-;;;;-1:-1:-1;;;;;13334:30:0;;;;;;;;;;;;;;28302:1455;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28302:1455:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28302:1455:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28302:1455:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28302:1455:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28302:1455:0;;-1:-1:-1;28302:1455:0;-1:-1:-1;;;;;;28302:1455:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28302:1455:0;;;;;;;;;;;;;;;;;39148:233;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39148:233:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39148:233:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39148:233:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39148:233:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39148:233:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39148:233:0;;-1:-1:-1;39148:233:0;;-1:-1:-1;;;;;39148:233:0:i;45460:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45460:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;45460:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22789:1060::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22789:1060:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22789:1060:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22789:1060:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22789:1060:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22789:1060:0;;-1:-1:-1;22789:1060:0;-1:-1:-1;;;;;;22789:1060:0;;;;;;;;:::i;26453:1843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26453:1843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26453:1843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26453:1843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26453:1843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26453:1843:0;;-1:-1:-1;26453:1843:0;-1:-1:-1;;;;;;26453:1843:0;;;;;;;;:::i;47597:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47597:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;47597:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34031:1308::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34031:1308:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34031:1308:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34031:1308:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34031:1308:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34031:1308:0;;-1:-1:-1;34031:1308:0;-1:-1:-1;;;;;;34031:1308:0;;;;;;;;:::i;1896:103::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1896:103:0;;;:::i;36777:1371::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36777:1371:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36777:1371:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36777:1371:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36777:1371:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36777:1371:0;;-1:-1:-1;36777:1371:0;-1:-1:-1;;;;;;36777:1371:0;;;;;;;;:::i;25318:1129::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25318:1129:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25318:1129:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25318:1129:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25318:1129:0;;-1:-1:-1;25318:1129:0;-1:-1:-1;;;;;;25318:1129:0;;;;;;;;:::i;38648:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38648:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38648:251:0;;;;;;;;;;;;:::i;23855:1455::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23855:1455:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23855:1455:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23855:1455:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23855:1455:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23855:1455:0;;-1:-1:-1;23855:1455:0;-1:-1:-1;;;;;;23855:1455:0;;;;;;;;:::i;1245:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1245:87:0;;;:::i;13371:29::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13371:29:0;;;:::i;13307:20::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13307:20:0;;;:::i;21732:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21732:28:0;;;:::i;38192:188::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38192:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38192:188:0;;;;;;;;;;;;:::i;14104:146::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14104:146:0;;;:::i;46891:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46891:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;46891:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35345:1426::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35345:1426:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35345:1426:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35345:1426:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35345:1426:0;;-1:-1:-1;35345:1426:0;-1:-1:-1;;;;;;35345:1426:0;;;;;;;;:::i;43910:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43910:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;43910:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21694:31::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21694:31:0;;;:::i;38907:233::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38907:233:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38907:233:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;38907:233:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38907:233:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38907:233:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38907:233:0;;-1:-1:-1;38907:233:0;;-1:-1:-1;;;;;38907:233:0:i;13407:50::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13407:50:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13407:50:0;-1:-1:-1;;;;;13407:50:0;;:::i;46143:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46143:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;46143:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14258:233::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14258:233:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;14258:233:0;;;;;;;;:::i;41988:153::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41988:153:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;41988:153:0;;;;;;;;;;:::i;42149:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42149:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;42149:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2154:201;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2154:201:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2154:201:0;-1:-1:-1;;;;;2154:201:0;;:::i;42893:974::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;42893:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13686:410::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13686:410:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;13686:410:0;;;;;;;;;;:::i;29763:1718::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29763:1718:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29763:1718:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29763:1718:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29763:1718:0;;-1:-1:-1;29763:1718:0;-1:-1:-1;;;;;;29763:1718:0;;;;;;;;:::i;44781:673::-;45018:16;45036:14;44999:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;45140:4:::1;::::0;45090:196:::1;::::0;45120:5;;-1:-1:-1;;;;;45140:4:0::1;45159:9:::0;45183:14;45212:12;45247:4:::1;45267:8:::0;45090:15:::1;:196::i;:::-;45063:223:::0;;-1:-1:-1;45063:223:0;-1:-1:-1;45297:51:0::1;45325:5:::0;45332:2;45063:223;45297:27:::1;:51::i;:::-;45365:4;::::0;45359:31:::1;::::0;;-1:-1:-1;;;45359:31:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;45365:4:0;;::::1;::::0;45359:20:::1;::::0;:31;;;;;45365:4:::1;::::0;45359:31;;;;;;;;45365:4;;45359:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;45359:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;45359:31:0;;;;45401:45;45432:2;45436:9;45401:30;:45::i;:::-;44781:673:::0;;;;;;;;;;:::o;38388:252::-;38521:14;38560:72;38590:8;38600:9;38611:10;38623:5;38630:1;38560:29;:72::i;:::-;38553:79;38388:252;-1:-1:-1;;;;38388:252:0:o;13334:30::-;;;-1:-1:-1;;;;;13334:30:0;;:::o;28302:1455::-;28496:21;28472:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;28558:1:::1;28543:16:::0;::::1;28535:69;;;;-1:-1:-1::0;;;28535:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28648:4;::::0;-1:-1:-1;;;;;28648:4:0::1;28623::::0;;-1:-1:-1;;28628:15:0;;28623:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28623:21:0::1;-1:-1:-1::0;;;;;28623:29:0::1;;28615:71;;;::::0;;-1:-1:-1;;;28615:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28615:71:0;;;;;;;;;;;;;::::1;;28769:7;::::0;28699:19:::1;::::0;;;28744:51:::1;::::0;-1:-1:-1;;;;;28769:7:0::1;28778:4:::0;;28699:19;28778:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;28778:7:0::1;28787:4;;28792:1;28787:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28787:7:0::1;28744:24;:51::i;:::-;-1:-1:-1::0;;;;;28820:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;28729:66;;-1:-1:-1;28820:20:0;::::1;::::0;28809:4;;;;:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;28809:7:0::1;-1:-1:-1::0;;;;;28809:31:0::1;;28806:278;;;28884:56;28921:8;28931;;28884:36;:56::i;:::-;28856:84:::0;;-1:-1:-1;28856:84:0;-1:-1:-1;28955:117:0::1;29005:4:::0;;29010:1:::1;29005:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;29005:7:0::1;29014:10;29026:15;:13;:15::i;:::-;29043:14;28955:31;:117::i;:::-;29137:7;::::0;29106:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;29137:7:0::1;::::0;29146:8;;29106:55;29156:4;;;;;;29106:55;;::::1;::::0;29156:4;;29106:55;29156:4;29106:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29106:30:0::1;::::0;-1:-1:-1;;;29106:55:0:i:1;:::-;29096:65;;29211:12;29180:7;29205:1;29188:7;:14;:18;29180:27;;;;;;;;;;;;;;:43;;29172:99;;;;-1:-1:-1::0;;;29172:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29282:94;29328:4;;29333:1;29328:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29328:7:0::1;29337:10;29349:4;29355:7;29363:1;29355:10;;;;;;;;;;;;;;29282:31;:94::i;:::-;29387:35;29393:7;29402:4;;29387:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29416:4:0::1;::::0;-1:-1:-1;29387:5:0::1;::::0;-1:-1:-1;;29387:35:0:i:1;:::-;29435:17;29455:7;29480:1;29463:7;:14;:18;29455:27;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29507:20:0;;::::1;;::::0;;;:14:::1;:20:::0;;;;;;;;29455:27;;-1:-1:-1;29507:20:0::1;29496:4:::0;;29507:20;29496:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29496:7:0::1;-1:-1:-1::0;;;;;29496:31:0::1;;29493:153;;;29575:59;29612:12;29625:8;;29575:36;:59::i;:::-;29543:91:::0;-1:-1:-1;29543:91:0;-1:-1:-1;29493:153:0::1;29662:4;::::0;29656:34:::1;::::0;;-1:-1:-1;;;29656:34:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;29662:4:0;;::::1;::::0;29656:20:::1;::::0;:34;;;;;29662:4:::1;::::0;29656:34;;;;;;;;29662:4;;29656:34;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29656:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29656:34:0;;;;29701:48;29732:2;29736:12;29701:30;:48::i;:::-;21886:1;;;28302:1455:::0;;;;;;;;;:::o;39148:233::-;39348:7;;39272:21;;39318:55;;-1:-1:-1;;;;;39348:7:0;39357:9;39368:4;39318:29;:55::i;:::-;39311:62;;39148:233;;;;;:::o;45460:677::-;45845:7;;45766:12;;;;;;45820:49;;-1:-1:-1;;;;;45845:7:0;45854:6;45862;45820:24;:49::i;:::-;45805:64;;45880:10;45893;:33;;45917:9;45893:33;;;-1:-1:-1;;45893:33:0;45937:80;;;-1:-1:-1;;;45937:80:0;;45965:10;45937:80;;;;45985:4;45937:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45880:46;;-1:-1:-1;;;;;;45937:27:0;;;;;:80;;;;;-1:-1:-1;;45937:80:0;;;;;;;;-1:-1:-1;45937:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;45937:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45937:80:0;;;;46049;46065:6;46073;46081:9;46092:10;46104;46116:2;46120:8;46049:15;:80::i;:::-;46028:101;;;;;;;;45460:677;;;;;;;;;;;;;;;;:::o;22789:1060::-;23013:21;22994:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;23070:1:::1;23055:16:::0;::::1;23047:69;;;;-1:-1:-1::0;;;23047:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23167:7;::::0;23127:12:::1;::::0;23142:51:::1;::::0;-1:-1:-1;;;;;23167:7:0::1;23176:4:::0;;23127:12;23176:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;23176:7:0::1;23185:4;;23190:1;23185:7;;;;;;23142:51;-1:-1:-1::0;;;;;23250:20:0;;::::1;23206:19;23250:20:::0;;;:14:::1;:20;::::0;;;;;23127:66;;-1:-1:-1;23206:19:0;23250:20:::1;23239:4:::0;;23206:19;23239:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;23239:7:0::1;-1:-1:-1::0;;;;;23239:31:0::1;;23236:278;;;23314:56;23351:8;23361;;23314:36;:56::i;:::-;23286:84:::0;;-1:-1:-1;23286:84:0;-1:-1:-1;23385:117:0::1;23435:4:::0;;23440:1:::1;23435:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;23435:7:0::1;23444:10;23456:15;:13;:15::i;:::-;23473:14;23385:31;:117::i;:::-;23567:7;::::0;23536:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;23567:7:0::1;::::0;23576:8;;23536:55;23586:4;;;;;;23536:55;;::::1;::::0;23586:4;;23536:55;23586:4;23536:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23536:30:0::1;::::0;-1:-1:-1;;;23536:55:0:i:1;:::-;23526:65;;23641:12;23610:7;23635:1;23618:7;:14;:18;23610:27;;;;;;;;;;;;;;:43;;23602:99;;;;-1:-1:-1::0;;;23602:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23712:94;23758:4;;23763:1;23758:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23758:7:0::1;23767:10;23779:4;23785:7;23793:1;23785:10;;;;;;;23712:94;23817:24;23823:7;23832:4;;23817:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23838:2:0;;-1:-1:-1;23817:5:0::1;::::0;-1:-1:-1;;23817:24:0:i:1;:::-;21886:1;;22789:1060:::0;;;;;;;;;:::o;26453:1843::-;26647:21;26623:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;26709:1:::1;26694:16:::0;::::1;26686:69;;;;-1:-1:-1::0;;;26686:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26799:4;::::0;-1:-1:-1;;;;;26799:4:0::1;26774::::0;;-1:-1:-1;;26779:15:0;;26774:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26774:21:0::1;-1:-1:-1::0;;;;;26774:29:0::1;;26766:71;;;::::0;;-1:-1:-1;;;26766:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26766:71:0;;;;;;;;;;;;;::::1;;26920:7;::::0;26850:19:::1;::::0;;;26895:51:::1;::::0;-1:-1:-1;;;;;26920:7:0::1;26929:4:::0;;26850:19;26929:7;::::1;;;26895:51;-1:-1:-1::0;;;;;26971:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;26880:66;;-1:-1:-1;26971:20:0;::::1;::::0;26960:4;;;;:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;26960:7:0::1;-1:-1:-1::0;;;;;26960:31:0::1;;26957:959;;;27047:7;::::0;27017:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;27047:7:0::1;::::0;27056:9;;27017:55;27067:4;;;;;;27017:55;;::::1;::::0;27067:4;;27017:55;27067:4;27017:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27017:29:0::1;::::0;-1:-1:-1;;;27017:55:0:i:1;:::-;27007:65;;27109:11;27095:7;27103:1;27095:10;;;;;;;;;;;;;;:25;;27087:77;;;;-1:-1:-1::0;;;27087:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27209:57;27246:7;27254:1;27246:10;;;;;;;;;;;;;;27257:8;;27209:36;:57::i;:::-;27180:7;27188:1;27180:10;;;;;;;;;;;;;27179:87;;;;;;::::0;::::1;;27281:117;27331:4;;27336:1;27331:7;;;;;;27281:117;27454:7;::::0;27463:10;;27423:57:::1;::::0;-1:-1:-1;;;;;27454:7:0::1;::::0;27463;;27454::::1;::::0;27463:10:::1;;;;;;;;;;27475:4;;27423:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27423:30:0::1;::::0;-1:-1:-1;;;27423:57:0:i:1;:::-;27413:67;;27495:102;27545:4;;27550:1;27545:7;;;;;;27495:102;26957:959;;;27670:7;::::0;27640:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;27670:7:0::1;::::0;27679:9;;27640:55;27690:4;;;;;;27640:55;;::::1;::::0;27690:4;;27640:55;27690:4;27640:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27640:29:0::1;::::0;-1:-1:-1;;;27640:55:0:i:1;:::-;27630:65;;27732:11;27718:7;27726:1;27718:10;;;;;;;;;;;;;;:25;;27710:77;;;;-1:-1:-1::0;;;27710:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47597:718:::0;47982:7;;47998:4;;47915:14;;;;47957:46;;-1:-1:-1;;;;;47982:7:0;;;;47991:5;;47998:4;47957:24;:46::i;:::-;47942:61;;48014:10;48027;:33;;48051:9;48027:33;;;-1:-1:-1;;48027:33:0;48071:80;;;-1:-1:-1;;;48071:80:0;;48099:10;48071:80;;;;48119:4;48071:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48014:46;;-1:-1:-1;;;;;;48071:27:0;;;;;:80;;;;;-1:-1:-1;;48071:80:0;;;;;;;;-1:-1:-1;48071:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;48071:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48071:80:0;;;;48174:133;48236:5;48243:9;48254:14;48270:12;48284:2;48288:8;48174:47;:133::i;:::-;48162:145;47597:718;-1:-1:-1;;;;;;;;;;;;;47597:718:0:o;34031:1308::-;34265:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;34309:1:::1;34294:16:::0;::::1;34286:69;;;;-1:-1:-1::0;;;34286:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34408:7;::::0;34368:12:::1;::::0;34383:51:::1;::::0;-1:-1:-1;;;;;34408:7:0::1;34417:4:::0;;34368:12;34417:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;34417:7:0::1;34426:4;;34431:1;34426:7;;;;;;34383:51;-1:-1:-1::0;;;;;34489:20:0;;::::1;34445:19;34489:20:::0;;;:14:::1;:20;::::0;;;;;34368:66;;-1:-1:-1;34445:19:0;34489:20:::1;34478:4:::0;;34445:19;34478:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;34478:7:0::1;-1:-1:-1::0;;;;;34478:31:0::1;;34475:277;;;34553:55;34590:8;34599;;34553:36;:55::i;:::-;34525:83:::0;;-1:-1:-1;34525:83:0;-1:-1:-1;34623:117:0::1;34673:4:::0;;34678:1:::1;34673:7:::0;::::1;;;34623:117;34764:92;34810:4;;34815:1;34810:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34810:7:0::1;34819:10;34831:4;34837:8;34764:31;:92::i;:::-;34867:18;34895:4:::0;;-1:-1:-1;;34900:15:0;;34895:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34895:21:0::1;-1:-1:-1::0;;;;;34888:39:0::1;;34928:2;34888:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34888:43:0::1;-1:-1:-1::0;;;;;34888:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34888:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34888:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34888:43:0;34942:44:::1;::::0;;34888:43:::1;34942:44:::0;;::::1;::::0;;;;;;;;;;;34888:43;;-1:-1:-1;34942:44:0::1;::::0;;;34977:4;;;;;;34942:44;::::1;::::0;34977:4;;34942:44;34977:4;34942:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34983:2:0;;-1:-1:-1;34942:34:0::1;::::0;-1:-1:-1;;34942:44:0:i:1;:::-;-1:-1:-1::0;;;;;35011:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;::::1;35000:4:::0;;35011:20;35000:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35000:7:0::1;-1:-1:-1::0;;;;;35000:31:0::1;;34997:153;;;35079:59;35116:12;35129:8;;35079:36;:59::i;:::-;35047:91:::0;;-1:-1:-1;35047:91:0;-1:-1:-1;34997:153:0::1;35248:12:::0;35182:62:::1;35230:13:::0;35189:4;;-1:-1:-1;;35194:15:0;;35189:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35189:21:0::1;-1:-1:-1::0;;;;;35182:39:0::1;;35222:2;35182:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;35182:43:0::1;-1:-1:-1::0;;;;;35182:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35182:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35182:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35182:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;35160:171;;;;-1:-1:-1::0;;;35160:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21886:1;;;34031:1308:::0;;;;;;;:::o;1896:103::-;1476:12;:10;:12::i;:::-;-1:-1:-1;;;;;1465:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1465:23:0;;1457:68;;;;;-1:-1:-1;;;1457:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1457:68:0;;;;;;;;;;;;;;;1961:30:::1;1988:1;1961:18;:30::i;:::-;1896:103::o:0;36777:1371::-;37028:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;37077:1:::1;37062:16:::0;::::1;37054:69;;;;-1:-1:-1::0;;;37054:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37167:4;::::0;-1:-1:-1;;;;;37167:4:0::1;37142::::0;;-1:-1:-1;;37147:15:0;;37142:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37142:21:0::1;-1:-1:-1::0;;;;;37142:29:0::1;;37134:71;;;::::0;;-1:-1:-1;;;37134:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37134:71:0;;;;;;;;;;;;;::::1;;37256:7;::::0;37216:12:::1;::::0;37231:51:::1;::::0;-1:-1:-1;;;;;37256:7:0::1;37265:4:::0;;37216:12;37265:7;::::1;;;37231:51;-1:-1:-1::0;;;;;37309:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;37216:66;;-1:-1:-1;37309:20:0;::::1;::::0;37298:4;;;;:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;37298:7:0::1;-1:-1:-1::0;;;;;37298:31:0::1;;37295:304;;;37345:19;37395:5;37368:22;37381:8;;37368;:12;;:22;;;;:::i;:::-;37367:34;;;;;;::::0;-1:-1:-1;37427:28:0::1;:8:::0;37367:34;37427:28:::1;:12;:28;:::i;:::-;37416:39;;37470:117;37520:4;;37525:1;37520:7;;;;;;37470:117;37295:304;;37611:92;37657:4;;37662:1;37657:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37657:7:0::1;37666:10;37678:4;37684:8;37611:31;:92::i;:::-;37714:55;37749:4;;37714:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37763:4:0::1;::::0;-1:-1:-1;37714:34:0::1;::::0;-1:-1:-1;;37714:55:0:i:1;:::-;37804:4;::::0;37797:37:::1;::::0;;-1:-1:-1;;;37797:37:0;;37828:4:::1;37797:37;::::0;::::1;::::0;;;37780:14:::1;::::0;-1:-1:-1;;;;;37804:4:0::1;::::0;37797:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;37804:4;37797:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37797:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37797:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37797:37:0;-1:-1:-1;;;;;37882:20:0;;::::1;;::::0;;;:14:::1;37797:37;37882:20:::0;;;;;37797:37;;-1:-1:-1;37882:20:0::1;37871:4:::0;;37882:20;37871:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37871:7:0::1;-1:-1:-1::0;;;;;37871:31:0::1;;37868:175;;;37918:19;37969:5;37941:23;37955:8;;37941:9;:13;;:23;;;;:::i;:::-;37940:35;;;;;;::::0;-1:-1:-1;38002:29:0::1;:9:::0;37940:35;38002:29:::1;:13;:29;:::i;:::-;37990:41;;37868:175;;38059:4;::::0;38053:31:::1;::::0;;-1:-1:-1;;;38053:31:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;38059:4:0;;::::1;::::0;38053:20:::1;::::0;:31;;;;;38059:4:::1;::::0;38053:31;;;;;;;;38059:4;;38053:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;38053:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38053:31:0;;;;38095:45;38126:2;38130:9;38095:30;:45::i;:::-;21886:1;;36777:1371:::0;;;;;;;:::o;25318:1129::-;25510:21;25486:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;25572:1:::1;25557:16:::0;::::1;25549:69;;;;-1:-1:-1::0;;;25549:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25648:4;::::0;-1:-1:-1;;;;;25648:4:0::1;25637::::0;;25648::::1;25637:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;25637:7:0::1;-1:-1:-1::0;;;;;25637:15:0::1;;25629:57;;;::::0;;-1:-1:-1;;;25629:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25629:57:0;;;;;;;;;;;;;::::1;;25770:7;::::0;25710:9:::1;::::0;25699:8:::1;::::0;25745:51:::1;::::0;-1:-1:-1;;;;;25770:7:0::1;25779:4:::0;;25699:8;25779:7;::::1;;;25745:51;-1:-1:-1::0;;;;;25851:20:0;;::::1;25807:19;25851:20:::0;;;:14:::1;:20;::::0;;;;;25730:66;;-1:-1:-1;25807:19:0;25851:20:::1;25840:4:::0;;25807:19;25840:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;25840:7:0::1;-1:-1:-1::0;;;;;25840:31:0::1;;25837:271;;;25911:51;25948:3;25953:8;;25911:36;:51::i;:::-;25887:75:::0;;-1:-1:-1;25887:75:0;-1:-1:-1;25997:15:0::1;:13;:15::i;:::-;-1:-1:-1::0;;;;;25980:32:0::1;25988:4;-1:-1:-1::0;;;;;25980:32:0::1;;25977:120;;26040:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;26032:33:0::1;:49;26066:14;26032:49;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26032:49:0;25977:120;26161:7;::::0;26130:56:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;26161:7:0::1;::::0;26170:9:::1;::::0;26130:56;26181:4;;;;;;26130:56;;::::1;::::0;26181:4;;26130:56;26181:4;26130:56;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26130:30:0::1;::::0;-1:-1:-1;;;26130:56:0:i:1;:::-;26120:66;;26236:12;26205:7;26230:1;26213:7;:14;:18;26205:27;;;;;;;;;;;;;;:43;;26197:99;;;;-1:-1:-1::0;;;26197:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26313:4;::::0;26334:10;;-1:-1:-1;;;;;26313:4:0;;::::1;::::0;26307:19:::1;::::0;26334:7;;26313:4:::1;::::0;26334:10:::1;;;;;;;;;;26307:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26307:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;26371:4:0::1;::::0;26392:10;;-1:-1:-1;;;;;26371:4:0;;::::1;::::0;-1:-1:-1;26365:20:0::1;::::0;-1:-1:-1;26386:4:0;;-1:-1:-1;26392:7:0;;26371:4:::1;::::0;26392:10:::1;;;;;;;;;;26365:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;26365:38:0::1;-1:-1:-1::0;;;;;26365:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26365:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26365:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26365:38:0;26358:46:::1;;;;26415:24;26421:7;26430:4;;26415:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26436:2:0;;-1:-1:-1;26415:5:0::1;::::0;-1:-1:-1;;26415:24:0:i:1;:::-;21886:1;;;25318:1129:::0;;;;;;;;:::o;38648:251::-;38781:13;38819:72;38848:9;38859;38870:10;38882:5;38889:1;38819:28;:72::i;23855:1455::-;24079:21;24060:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;24136:1:::1;24121:16:::0;::::1;24113:69;;;;-1:-1:-1::0;;;24113:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24233:7;::::0;24193:12:::1;::::0;24208:51:::1;::::0;-1:-1:-1;;;;;24233:7:0::1;24242:4:::0;;24193:12;24242:7;::::1;;;24208:51;-1:-1:-1::0;;;;;24314:20:0;;::::1;24270:19;24314:20:::0;;;:14:::1;:20;::::0;;;;;24193:66;;-1:-1:-1;24270:19:0;24314:20:::1;24303:4:::0;;24270:19;24303:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;24303:7:0::1;-1:-1:-1::0;;;;;24303:31:0::1;;24300:966;;;24391:7;::::0;24361:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;24391:7:0::1;::::0;24400:9;;24361:55;24411:4;;;;;;24361:55;;::::1;::::0;24411:4;;24361:55;24411:4;24361:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24361:29:0::1;::::0;-1:-1:-1;;;24361:55:0:i:1;:::-;24351:65;;24453:11;24439:7;24447:1;24439:10;;;;;;;;;;;;;;:25;;24431:77;;;;-1:-1:-1::0;;;24431:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24554:58;24591:7;24599:1;24591:10;;;;;;;24554:58;24524:7;24532:1;24524:10;;;;;;;;;;;;;24523:89;;;;;;::::0;::::1;;24627:117;24677:4;;24682:1;24677:7;;;;;;24627:117;24802:7;::::0;24811:10;;24771:57:::1;::::0;-1:-1:-1;;;;;24802:7:0::1;::::0;24811;;24802::::1;::::0;24811:10:::1;;;24771:57;24761:67;;24843:102;24893:4;;24898:1;24893:7;;;;;;24843:102;24300:966;;;25020:7;::::0;24990:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;25020:7:0::1;::::0;25029:9;;24990:55;25040:4;;;;;;24990:55;;::::1;::::0;25040:4;;24990:55;25040:4;24990:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24990:29:0::1;::::0;-1:-1:-1;;;24990:55:0:i:1;:::-;24980:65;;25082:11;25068:7;25076:1;25068:10;;;;;;;;;;;;;;:25;;25060:77;;;;-1:-1:-1::0;;;25060:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1245:87:::0;1291:7;1318:6;-1:-1:-1;;;;;1318:6:0;1245:87;:::o;13371:29::-;;;-1:-1:-1;;;;;13371:29:0;;:::o;13307:20::-;;;;:::o;21732:28::-;;;-1:-1:-1;;;;;21732:28:0;;:::o;38192:188::-;38289:12;38321:51;38344:7;38353:8;38363;38321:22;:51::i;14104:146::-;14178:15;;14150:7;;-1:-1:-1;;;;;14178:15:0;:29;:63;;14226:15;;-1:-1:-1;;;;;14226:15:0;14178:63;;;14218:4;14178:63;14170:72;;14104:146;:::o;46891:700::-;47157:14;47138:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;47250:4:::1;::::0;47200:196:::1;::::0;47230:5;;-1:-1:-1;;;;;47250:4:0::1;47269:9:::0;47293:14;47322:12;47357:4:::1;47377:8:::0;47200:15:::1;:196::i;:::-;47446:38;::::0;;-1:-1:-1;;;47446:38:0;;47478:4:::1;47446:38;::::0;::::1;::::0;;;47184:212;;-1:-1:-1;47407:78:0::1;::::0;-1:-1:-1;47435:5:0;;47442:2;;-1:-1:-1;;;;;47446:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;47446:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;47446:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;47446:38:0;47407:27:::1;:78::i;:::-;47502:4;::::0;47496:31:::1;::::0;;-1:-1:-1;;;47496:31:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;47502:4:0;;::::1;::::0;47496:20:::1;::::0;:31;;;;;47502:4:::1;::::0;47496:31;;;;;;;;47502:4;;47496:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;47496:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;47496:31:0;;;;47538:45;47569:2;47573:9;47538:30;:45::i;:::-;46891:700:::0;;;;;;;;;:::o;35345:1426::-;35585:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;35634:1:::1;35619:16:::0;::::1;35611:69;;;;-1:-1:-1::0;;;35611:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35710:4;::::0;-1:-1:-1;;;;;35710:4:0::1;35699::::0;;35710::::1;35699:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;35699:7:0::1;-1:-1:-1::0;;;;;35699:15:0::1;;35691:57;;;::::0;;-1:-1:-1;;;35691:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;35691:57:0;;;;;;;;;;;;;::::1;;35837:7;::::0;35775:9:::1;::::0;35759:13:::1;::::0;35812:51:::1;::::0;-1:-1:-1;;;;;35837:7:0::1;35846:4:::0;;35759:13;35846:7;::::1;;;35812:51;-1:-1:-1::0;;;;;35918:20:0;;::::1;35874:19;35918:20:::0;;;:14:::1;:20;::::0;;;;;35797:66;;-1:-1:-1;35874:19:0;35918:20:::1;35907:4:::0;;35874:19;35907:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;35907:7:0::1;-1:-1:-1::0;;;;;35907:31:0::1;;35904:279;;;35982:55;36019:8;36028;;35982:36;:55::i;:::-;35954:83:::0;;-1:-1:-1;35954:83:0;-1:-1:-1;36072:15:0::1;:13;:15::i;:::-;-1:-1:-1::0;;;;;36055:32:0::1;36063:4;-1:-1:-1::0;;;;;36055:32:0::1;;36052:120;;36115:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;36107:33:0::1;:49;36141:14;36107:49;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36107:49:0;36052:120;36201:4;;;;;;;;;-1:-1:-1::0;;;;;36201:4:0::1;-1:-1:-1::0;;;;;36195:19:0::1;;36222:8;36195:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36195:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;36257:4:0::1;::::0;36251:36:::1;::::0;;-1:-1:-1;;;36251:36:0;;-1:-1:-1;;;;;36251:36:0;;::::1;;::::0;::::1;::::0;;;;;;;;;36257:4;;;::::1;::::0;-1:-1:-1;36251:20:0::1;::::0;-1:-1:-1;36251:36:0;;;;;-1:-1:-1;36251:36:0::1;::::0;;;;;;36257:4:::1;::::0;36251:36;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;36251:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36251:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36251:36:0;36244:44:::1;;;;36299:18;36327:4:::0;;-1:-1:-1;;36332:15:0;;36327:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36327:21:0::1;-1:-1:-1::0;;;;;36320:39:0::1;;36360:2;36320:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36320:43:0::1;-1:-1:-1::0;;;;;36320:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36320:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36320:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36320:43:0;36374:44:::1;::::0;;36320:43:::1;36374:44:::0;;::::1;::::0;;;;;;;;;;;36320:43;;-1:-1:-1;36374:44:0::1;::::0;;;36409:4;;;;;;36374:44;::::1;::::0;36409:4;;36374:44;36409:4;36374:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36415:2:0;;-1:-1:-1;36374:34:0::1;::::0;-1:-1:-1;;36374:44:0:i:1;:::-;-1:-1:-1::0;;;;;36443:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;::::1;36432:4:::0;;36443:20;36432:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36432:7:0::1;-1:-1:-1::0;;;;;36432:31:0::1;;36429:153;;;36511:59;36548:12;36561:8;;36511:36;:59::i;:::-;36479:91:::0;;-1:-1:-1;36479:91:0;-1:-1:-1;36429:153:0::1;36680:12:::0;36614:62:::1;36662:13:::0;36621:4;;-1:-1:-1;;36626:15:0;;36621:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36621:21:0::1;-1:-1:-1::0;;;;;36614:39:0::1;;36654:2;36614:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36614:43:0::1;-1:-1:-1::0;;;;;36614:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;43910:865:0::0;44164:12;44178;44145:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;44243:7:::1;::::0;44203:12:::1;::::0;44218:49:::1;::::0;-1:-1:-1;;;;;44243:7:0::1;44252:6:::0;44260;44218:24:::1;:49::i;:::-;44278:62;::::0;;-1:-1:-1;;;44278:62:0;;44312:10:::1;44278:62;::::0;::::1;::::0;-1:-1:-1;;;;;44278:33:0;::::1;:62:::0;;;;;;;;;;;;;;44203:64;;-1:-1:-1;44278:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;44278:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;44278:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;44278:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;44408:29:0::1;::::0;;-1:-1:-1;;;44408:29:0;;-1:-1:-1;;;;;44408:29:0;;::::1;;::::0;::::1;::::0;;;44378:12:::1;::::0;;;44408:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;44378:12;44408:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;44408:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;44408:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;44408:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;44408:29:0;-1:-1:-1;44449:14:0::1;44468:43;44496:6:::0;44504;44468:27:::1;:43::i;:::-;44448:63;;;44553:6;-1:-1:-1::0;;;;;44543:16:0::1;:6;-1:-1:-1::0;;;;;44543:16:0::1;;:58;;44584:7;44593;44543:58;;;44563:7;44572;44543:58;44522:79:::0;;-1:-1:-1;44522:79:0;-1:-1:-1;44620:21:0;;::::1;;44612:72;;;;-1:-1:-1::0;;;44612:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44714:10;44703:7;:21;;44695:72;;;;-1:-1:-1::0;;;44695:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21886:1;;;;43910:865:::0;;;;;;;;;;;:::o;21694:31::-;;;-1:-1:-1;;;;;21694:31:0;;:::o;38907:233::-;39108:7;;39031:21;;39077:55;;-1:-1:-1;;;;;39108:7:0;39117:8;39127:4;39077:30;:55::i;13407:50::-;;;;;;;;;;;;-1:-1:-1;;;;;13407:50:0;;:::o;46143:669::-;46432:16;46450:14;46477:12;46492:46;46517:7;;;;;;;;;-1:-1:-1;;;;;46517:7:0;46526:5;46533:4;;;;;;;;;-1:-1:-1;;;;;46533:4:0;46492:24;:46::i;:::-;46477:61;;46549:10;46562;:33;;46586:9;46562:33;;;-1:-1:-1;;46562:33:0;46606:80;;;-1:-1:-1;;;46606:80:0;;46634:10;46606:80;;;;46654:4;46606:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46549:46;;-1:-1:-1;;;;;;46606:27:0;;;;;:80;;;;;-1:-1:-1;;46606:80:0;;;;;;;;-1:-1:-1;46606:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;46606:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46606:80:0;;;;46724;46743:5;46750:9;46761:14;46777:12;46791:2;46795:8;46724:18;:80::i;:::-;46697:107;;;;-1:-1:-1;46143:669:0;-1:-1:-1;;;;;;;;;;;;;46143:669:0:o;14258:233::-;1476:12;:10;:12::i;:::-;-1:-1:-1;;;;;1465:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1465:23:0;;1457:68;;;;;-1:-1:-1;;;1457:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1457:68:0;;;;;;;;;;;;;;;14374:3:::1;14361:9;:16;;14352:55;;;::::0;;-1:-1:-1;;;14352:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14418:15;:34:::0;;-1:-1:-1;;;;;;14418:34:0::1;-1:-1:-1::0;;;;;14418:34:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;14463:20:0;14258:233::o;41988:153::-;42101:7;;42083:50;;;-1:-1:-1;;;42083:50:0;;-1:-1:-1;;;;;42083:50:0;;;;;;;;;;;;;;;;42057:7;;42101;;;;;42083:34;;:50;;;;;;;;;;;;;;;42101:7;42083:50;;;2:2:-1;;;;27:1;24;17:12;2:2;42083:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42083:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42083:50:0;;41988:153;-1:-1:-1;;;41988:153:0:o;42149:738::-;42437:12;42451;42465:14;42418:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;42513:85:::1;42527:6;42535;42543:14;42559;42575:10;42587;42513:13;:85::i;:::-;42649:7;::::0;42492:106;;-1:-1:-1;42492:106:0;-1:-1:-1;42609:12:0::1;::::0;42624:49:::1;::::0;-1:-1:-1;;;;;42649:7:0::1;42658:6:::0;42666;42624:24:::1;:49::i;:::-;42609:64;;42684:66;42716:6;42724:10;42736:4;42742:7;42684:31;:66::i;:::-;42761;42793:6;42801:10;42813:4;42819:7;42761:31;:66::i;:::-;42865:4;-1:-1:-1::0;;;;;42850:25:0::1;;42876:2;42850:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;42850:29:0::1;-1:-1:-1::0;;;;;42850:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;42850:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42850:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;42850:29:0;42149:738;;;;-1:-1:-1;42850:29:0;;-1:-1:-1;42149:738:0;;-1:-1:-1;;;;;;;;;42149:738:0:o;2154:201::-;1476:12;:10;:12::i;:::-;-1:-1:-1;;;;;1465:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1465:23:0;;1457:68;;;;;-1:-1:-1;;;1457:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1457:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2243:22:0;::::1;2235:73;;;;-1:-1:-1::0;;;2235:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2319:28;2338:8;2319:18;:28::i;:::-;2154:201:::0;:::o;42893:974::-;43146:14;43162:16;43180:14;43127:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;43262:4:::1;::::0;43234:176:::1;::::0;-1:-1:-1;;;;;43262:4:0::1;43281:5:::0;43301:9:::1;43325:18:::0;43358:12;43385:14;43234:13:::1;:176::i;:::-;43461:7;::::0;43477:4:::1;::::0;43207:203;;-1:-1:-1;43207:203:0;;-1:-1:-1;43421:12:0::1;::::0;43436:46:::1;::::0;-1:-1:-1;;;;;43461:7:0;;::::1;::::0;43470:5;;43477:4:::1;43436:24;:46::i;:::-;43421:61;;43493:69;43525:5;43532:10;43544:4;43550:11;43493:31;:69::i;:::-;43579:4;;;;;;;;;-1:-1:-1::0;;;;;43579:4:0::1;-1:-1:-1::0;;;;;43573:19:0::1;;43600:9;43573:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;43573:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;43636:4:0::1;::::0;43630:37:::1;::::0;;-1:-1:-1;;;43630:37:0;;-1:-1:-1;;;;;43630:37:0;;::::1;;::::0;::::1;::::0;;;;;;;;;43636:4;;;::::1;::::0;-1:-1:-1;43630:20:0::1;::::0;-1:-1:-1;43630:37:0;;;;;-1:-1:-1;43630:37:0::1;::::0;;;;;;43636:4:::1;::::0;43630:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;43630:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;43630:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;43630:37:0;43623:45:::1;;;;43706:4;-1:-1:-1::0;;;;;43691:25:0::1;;43717:2;43691:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;43691:29:0::1;-1:-1:-1::0;;;;;43691:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;43691:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;43691:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;43691:29:0;;-1:-1:-1;43771:9:0::1;:21:::0;-1:-1:-1;43767:92:0::1;;;43794:65;43825:10;43849:9;43837;:21;43794:30;:65::i;:::-;21886:1;42893:974:::0;;;;;;;;;;;:::o;13686:410::-;1476:12;:10;:12::i;:::-;-1:-1:-1;;;;;1465:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1465:23:0;;1457:68;;;;;-1:-1:-1;;;1457:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1457:68:0;;;;;;;;;;;;;;;13808:14:::1;::::0;13790:49:::1;::::0;;-1:-1:-1;;;13790:49:0;;-1:-1:-1;;;;;13790:49:0;;::::1;;::::0;::::1;::::0;;;13808:14;;;::::1;::::0;13790:43:::1;::::0;:49;;;;;::::1;::::0;;;;;;;;13808:14;13790:49;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;13790:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13790:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13790:49:0;13782:99:::1;;;;-1:-1:-1::0;;;13782:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13933:12;-1:-1:-1::0;;;;;13900:45:0::1;13915:4;-1:-1:-1::0;;;;;13900:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13900:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13900:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13900:29:0;-1:-1:-1;;;;;13900:45:0::1;;::::0;:94:::1;;;13982:12;-1:-1:-1::0;;;;;13949:45:0::1;13964:4;-1:-1:-1::0;;;;;13949:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13949:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13949:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13949:29:0;-1:-1:-1;;;;;13949:45:0::1;;13900:94;13892:148;;;;-1:-1:-1::0;;;13892:148:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;14053:20:0;;::::1;;::::0;;;:14:::1;:20;::::0;;;;:35;;-1:-1:-1;;;;;;14053:35:0::1;::::0;;;::::1;;::::0;;13686:410::o;29763:1718::-;29952:21;29928:8;21831:15;21819:8;:27;;21811:64;;;;;-1:-1:-1;;;21811:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21811:64:0;;;;;;;;;;;;;;;30014:1:::1;29999:16:::0;::::1;29991:69;;;;-1:-1:-1::0;;;29991:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30090:4;::::0;-1:-1:-1;;;;;30090:4:0::1;30079::::0;;30090::::1;30079:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;30079:7:0::1;-1:-1:-1::0;;;;;30079:15:0::1;;30071:57;;;::::0;;-1:-1:-1;;;30071:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30071:57:0;;;;;;;;;;;;;::::1;;30181:7;::::0;30141:12:::1;::::0;30156:51:::1;::::0;-1:-1:-1;;;;;30181:7:0::1;30190:4:::0;;30141:12;30190:7;::::1;;;30156:51;-1:-1:-1::0;;;;;30264:20:0;;::::1;30220:19;30264:20:::0;;;:14:::1;:20;::::0;;;;;30141:66;;-1:-1:-1;30220:19:0;30264:20:::1;30253:4:::0;;30220:19;30253:7;::::1;;;;;;;;;;-1:-1:-1::0;;;;;30253:7:0::1;-1:-1:-1::0;;;;;30253:31:0::1;;30250:1008;;;30340:7;::::0;30310:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;30340:7:0::1;::::0;30349:9;;30310:55;30360:4;;;;;;30310:55;;::::1;::::0;30360:4;;30310:55;30360:4;30310:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30310:29:0::1;::::0;-1:-1:-1;;;30310:55:0:i:1;:::-;30300:65;;30402:9;30388:7;30396:1;30388:10;;;;;;;;;;;;;;:23;;30380:75;;;;-1:-1:-1::0;;;30380:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30503:58;30540:7;30548:1;30540:10;;;;;;;30503:58;30473:7;30481:1;30473:10;;;;;;;;;;;;;30472:89;;;;;;::::0;::::1;;30596:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;30579:32:0::1;30587:4;-1:-1:-1::0;;;;;30579:32:0::1;;30576:120;;30639:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;30631:33:0::1;:49;30665:14;30631:49;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30631:49:0;30576:120;30751:7;::::0;30760:10;;30720:57:::1;::::0;-1:-1:-1;;;;;30751:7:0::1;::::0;30760;;30751::::1;::::0;30760:10:::1;;;30720:57;30798:4;::::0;30819:10;;30710:67;;-1:-1:-1;;;;;;30798:4:0::1;::::0;30792:19:::1;::::0;30710:67;;30798:4:::1;::::0;30819:10:::1;;;;;;;;;;30792:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30792:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;30860:4:0::1;::::0;30881:10;;-1:-1:-1;;;;;30860:4:0;;::::1;::::0;-1:-1:-1;30854:20:0::1;::::0;-1:-1:-1;30875:4:0;;-1:-1:-1;30881:7:0;;30860:4:::1;::::0;30881:10:::1;;;;;;;;;;30854:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;30854:38:0::1;-1:-1:-1::0;;;;;30854:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30854:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30854:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30854:38:0;30847:46:::1;;;;30250:1008;;;30968:7;::::0;30938:55:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;30968:7:0::1;::::0;30977:9;;30938:55;30988:4;;;;;;30938:55;;::::1;::::0;30988:4;;30938:55;30988:4;30938:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30938:29:0::1;::::0;-1:-1:-1;;;30938:55:0:i:1;:::-;30928:65;;31030:9;31016:7;31024:1;31016:10;;;;;;;;;;;;;;:23;;31008:75;;;;-1:-1:-1::0;;;31008:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31104:4;::::0;31125:10;;-1:-1:-1;;;;;31104:4:0;;::::1;::::0;31098:19:::1;::::0;31125:7;;31104:4:::1;::::0;31125:10:::1;;;;;;;;;;31098:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31098:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;31166:4:0::1;::::0;31206:7:::1;::::0;-1:-1:-1;;;;;31166:4:0;;::::1;::::0;-1:-1:-1;31160:20:0::1;::::0;-1:-1:-1;31181:51:0::1;::::0;-1:-1:-1;31206:7:0::1;31215:4:::0;;31166::::1;31215:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;31215:7:0::1;31224:4;;31229:1;31224:7;;;;;;31181:51;31234:7;31242:1;31234:10;;;;;;;;;;;;;;31160:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;31160:85:0::1;-1:-1:-1::0;;;;;31160:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31160:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31160:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31160:85:0;31153:93:::1;;;;31270:24;31276:7;31285:4;;31270:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31291:2:0;;-1:-1:-1;31270:5:0::1;::::0;-1:-1:-1;;31270:24:0:i:1;:::-;31341:8;31352:30;31367:14;31352:7;31360:1;31352:10;;;;;;;;;;;;;;:14;;:30;;;;:::i;:::-;31341:41;;31409:3;31397:9;:15;31393:80;;;31414:59;31445:10;31469:3;31457:9;:15;31414:30;:59::i;20488:403::-:0;20696:45;;;-1:-1:-1;;;;;20696:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20696:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20685:57:0;;;;20650:12;;20664:17;;20685:10;;;;20696:45;20685:57;;;25:18:-1;20685:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;20685:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;20649:93:0;;;;20765:7;:57;;;;-1:-1:-1;20777:11:0;;:16;;:44;;;20808:4;20797:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20797:24:0;20777:44;20749:136;;;;-1:-1:-1;;;20749:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20488:403;;;;;:::o;21351:207::-;21460:12;;;21420;21460;;;;;;;;;-1:-1:-1;;;;;21438:7:0;;;21453:5;;21438:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21438:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;21419:54:0;;;21488:7;21480:72;;;;-1:-1:-1;;;21480:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21351:207;;;:::o;16616:635::-;16739:14;16785:1;16774:8;:12;16766:68;;;;-1:-1:-1;;;16766:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16865:1;16853:9;:13;:31;;;;;16883:1;16870:10;:14;16853:31;16845:84;;;;-1:-1:-1;;;16845:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16940:23;16966:8;:35;;16996:5;16966:35;;;16985:8;16977:5;:16;16966:35;16940:61;-1:-1:-1;17012:20:0;17035:32;:8;16940:61;17035:32;:12;:32;:::i;:::-;17012:55;-1:-1:-1;17078:14:0;17095:31;17012:55;17115:10;17095:31;:19;:31;:::i;:::-;17078:48;-1:-1:-1;17137:16:0;17156:41;17181:15;17156:20;:9;17170:5;17156:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;17137:60;;17232:11;17220:9;:23;;;;;;;16616:635;-1:-1:-1;;;;;;;;;;16616:635:0:o;15132:478::-;15221:12;15247:14;15263;15281:26;15292:6;15300;15281:10;:26::i;:::-;15445:32;;;-1:-1:-1;;15445:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;15445:32:0;;;;;15435:43;;;;;;-1:-1:-1;;;;;;15348:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15348:251:0;;;;;;;15338:262;;;;;;;;;15132:478;-1:-1:-1;;;;;15132:478:0:o;19630:276::-;19718:7;;;19797:5;19769:23;:8;19782:9;19769:23;:12;:23;:::i;:::-;19768:35;;;;;;;-1:-1:-1;19825:28:0;:8;19768:35;19825:28;:12;:28;:::i;:::-;19814:39;-1:-1:-1;19814:39:0;;-1:-1:-1;19883:14:0;-1:-1:-1;19630:276:0;;;;;;:::o;20897:448::-;21140:51;;;-1:-1:-1;;;;;21140:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21140:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21129:63:0;;;;21094:12;;21108:17;;21129:10;;;;21140:51;21129:63;;;25:18:-1;21129:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21129:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;21093:99:0;;;;21215:7;:57;;;;-1:-1:-1;21227:11:0;;:16;;:44;;;21258:4;21247:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21247:24:0;21227:44;21199:140;;;;-1:-1:-1;;;21199:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20897:448;;;;;;:::o;18046:737::-;18147:21;18204:1;18189:4;:11;:16;;18181:59;;;;;-1:-1:-1;;;18181:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18272:4;:11;18261:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18261:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;18261:23:0;;18251:33;;18308:8;18295:7;18303:1;18295:10;;;;;;;;;;;;;:21;;;;;18332:6;18327:449;18358:1;18344:4;:11;:15;18340:1;:19;18327:449;;;18381:19;18418:38;18426:7;18435:4;18440:1;18435:7;;;;;;;;;;;;;;18444:4;18449:1;18453;18449:5;18444:11;;;;;;;;;;;;;;18418:7;:38::i;:::-;18381:76;;18472:17;18492:4;-1:-1:-1;;;;;18492:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18492:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18492:16:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18492:16:0;18539:18;;;-1:-1:-1;;;18539:18:0;;;;18492:16;;-1:-1:-1;18523:13:0;;-1:-1:-1;;;;;18539:16:0;;;;;:18;;;;;18492:16;;18539:18;;;;;;;:16;:18;;;2:2:-1;;;;27:1;24;17:12;2:2;18539:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18539:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18539:18:0;18629:7;;18539:18;;-1:-1:-1;18573:14:0;;;;18608:42;;18620:7;;18629:4;;18634:1;;18629:7;;;;;;;;;;;;18638:4;18643:1;18647;18643:5;18638:11;;;;;;;;;;;;;;18608;:42::i;:::-;18572:78;;;;18682:82;18695:7;18703:1;18695:10;;;;;;;;;;;;;;18707:9;18718:10;18751:1;-1:-1:-1;;;;;18730:23:0;:9;-1:-1:-1;;;;;18730:23:0;;;18755:8;18682:12;:82::i;:::-;18665:7;18673:1;18677;18673:5;18665:14;;;;;;;;;;;;;;;;;:99;-1:-1:-1;;18361:3:0;;;;;-1:-1:-1;18327:449:0;;-1:-1:-1;;18327:449:0;;;18046:737;;;;;:::o;21903:878::-;22010:6;22005:769;22036:1;22022:4;:11;:15;22018:1;:19;22005:769;;;22060:13;22075:14;22094:4;22099:1;22094:7;;;;;;;;;;;;;;22103:4;22108:1;22112;22108:5;22103:11;;;;;;;;;;;;;;22059:56;;;;22131:14;22150:42;22178:5;22185:6;22150:27;:42::i;:::-;22130:62;;;22207:14;22224:7;22232:1;22236;22232:5;22224:14;;;;;;;;;;;;;;22207:31;;22254:15;22271;22299:6;-1:-1:-1;;;;;22290:15:0;:5;-1:-1:-1;;;;;22290:15:0;;:61;;22332:9;22348:1;22290:61;;;22314:1;22318:9;22290:61;22253:98;;;;22367:15;22384;22403:65;22418:5;22425:6;22433:7;22441:1;22433:10;;;;;;;;;;;;;;22445;22457;22403:14;:65::i;:::-;22366:102;;;;22483:10;22514:1;22500:4;:11;:15;22496:1;:19;:82;;22575:3;22496:82;;;22543:7;;22560:11;;22518:54;;-1:-1:-1;;;;;22543:7:0;;22552:6;;22560:4;;22569:1;22565:5;;;22560:11;;;;;22518:54;22633:7;;22483:95;;-1:-1:-1;22608:48:0;;-1:-1:-1;;;;;22633:7:0;22642:5;22649:6;22608:24;:48::i;:::-;-1:-1:-1;;;;;22593:69:0;;22681:10;22693;22705;22717;22729:2;22743:1;22733:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;22733:12:0;87:42:-1;143:17;;-1:-1;22733:12:0;;22593:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22593:167:0;-1:-1:-1;;;;;22593:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;22593:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22593:167:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22039:3:0;;;;;-1:-1:-1;22005:769:0;;-1:-1:-1;;;;;;;;;;22005:769:0;;;21903:878;;;:::o;18864:758::-;18965:21;19022:1;19007:4;:11;:16;;18999:59;;;;;-1:-1:-1;;;18999:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19090:4;:11;19079:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19079:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;19079:23:0;;19069:33;;19143:9;19113:7;19138:1;19121:7;:14;:18;19113:27;;;;;;;;;;;;;;;;;:39;19177:11;;-1:-1:-1;;19177:15:0;19163:452;19194:5;;19163:452;;19221:19;19258:38;19266:7;19275:4;19284:1;19280;:5;19275:11;;;;;;;;;;;;;;19288:4;19293:1;19288:7;;;;;;;19258:38;19221:76;;19312:17;19332:4;-1:-1:-1;;;;;19332:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19332:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19332:16:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19332:16:0;19379:18;;;-1:-1:-1;;;19379:18:0;;;;19332:16;;-1:-1:-1;19363:13:0;;-1:-1:-1;;;;;19379:16:0;;;;;:18;;;;;19332:16;;19379:18;;;;;;;:16;:18;;;2:2:-1;;;;27:1;24;17:12;2:2;19379:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19379:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19379:18:0;19469:11;;19379:18;;-1:-1:-1;19413:14:0;;;;19448:42;;19460:7;;19469:4;;-1:-1:-1;;19474:5:0;;;19469:11;;;;;;;;;;;;19482:4;19487:1;19482:7;;;;;;;19448:42;19412:78;;;;19522:81;19534:7;19542:1;19534:10;;;;;;;;;;;;;;19546:9;19557:10;19590:1;-1:-1:-1;;;;;19569:23:0;:9;-1:-1:-1;;;;;19569:23:0;;;19594:8;19522:11;:81::i;:::-;19505:7;19517:1;19513;:5;19505:14;;;;;;;;;;;;;;;;;:98;-1:-1:-1;;;;19201:3:0;;;;-1:-1:-1;19163:452:0;;-1:-1:-1;;19163:452:0;33070:955;33183:6;33178:840;33209:1;33195:4;:11;:15;33191:1;:19;33178:840;;;33233:13;33248:14;33267:4;33272:1;33267:7;;;;;;;;;;;;;;33276:4;33281:1;33285;33281:5;33276:11;;;;;;;;;;;;;;33232:56;;;;33304:14;33323:42;33351:5;33358:6;33323:27;:42::i;:::-;33303:62;;;33383:16;33401:17;33422:40;33440:5;33447:6;33455;33422:17;:40::i;:::-;33382:80;;;;33478:15;33495;33523:6;-1:-1:-1;;;;;33514:15:0;:5;-1:-1:-1;;;;;33514:15:0;;:67;;33559:12;33578:1;33514:67;;;33538:1;33542:12;33514:67;33477:104;;;;33599:15;33616;33635:66;33650:5;33657:6;33665:11;33678:10;33690;33635:14;:66::i;:::-;33598:103;;;;33718:10;33749:1;33735:4;:11;:15;33731:1;:19;:82;;33810:3;33731:82;;;33753:54;33778:7;;;;;;;;;-1:-1:-1;;;;;33778:7:0;33787:6;33795:4;33800:1;33804;33800:5;33795:11;;;;;;;33753:54;33892:7;;33718:95;;-1:-1:-1;33830:19:0;;33867:48;;-1:-1:-1;;;;;33892:7:0;33901:5;33908:6;33867:24;:48::i;:::-;33830:86;-1:-1:-1;;;;;;33931:9:0;;;33941:10;33953;33965;33977;33989:2;34003:1;33993:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;33993:12:0;87:42:-1;143:17;;-1:-1;33993:12:0;;33931:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33931:75:0;-1:-1:-1;;;;;33931:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;33931:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33931:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33212:3:0;;;;;-1:-1:-1;33178:840:0;;-1:-1:-1;;;;;;;;;;;;33178:840:0;9161:129;9245:5;;;9240:16;;;;9232:50;;;;;-1:-1:-1;;;9232:50:0;;;;;;;;;;;;-1:-1:-1;;;9232:50:0;;;;;;;;;;;;;;567:98;647:10;567:98;:::o;2515:191::-;2589:16;2608:6;;-1:-1:-1;;;;;2625:17:0;;;-1:-1:-1;;;;;;2625:17:0;;;;;;2658:40;;2608:6;;;;;;;2658:40;;2589:16;2658:40;2515:191;;:::o;9298:142::-;9350:6;9377;;;:30;;-1:-1:-1;;9392:5:0;;;9406:1;9401;9392:5;9401:1;9387:15;;;;;:20;9377:30;9369:63;;;;;-1:-1:-1;;;9369:63:0;;;;;;;;;;;;-1:-1:-1;;;9369:63:0;;;;;;;;;;;;;;17372:592;17495:13;17541:1;17529:9;:13;17521:70;;;;-1:-1:-1;;;17521:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17622:1;17610:9;:13;:31;;;;;17640:1;17627:10;:14;17610:31;17602:84;;;;-1:-1:-1;;;17602:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17697:24;17724:8;:35;;17754:5;17724:35;;;17743:8;17735:5;:16;17724:35;17697:62;-1:-1:-1;17770:14:0;17787:35;17816:5;17787:24;:9;17801;17787:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;17770:52;-1:-1:-1;17833:16:0;17852:50;17882:19;17852:25;:10;17867:9;17852:25;:14;:25;:::i;:50::-;17833:69;;17924:32;17954:1;17937:11;17925:9;:23;;;;;;;17924:32;:29;:32;:::i;:::-;17913:43;17372:592;-1:-1:-1;;;;;;;;;17372:592:0:o;16173:321::-;16255:12;16298:1;16288:7;:11;16280:61;;;;-1:-1:-1;;;16280:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16371:1;16360:8;:12;:28;;;;;16387:1;16376:8;:12;16360:28;16352:81;;;;-1:-1:-1;;;16352:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16478:8;16454:21;:7;16466:8;16454:21;:11;:21;:::i;:::-;:32;;;;;;;16173:321;-1:-1:-1;;;;16173:321:0:o;14691:349::-;14766:14;14782;14827:6;-1:-1:-1;;;;;14817:16:0;:6;-1:-1:-1;;;;;14817:16:0;;;14809:66;;;;-1:-1:-1;;;14809:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14914:6;-1:-1:-1;;;;;14905:15:0;:6;-1:-1:-1;;;;;14905:15:0;;:53;;14943:6;14951;14905:53;;;14924:6;14932;14905:53;14886:72;;-1:-1:-1;14886:72:0;-1:-1:-1;;;;;;14977:20:0;;14969:63;;;;;-1:-1:-1;;;14969:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;40026:1954;40244:12;;;40339:23;40347:6;40355;40339:7;:23::i;:::-;-1:-1:-1;;;;;40339:37:0;;40335:402;;;40406:4;;-1:-1:-1;;;;;40396:14:0;;;40406:4;;40396:14;40393:333;;;40449:7;;40431:53;;;-1:-1:-1;;;40431:53:0;;-1:-1:-1;;;;;40431:53:0;;;;;;;;;;;;;;;;40449:7;;;;;40431:37;;:53;;;;;;;;;;;;;;40449:7;;40431:53;;;2:2:-1;;;;27:1;24;17:12;2:2;40431:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40431:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40544:6:0;;-1:-1:-1;40503:14:0;:38;40518:22;40544:6;40533;40518:7;:22::i;:::-;-1:-1:-1;;;;;40503:38:0;;;;;;;;;;;;;;-1:-1:-1;40503:38:0;:47;;-1:-1:-1;;;;;;40503:47:0;;;;;;;;;;;40393:333;;;40609:7;;40591:53;;;-1:-1:-1;;;40591:53:0;;-1:-1:-1;;;;;40591:53:0;;;;;;;;;;;;;;;;40609:7;;;;;40591:37;;:53;;;;;;;;;;;;;;40609:7;;40591:53;;;2:2:-1;;;;27:1;24;17:12;2:2;40591:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40591:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40704:6:0;;-1:-1:-1;40663:14:0;:38;40678:22;40686:6;40704;40678:7;:22::i;:::-;-1:-1:-1;;;;;40663:38:0;;;;;;;;;;;;;;-1:-1:-1;40663:38:0;:47;;-1:-1:-1;;;;;;40663:47:0;;;;;;;;;;;40393:333;40809:7;;40748:13;;;;40780:53;;-1:-1:-1;;;;;40809:7:0;40818:6;40826;40780:28;:53::i;:::-;40747:86;;;;40848:8;40860:1;40848:13;:30;;;;-1:-1:-1;40865:13:0;;40848:30;40844:1129;;;40977:4;;40917:14;;-1:-1:-1;40933:14:0;;-1:-1:-1;;;;;;40967:14:0;;;40977:4;;40967:14;40963:298;;;41043:6;41002:14;:38;41017:22;41025:6;41032;41017:7;:22::i;:::-;-1:-1:-1;;;;;41002:38:0;;;;;;;;;;;;;;-1:-1:-1;41002:38:0;:47;;-1:-1:-1;;;;;;41002:47:0;;;;;;;;;;;40963:298;;;41085:4;;-1:-1:-1;;;;;41075:14:0;;;41085:4;;41075:14;41071:190;;;41151:6;41110:14;:38;41125:22;41133:6;41140;41125:7;:22::i;41071:190::-;41239:6;41198:14;:38;41213:22;41221:6;41228;41213:7;:22::i;:::-;-1:-1:-1;;;;;41198:38:0;;;;;;;;;;;;;;-1:-1:-1;41198:38:0;:47;;-1:-1:-1;;;;;;41198:47:0;;;;;;;;;;;41071:190;40844:1129;;;41293:19;41315:58;41338:14;41354:8;41364;41315:22;:58::i;:::-;41293:80;;41410:14;41392;:32;41388:574;;41471:10;41453:14;:28;;41445:79;;;;-1:-1:-1;;;41445:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41565:14;;-1:-1:-1;41581:14:0;-1:-1:-1;41581:14:0;41388:574;;;41637:19;41659:58;41682:14;41698:8;41708;41659:22;:58::i;:::-;41637:80;;41761:14;41743;:32;;41736:40;;;;41821:10;41803:14;:28;;41795:79;;;;-1:-1:-1;;;41795:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41915:14;-1:-1:-1;41931:14:0;;-1:-1:-1;41388:574:0;40844:1129;;40026:1954;;;;;;;;;;;:::o;9025:128::-;9109:5;;;9104:16;;;;9096:49;;;;;-1:-1:-1;;;9096:49:0;;;;;;;;;;;;-1:-1:-1;;;9096:49:0;;;;;;;;;;;;;;15668:392;15761:13;15776;15803:14;15822:26;15833:6;15841;15822:10;:26::i;:::-;15802:46;;;15860:13;15875;15909:32;15917:7;15926:6;15934;15909:7;:32::i;:::-;-1:-1:-1;;;;;15894:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15894:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15894:62:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;15894:62:0;;;;;;;-1:-1:-1;;;;;15859:97:0;;;;-1:-1:-1;15859:97:0;;-1:-1:-1;;;;;;15990:16:0;;;;;;;:62;;16033:8;16043;15990:62;;;16010:8;16020;15990:62;15967:85;;;;-1:-1:-1;15668:392:0;-1:-1:-1;;;;;;;15668:392:0:o;31491:729::-;31733:7;;31626:15;;;;;;31708:48;;-1:-1:-1;;;;;31733:7:0;31742:5;31749:6;31708:24;:48::i;:::-;31671:86;;31769:14;31788:42;31816:5;31823:6;31788:27;:42::i;:::-;31768:62;;;31841:17;31861:4;-1:-1:-1;;;;;31861:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31861:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31861:16:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31861:16:0;31904:18;;;-1:-1:-1;;;31904:18:0;;;;31861:16;;-1:-1:-1;31888:13:0;;-1:-1:-1;;;;;31904:16:0;;;;;:18;;;;;31861:16;;31904:18;;;;;;;:16;:18;;;2:2:-1;;;;27:1;24;17:12;2:2;31904:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31904:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31904:18:0;;-1:-1:-1;;;;;;31946:19:0;;;;;;;;:121;;31987:6;-1:-1:-1;;;;;31978:15:0;:5;-1:-1:-1;;;;;31978:15:0;;:89;;32032:35;32061:5;32032:24;:10;32047:8;32032:24;:14;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;31978:89;;;31996:33;32023:5;31996:22;:8;32009;31996:22;:12;:22;:::i;:33::-;31946:121;;;31973:1;31946:121;31933:134;;32104:6;-1:-1:-1;;;;;32091:19:0;:9;-1:-1:-1;;;;;32091:19:0;;:121;;32132:6;-1:-1:-1;;;;;32123:15:0;:5;-1:-1:-1;;;;;32123:15:0;;;:89;;32177:35;32206:5;32177:24;:10;32192:8;32177:24;:14;:24;:::i;:35::-;32123:89;;;32141:33;32168:5;32141:22;:8;32154;32141:22;:12;:22;:::i;:33::-;32091:121;;;32118:1;32091:121;32078:134;;31491:729;;;;;;;;;;;;:::o;32228:697::-;32435:7;;32325:16;;;;;;32410:48;;-1:-1:-1;;;;;32435:7:0;32444:5;32451:6;32410:24;:48::i;:::-;32373:86;;32473:13;32488;32504:17;32525:4;-1:-1:-1;;;;;32525:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32525:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32525:18:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;32525:18:0;;;;;;;;;;;;;32570;;-1:-1:-1;;;32570:18:0;;;;-1:-1:-1;;;;;32472:71:0;;;;-1:-1:-1;32472:71:0;;;;;-1:-1:-1;32525:18:0;-1:-1:-1;32554:13:0;;-1:-1:-1;;;;;32570:16:0;;;;;:18;;;;;32525;;32570;;;;;;:16;:18;;;2:2:-1;;;;27:1;24;17:12;2:2;32570:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32570:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32570:18:0;;-1:-1:-1;32600:17:0;;-1:-1:-1;;;;;32641:15:0;;;;;;;:61;;32683:8;32693;32641:61;;;32660:8;32670;32641:61;32599:103;;;;32729:56;32772:12;32736:5;-1:-1:-1;;;;;32729:23:0;;32761:4;32729:38;;;;;;;;;;;;;-1:-1:-1;;;;;32729:38:0;-1:-1:-1;;;;;32729:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;32729:56:0;32715:70;-1:-1:-1;32811:106:0;32715:70;32854:12;32868:13;-1:-1:-1;;;;;32883:23:0;;;;32908:8;32811:29;:106::i;:::-;32796:121;;32228:697;;;;;;;;;;;;;:::o;9448:138::-;9500:6;9531:1;9527;:5;9519:39;;;;;-1:-1:-1;;;9519:39:0;;;;;;;;;;;;-1:-1:-1;;;9519:39:0;;;;;;;;;;;;;;;9577:1;9573;:5;;;;;;;9448:138;-1:-1:-1;;;9448:138:0:o
Swarm Source
ipfs://23f78b157ba6aa3b85fdc5358f9b08f60ff09433a9e16285fd935eaa8470e637
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,501.4 | 0.00004976 | $0.1742 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.