Source Code
Overview
FTM Balance
1 wei
More Info
ContractCreator
Multichain Info
N/A
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact ETH F... | 7327642 | 1083 days ago | IN | 0.0001 FTM | 0.02712291 | ||||
Swap Exact ETH F... | 7327632 | 1083 days ago | IN | 0.0001 FTM | 0.03071503 | ||||
Swap Exact ETH F... | 7300050 | 1084 days ago | IN | 0.0001 FTM | 0.02659359 | ||||
Swap Tokens For ... | 7237678 | 1086 days ago | IN | 0 FTM | 0.03082877 | ||||
Swap Exact Token... | 7237641 | 1086 days ago | IN | 0 FTM | 0.03084577 | ||||
Swap Exact Token... | 7237626 | 1086 days ago | IN | 0 FTM | 0.03085717 | ||||
Referrer Swap Ex... | 7237577 | 1086 days ago | IN | 0.001 FTM | 0.0267602 | ||||
Referrer Swap ET... | 7237557 | 1086 days ago | IN | 0.09997 FTM | 0.02830534 | ||||
Referral Swap Ex... | 7237486 | 1086 days ago | IN | 0.00099999 FTM | 0.02696522 | ||||
Swap Exact ETH F... | 7237442 | 1086 days ago | IN | 0.001 FTM | 0.02522426 | ||||
Swap Exact ETH F... | 7237387 | 1086 days ago | IN | 0.001 FTM | 0.03535578 | ||||
Add Liquidity ET... | 7237323 | 1086 days ago | IN | 1 FTM | 0.46252762 | ||||
Set USDT Thresho... | 7237073 | 1086 days ago | IN | 0 FTM | 0.00922763 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
7327642 | 1083 days ago | 0.0000001 FTM | ||||
7327642 | 1083 days ago | 0.0000999 FTM | ||||
7327642 | 1083 days ago | 0.0001 FTM | ||||
7327632 | 1083 days ago | 0.0000002 FTM | ||||
7327632 | 1083 days ago | 0.0000998 FTM | ||||
7327632 | 1083 days ago | 0.0001 FTM | ||||
7300050 | 1084 days ago | 0.0000002 FTM | ||||
7300050 | 1084 days ago | 0.0000998 FTM | ||||
7300050 | 1084 days ago | 0.0001 FTM | ||||
7237678 | 1086 days ago | 0.0000998 FTM | ||||
7237678 | 1086 days ago | 0.0000998 FTM | ||||
7237678 | 1086 days ago | 0.0000002 FTM | ||||
7237678 | 1086 days ago | 0.0000002 FTM | ||||
7237641 | 1086 days ago | 0.00100135 FTM | ||||
7237641 | 1086 days ago | 0.00100135 FTM | ||||
7237641 | 1086 days ago | 0.000001 FTM | ||||
7237641 | 1086 days ago | 0.000001 FTM | ||||
7237626 | 1086 days ago | 0.00100235 FTM | ||||
7237626 | 1086 days ago | 0.00100235 FTM | ||||
7237626 | 1086 days ago | 0.000002 FTM | ||||
7237626 | 1086 days ago | 0.000002 FTM | ||||
7237577 | 1086 days ago | 0.000001 FTM | ||||
7237577 | 1086 days ago | 0.000001 FTM | ||||
7237577 | 1086 days ago | 0.000998 FTM | ||||
7237577 | 1086 days ago | 0.001 FTM |
Loading...
Loading
Contract Name:
AnjiRouterQuickswap
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at testnet.ftmscan.com on 2022-02-06 */ pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity =0.6.12; // 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'); } } pragma solidity >=0.5.0; library UniswapV2Library { 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, 'UniswapV2Library: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'UniswapV2Library: 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'0081b6f7c41cce7e41709290c343d182e084720d1c2ef10a311fc4e0b1869145' // 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,) = IUniswapV2Pair(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, 'UniswapV2Library: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: 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) internal pure returns (uint amountOut) { require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).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) internal pure returns (uint amountIn) { require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(997); 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, 'UniswapV2Library: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // 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, 'UniswapV2Library: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } 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.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function 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, uint256 usd) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline, uint256 usd) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline, uint256 usd) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline, uint256 usd) 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 IUniswapV2Router02 is IUniswapV2Router01 { 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, uint256 usd ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline, uint256 usd ) external; } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) 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.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } pragma solidity =0.6.12; // Ownable Contract abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() public{ address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require( _previousOwner == msg.sender, "You don't have permission to unlock" ); require(block.timestamp > _lockTime, "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface AnjiReferral { function referralBuy(address referrer, uint256 bnbBuy, address tokenAddr) external; } contract AnjiRouterQuickswap is IUniswapV2Router02 , Ownable{ using SafeMath for uint; address public immutable override factory; address public immutable override WETH; address public anji; address public anjiReferral; uint256 private USDTThreshold; address public feeReceiver; bool public feeOFF = false; bool public transactionFeeReferral = true; bool public callReferralBuy = false; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'AnjiRouter: EXPIRED'); _; } constructor(address _factory, address _WETH, address _anji) public { factory = _factory; WETH = _WETH; feeReceiver = msg.sender; anji = _anji; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } function setAnjiAddress(address _anji) public onlyOwner { anji = _anji; } function setReceiverAddress(address _feeReceiver) public onlyOwner { feeReceiver = _feeReceiver; } function setUSDTThreshold(uint256 _threshold) public onlyOwner { USDTThreshold = _threshold; } function setFeeOFF(bool _feeOFF) public onlyOwner { feeOFF = _feeOFF; } function setTransactionFeeReferral(bool _feeReferral) public onlyOwner { transactionFeeReferral = _feeReferral; } function setReferralBuy(bool _ReferralBuy) public onlyOwner { callReferralBuy = _ReferralBuy; } function setAnjiReferral(address _anjiReferral) public onlyOwner { anjiReferral = _anjiReferral; } function _feeAmount(uint amount, address tokenIn, bool isReferrer, uint usd) public view returns (uint) { if (tokenIn == anji && feeOFF == true) { return 0; } if (transactionFeeReferral == true){ if (isReferrer == true){ return amount.mul(2)/1000; } } if (usd>= USDTThreshold) { return amount.mul(1)/1000; } else { return amount.mul(2)/1000; } } // **** 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 (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) { IUniswapV2Factory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'AnjiRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'AnjiRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } 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 = UniswapV2Library.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IUniswapV2Pair(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 amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = UniswapV2Library.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IUniswapV2Pair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair 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,) = UniswapV2Library.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to; IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap( amount0Out, amount1Out, 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) { amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'AnjiRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), 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) { amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'AnjiRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline, uint256 usd) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'AnjiRouter: INVALID_PATH'); uint amountIn = msg.value; uint fee = _feeAmount(amountIn, path[1], false, usd); uint amount = amountIn - fee; amounts = UniswapV2Library.getAmountsOut(factory, amount, path); require(amounts[amounts.length - 1] >= amountOutMin, 'AnjiRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); if (fee > 0) { TransferHelper.safeTransferETH(feeReceiver, fee); } } function referrerSwapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, address referrer, uint deadline, uint256 usd) external virtual payable ensure(deadline) returns (uint[] memory amounts) { require(msg.sender != referrer, "Sender=Referrer"); require(referrer != address(0), "No Referrer"); require(path[0] == WETH, 'AnjiRouter: INVALID_PATH'); uint amountIn = msg.value; uint fee = _feeAmount(amountIn, path[1] ,true, usd); uint amount = amountIn - fee; amounts = UniswapV2Library.getAmountsOut(factory, amount, path); require(amounts[amounts.length - 1] >= amountOutMin, 'AnjiRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); //send the fee to the fee receiver if (fee > 0) { TransferHelper.safeTransferETH(feeReceiver, fee/2); TransferHelper.safeTransferETH(referrer, fee/2); } if(callReferralBuy == true){ AnjiReferral(anjiReferral).referralBuy(referrer, msg.value, path[1]); } } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline, uint256 usd) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'AnjiRouter: INVALID_PATH'); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'AnjiRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); uint fee = _feeAmount(amounts[amounts.length - 1], path[0],false, usd); uint sendingAmount = amounts[amounts.length - 1].sub(fee); if (fee > 0){ IWETH(WETH).withdraw(fee); TransferHelper.safeTransferETH(feeReceiver, fee); } IWETH(WETH).withdraw(sendingAmount); TransferHelper.safeTransferETH(to, sendingAmount); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline, uint256 usd) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'AnjiRouter: INVALID_PATH'); amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'AnjiRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); uint fee = _feeAmount(amounts[amounts.length - 1], path[0], false, usd); uint sendingAmount = amounts[amounts.length - 1].sub(fee); if (fee > 0){ IWETH(WETH).withdraw(fee); TransferHelper.safeTransferETH(feeReceiver, fee); } IWETH(WETH).withdraw(sendingAmount); TransferHelper.safeTransferETH(to, sendingAmount); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline, uint256 usd) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'AnjiRouter: INVALID_PATH'); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'AnjiRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); uint fee = _feeAmount(amounts[0], path[1], false, usd); if (fee > 0) { TransferHelper.safeTransferETH(feeReceiver, fee); } // refund dust eth, if any if (msg.value - fee > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0] - fee); } function referrerSwapETHForExactTokens(uint amountOut, address[] calldata path, address to, address referrer, uint deadline, uint256 usd) external virtual payable ensure(deadline) returns (uint[] memory amounts) { require(msg.sender != referrer, "Sender=Referrer"); require(referrer != address(0), "No Referrer"); require(path[0] == WETH, 'AnjiRouter: INVALID_PATH'); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'AnjiRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); //send the fee to the fee receiver uint fee = _feeAmount(amounts[0], path[1], true, usd); if (fee > 0) { TransferHelper.safeTransferETH(feeReceiver, fee/2); TransferHelper.safeTransferETH(referrer, fee/2); } // refund dust eth, if any if (msg.value - fee > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0] - fee); if(callReferralBuy == true){ AnjiReferral(anjiReferral).referralBuy(referrer, msg.value, path[1]); } } // **** 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,) = UniswapV2Library.sortTokens(input, output); IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'AnjiRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline, uint256 usd ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'AnjiRouter: INVALID_PATH'); uint amountIn = msg.value; uint fee = _feeAmount(amountIn, path[1], false, usd); uint amount = amountIn - fee; IWETH(WETH).deposit{value: amount}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amount)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); if (fee > 0) { TransferHelper.safeTransferETH(feeReceiver, fee); } require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'AnjiRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function referralSwapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, address referrer, uint deadline, uint256 usd) external virtual payable ensure(deadline) { require(msg.sender != referrer, "Sender=Referrer"); require(referrer != address(0), "NoReferrer"); require(path[0] == WETH, 'AnjiRouter: INVALID_PATH'); //uint amountIn = msg.value; uint fee = _feeAmount(msg.value, path[1], true, usd); uint amount = msg.value - fee; IWETH(WETH).deposit{value: amount}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amount)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); if (fee > 0) { TransferHelper.safeTransferETH(feeReceiver, fee/2); TransferHelper.safeTransferETH(referrer, fee/2); } require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'AnjiRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); if(callReferralBuy == true){ AnjiReferral(anjiReferral).referralBuy(referrer, msg.value, path[1]); } } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline, uint256 usd ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'AnjiRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'AnjiRouter: INSUFFICIENT_OUTPUT_AMOUNT'); uint fee = _feeAmount(amountOut, path[0],false, usd); uint sendingAmount = amountOut.sub(fee); if (fee > 0){ IWETH(WETH).withdraw(fee); TransferHelper.safeTransferETH(feeReceiver, fee); } IWETH(WETH).withdraw(sendingAmount); TransferHelper.safeTransferETH(to, sendingAmount); } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return UniswapV2Library.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return UniswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return UniswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return UniswapV2Library.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return UniswapV2Library.getAmountsIn(factory, amountOut, path); } }
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_anji","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":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"bool","name":"isReferrer","type":"bool"},{"internalType":"uint256","name":"usd","type":"uint256"}],"name":"_feeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"anji","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"anjiReferral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callReferralBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOFF","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","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":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"usd","type":"uint256"}],"name":"referralSwapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"usd","type":"uint256"}],"name":"referrerSwapETHForExactTokens","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":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"usd","type":"uint256"}],"name":"referrerSwapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_anji","type":"address"}],"name":"setAnjiAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_anjiReferral","type":"address"}],"name":"setAnjiReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_feeOFF","type":"bool"}],"name":"setFeeOFF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeReceiver","type":"address"}],"name":"setReceiverAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_ReferralBuy","type":"bool"}],"name":"setReferralBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_feeReferral","type":"bool"}],"name":"setTransactionFeeReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setUSDTThreshold","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"},{"internalType":"uint256","name":"usd","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"},{"internalType":"uint256","name":"usd","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"},{"internalType":"uint256","name":"usd","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"},{"internalType":"uint256","name":"usd","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"},{"internalType":"uint256","name":"usd","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"},{"internalType":"uint256","name":"usd","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":[],"name":"transactionFeeReferral","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526006805460ff60b01b1961ffff60a01b19909116600160a81b171690553480156200002e57600080fd5b5060405162005beb38038062005beb833981810160405260608110156200005457600080fd5b50805160208201516040909201519091906000620000716200010a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350606092831b6001600160601b03199081166080529190921b1660a05260068054336001600160a01b031991821617909155600380549091166001600160a01b039092169190911790556200010e565b3390565b60805160601c60a05160601c61598762000264600039806101e95280610fa2528061123552806112ca5280611a505280611e045280611eb15280611f2552806122ba52806123a952806124cc52806125cf5280612664528061273252806128ad52806129355280612c305280612dab5280612e33528061332b528061346e52806134f652806137e6528061383c528061387052806138e45280613b175280613bdb5280613c4f528061401f528061416252806141ea5250806110305280611104528061148f528061151952806115f052806117635280611ade5280611d015280611f57528061245852806127fa52806129675280612aa85280612cf85280612e6552806130ec528061321352806133be5280613528528061381a5280613c8152806140b2528061421c528061487252806148b55280614e025280614f78528061523b52806152f452806153a752506159876000f3fe6080604052600436106101d95760003560e01c8062c358b614610217578063054d50d41461030357806312df55641461034b578063192905f1146103925780631f00ca74146103be578063324201211461047357806338ed17391461049c5780635510ece8146105325780635c11d7951461055e57806362faf3fd146105f457806365d64885146106275780636d4928a01461063c578063715018a6146106d8578063808f6cf5146106ed5780638279c7db1461070257806385f8c259146107355780638803dbee1461076b5780638da5cb5b146108015780639f01cd2e14610832578063a69df4b5146108bc578063ad5c4648146108d1578063ad615dec146108e6578063afbd885d1461091c578063b3f0067414610946578063b6c523241461095b578063b90e0bf614610970578063bd60833814610a0c578063c45a015514610a96578063c8541b9d14610aab578063ca613e6914610ad7578063cb03bca714610aec578063cc377ae014610b80578063d06ca61f14610bb3578063dd46706414610c68578063e8e3370014610c92578063ee10b6ec14610d12578063f2fde38b14610d9c578063f305d71914610dcf578063f4f388ba14610e15578063f68d51fb14610e2a578063fa329acc14610ebe57610212565b3661021257336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021057fe5b005b600080fd5b34801561022357600080fd5b506102b3600480360360c081101561023a57600080fd5b813591602081013591810190606081016040820135600160201b81111561026057600080fd5b82018360208201111561027257600080fd5b803590602001918460208302840111600160201b8311171561029357600080fd5b91935091506001600160a01b038135169060208101359060400135610f52565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102ef5781810151838201526020016102d7565b505050509050019250505060405180910390f35b34801561030f57600080fd5b506103396004803603606081101561032657600080fd5b508035906020810135906040013561135e565b60408051918252519081900360200190f35b34801561035757600080fd5b506103396004803603608081101561036e57600080fd5b508035906001600160a01b0360208201351690604081013515159060600135611373565b34801561039e57600080fd5b50610210600480360360208110156103b557600080fd5b50351515611412565b3480156103ca57600080fd5b506102b3600480360360408110156103e157600080fd5b81359190810190604081016020820135600160201b81111561040257600080fd5b82018360208201111561041457600080fd5b803590602001918460208302840111600160201b8311171561043557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611488945050505050565b34801561047f57600080fd5b506104886114be565b604080519115158252519081900360200190f35b3480156104a857600080fd5b506102b3600480360360a08110156104bf57600080fd5b813591602081013591810190606081016040820135600160201b8111156104e557600080fd5b8201836020820111156104f757600080fd5b803590602001918460208302840111600160201b8311171561051857600080fd5b91935091506001600160a01b0381351690602001356114ce565b34801561053e57600080fd5b506102106004803603602081101561055557600080fd5b50351515611683565b34801561056a57600080fd5b50610210600480360360a081101561058157600080fd5b813591602081013591810190606081016040820135600160201b8111156105a757600080fd5b8201836020820111156105b957600080fd5b803590602001918460208302840111600160201b831117156105da57600080fd5b91935091506001600160a01b0381351690602001356116f9565b34801561060057600080fd5b506102106004803603602081101561061757600080fd5b50356001600160a01b0316611976565b34801561063357600080fd5b506104886119f0565b34801561064857600080fd5b506102b3600480360360c081101561065f57600080fd5b813591602081013591810190606081016040820135600160201b81111561068557600080fd5b82018360208201111561069757600080fd5b803590602001918460208302840111600160201b831117156106b857600080fd5b91935091506001600160a01b038135169060208101359060400135611a00565b3480156106e457600080fd5b50610210611b8f565b3480156106f957600080fd5b50610488611c1f565b34801561070e57600080fd5b506102106004803603602081101561072557600080fd5b50356001600160a01b0316611c2f565b34801561074157600080fd5b506103396004803603606081101561075857600080fd5b5080359060208101359060400135611ca9565b34801561077757600080fd5b506102b3600480360360a081101561078e57600080fd5b813591602081013591810190606081016040820135600160201b8111156107b457600080fd5b8201836020820111156107c657600080fd5b803590602001918460208302840111600160201b831117156107e757600080fd5b91935091506001600160a01b038135169060200135611cb6565b34801561080d57600080fd5b50610816611daf565b604080516001600160a01b039092168252519081900360200190f35b610210600480360360a081101561084857600080fd5b81359190810190604081016020820135600160201b81111561086957600080fd5b82018360208201111561087b57600080fd5b803590602001918460208302840111600160201b8311171561089c57600080fd5b91935091506001600160a01b038135169060208101359060400135611dbe565b3480156108c857600080fd5b506102106121ca565b3480156108dd57600080fd5b506108166122b8565b3480156108f257600080fd5b506103396004803603606081101561090957600080fd5b50803590602081013590604001356122dc565b34801561092857600080fd5b506102106004803603602081101561093f57600080fd5b50356122e9565b34801561095257600080fd5b50610816612346565b34801561096757600080fd5b50610339612355565b34801561097c57600080fd5b50610210600480360360c081101561099357600080fd5b813591602081013591810190606081016040820135600160201b8111156109b957600080fd5b8201836020820111156109cb57600080fd5b803590602001918460208302840111600160201b831117156109ec57600080fd5b91935091506001600160a01b03813516906020810135906040013561235b565b6102b3600480360360a0811015610a2257600080fd5b81359190810190604081016020820135600160201b811115610a4357600080fd5b820183602082011115610a5557600080fd5b803590602001918460208302840111600160201b83111715610a7657600080fd5b91935091506001600160a01b0381351690602081013590604001356126ea565b348015610aa257600080fd5b50610816612aa6565b348015610ab757600080fd5b5061021060048036036020811015610ace57600080fd5b50351515612aca565b348015610ae357600080fd5b50610816612b40565b6102b3600480360360c0811015610b0257600080fd5b81359190810190604081016020820135600160201b811115610b2357600080fd5b820183602082011115610b3557600080fd5b803590602001918460208302840111600160201b83111715610b5657600080fd5b91935091506001600160a01b03813581169160208101359091169060408101359060600135612b4f565b348015610b8c57600080fd5b5061021060048036036020811015610ba357600080fd5b50356001600160a01b031661306b565b348015610bbf57600080fd5b506102b360048036036040811015610bd657600080fd5b81359190810190604081016020820135600160201b811115610bf757600080fd5b820183602082011115610c0957600080fd5b803590602001918460208302840111600160201b83111715610c2a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506130e5945050505050565b348015610c7457600080fd5b5061021060048036036020811015610c8b57600080fd5b5035613112565b348015610c9e57600080fd5b50610cf46004803603610100811015610cb657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356131b0565b60408051938452602084019290925282820152519081900360600190f35b6102b3600480360360a0811015610d2857600080fd5b81359190810190604081016020820135600160201b811115610d4957600080fd5b820183602082011115610d5b57600080fd5b803590602001918460208302840111600160201b83111715610d7c57600080fd5b91935091506001600160a01b0381351690602081013590604001356132e3565b348015610da857600080fd5b5061021060048036036020811015610dbf57600080fd5b50356001600160a01b03166136b1565b610cf4600480360360c0811015610de557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135613797565b348015610e2157600080fd5b50610816613a2a565b610210600480360360c0811015610e4057600080fd5b81359190810190604081016020820135600160201b811115610e6157600080fd5b820183602082011115610e7357600080fd5b803590602001918460208302840111600160201b83111715610e9457600080fd5b91935091506001600160a01b03813581169160208101359091169060408101359060600135613a39565b6102b3600480360360c0811015610ed457600080fd5b81359190810190604081016020820135600160201b811115610ef557600080fd5b820183602082011115610f0757600080fd5b803590602001918460208302840111600160201b83111715610f2857600080fd5b91935091506001600160a01b03813581169160208101359091169060408101359060600135613f3e565b60608242811015610f98576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876000198101818110610fd257fe5b905060200201356001600160a01b03166001600160a01b03161461102b576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b6110897f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061447292505050565b9150878260008151811061109957fe5b602002602001015111156110de5760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b61117c878760008181106110ee57fe5b905060200201356001600160a01b0316336111627f00000000000000000000000000000000000000000000000000000000000000008b8b600081811061113057fe5b905060200201356001600160a01b03168c8c600181811061114d57fe5b905060200201356001600160a01b03166145ac565b8560008151811061116f57fe5b6020026020010151614666565b6111bb828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506147c3915050565b60006111fd836001855103815181106111d057fe5b6020026020010151898960008181106111e557fe5b905060200201356001600160a01b0316600087611373565b9050600061122b828560018751038151811061121557fe5b6020026020010151614a0090919063ffffffff16565b905081156112c8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b50506006546112c892506001600160a01b0316905083614a50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132e57600080fd5b505af1158015611342573d6000803e3d6000fd5b505050506113508782614a50565b505050979650505050505050565b600061136b848484614b48565b949350505050565b6003546000906001600160a01b0385811691161480156113a15750600654600160a01b900460ff1615156001145b156113ae5750600061136b565b600654600160a81b900460ff161515600114156113ed57600183151514156113ed576103e86113de866002614c20565b816113e557fe5b04905061136b565b6005548210611404576103e86113de866001614c20565b6103e86113de866002614c20565b61141a614c83565b6000546001600160a01b0390811691161461146a576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b60068054911515600160b01b0260ff60b01b19909216919091179055565b60606114b57f00000000000000000000000000000000000000000000000000000000000000008484614472565b90505b92915050565b600654600160b01b900460ff1681565b60608142811015611514576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6115727f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c8792505050565b9150868260018451038151811061158557fe5b602002602001015110156115ca5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b611639868660008181106115da57fe5b905060200201356001600160a01b0316336111627f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061161c57fe5b905060200201356001600160a01b03168b8b600181811061114d57fe5b611678828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506147c3915050565b509695505050505050565b61168b614c83565b6000546001600160a01b039081169116146116db576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b60068054911515600160a01b0260ff60a01b19909216919091179055565b804281101561173d576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6117b28585600081811061174d57fe5b905060200201356001600160a01b0316336117ac7f00000000000000000000000000000000000000000000000000000000000000008989600081811061178f57fe5b905060200201356001600160a01b03168a8a600181811061114d57fe5b8a614666565b6000858560001981018181106117c457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561182057600080fd5b505afa158015611834573d6000803e3d6000fd5b505050506040513d602081101561184a57600080fd5b5051604080516020888102828101820190935288825292935061188c929091899189918291850190849080828437600092019190915250889250614dab915050565b8661192f82888860001981018181106118a157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118fd57600080fd5b505afa158015611911573d6000803e3d6000fd5b505050506040513d602081101561192757600080fd5b505190614a00565b101561196c5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b5050505050505050565b61197e614c83565b6000546001600160a01b039081169116146119ce576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600654600160a81b900460ff1681565b60608242811015611a46576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876000198101818110611a8057fe5b905060200201356001600160a01b03166001600160a01b031614611ad9576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b611b377f00000000000000000000000000000000000000000000000000000000000000008a898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c8792505050565b91508782600184510381518110611b4a57fe5b602002602001015110156110de5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b611b97614c83565b6000546001600160a01b03908116911614611be7576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020615859833981519152908390a3600080546001600160a01b0319169055565b600654600160a01b900460ff1681565b611c37614c83565b6000546001600160a01b03908116911614611c87576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600061136b8484846150ad565b60608142811015611cfc576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b611d5a7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061447292505050565b91508682600081518110611d6a57fe5b602002602001015111156115ca5760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b6000546001600160a01b031690565b8142811015611e02576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611e3957fe5b905060200201356001600160a01b03166001600160a01b031614611e92576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b346000611ea682898960018181106111e557fe5b9050600081830390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f0a57600080fd5b505af1158015611f1e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611fa07f00000000000000000000000000000000000000000000000000000000000000008c8c6000818110611f8357fe5b905060200201356001600160a01b03168d8d600181811061114d57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611fe757600080fd5b505af1158015611ffb573d6000803e3d6000fd5b505050506040513d602081101561201157600080fd5b505161201957fe5b60008989600019810181811061202b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561208757600080fd5b505afa15801561209b573d6000803e3d6000fd5b505050506040513d60208110156120b157600080fd5b50516040805160208c810282810182019093528c82529293506120f39290918d918d9182918501908490808284376000920191909152508c9250614dab915050565b821561210f5760065461210f906001600160a01b031684614a50565b8a612180828c8c600019810181811061212457fe5b905060200201356001600160a01b03166001600160a01b03166370a082318c6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118fd57600080fd5b10156121bd5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b5050505050505050505050565b6001546001600160a01b031633146122135760405162461bcd60e51b81526004018080602001828103825260238152602001806158ef6023913960400191505060405180910390fd5b6002544211612269576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061585983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061136b848484615185565b6122f1614c83565b6000546001600160a01b03908116911614612341576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600555565b6006546001600160a01b031681565b60025490565b814281101561239f576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106123d957fe5b905060200201356001600160a01b03166001600160a01b031614612432576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b61248a8686600081811061244257fe5b905060200201356001600160a01b0316336124847f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061161c57fe5b8b614666565b6124c8868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614dab915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561253757600080fd5b505afa15801561254b573d6000803e3d6000fd5b505050506040513d602081101561256157600080fd5b50519050878110156125a45760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b60006125b782898960008181106111e557fe5b905060006125c58383614a00565b90508115612662577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561263357600080fd5b505af1158015612647573d6000803e3d6000fd5b505060065461266292506001600160a01b0316905083614a50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156126c857600080fd5b505af11580156126dc573d6000803e3d6000fd5b505050506121bd8782614a50565b60608242811015612730576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168787600081811061276757fe5b905060200201356001600160a01b03166001600160a01b0316146127c0576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b3460006127ec828a8a60018181106127d457fe5b905060200201356001600160a01b0316600088611373565b9050600081830390506128537f0000000000000000000000000000000000000000000000000000000000000000828c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c8792505050565b94508a8560018751038151811061286657fe5b602002602001015110156128ab5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0866000815181106128e757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561291a57600080fd5b505af115801561292e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6129b07f00000000000000000000000000000000000000000000000000000000000000008d8d600081811061299357fe5b905060200201356001600160a01b03168e8e600181811061114d57fe5b876000815181106129bd57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612a0b57600080fd5b505af1158015612a1f573d6000803e3d6000fd5b505050506040513d6020811015612a3557600080fd5b5051612a3d57fe5b612a7c858b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508d92506147c3915050565b8115612a9857600654612a98906001600160a01b031683614a50565b505050509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b612ad2614c83565b6000546001600160a01b03908116911614612b22576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b60068054911515600160a81b0260ff60a81b19909216919091179055565b6003546001600160a01b031681565b60608242811015612b95576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b336001600160a01b0386161415612be5576040805162461bcd60e51b815260206004820152600f60248201526e29b2b73232b91ea932b332b93932b960891b604482015290519081900360640190fd5b6001600160a01b038516612c2e576040805162461bcd60e51b815260206004820152600b60248201526a2737902932b332b93932b960a91b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031688886000818110612c6557fe5b905060200201356001600160a01b03166001600160a01b031614612cbe576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b346000612cea828b8b6001818110612cd257fe5b905060200201356001600160a01b0316600188611373565b905060008183039050612d517f0000000000000000000000000000000000000000000000000000000000000000828d8d80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c8792505050565b94508b85600187510381518110612d6457fe5b60200260200101511015612da95760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db086600081518110612de557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e1857600080fd5b505af1158015612e2c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eae7f00000000000000000000000000000000000000000000000000000000000000008e8e6000818110612e9157fe5b905060200201356001600160a01b03168f8f600181811061114d57fe5b87600081518110612ebb57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f0957600080fd5b505af1158015612f1d573d6000803e3d6000fd5b505050506040513d6020811015612f3357600080fd5b5051612f3b57fe5b612f7a858c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92506147c3915050565b8115612fa657600654612f9a906001600160a01b03166002845b04614a50565b612fa688600284612f94565b600654600160b01b900460ff1615156001141561305c576004546001600160a01b031663406aea4789348e8e6001818110612fdd57fe5b905060200201356001600160a01b03166040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b505050505b50505050979650505050505050565b613073614c83565b6000546001600160a01b039081169116146130c3576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60606114b57f00000000000000000000000000000000000000000000000000000000000000008484614c87565b61311a614c83565b6000546001600160a01b0390811691161461316a576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020615859833981519152908290a350565b600080600083428110156131f9576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6132078c8c8c8c8c8c61522b565b909450925060006132397f00000000000000000000000000000000000000000000000000000000000000008e8e6145ac565b90506132478d338388614666565b6132538c338387614666565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156132a257600080fd5b505af11580156132b6573d6000803e3d6000fd5b505050506040513d60208110156132cc57600080fd5b5051949d939c50939a509198505050505050505050565b60608242811015613329576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168787600081811061336057fe5b905060200201356001600160a01b03166001600160a01b0316146133b9576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b6134177f00000000000000000000000000000000000000000000000000000000000000008989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061447292505050565b9150348260008151811061342757fe5b6020026020010151111561346c5760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106134a857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156134db57600080fd5b505af11580156134ef573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6135547f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061161c57fe5b8460008151811061356157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156135af57600080fd5b505af11580156135c3573d6000803e3d6000fd5b505050506040513d60208110156135d957600080fd5b50516135e157fe5b613620828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506147c3915050565b60006136478360008151811061363257fe5b6020026020010151898960018181106111e557fe5b9050801561366557600654613665906001600160a01b031682614a50565b8260008151811061367257fe5b602002602001015181340311156136a5576136a533828560008151811061369557fe5b6020026020010151340303614a50565b50509695505050505050565b6136b9614c83565b6000546001600160a01b03908116911614613709576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b6001600160a01b03811661374e5760405162461bcd60e51b81526004018080602001828103825260268152602001806156d26026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061585983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600083428110156137e0576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b61380e8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61522b565b909450925060006138607f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006145ac565b905061386e8b338388614666565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138c957600080fd5b505af11580156138dd573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561395957600080fd5b505af115801561396d573d6000803e3d6000fd5b505050506040513d602081101561398357600080fd5b505161398b57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156139da57600080fd5b505af11580156139ee573d6000803e3d6000fd5b505050506040513d6020811015613a0457600080fd5b5051925034841015613a1c57613a1c33853403614a50565b505096509650969350505050565b6004546001600160a01b031681565b8142811015613a7d576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b336001600160a01b0385161415613acd576040805162461bcd60e51b815260206004820152600f60248201526e29b2b73232b91ea932b332b93932b960891b604482015290519081900360640190fd5b6001600160a01b038416613b15576040805162461bcd60e51b815260206004820152600a6024820152692737a932b332b93932b960b11b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031687876000818110613b4c57fe5b905060200201356001600160a01b03166001600160a01b031614613ba5576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b6000613bd03489896001818110613bb857fe5b905060200201356001600160a01b0316600186611373565b9050600081340390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c3457600080fd5b505af1158015613c48573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb613cad7f00000000000000000000000000000000000000000000000000000000000000008c8c6000818110611f8357fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613cf457600080fd5b505af1158015613d08573d6000803e3d6000fd5b505050506040513d6020811015613d1e57600080fd5b5051613d2657fe5b600089896000198101818110613d3857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613d9457600080fd5b505afa158015613da8573d6000803e3d6000fd5b505050506040513d6020811015613dbe57600080fd5b50516040805160208c810282810182019093528c8252929350613e009290918d918d9182918501908490808284376000920191909152508c9250614dab915050565b8215613e2a57600654613e1e906001600160a01b0316600285612f94565b613e2a87600285612f94565b8a613e3f828c8c600019810181811061212457fe5b1015613e7c5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b600654600160b01b900460ff161515600114156121bd576004546001600160a01b031663406aea4788348d8d6001818110613eb357fe5b905060200201356001600160a01b03166040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b158015613f1957600080fd5b505af1158015613f2d573d6000803e3d6000fd5b505050505050505050505050505050565b60608242811015613f84576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b336001600160a01b0386161415613fd4576040805162461bcd60e51b815260206004820152600f60248201526e29b2b73232b91ea932b332b93932b960891b604482015290519081900360640190fd5b6001600160a01b03851661401d576040805162461bcd60e51b815260206004820152600b60248201526a2737902932b332b93932b960a91b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168888600081811061405457fe5b905060200201356001600160a01b03166001600160a01b0316146140ad576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b61410b7f00000000000000000000000000000000000000000000000000000000000000008a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061447292505050565b9150348260008151811061411b57fe5b602002602001015111156141605760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061419c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156141cf57600080fd5b505af11580156141e3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6142487f00000000000000000000000000000000000000000000000000000000000000008b8b600081811061113057fe5b8460008151811061425557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156142a357600080fd5b505af11580156142b7573d6000803e3d6000fd5b505050506040513d60208110156142cd57600080fd5b50516142d557fe5b614314828989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b92506147c3915050565b60006143538360008151811061432657fe5b60200260200101518a8a600181811061433b57fe5b905060200201356001600160a01b0316600187611373565b9050801561437f57600654614373906001600160a01b0316600283612f94565b61437f86600283612f94565b8260008151811061438c57fe5b602002602001015181340311156143af576143af33828560008151811061369557fe5b600654600160b01b900460ff16151560011415614465576004546001600160a01b031663406aea4787348c8c60018181106143e657fe5b905060200201356001600160a01b03166040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b15801561444c57600080fd5b505af1158015614460573d6000803e3d6000fd5b505050505b5050979650505050505050565b60606002825110156144b9576040805162461bcd60e51b815260206004820152601e6024820152600080516020615932833981519152604482015290519081900360640190fd5b81516001600160401b03811180156144d057600080fd5b506040519080825280602002602001820160405280156144fa578160200160208202803683370190505b509050828160018351038151811061450e57fe5b60209081029190910101528151600019015b80156145a45760008061455d8786600186038151811061453c57fe5b602002602001015187868151811061455057fe5b60200260200101516154bc565b9150915061457f84848151811061457057fe5b602002602001015183836150ad565b84600185038151811061458e57fe5b6020908102919091010152505060001901614520565b509392505050565b60008060006145bb8585615583565b604080516001600160601b0319606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527e81b6f7c41cce7e41709290c343d182e084720d1c2ef10a311fc4e0b1869145609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106146eb5780518252601f1990920191602091820191016146cc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461474d576040519150601f19603f3d011682016040523d82523d6000602084013e614752565b606091505b5091509150818015614780575080511580614780575080806020019051602081101561477d57600080fd5b50515b6147bb5760405162461bcd60e51b81526004018080602001828103825260318152602001806157446031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156149fa576000808483815181106147e157fe5b60200260200101518584600101815181106147f857fe5b60200260200101519150915060006148108383615583565b509050600087856001018151811061482457fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461485257826000614856565b6000835b91509150600060028a5103881061486d57886148ae565b6148ae7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106148a157fe5b60200260200101516145ac565b90506148db7f000000000000000000000000000000000000000000000000000000000000000088886145ac565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614918576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614980578181015183820152602001614968565b50505050905090810190601f1680156149ad5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156149cf57600080fd5b505af11580156149e3573d6000803e3d6000fd5b5050600190990198506147c6975050505050505050565b50505050565b808203828111156114b8576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614a9c5780518252601f199092019160209182019101614a7d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614afe576040519150601f19603f3d011682016040523d82523d6000602084013e614b03565b606091505b5050905080614b435760405162461bcd60e51b81526004018080602001828103825260348152602001806157756034913960400191505060405180910390fd5b505050565b6000808411614b885760405162461bcd60e51b815260040180806020018281038252602b8152602001806158c4602b913960400191505060405180910390fd5b600083118015614b985750600082115b614bd35760405162461bcd60e51b81526004018080602001828103825260288152602001806158116028913960400191505060405180910390fd5b6000614be1856103e5614c20565b90506000614bef8285614c20565b90506000614c0983614c03886103e8614c20565b90615661565b9050808281614c1457fe5b04979650505050505050565b6000811580614c3b57505080820282828281614c3857fe5b04145b6114b8576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b3390565b6060600282511015614cce576040805162461bcd60e51b815260206004820152601e6024820152600080516020615932833981519152604482015290519081900360640190fd5b81516001600160401b0381118015614ce557600080fd5b50604051908082528060200260200182016040528015614d0f578160200160208202803683370190505b5090508281600081518110614d2057fe5b60200260200101818152505060005b60018351038110156145a457600080614d6587868581518110614d4e57fe5b602002602001015187866001018151811061455057fe5b91509150614d87848481518110614d7857fe5b60200260200101518383614b48565b848460010181518110614d9657fe5b60209081029190910101525050600101614d2f565b60005b6001835103811015614b4357600080848381518110614dc957fe5b6020026020010151858460010181518110614de057fe5b6020026020010151915091506000614df88383615583565b5090506000614e287f000000000000000000000000000000000000000000000000000000000000000085856145ac565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614e6957600080fd5b505afa158015614e7d573d6000803e3d6000fd5b505050506040513d6060811015614e9357600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614ec9578284614ecc565b83835b91509150614f21828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118fd57600080fd5b9550614f2e868383614b48565b945050505050600080856001600160a01b0316886001600160a01b031614614f5857826000614f5c565b6000835b91509150600060028c51038a10614f73578a614fa7565b614fa77f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106148a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015615031578181015183820152602001615019565b50505050905090810190601f16801561505e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561508057600080fd5b505af1158015615094573d6000803e3d6000fd5b50506001909b019a50614dae9950505050505050505050565b60008084116150ed5760405162461bcd60e51b815260040180806020018281038252602c815260200180615718602c913960400191505060405180910390fd5b6000831180156150fd5750600082115b6151385760405162461bcd60e51b81526004018080602001828103825260288152602001806158116028913960400191505060405180910390fd5b60006151506103e861514a8688614c20565b90614c20565b905060006151646103e561514a8689614a00565b905061517b600182848161517457fe5b0490615661565b9695505050505050565b60008084116151c55760405162461bcd60e51b81526004018080602001828103825260258152602001806158796025913960400191505060405180910390fd5b6000831180156151d55750600082115b6152105760405162461bcd60e51b81526004018080602001828103825260288152602001806158116028913960400191505060405180910390fd5b8261521b8584614c20565b8161522257fe5b04949350505050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156152b757600080fd5b505afa1580156152cb573d6000803e3d6000fd5b505050506040513d60208110156152e157600080fd5b50516001600160a01b0316141561539f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561537257600080fd5b505af1158015615386573d6000803e3d6000fd5b505050506040513d602081101561539c57600080fd5b50505b6000806153cd7f00000000000000000000000000000000000000000000000000000000000000008b8b6154bc565b915091508160001480156153df575080155b156153ef578793508692506154af565b60006153fc898484615185565b905087811161544f57858110156154445760405162461bcd60e51b81526004018080602001828103825260218152602001806157a96021913960400191505060405180910390fd5b8894509250826154ad565b600061545c898486615185565b90508981111561546857fe5b878110156154a75760405162461bcd60e51b81526004018080602001828103825260218152602001806156b16021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008060006154cb8585615583565b5090506000806154dc8888886145ac565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561551457600080fd5b505afa158015615528573d6000803e3d6000fd5b505050506040513d606081101561553e57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614615571578082615574565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b031614156155d75760405162461bcd60e51b81526004018080602001828103825260258152602001806157ca6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106155f75782846155fa565b83835b90925090506001600160a01b03821661565a576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b808201828110156114b8576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe416e6a69526f757465723a20494e53554646494349454e545f415f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416e6a69526f757465723a204558504952454400000000000000000000000000556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564416e6a69526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553416e6a69526f757465723a204558434553534956455f494e5055545f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c49515549444954594f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54416e6a69526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b416e6a69526f757465723a20494e56414c49445f504154480000000000000000556e697377617056324c6962726172793a20494e56414c49445f504154480000a26469706673582212203ad8bddb2a05fd8cb079f64f8afda5037128f394b350118e23bd760c531458b064736f6c634300060c0033000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be7000000000000000000000000f1277d1ed8ad466beddf92ef448a13266195662100000000000000000000000059650a6e7eda1f5340fff9135824ca82292d8e52
Deployed Bytecode
0x6080604052600436106101d95760003560e01c8062c358b614610217578063054d50d41461030357806312df55641461034b578063192905f1146103925780631f00ca74146103be578063324201211461047357806338ed17391461049c5780635510ece8146105325780635c11d7951461055e57806362faf3fd146105f457806365d64885146106275780636d4928a01461063c578063715018a6146106d8578063808f6cf5146106ed5780638279c7db1461070257806385f8c259146107355780638803dbee1461076b5780638da5cb5b146108015780639f01cd2e14610832578063a69df4b5146108bc578063ad5c4648146108d1578063ad615dec146108e6578063afbd885d1461091c578063b3f0067414610946578063b6c523241461095b578063b90e0bf614610970578063bd60833814610a0c578063c45a015514610a96578063c8541b9d14610aab578063ca613e6914610ad7578063cb03bca714610aec578063cc377ae014610b80578063d06ca61f14610bb3578063dd46706414610c68578063e8e3370014610c92578063ee10b6ec14610d12578063f2fde38b14610d9c578063f305d71914610dcf578063f4f388ba14610e15578063f68d51fb14610e2a578063fa329acc14610ebe57610212565b3661021257336001600160a01b037f000000000000000000000000f1277d1ed8ad466beddf92ef448a132661956621161461021057fe5b005b600080fd5b34801561022357600080fd5b506102b3600480360360c081101561023a57600080fd5b813591602081013591810190606081016040820135600160201b81111561026057600080fd5b82018360208201111561027257600080fd5b803590602001918460208302840111600160201b8311171561029357600080fd5b91935091506001600160a01b038135169060208101359060400135610f52565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102ef5781810151838201526020016102d7565b505050509050019250505060405180910390f35b34801561030f57600080fd5b506103396004803603606081101561032657600080fd5b508035906020810135906040013561135e565b60408051918252519081900360200190f35b34801561035757600080fd5b506103396004803603608081101561036e57600080fd5b508035906001600160a01b0360208201351690604081013515159060600135611373565b34801561039e57600080fd5b50610210600480360360208110156103b557600080fd5b50351515611412565b3480156103ca57600080fd5b506102b3600480360360408110156103e157600080fd5b81359190810190604081016020820135600160201b81111561040257600080fd5b82018360208201111561041457600080fd5b803590602001918460208302840111600160201b8311171561043557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611488945050505050565b34801561047f57600080fd5b506104886114be565b604080519115158252519081900360200190f35b3480156104a857600080fd5b506102b3600480360360a08110156104bf57600080fd5b813591602081013591810190606081016040820135600160201b8111156104e557600080fd5b8201836020820111156104f757600080fd5b803590602001918460208302840111600160201b8311171561051857600080fd5b91935091506001600160a01b0381351690602001356114ce565b34801561053e57600080fd5b506102106004803603602081101561055557600080fd5b50351515611683565b34801561056a57600080fd5b50610210600480360360a081101561058157600080fd5b813591602081013591810190606081016040820135600160201b8111156105a757600080fd5b8201836020820111156105b957600080fd5b803590602001918460208302840111600160201b831117156105da57600080fd5b91935091506001600160a01b0381351690602001356116f9565b34801561060057600080fd5b506102106004803603602081101561061757600080fd5b50356001600160a01b0316611976565b34801561063357600080fd5b506104886119f0565b34801561064857600080fd5b506102b3600480360360c081101561065f57600080fd5b813591602081013591810190606081016040820135600160201b81111561068557600080fd5b82018360208201111561069757600080fd5b803590602001918460208302840111600160201b831117156106b857600080fd5b91935091506001600160a01b038135169060208101359060400135611a00565b3480156106e457600080fd5b50610210611b8f565b3480156106f957600080fd5b50610488611c1f565b34801561070e57600080fd5b506102106004803603602081101561072557600080fd5b50356001600160a01b0316611c2f565b34801561074157600080fd5b506103396004803603606081101561075857600080fd5b5080359060208101359060400135611ca9565b34801561077757600080fd5b506102b3600480360360a081101561078e57600080fd5b813591602081013591810190606081016040820135600160201b8111156107b457600080fd5b8201836020820111156107c657600080fd5b803590602001918460208302840111600160201b831117156107e757600080fd5b91935091506001600160a01b038135169060200135611cb6565b34801561080d57600080fd5b50610816611daf565b604080516001600160a01b039092168252519081900360200190f35b610210600480360360a081101561084857600080fd5b81359190810190604081016020820135600160201b81111561086957600080fd5b82018360208201111561087b57600080fd5b803590602001918460208302840111600160201b8311171561089c57600080fd5b91935091506001600160a01b038135169060208101359060400135611dbe565b3480156108c857600080fd5b506102106121ca565b3480156108dd57600080fd5b506108166122b8565b3480156108f257600080fd5b506103396004803603606081101561090957600080fd5b50803590602081013590604001356122dc565b34801561092857600080fd5b506102106004803603602081101561093f57600080fd5b50356122e9565b34801561095257600080fd5b50610816612346565b34801561096757600080fd5b50610339612355565b34801561097c57600080fd5b50610210600480360360c081101561099357600080fd5b813591602081013591810190606081016040820135600160201b8111156109b957600080fd5b8201836020820111156109cb57600080fd5b803590602001918460208302840111600160201b831117156109ec57600080fd5b91935091506001600160a01b03813516906020810135906040013561235b565b6102b3600480360360a0811015610a2257600080fd5b81359190810190604081016020820135600160201b811115610a4357600080fd5b820183602082011115610a5557600080fd5b803590602001918460208302840111600160201b83111715610a7657600080fd5b91935091506001600160a01b0381351690602081013590604001356126ea565b348015610aa257600080fd5b50610816612aa6565b348015610ab757600080fd5b5061021060048036036020811015610ace57600080fd5b50351515612aca565b348015610ae357600080fd5b50610816612b40565b6102b3600480360360c0811015610b0257600080fd5b81359190810190604081016020820135600160201b811115610b2357600080fd5b820183602082011115610b3557600080fd5b803590602001918460208302840111600160201b83111715610b5657600080fd5b91935091506001600160a01b03813581169160208101359091169060408101359060600135612b4f565b348015610b8c57600080fd5b5061021060048036036020811015610ba357600080fd5b50356001600160a01b031661306b565b348015610bbf57600080fd5b506102b360048036036040811015610bd657600080fd5b81359190810190604081016020820135600160201b811115610bf757600080fd5b820183602082011115610c0957600080fd5b803590602001918460208302840111600160201b83111715610c2a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506130e5945050505050565b348015610c7457600080fd5b5061021060048036036020811015610c8b57600080fd5b5035613112565b348015610c9e57600080fd5b50610cf46004803603610100811015610cb657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356131b0565b60408051938452602084019290925282820152519081900360600190f35b6102b3600480360360a0811015610d2857600080fd5b81359190810190604081016020820135600160201b811115610d4957600080fd5b820183602082011115610d5b57600080fd5b803590602001918460208302840111600160201b83111715610d7c57600080fd5b91935091506001600160a01b0381351690602081013590604001356132e3565b348015610da857600080fd5b5061021060048036036020811015610dbf57600080fd5b50356001600160a01b03166136b1565b610cf4600480360360c0811015610de557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135613797565b348015610e2157600080fd5b50610816613a2a565b610210600480360360c0811015610e4057600080fd5b81359190810190604081016020820135600160201b811115610e6157600080fd5b820183602082011115610e7357600080fd5b803590602001918460208302840111600160201b83111715610e9457600080fd5b91935091506001600160a01b03813581169160208101359091169060408101359060600135613a39565b6102b3600480360360c0811015610ed457600080fd5b81359190810190604081016020820135600160201b811115610ef557600080fd5b820183602082011115610f0757600080fd5b803590602001918460208302840111600160201b83111715610f2857600080fd5b91935091506001600160a01b03813581169160208101359091169060408101359060600135613f3e565b60608242811015610f98576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566211687876000198101818110610fd257fe5b905060200201356001600160a01b03166001600160a01b03161461102b576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b6110897f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061447292505050565b9150878260008151811061109957fe5b602002602001015111156110de5760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b61117c878760008181106110ee57fe5b905060200201356001600160a01b0316336111627f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78b8b600081811061113057fe5b905060200201356001600160a01b03168c8c600181811061114d57fe5b905060200201356001600160a01b03166145ac565b8560008151811061116f57fe5b6020026020010151614666565b6111bb828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506147c3915050565b60006111fd836001855103815181106111d057fe5b6020026020010151898960008181106111e557fe5b905060200201356001600160a01b0316600087611373565b9050600061122b828560018751038151811061121557fe5b6020026020010151614a0090919063ffffffff16565b905081156112c8577f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b50506006546112c892506001600160a01b0316905083614a50565b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132e57600080fd5b505af1158015611342573d6000803e3d6000fd5b505050506113508782614a50565b505050979650505050505050565b600061136b848484614b48565b949350505050565b6003546000906001600160a01b0385811691161480156113a15750600654600160a01b900460ff1615156001145b156113ae5750600061136b565b600654600160a81b900460ff161515600114156113ed57600183151514156113ed576103e86113de866002614c20565b816113e557fe5b04905061136b565b6005548210611404576103e86113de866001614c20565b6103e86113de866002614c20565b61141a614c83565b6000546001600160a01b0390811691161461146a576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b60068054911515600160b01b0260ff60b01b19909216919091179055565b60606114b57f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78484614472565b90505b92915050565b600654600160b01b900460ff1681565b60608142811015611514576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6115727f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be789888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c8792505050565b9150868260018451038151811061158557fe5b602002602001015110156115ca5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b611639868660008181106115da57fe5b905060200201356001600160a01b0316336111627f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78a8a600081811061161c57fe5b905060200201356001600160a01b03168b8b600181811061114d57fe5b611678828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506147c3915050565b509695505050505050565b61168b614c83565b6000546001600160a01b039081169116146116db576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b60068054911515600160a01b0260ff60a01b19909216919091179055565b804281101561173d576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6117b28585600081811061174d57fe5b905060200201356001600160a01b0316336117ac7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78989600081811061178f57fe5b905060200201356001600160a01b03168a8a600181811061114d57fe5b8a614666565b6000858560001981018181106117c457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561182057600080fd5b505afa158015611834573d6000803e3d6000fd5b505050506040513d602081101561184a57600080fd5b5051604080516020888102828101820190935288825292935061188c929091899189918291850190849080828437600092019190915250889250614dab915050565b8661192f82888860001981018181106118a157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118fd57600080fd5b505afa158015611911573d6000803e3d6000fd5b505050506040513d602081101561192757600080fd5b505190614a00565b101561196c5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b5050505050505050565b61197e614c83565b6000546001600160a01b039081169116146119ce576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600654600160a81b900460ff1681565b60608242811015611a46576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566211687876000198101818110611a8057fe5b905060200201356001600160a01b03166001600160a01b031614611ad9576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b611b377f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78a898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c8792505050565b91508782600184510381518110611b4a57fe5b602002602001015110156110de5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b611b97614c83565b6000546001600160a01b03908116911614611be7576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020615859833981519152908390a3600080546001600160a01b0319169055565b600654600160a01b900460ff1681565b611c37614c83565b6000546001600160a01b03908116911614611c87576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600061136b8484846150ad565b60608142811015611cfc576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b611d5a7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061447292505050565b91508682600081518110611d6a57fe5b602002602001015111156115ca5760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b6000546001600160a01b031690565b8142811015611e02576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031686866000818110611e3957fe5b905060200201356001600160a01b03166001600160a01b031614611e92576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b346000611ea682898960018181106111e557fe5b9050600081830390507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f0a57600080fd5b505af1158015611f1e573d6000803e3d6000fd5b50505050507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663a9059cbb611fa07f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78c8c6000818110611f8357fe5b905060200201356001600160a01b03168d8d600181811061114d57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611fe757600080fd5b505af1158015611ffb573d6000803e3d6000fd5b505050506040513d602081101561201157600080fd5b505161201957fe5b60008989600019810181811061202b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561208757600080fd5b505afa15801561209b573d6000803e3d6000fd5b505050506040513d60208110156120b157600080fd5b50516040805160208c810282810182019093528c82529293506120f39290918d918d9182918501908490808284376000920191909152508c9250614dab915050565b821561210f5760065461210f906001600160a01b031684614a50565b8a612180828c8c600019810181811061212457fe5b905060200201356001600160a01b03166001600160a01b03166370a082318c6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118fd57600080fd5b10156121bd5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b5050505050505050505050565b6001546001600160a01b031633146122135760405162461bcd60e51b81526004018080602001828103825260238152602001806158ef6023913960400191505060405180910390fd5b6002544211612269576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061585983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a13266195662181565b600061136b848484615185565b6122f1614c83565b6000546001600160a01b03908116911614612341576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600555565b6006546001600160a01b031681565b60025490565b814281101561239f576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000f1277d1ed8ad466beddf92ef448a13266195662116868660001981018181106123d957fe5b905060200201356001600160a01b03166001600160a01b031614612432576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b61248a8686600081811061244257fe5b905060200201356001600160a01b0316336124847f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78a8a600081811061161c57fe5b8b614666565b6124c8868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614dab915050565b60007f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561253757600080fd5b505afa15801561254b573d6000803e3d6000fd5b505050506040513d602081101561256157600080fd5b50519050878110156125a45760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b60006125b782898960008181106111e557fe5b905060006125c58383614a00565b90508115612662577f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561263357600080fd5b505af1158015612647573d6000803e3d6000fd5b505060065461266292506001600160a01b0316905083614a50565b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156126c857600080fd5b505af11580156126dc573d6000803e3d6000fd5b505050506121bd8782614a50565b60608242811015612730576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b03168787600081811061276757fe5b905060200201356001600160a01b03166001600160a01b0316146127c0576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b3460006127ec828a8a60018181106127d457fe5b905060200201356001600160a01b0316600088611373565b9050600081830390506128537f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be7828c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c8792505050565b94508a8560018751038151811061286657fe5b602002602001015110156128ab5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663d0e30db0866000815181106128e757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561291a57600080fd5b505af115801561292e573d6000803e3d6000fd5b50505050507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663a9059cbb6129b07f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78d8d600081811061299357fe5b905060200201356001600160a01b03168e8e600181811061114d57fe5b876000815181106129bd57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612a0b57600080fd5b505af1158015612a1f573d6000803e3d6000fd5b505050506040513d6020811015612a3557600080fd5b5051612a3d57fe5b612a7c858b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508d92506147c3915050565b8115612a9857600654612a98906001600160a01b031683614a50565b505050509695505050505050565b7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be781565b612ad2614c83565b6000546001600160a01b03908116911614612b22576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b60068054911515600160a81b0260ff60a81b19909216919091179055565b6003546001600160a01b031681565b60608242811015612b95576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b336001600160a01b0386161415612be5576040805162461bcd60e51b815260206004820152600f60248201526e29b2b73232b91ea932b332b93932b960891b604482015290519081900360640190fd5b6001600160a01b038516612c2e576040805162461bcd60e51b815260206004820152600b60248201526a2737902932b332b93932b960a91b604482015290519081900360640190fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031688886000818110612c6557fe5b905060200201356001600160a01b03166001600160a01b031614612cbe576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b346000612cea828b8b6001818110612cd257fe5b905060200201356001600160a01b0316600188611373565b905060008183039050612d517f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be7828d8d80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c8792505050565b94508b85600187510381518110612d6457fe5b60200260200101511015612da95760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663d0e30db086600081518110612de557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e1857600080fd5b505af1158015612e2c573d6000803e3d6000fd5b50505050507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663a9059cbb612eae7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78e8e6000818110612e9157fe5b905060200201356001600160a01b03168f8f600181811061114d57fe5b87600081518110612ebb57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f0957600080fd5b505af1158015612f1d573d6000803e3d6000fd5b505050506040513d6020811015612f3357600080fd5b5051612f3b57fe5b612f7a858c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92506147c3915050565b8115612fa657600654612f9a906001600160a01b03166002845b04614a50565b612fa688600284612f94565b600654600160b01b900460ff1615156001141561305c576004546001600160a01b031663406aea4789348e8e6001818110612fdd57fe5b905060200201356001600160a01b03166040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b505050505b50505050979650505050505050565b613073614c83565b6000546001600160a01b039081169116146130c3576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60606114b57f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78484614c87565b61311a614c83565b6000546001600160a01b0390811691161461316a576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020615859833981519152908290a350565b600080600083428110156131f9576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b6132078c8c8c8c8c8c61522b565b909450925060006132397f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78e8e6145ac565b90506132478d338388614666565b6132538c338387614666565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156132a257600080fd5b505af11580156132b6573d6000803e3d6000fd5b505050506040513d60208110156132cc57600080fd5b5051949d939c50939a509198505050505050505050565b60608242811015613329576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b03168787600081811061336057fe5b905060200201356001600160a01b03166001600160a01b0316146133b9576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b6134177f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061447292505050565b9150348260008151811061342757fe5b6020026020010151111561346c5760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663d0e30db0836000815181106134a857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156134db57600080fd5b505af11580156134ef573d6000803e3d6000fd5b50505050507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663a9059cbb6135547f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78a8a600081811061161c57fe5b8460008151811061356157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156135af57600080fd5b505af11580156135c3573d6000803e3d6000fd5b505050506040513d60208110156135d957600080fd5b50516135e157fe5b613620828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506147c3915050565b60006136478360008151811061363257fe5b6020026020010151898960018181106111e557fe5b9050801561366557600654613665906001600160a01b031682614a50565b8260008151811061367257fe5b602002602001015181340311156136a5576136a533828560008151811061369557fe5b6020026020010151340303614a50565b50509695505050505050565b6136b9614c83565b6000546001600160a01b03908116911614613709576040805162461bcd60e51b81526020600482018190526024820152600080516020615839833981519152604482015290519081900360640190fd5b6001600160a01b03811661374e5760405162461bcd60e51b81526004018080602001828103825260268152602001806156d26026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061585983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600083428110156137e0576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b61380e8a7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566218b348c8c61522b565b909450925060006138607f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78c7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216145ac565b905061386e8b338388614666565b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138c957600080fd5b505af11580156138dd573d6000803e3d6000fd5b50505050507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561395957600080fd5b505af115801561396d573d6000803e3d6000fd5b505050506040513d602081101561398357600080fd5b505161398b57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156139da57600080fd5b505af11580156139ee573d6000803e3d6000fd5b505050506040513d6020811015613a0457600080fd5b5051925034841015613a1c57613a1c33853403614a50565b505096509650969350505050565b6004546001600160a01b031681565b8142811015613a7d576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b336001600160a01b0385161415613acd576040805162461bcd60e51b815260206004820152600f60248201526e29b2b73232b91ea932b332b93932b960891b604482015290519081900360640190fd5b6001600160a01b038416613b15576040805162461bcd60e51b815260206004820152600a6024820152692737a932b332b93932b960b11b604482015290519081900360640190fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031687876000818110613b4c57fe5b905060200201356001600160a01b03166001600160a01b031614613ba5576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b6000613bd03489896001818110613bb857fe5b905060200201356001600160a01b0316600186611373565b9050600081340390507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c3457600080fd5b505af1158015613c48573d6000803e3d6000fd5b50505050507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663a9059cbb613cad7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78c8c6000818110611f8357fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613cf457600080fd5b505af1158015613d08573d6000803e3d6000fd5b505050506040513d6020811015613d1e57600080fd5b5051613d2657fe5b600089896000198101818110613d3857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613d9457600080fd5b505afa158015613da8573d6000803e3d6000fd5b505050506040513d6020811015613dbe57600080fd5b50516040805160208c810282810182019093528c8252929350613e009290918d918d9182918501908490808284376000920191909152508c9250614dab915050565b8215613e2a57600654613e1e906001600160a01b0316600285612f94565b613e2a87600285612f94565b8a613e3f828c8c600019810181811061212457fe5b1015613e7c5760405162461bcd60e51b815260040180806020018281038252602681526020018061589e6026913960400191505060405180910390fd5b600654600160b01b900460ff161515600114156121bd576004546001600160a01b031663406aea4788348d8d6001818110613eb357fe5b905060200201356001600160a01b03166040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b158015613f1957600080fd5b505af1158015613f2d573d6000803e3d6000fd5b505050505050505050505050505050565b60608242811015613f84576040805162461bcd60e51b815260206004820152601360248201526000805160206156f8833981519152604482015290519081900360640190fd5b336001600160a01b0386161415613fd4576040805162461bcd60e51b815260206004820152600f60248201526e29b2b73232b91ea932b332b93932b960891b604482015290519081900360640190fd5b6001600160a01b03851661401d576040805162461bcd60e51b815260206004820152600b60248201526a2737902932b332b93932b960a91b604482015290519081900360640190fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b03168888600081811061405457fe5b905060200201356001600160a01b03166001600160a01b0316146140ad576040805162461bcd60e51b81526020600482015260186024820152600080516020615912833981519152604482015290519081900360640190fd5b61410b7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061447292505050565b9150348260008151811061411b57fe5b602002602001015111156141605760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b7f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663d0e30db08360008151811061419c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156141cf57600080fd5b505af11580156141e3573d6000803e3d6000fd5b50505050507f000000000000000000000000f1277d1ed8ad466beddf92ef448a1326619566216001600160a01b031663a9059cbb6142487f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78b8b600081811061113057fe5b8460008151811061425557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156142a357600080fd5b505af11580156142b7573d6000803e3d6000fd5b505050506040513d60208110156142cd57600080fd5b50516142d557fe5b614314828989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b92506147c3915050565b60006143538360008151811061432657fe5b60200260200101518a8a600181811061433b57fe5b905060200201356001600160a01b0316600187611373565b9050801561437f57600654614373906001600160a01b0316600283612f94565b61437f86600283612f94565b8260008151811061438c57fe5b602002602001015181340311156143af576143af33828560008151811061369557fe5b600654600160b01b900460ff16151560011415614465576004546001600160a01b031663406aea4787348c8c60018181106143e657fe5b905060200201356001600160a01b03166040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b15801561444c57600080fd5b505af1158015614460573d6000803e3d6000fd5b505050505b5050979650505050505050565b60606002825110156144b9576040805162461bcd60e51b815260206004820152601e6024820152600080516020615932833981519152604482015290519081900360640190fd5b81516001600160401b03811180156144d057600080fd5b506040519080825280602002602001820160405280156144fa578160200160208202803683370190505b509050828160018351038151811061450e57fe5b60209081029190910101528151600019015b80156145a45760008061455d8786600186038151811061453c57fe5b602002602001015187868151811061455057fe5b60200260200101516154bc565b9150915061457f84848151811061457057fe5b602002602001015183836150ad565b84600185038151811061458e57fe5b6020908102919091010152505060001901614520565b509392505050565b60008060006145bb8585615583565b604080516001600160601b0319606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527e81b6f7c41cce7e41709290c343d182e084720d1c2ef10a311fc4e0b1869145609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106146eb5780518252601f1990920191602091820191016146cc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461474d576040519150601f19603f3d011682016040523d82523d6000602084013e614752565b606091505b5091509150818015614780575080511580614780575080806020019051602081101561477d57600080fd5b50515b6147bb5760405162461bcd60e51b81526004018080602001828103825260318152602001806157446031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156149fa576000808483815181106147e157fe5b60200260200101518584600101815181106147f857fe5b60200260200101519150915060006148108383615583565b509050600087856001018151811061482457fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461485257826000614856565b6000835b91509150600060028a5103881061486d57886148ae565b6148ae7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be7878c8b600201815181106148a157fe5b60200260200101516145ac565b90506148db7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be788886145ac565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614918576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614980578181015183820152602001614968565b50505050905090810190601f1680156149ad5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156149cf57600080fd5b505af11580156149e3573d6000803e3d6000fd5b5050600190990198506147c6975050505050505050565b50505050565b808203828111156114b8576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614a9c5780518252601f199092019160209182019101614a7d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614afe576040519150601f19603f3d011682016040523d82523d6000602084013e614b03565b606091505b5050905080614b435760405162461bcd60e51b81526004018080602001828103825260348152602001806157756034913960400191505060405180910390fd5b505050565b6000808411614b885760405162461bcd60e51b815260040180806020018281038252602b8152602001806158c4602b913960400191505060405180910390fd5b600083118015614b985750600082115b614bd35760405162461bcd60e51b81526004018080602001828103825260288152602001806158116028913960400191505060405180910390fd5b6000614be1856103e5614c20565b90506000614bef8285614c20565b90506000614c0983614c03886103e8614c20565b90615661565b9050808281614c1457fe5b04979650505050505050565b6000811580614c3b57505080820282828281614c3857fe5b04145b6114b8576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b3390565b6060600282511015614cce576040805162461bcd60e51b815260206004820152601e6024820152600080516020615932833981519152604482015290519081900360640190fd5b81516001600160401b0381118015614ce557600080fd5b50604051908082528060200260200182016040528015614d0f578160200160208202803683370190505b5090508281600081518110614d2057fe5b60200260200101818152505060005b60018351038110156145a457600080614d6587868581518110614d4e57fe5b602002602001015187866001018151811061455057fe5b91509150614d87848481518110614d7857fe5b60200260200101518383614b48565b848460010181518110614d9657fe5b60209081029190910101525050600101614d2f565b60005b6001835103811015614b4357600080848381518110614dc957fe5b6020026020010151858460010181518110614de057fe5b6020026020010151915091506000614df88383615583565b5090506000614e287f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be785856145ac565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614e6957600080fd5b505afa158015614e7d573d6000803e3d6000fd5b505050506040513d6060811015614e9357600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614ec9578284614ecc565b83835b91509150614f21828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118fd57600080fd5b9550614f2e868383614b48565b945050505050600080856001600160a01b0316886001600160a01b031614614f5857826000614f5c565b6000835b91509150600060028c51038a10614f73578a614fa7565b614fa77f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be7898e8d600201815181106148a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015615031578181015183820152602001615019565b50505050905090810190601f16801561505e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561508057600080fd5b505af1158015615094573d6000803e3d6000fd5b50506001909b019a50614dae9950505050505050505050565b60008084116150ed5760405162461bcd60e51b815260040180806020018281038252602c815260200180615718602c913960400191505060405180910390fd5b6000831180156150fd5750600082115b6151385760405162461bcd60e51b81526004018080602001828103825260288152602001806158116028913960400191505060405180910390fd5b60006151506103e861514a8688614c20565b90614c20565b905060006151646103e561514a8689614a00565b905061517b600182848161517457fe5b0490615661565b9695505050505050565b60008084116151c55760405162461bcd60e51b81526004018080602001828103825260258152602001806158796025913960400191505060405180910390fd5b6000831180156151d55750600082115b6152105760405162461bcd60e51b81526004018080602001828103825260288152602001806158116028913960400191505060405180910390fd5b8261521b8584614c20565b8161522257fe5b04949350505050565b60008060006001600160a01b03167f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be76001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156152b757600080fd5b505afa1580156152cb573d6000803e3d6000fd5b505050506040513d60208110156152e157600080fd5b50516001600160a01b0316141561539f577f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be76001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561537257600080fd5b505af1158015615386573d6000803e3d6000fd5b505050506040513d602081101561539c57600080fd5b50505b6000806153cd7f000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be78b8b6154bc565b915091508160001480156153df575080155b156153ef578793508692506154af565b60006153fc898484615185565b905087811161544f57858110156154445760405162461bcd60e51b81526004018080602001828103825260218152602001806157a96021913960400191505060405180910390fd5b8894509250826154ad565b600061545c898486615185565b90508981111561546857fe5b878110156154a75760405162461bcd60e51b81526004018080602001828103825260218152602001806156b16021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008060006154cb8585615583565b5090506000806154dc8888886145ac565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561551457600080fd5b505afa158015615528573d6000803e3d6000fd5b505050506040513d606081101561553e57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614615571578082615574565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b031614156155d75760405162461bcd60e51b81526004018080602001828103825260258152602001806157ca6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106155f75782846155fa565b83835b90925090506001600160a01b03821661565a576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b808201828110156114b8576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe416e6a69526f757465723a20494e53554646494349454e545f415f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416e6a69526f757465723a204558504952454400000000000000000000000000556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564416e6a69526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553416e6a69526f757465723a204558434553534956455f494e5055545f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c49515549444954594f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54416e6a69526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b416e6a69526f757465723a20494e56414c49445f504154480000000000000000556e697377617056324c6962726172793a20494e56414c49445f504154480000a26469706673582212203ad8bddb2a05fd8cb079f64f8afda5037128f394b350118e23bd760c531458b064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be7000000000000000000000000f1277d1ed8ad466beddf92ef448a13266195662100000000000000000000000059650a6e7eda1f5340fff9135824ca82292d8e52
-----Decoded View---------------
Arg [0] : _factory (address): 0xc1602403cE78C5bf227442D3C2f18e4752A74be7
Arg [1] : _WETH (address): 0xf1277d1Ed8AD466beddF92ef448A132661956621
Arg [2] : _anji (address): 0x59650A6E7eDA1f5340fFF9135824cA82292D8e52
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c1602403ce78c5bf227442d3c2f18e4752a74be7
Arg [1] : 000000000000000000000000f1277d1ed8ad466beddf92ef448a132661956621
Arg [2] : 00000000000000000000000059650a6e7eda1f5340fff9135824ca82292d8e52
Deployed Bytecode Sourcemap
17629:21258:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18450:10;-1:-1:-1;;;;;18464:4:0;18450:18;;18443:26;;;;17629:21258;;;;;27345:1113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27345:1113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27345:1113:0;;;;;;;;;;;;-1:-1:-1;27345:1113:0;-1:-1:-1;;;;;;27345:1113:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37831:262;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37831:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19336:499;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19336:499:0;;;-1:-1:-1;;;;;19336:499:0;;;;;;;;;;;;;;;;;:::i;19099:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19099:109:0;;;;:::i;38631:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38631:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38631:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38631:253:0;;-1:-1:-1;38631:253:0;;-1:-1:-1;;;;;38631:253:0:i;18035:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;23829:623;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23829:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23829:623:0;;;;;;;;;;;;-1:-1:-1;23829:623:0;-1:-1:-1;;;;;;23829:623:0;;;;;;;;:::i;18871:85::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18871:85:0;;;;:::i;33330:709::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33330:709:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33330:709:0;;;;;;;;;;;;-1:-1:-1;33330:709:0;-1:-1:-1;;;;;;33330:709:0;;;;;;;;:::i;18540:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18540:87:0;-1:-1:-1;;;;;18540:87:0;;:::i;17987:41::-;;;;;;;;;;;;;:::i;28464:1128::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28464:1128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28464:1128:0;;;;;;;;;;;;-1:-1:-1;28464:1128:0;-1:-1:-1;;;;;;28464:1128:0;;;;;;;;;;;;;:::i;16108:148::-;;;;;;;;;;;;;:::i;17954:26::-;;;;;;;;;;;;;:::i;18635:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18635:112:0;-1:-1:-1;;;;;18635:112:0;;:::i;38101:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38101:261:0;;;;;;;;;;;;:::i;24458:601::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24458:601:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24458:601:0;;;;;;;;;;;;-1:-1:-1;24458:601:0;-1:-1:-1;;;;;;24458:601:0;;;;;;;;:::i;15466:79::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15466:79:0;;;;;;;;;;;;;;34045:1069;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34045:1069:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34045:1069:0;;;;;;;;;;;;-1:-1:-1;34045:1069:0;-1:-1:-1;;;;;;34045:1069:0;;;;;;;;;;;;;:::i;17163:341::-;;;;;;;;;;;;;:::i;17776:38::-;;;;;;;;;;;;;:::i;37635:188::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37635:188:0;;;;;;;;;;;;:::i;18755:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18755:108:0;;:::i;17921:26::-;;;;;;;;;;;;;:::i;16700:89::-;;;;;;;;;;;;;:::i;36468:1123::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36468:1123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36468:1123:0;;;;;;;;;;;;-1:-1:-1;36468:1123:0;-1:-1:-1;;;;;;36468:1123:0;;;;;;;;;;;;;:::i;25065:952::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25065:952:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25065:952:0;;;;;;;;;;;;-1:-1:-1;25065:952:0;-1:-1:-1;;;;;;25065:952:0;;;;;;;;;;;;;:::i;17728:41::-;;;;;;;;;;;;;:::i;18964:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18964:127:0;;;;:::i;17823:19::-;;;;;;;;;;;;;:::i;26025:1310::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26025:1310:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26025:1310:0;;;;;;;;;;;;-1:-1:-1;26025:1310:0;-1:-1:-1;;;;;;26025:1310:0;;;;;;;;;;;;;;;;;;;;;;:::i;19216:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19216:112:0;-1:-1:-1;;;;;19216:112:0;;:::i;38370:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38370:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38370:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38370:253:0;;-1:-1:-1;38370:253:0;;-1:-1:-1;;;;;38370:253:0:i;16865:226::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16865:226:0;;:::i;21261:738::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21261:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;29598:1000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29598:1000:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29598:1000:0;;;;;;;;;;;;-1:-1:-1;29598:1000:0;-1:-1:-1;;;;;;29598:1000:0;;;;;;;;;;;;;:::i;16411:281::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16411:281:0;-1:-1:-1;;;;;16411:281:0;;:::i;22005:974::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22005:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17849:27::-;;;;;;;;;;;;;:::i;35122:1338::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35122:1338:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35122:1338:0;;;;;;;;;;;;-1:-1:-1;35122:1338:0;-1:-1:-1;;;;;;35122:1338:0;;;;;;;;;;;;;;;;;;;;;;:::i;30606:1357::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30606:1357:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30606:1357:0;;;;;;;;;;;;-1:-1:-1;30606:1357:0;-1:-1:-1;;;;;;30606:1357:0;;;;;;;;;;;;;;;;;;;;;;:::i;27345:1113::-;27572:21;27544:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27644:4:0::1;27619:29;:4:::0;;-1:-1:-1;;27624:15:0;;27619:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27619:21:0::1;-1:-1:-1::0;;;;;27619:29:0::1;;27611:66;;;::::0;;-1:-1:-1;;;27611:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27611:66:0;;;;;;;;;;;;;::::1;;27698:55;27728:7;27737:9;27748:4;;27698:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27698:29:0::1;::::0;-1:-1:-1;;;27698:55:0:i:1;:::-;27688:65;;27786:11;27772:7;27780:1;27772:10;;;;;;;;;;;;;;:25;;27764:72;;;;-1:-1:-1::0;;;27764:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27847:141;27893:4;;27898:1;27893:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27893:7:0::1;27902:10;27914:51;27939:7;27948:4;;27953:1;27948:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27948:7:0::1;27957:4;;27962:1;27957:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27957:7:0::1;27914:24;:51::i;:::-;27967:7;27975:1;27967:10;;;;;;;;;;;;;;27847:31;:141::i;:::-;27999:35;28005:7;28014:4;;27999:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28028:4:0::1;::::0;-1:-1:-1;27999:5:0::1;::::0;-1:-1:-1;;27999:35:0:i:1;:::-;28047:8;28058:59;28069:7;28094:1;28077:7;:14;:18;28069:27;;;;;;;;;;;;;;28098:4;;28103:1;28098:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28098:7:0::1;28106:5;28113:3;28058:10;:59::i;:::-;28047:70;;28128:18;28149:36;28181:3;28149:7;28174:1;28157:7;:14;:18;28149:27;;;;;;;;;;;;;;:31;;:36;;;;:::i;:::-;28128:57:::0;-1:-1:-1;28210:7:0;;28206:127:::1;;28239:4;-1:-1:-1::0;;;;;28233:20:0::1;;28254:3;28233:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28304:11:0::1;::::0;28273:48:::1;::::0;-1:-1:-1;;;;;;28304:11:0::1;::::0;-1:-1:-1;28317:3:0;28273:30:::1;:48::i;:::-;28351:4;-1:-1:-1::0;;;;;28345:20:0::1;;28366:13;28345:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28391:49;28422:2;28426:13;28391:30;:49::i;:::-;18191:1;;27345:1113:::0;;;;;;;;;;:::o;37831:262::-;37984:14;38023:62;38053:8;38063:9;38074:10;38023:29;:62::i;:::-;38016:69;37831:262;-1:-1:-1;;;;37831:262:0:o;19336:499::-;19466:4;;19434;;-1:-1:-1;;;;;19455:15:0;;;19466:4;;19455:15;:33;;;;-1:-1:-1;19474:6:0;;-1:-1:-1;;;19474:6:0;;;;:14;;19484:4;19474:14;19455:33;19451:74;;;-1:-1:-1;19512:1:0;19505:8;;19451:74;19539:22;;-1:-1:-1;;;19539:22:0;;;;:30;;19565:4;19539:30;19535:144;;;19603:4;19589:18;;;;19585:83;;;19648:4;19634:13;:6;19645:1;19634:10;:13::i;:::-;:18;;;;;;19627:25;;;;19585:83;19701:13;;19695:3;:19;19691:135;;19752:4;19738:13;:6;19749:1;19738:10;:13::i;19691:135::-;19810:4;19796:13;:6;19807:1;19796:10;:13::i;19099:109::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;19170:15:::1;:30:::0;;;::::1;;-1:-1:-1::0;;;19170:30:0::1;-1:-1:-1::0;;;;19170:30:0;;::::1;::::0;;;::::1;::::0;;19099:109::o;38631:253::-;38775:21;38821:55;38851:7;38860:9;38871:4;38821:29;:55::i;:::-;38814:62;;38631:253;;;;;:::o;18035:35::-;;;-1:-1:-1;;;18035:35:0;;;;;:::o;23829:623::-;24053:21;24034:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;24097:55:::1;24128:7;24137:8;24147:4;;24097:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;24097:30:0::1;::::0;-1:-1:-1;;;24097:55:0:i:1;:::-;24087:65;;24202:12;24171:7;24196:1;24179:7;:14;:18;24171:27;;;;;;;;;;;;;;:43;;24163:94;;;;-1:-1:-1::0;;;24163:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24268:141;24314:4;;24319:1;24314:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24314:7:0::1;24323:10;24335:51;24360:7;24369:4;;24374:1;24369:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24369:7:0::1;24378:4;;24383:1;24378:7;;;;;;24268:141;24420:24;24426:7;24435:4;;24420:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;24441:2:0;;-1:-1:-1;24420:5:0::1;::::0;-1:-1:-1;;24420:24:0:i:1;:::-;23829:623:::0;;;;;;;;;:::o;18871:85::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;18932:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;18932:16:0::1;-1:-1:-1::0;;;;18932:16:0;;::::1;::::0;;;::::1;::::0;;18871:85::o;33330:709::-;33564:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;33585:139:::1;33631:4;;33636:1;33631:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33631:7:0::1;33640:10;33652:51;33677:7;33686:4;;33691:1;33686:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33686:7:0::1;33695:4;;33700:1;33695:7;;;;;;33652:51;33705:8;33585:31;:139::i;:::-;33735:18;33763:4:::0;;-1:-1:-1;;33768:15:0;;33763:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33763:21:0::1;-1:-1:-1::0;;;;;33756:39:0::1;;33796:2;33756:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33756:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33756:43:0;33810:44:::1;::::0;;33756:43:::1;33810:44:::0;;::::1;::::0;;;;;;;;;;;33756:43;;-1:-1:-1;33810:44:0::1;::::0;;;33845:4;;;;;;33810:44;::::1;::::0;33845:4;;33810:44;33845:4;33810:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;33851:2:0;;-1:-1:-1;33810:34:0::1;::::0;-1:-1:-1;;33810:44:0:i:1;:::-;33953:12:::0;33887:62:::1;33935:13:::0;33894:4;;-1:-1:-1;;33899:15:0;;33894:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33894:21:0::1;-1:-1:-1::0;;;;;33887:39:0::1;;33927:2;33887:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33887:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33887:43:0;;:47:::1;:62::i;:::-;:78;;33865:166;;;;-1:-1:-1::0;;;33865:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18191:1;33330:709:::0;;;;;;;:::o;18540:87::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;18607:4:::1;:12:::0;;-1:-1:-1;;;;;;18607:12:0::1;-1:-1:-1::0;;;;;18607:12:0;;;::::1;::::0;;;::::1;::::0;;18540:87::o;17987:41::-;;;-1:-1:-1;;;17987:41:0;;;;;:::o;28464:1128::-;28691:21;28663:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28763:4:0::1;28738:29;:4:::0;;-1:-1:-1;;28743:15:0;;28738:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28738:21:0::1;-1:-1:-1::0;;;;;28738:29:0::1;;28730:66;;;::::0;;-1:-1:-1;;;28730:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28730:66:0;;;;;;;;;;;;;::::1;;28817:55;28848:7;28857:8;28867:4;;28817:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28817:30:0::1;::::0;-1:-1:-1;;;28817:55:0:i:1;:::-;28807:65;;28922:12;28891:7;28916:1;28899:7;:14;:18;28891:27;;;;;;;;;;;;;;:43;;28883:94;;;;-1:-1:-1::0;;;28883:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16108:148:::0;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;16215:1:::1;16199:6:::0;;16178:40:::1;::::0;-1:-1:-1;;;;;16199:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16178:40:0;16215:1;;16178:40:::1;16246:1;16229:19:::0;;-1:-1:-1;;;;;;16229:19:0::1;::::0;;16108:148::o;17954:26::-;;;-1:-1:-1;;;17954:26:0;;;;;:::o;18635:112::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;18713:11:::1;:26:::0;;-1:-1:-1;;;;;;18713:26:0::1;-1:-1:-1::0;;;;;18713:26:0;;;::::1;::::0;;;::::1;::::0;;18635:112::o;38101:261::-;38254:13;38292:62;38321:9;38332;38343:10;38292:28;:62::i;24458:601::-;24682:21;24663:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;24726:55:::1;24756:7;24765:9;24776:4;;24726:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;24726:29:0::1;::::0;-1:-1:-1;;;24726:55:0:i:1;:::-;24716:65;;24814:11;24800:7;24808:1;24800:10;;;;;;;;;;;;;;:25;;24792:72;;;;-1:-1:-1::0;;;24792:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15466:79:::0;15504:7;15531:6;-1:-1:-1;;;;;15531:6:0;15466:79;:::o;34045:1069::-;34327:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;34372:4:::1;-1:-1:-1::0;;;;;34361:15:0::1;:4;;34366:1;34361:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34361:7:0::1;-1:-1:-1::0;;;;;34361:15:0::1;;34353:52;;;::::0;;-1:-1:-1;;;34353:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34353:52:0;;;;;;;;;;;;;::::1;;34432:9;34416:13;34463:41;34432:9:::0;34484:4;;34489:1:::1;34484:7:::0;;::::1;;;;34463:41;34452:52;;34515:11;34540:3;34529:8;:14;34515:28;;34560:4;-1:-1:-1::0;;;;;34554:19:0::1;;34581:6;34554:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;34614:4;-1:-1:-1::0;;;;;34608:20:0::1;;34629:51;34654:7;34663:4;;34668:1;34663:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34663:7:0::1;34672:4;;34677:1;34672:7;;;;;;34629:51;34682:6;34608:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;34608:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34608:81:0;34601:89:::1;;;;34701:18;34729:4:::0;;-1:-1:-1;;34734:15:0;;34729:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34729:21:0::1;-1:-1:-1::0;;;;;34722:39:0::1;;34762:2;34722:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34722:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34722:43:0;34776:44:::1;::::0;;34722:43:::1;34776:44:::0;;::::1;::::0;;;;;;;;;;;34722:43;;-1:-1:-1;34776:44:0::1;::::0;;;34811:4;;;;;;34776:44;::::1;::::0;34811:4;;34776:44;34811:4;34776:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;34817:2:0;;-1:-1:-1;34776:34:0::1;::::0;-1:-1:-1;;34776:44:0:i:1;:::-;34836:7:::0;;34832:88:::1;;34891:11;::::0;34860:48:::1;::::0;-1:-1:-1;;;;;34891:11:0::1;34904:3:::0;34860:30:::1;:48::i;:::-;35018:12:::0;34952:62:::1;35000:13:::0;34959:4;;-1:-1:-1;;34964:15:0;;34959:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34959:21:0::1;-1:-1:-1::0;;;;;34952:39:0::1;;34992:2;34952:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34952:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:62;:78;;34930:166;;;;-1:-1:-1::0;;;34930:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18191:1;;;;34045:1069:::0;;;;;;;:::o;17163:341::-;17229:14;;-1:-1:-1;;;;;17229:14:0;17247:10;17229:28;17207:113;;;;-1:-1:-1;;;17207:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17357:9;;17339:15;:27;17331:71;;;;;-1:-1:-1;;;17331:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17447:14;;;17439:6;;17418:44;;-1:-1:-1;;;;;17447:14:0;;;;17439:6;;;;-1:-1:-1;;;;;;;;;;;17418:44:0;;17482:14;;;17473:23;;-1:-1:-1;;;;;;17473:23:0;-1:-1:-1;;;;;17482:14:0;;;17473:23;;;;;;17163:341::o;17776:38::-;;;:::o;37635:188::-;37732:12;37764:51;37787:7;37796:8;37806;37764:22;:51::i;18755:108::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;18829:13:::1;:26:::0;18755:108::o;17921:26::-;;;-1:-1:-1;;;;;17921:26:0;;:::o;16700:89::-;16772:9;;16700:89;:::o;36468:1123::-;36758:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36817:4:0::1;36792:29;:4:::0;;-1:-1:-1;;36797:15:0;;36792:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36792:21:0::1;-1:-1:-1::0;;;;;36792:29:0::1;;36784:66;;;::::0;;-1:-1:-1;;;36784:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;36784:66:0;;;;;;;;;;;;;::::1;;36861:139;36907:4;;36912:1;36907:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36907:7:0::1;36916:10;36928:51;36953:7;36962:4;;36967:1;36962:7;;;;;;36928:51;36981:8;36861:31;:139::i;:::-;37011:55;37046:4;;37011:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;37060:4:0::1;::::0;-1:-1:-1;37011:34:0::1;::::0;-1:-1:-1;;37011:55:0:i:1;:::-;37077:14;37101:4;-1:-1:-1::0;;;;;37094:22:0::1;;37125:4;37094:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;37094:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37094:37:0;;-1:-1:-1;37150:25:0;;::::1;;37142:76;;;;-1:-1:-1::0;;;37142:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37231:8;37242:41;37253:9;37264:4;;37269:1;37264:7;;;;;;37242:41;37231:52:::0;-1:-1:-1;37294:18:0::1;37315;:9:::0;37231:52;37315:13:::1;:18::i;:::-;37294:39:::0;-1:-1:-1;37350:7:0;;37346:127:::1;;37379:4;-1:-1:-1::0;;;;;37373:20:0::1;;37394:3;37373:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;37444:11:0::1;::::0;37413:48:::1;::::0;-1:-1:-1;;;;;;37444:11:0::1;::::0;-1:-1:-1;37457:3:0;37413:30:::1;:48::i;:::-;37491:4;-1:-1:-1::0;;;;;37485:20:0::1;;37506:13;37485:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37531:49;37562:2;37566:13;37531:30;:49::i;25065:952::-:0;25294:21;25266:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;25352:4:::1;-1:-1:-1::0;;;;;25341:15:0::1;:4;;25346:1;25341:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25341:7:0::1;-1:-1:-1::0;;;;;25341:15:0::1;;25333:52;;;::::0;;-1:-1:-1;;;25333:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25333:52:0;;;;;;;;;;;;;::::1;;25412:9;25396:13;25443:41;25412:9:::0;25464:4;;25469:1:::1;25464:7:::0;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25464:7:0::1;25473:5;25480:3;25443:10;:41::i;:::-;25432:52;;25495:11;25520:3;25509:8;:14;25495:28;;25544:53;25575:7;25584:6;25592:4;;25544:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25544:30:0::1;::::0;-1:-1:-1;;;25544:53:0:i:1;:::-;25534:63;;25647:12;25616:7;25641:1;25624:7;:14;:18;25616:27;;;;;;;;;;;;;;:43;;25608:94;;;;-1:-1:-1::0;;;25608:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25719:4;-1:-1:-1::0;;;;;25713:19:0::1;;25740:7;25748:1;25740:10;;;;;;;;;;;;;;25713:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;25777:4;-1:-1:-1::0;;;;;25771:20:0::1;;25792:51;25817:7;25826:4;;25831:1;25826:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25826:7:0::1;25835:4;;25840:1;25835:7;;;;;;25792:51;25845:7;25853:1;25845:10;;;;;;;;;;;;;;25771:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;25771:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25771:85:0;25764:93:::1;;;;25868:24;25874:7;25883:4;;25868:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25889:2:0;;-1:-1:-1;25868:5:0::1;::::0;-1:-1:-1;;25868:24:0:i:1;:::-;25909:7:::0;;25905:88:::1;;25964:11;::::0;25933:48:::1;::::0;-1:-1:-1;;;;;25964:11:0::1;25977:3:::0;25933:30:::1;:48::i;:::-;18191:1;;;25065:952:::0;;;;;;;;;:::o;17728:41::-;;;:::o;18964:127::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;19046:22:::1;:37:::0;;;::::1;;-1:-1:-1::0;;;19046:37:0::1;-1:-1:-1::0;;;;19046:37:0;;::::1;::::0;;;::::1;::::0;;18964:127::o;17823:19::-;;;-1:-1:-1;;;;;17823:19:0;;:::o;26025:1310::-;26262:21;26234:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;26309:10:::1;-1:-1:-1::0;;;;;26309:22:0;::::1;;;26301:50;;;::::0;;-1:-1:-1;;;26301:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26301:50:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;26370:22:0;::::1;26362:46;;;::::0;;-1:-1:-1;;;26362:46:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26362:46:0;;;;;;;;;;;;;::::1;;26438:4;-1:-1:-1::0;;;;;26427:15:0::1;:4;;26432:1;26427:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26427:7:0::1;-1:-1:-1::0;;;;;26427:15:0::1;;26419:52;;;::::0;;-1:-1:-1;;;26419:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26419:52:0;;;;;;;;;;;;;::::1;;26498:9;26482:13;26529:40;26498:9:::0;26550:4;;26555:1:::1;26550:7:::0;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26550:7:0::1;26559:4;26565:3;26529:10;:40::i;:::-;26518:51;;26580:11;26605:3;26594:8;:14;26580:28;;26629:53;26660:7;26669:6;26677:4;;26629:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26629:30:0::1;::::0;-1:-1:-1;;;26629:53:0:i:1;:::-;26619:63;;26732:12;26701:7;26726:1;26709:7;:14;:18;26701:27;;;;;;;;;;;;;;:43;;26693:94;;;;-1:-1:-1::0;;;26693:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26804:4;-1:-1:-1::0;;;;;26798:19:0::1;;26825:7;26833:1;26825:10;;;;;;;;;;;;;;26798:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;26862:4;-1:-1:-1::0;;;;;26856:20:0::1;;26877:51;26902:7;26911:4;;26916:1;26911:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26911:7:0::1;26920:4;;26925:1;26920:7;;;;;;26877:51;26930:7;26938:1;26930:10;;;;;;;;;;;;;;26856:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;26856:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26856:85:0;26849:93:::1;;;;26953:24;26959:7;26968:4;;26953:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26974:2:0;;-1:-1:-1;26953:5:0::1;::::0;-1:-1:-1;;26953:24:0:i:1;:::-;27036:7:::0;;27032:152:::1;;27091:11;::::0;27060:50:::1;::::0;-1:-1:-1;;;;;27091:11:0::1;27108:1;27104:3:::0;:5:::1;;27060:30;:50::i;:::-;27125:47;27156:8:::0;27170:1:::1;27166:3:::0;:5:::1;::::0;27125:47:::1;27199:15;::::0;-1:-1:-1;;;27199:15:0;::::1;;;:23;;27218:4;27199:23;27196:122;;;27251:12;::::0;-1:-1:-1;;;;;27251:12:0::1;27238:38;27277:8:::0;27287:9:::1;27298:4:::0;;27251:12;27298:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27298:7:0::1;27238:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;27238:68:0::1;;;;;;;;;;;-1:-1:-1::0;;;;;27238:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27196:122;18191:1;;;26025:1310:::0;;;;;;;;;;:::o;19216:112::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;19292:12:::1;:28:::0;;-1:-1:-1;;;;;;19292:28:0::1;-1:-1:-1::0;;;;;19292:28:0;;;::::1;::::0;;;::::1;::::0;;19216:112::o;38370:253::-;38514:21;38560:55;38591:7;38600:8;38610:4;38560:30;:55::i;16865:226::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;16946:6:::1;::::0;;;16929:23;;-1:-1:-1;;;;;;16929:23:0;;::::1;-1:-1:-1::0;;;;;16946:6:0;::::1;16929:23;::::0;;;16963:19:::1;::::0;;17005:15:::1;:22:::0;::::1;16993:9;:34:::0;17043:40:::1;::::0;16946:6;;-1:-1:-1;;;;;;;;;;;17043:40:0;16946:6;;17043:40:::1;16865:226:::0;:::o;21261:738::-;21549:12;21563;21577:14;21530:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;21625:85:::1;21639:6;21647;21655:14;21671;21687:10;21699;21625:13;:85::i;:::-;21604:106:::0;;-1:-1:-1;21604:106:0;-1:-1:-1;21721:12:0::1;21736:49;21761:7;21770:6:::0;21778;21736:24:::1;:49::i;:::-;21721:64;;21796:66;21828:6;21836:10;21848:4;21854:7;21796:31;:66::i;:::-;21873;21905:6;21913:10;21925:4;21931:7;21873:31;:66::i;:::-;21977:4;-1:-1:-1::0;;;;;21962:25:0::1;;21988:2;21962:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;21962:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21962:29:0;21261:738;;;;-1:-1:-1;21962:29:0;;-1:-1:-1;21261:738:0;;-1:-1:-1;;;;;;;;;21261:738:0:o;29598:1000::-;29824:21;29796:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;29882:4:::1;-1:-1:-1::0;;;;;29871:15:0::1;:4;;29876:1;29871:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29871:7:0::1;-1:-1:-1::0;;;;;29871:15:0::1;;29863:52;;;::::0;;-1:-1:-1;;;29863:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29863:52:0;;;;;;;;;;;;;::::1;;29936:55;29966:7;29975:9;29986:4;;29936:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29936:29:0::1;::::0;-1:-1:-1;;;29936:55:0:i:1;:::-;29926:65;;30024:9;30010:7;30018:1;30010:10;;;;;;;;;;;;;;:23;;30002:70;;;;-1:-1:-1::0;;;30002:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30089:4;-1:-1:-1::0;;;;;30083:19:0::1;;30110:7;30118:1;30110:10;;;;;;;;;;;;;;30083:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30147:4;-1:-1:-1::0;;;;;30141:20:0::1;;30162:51;30187:7;30196:4;;30201:1;30196:7;;;;;;30162:51;30215:7;30223:1;30215:10;;;;;;;;;;;;;;30141:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;30141:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30141:85:0;30134:93:::1;;;;30238:24;30244:7;30253:4;;30238:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30259:2:0;;-1:-1:-1;30238:5:0::1;::::0;-1:-1:-1;;30238:24:0:i:1;:::-;30275:8;30286:43;30297:7;30305:1;30297:10;;;;;;;;;;;;;;30309:4;;30314:1;30309:7;;;;;;30286:43;30275:54:::0;-1:-1:-1;30344:7:0;;30340:88:::1;;30399:11;::::0;30368:48:::1;::::0;-1:-1:-1;;;;;30399:11:0::1;30412:3:::0;30368:30:::1;:48::i;:::-;30496:7;30504:1;30496:10;;;;;;;;;;;;;;30490:3;30478:9;:15;:28;30474:106;;;30508:72;30539:10;30576:3;30563:7;30571:1;30563:10;;;;;;;;;;;;;;30551:9;:22;:28;30508:30;:72::i;:::-;18191:1;29598:1000:::0;;;;;;;;;:::o;16411:281::-;15688:12;:10;:12::i;:::-;15678:6;;-1:-1:-1;;;;;15678:6:0;;;:22;;;15670:67;;;;;-1:-1:-1;;;15670:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15670:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16514:22:0;::::1;16492:110;;;;-1:-1:-1::0;;;16492:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16639:6;::::0;;16618:38:::1;::::0;-1:-1:-1;;;;;16618:38:0;;::::1;::::0;16639:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16618:38:0;::::1;16667:6;:17:::0;;-1:-1:-1;;;;;;16667:17:0::1;-1:-1:-1::0;;;;;16667:17:0;;;::::1;::::0;;;::::1;::::0;;16411:281::o;22005:974::-;22258:16;22276:14;22292;22239:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;22346:176:::1;22374:5;22394:4;22413:18;22446:9;22470:14;22499:12;22346:13;:176::i;:::-;22319:203:::0;;-1:-1:-1;22319:203:0;-1:-1:-1;22533:12:0::1;22548:46;22573:7;22582:5:::0;22589:4:::1;22548:24;:46::i;:::-;22533:61;;22605:69;22637:5;22644:10;22656:4;22662:11;22605:31;:69::i;:::-;22691:4;-1:-1:-1::0;;;;;22685:19:0::1;;22712:9;22685:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;22748:4;-1:-1:-1::0;;;;;22742:20:0::1;;22763:4;22769:9;22742:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;22742:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22742:37:0;22735:45:::1;;;;22818:4;-1:-1:-1::0;;;;;22803:25:0::1;;22829:2;22803:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;22803:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22803:29:0;;-1:-1:-1;22883:9:0::1;:21:::0;-1:-1:-1;22879:92:0::1;;;22906:65;22937:10;22961:9;22949;:21;22906:30;:65::i;:::-;18191:1;22005:974:::0;;;;;;;;;;;:::o;17849:27::-;;;-1:-1:-1;;;;;17849:27:0;;:::o;35122:1338::-;35360:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;35394:10:::1;-1:-1:-1::0;;;;;35394:22:0;::::1;;;35386:50;;;::::0;;-1:-1:-1;;;35386:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35386:50:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;35455:22:0;::::1;35447:45;;;::::0;;-1:-1:-1;;;35447:45:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35447:45:0;;;;;;;;;;;;;::::1;;35522:4;-1:-1:-1::0;;;;;35511:15:0::1;:4;;35516:1;35511:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35511:7:0::1;-1:-1:-1::0;;;;;35511:15:0::1;;35503:52;;;::::0;;-1:-1:-1;;;35503:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;35503:52:0;;;;;;;;;;;;;::::1;;35604:8;35615:41;35626:9;35637:4;;35642:1;35637:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35637:7:0::1;35646:4;35652:3;35615:10;:41::i;:::-;35604:52;;35667:11;35693:3;35681:9;:15;35667:29;;35713:4;-1:-1:-1::0;;;;;35707:19:0::1;;35734:6;35707:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;35767:4;-1:-1:-1::0;;;;;35761:20:0::1;;35782:51;35807:7;35816:4;;35821:1;35816:7;;;;;;35782:51;35835:6;35761:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;35761:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35761:81:0;35754:89:::1;;;;35854:18;35882:4:::0;;-1:-1:-1;;35887:15:0;;35882:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35882:21:0::1;-1:-1:-1::0;;;;;35875:39:0::1;;35915:2;35875:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;35875:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35875:43:0;35929:44:::1;::::0;;35875:43:::1;35929:44:::0;;::::1;::::0;;;;;;;;;;;35875:43;;-1:-1:-1;35929:44:0::1;::::0;;;35964:4;;;;;;35929:44;::::1;::::0;35964:4;;35929:44;35964:4;35929:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;35970:2:0;;-1:-1:-1;35929:34:0::1;::::0;-1:-1:-1;;35929:44:0:i:1;:::-;35988:7:::0;;35984:152:::1;;36043:11;::::0;36012:50:::1;::::0;-1:-1:-1;;;;;36043:11:0::1;36060:1;36056:3:::0;:5:::1;::::0;36012:50:::1;36077:47;36108:8:::0;36122:1:::1;36118:3:::0;:5:::1;::::0;36077:47:::1;36242:12:::0;36176:62:::1;36224:13:::0;36183:4;;-1:-1:-1;;36188:15:0;;36183:21;;::::1;;;;36176:62;:78;;36154:166;;;;-1:-1:-1::0;;;36154:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36334:15;::::0;-1:-1:-1;;;36334:15:0;::::1;;;:23;;36353:4;36334:23;36331:122;;;36386:12;::::0;-1:-1:-1;;;;;36386:12:0::1;36373:38;36412:8:::0;36422:9:::1;36433:4:::0;;36386:12;36433:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36433:7:0::1;36373:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;36373:68:0::1;;;;;;;;;;;-1:-1:-1::0;;;;;36373:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18191:1;;;35122:1338:::0;;;;;;;;:::o;30606:1357::-;30840:21;30812:8;18141:15;18129:8;:27;;18121:59;;;;;-1:-1:-1;;;18121:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18121:59:0;;;;;;;;;;;;;;;30887:10:::1;-1:-1:-1::0;;;;;30887:22:0;::::1;;;30879:50;;;::::0;;-1:-1:-1;;;30879:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30879:50:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;30948:22:0;::::1;30940:46;;;::::0;;-1:-1:-1;;;30940:46:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30940:46:0;;;;;;;;;;;;;::::1;;31016:4;-1:-1:-1::0;;;;;31005:15:0::1;:4;;31010:1;31005:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31005:7:0::1;-1:-1:-1::0;;;;;31005:15:0::1;;30997:52;;;::::0;;-1:-1:-1;;;30997:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30997:52:0;;;;;;;;;;;;;::::1;;31070:55;31100:7;31109:9;31120:4;;31070:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31070:29:0::1;::::0;-1:-1:-1;;;31070:55:0:i:1;:::-;31060:65;;31158:9;31144:7;31152:1;31144:10;;;;;;;;;;;;;;:23;;31136:70;;;;-1:-1:-1::0;;;31136:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31223:4;-1:-1:-1::0;;;;;31217:19:0::1;;31244:7;31252:1;31244:10;;;;;;;;;;;;;;31217:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;31281:4;-1:-1:-1::0;;;;;31275:20:0::1;;31296:51;31321:7;31330:4;;31335:1;31330:7;;;;;;31296:51;31349:7;31357:1;31349:10;;;;;;;;;;;;;;31275:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;31275:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31275:85:0;31268:93:::1;;;;31372:24;31378:7;31387:4;;31372:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31393:2:0;;-1:-1:-1;31372:5:0::1;::::0;-1:-1:-1;;31372:24:0:i:1;:::-;31453:8;31464:42;31475:7;31483:1;31475:10;;;;;;;;;;;;;;31487:4;;31492:1;31487:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31487:7:0::1;31496:4;31502:3;31464:10;:42::i;:::-;31453:53:::0;-1:-1:-1;31521:7:0;;31517:152:::1;;31576:11;::::0;31545:50:::1;::::0;-1:-1:-1;;;;;31576:11:0::1;31593:1;31589:3:::0;:5:::1;::::0;31545:50:::1;31610:47;31641:8:::0;31655:1:::1;31651:3:::0;:5:::1;::::0;31610:47:::1;31737:7;31745:1;31737:10;;;;;;;;;;;;;;31731:3;31719:9;:15;:28;31715:106;;;31749:72;31780:10;31817:3;31804:7;31812:1;31804:10;;;;;;;31749:72;31837:15;::::0;-1:-1:-1;;;31837:15:0;::::1;;;:23;;31856:4;31837:23;31834:122;;;31889:12;::::0;-1:-1:-1;;;;;31889:12:0::1;31876:38;31915:8:::0;31925:9:::1;31936:4:::0;;31889:12;31936:7;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31936:7:0::1;31876:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;31876:68:0::1;;;;;;;;;;;-1:-1:-1::0;;;;;31876:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31834:122;18191:1;30606:1357:::0;;;;;;;;;;:::o;6966:532::-;7067:21;7124:1;7109:4;:11;:16;;7101:59;;;;;-1:-1:-1;;;7101:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7101:59:0;;;;;;;;;;;;;;;7192:4;:11;-1:-1:-1;;;;;7181:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7181:23:0;;7171:33;;7245:9;7215:7;7240:1;7223:7;:14;:18;7215:27;;;;;;;;;;;;;;;;;:39;7279:11;;-1:-1:-1;;7279:15:0;7265:226;7296:5;;7265:226;;7324:14;7340:15;7359:42;7371:7;7380:4;7389:1;7385;:5;7380:11;;;;;;;;;;;;;;7393:4;7398:1;7393:7;;;;;;;;;;;;;;7359:11;:42::i;:::-;7323:78;;;;7433:46;7445:7;7453:1;7445:10;;;;;;;;;;;;;;7457:9;7468:10;7433:11;:46::i;:::-;7416:7;7428:1;7424;:5;7416:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7303:3:0;7265:226;;;;6966:532;;;;;:::o;3696:478::-;3785:12;3811:14;3827;3845:26;3856:6;3864;3845:10;:26::i;:::-;4009:32;;;-1:-1:-1;;;;;;4009:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3999:43;;;;;;-1:-1:-1;;;;;;3912:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3902:262;;;;;;;;;3696:478;-1:-1:-1;;;;;3696:478:0:o;8585:498::-;8856:51;;;-1:-1:-1;;;;;8856:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8856:51:0;-1:-1:-1;;;8856:51:0;;;8845:63;;;;8810:12;;8824:17;;8845:10;;;;8856:51;8845:63;;;8856:51;8845:63;;8856:51;8845:63;;;;;;;;;;-1:-1:-1;;8845:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8809:99;;;;8941:7;:57;;;;-1:-1:-1;8953:11:0;;:16;;:44;;;8984:4;8973:24;;;;;;;;;;;;;;;-1:-1:-1;8973:24:0;8953:44;8919:156;;;;-1:-1:-1;;;8919:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8585:498;;;;;;:::o;23088:735::-;23195:6;23190:626;23221:1;23207:4;:11;:15;23203:1;:19;23190:626;;;23245:13;23260:14;23279:4;23284:1;23279:7;;;;;;;;;;;;;;23288:4;23293:1;23297;23293:5;23288:11;;;;;;;;;;;;;;23244:56;;;;23316:14;23335:42;23363:5;23370:6;23335:27;:42::i;:::-;23315:62;;;23392:14;23409:7;23417:1;23421;23417:5;23409:14;;;;;;;;;;;;;;23392:31;;23439:15;23456;23484:6;-1:-1:-1;;;;;23475:15:0;:5;-1:-1:-1;;;;;23475:15:0;;:61;;23517:9;23533:1;23475:61;;;23499:1;23503:9;23475:61;23438:98;;;;23551:10;23582:1;23568:4;:11;:15;23564:1;:19;:82;;23643:3;23564:82;;;23586:54;23611:7;23620:6;23628:4;23633:1;23637;23633:5;23628:11;;;;;;;;;;;;;;23586:24;:54::i;:::-;23551:95;;23676:48;23701:7;23710:5;23717:6;23676:24;:48::i;:::-;-1:-1:-1;;;;;23661:69:0;;23749:10;23761;23773:2;23787:1;23777:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23777:12:0;;23661:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23661:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23224:3:0;;;;;-1:-1:-1;23190:626:0;;-1:-1:-1;;;;;;;;23190:626:0;;;23088:735;;;:::o;2774:129::-;2858:5;;;2853:16;;;;2845:50;;;;;-1:-1:-1;;;2845:50:0;;;;;;;;;;;;-1:-1:-1;;;2845:50:0;;;;;;;;;;;;;;9091:217;9204:12;;;9164;9204;;;;;;;;;-1:-1:-1;;;;;9182:7:0;;;9197:5;;9182:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9182:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9163:54;;;9236:7;9228:72;;;;-1:-1:-1;;;9228:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9091:217;;;:::o;5182:517::-;5275:14;5321:1;5310:8;:12;5302:68;;;;-1:-1:-1;;;5302:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5401:1;5389:9;:13;:31;;;;;5419:1;5406:10;:14;5389:31;5381:84;;;;-1:-1:-1;;;5381:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:20;5499:17;:8;5512:3;5499:12;:17::i;:::-;5476:40;-1:-1:-1;5527:14:0;5544:31;5476:40;5564:10;5544:19;:31::i;:::-;5527:48;-1:-1:-1;5586:16:0;5605:40;5629:15;5605:19;:9;5619:4;5605:13;:19::i;:::-;:23;;:40::i;:::-;5586:59;;5680:11;5668:9;:23;;;;;;;5182:517;-1:-1:-1;;;;;;;5182:517:0:o;2911:142::-;2963:6;2990;;;:30;;-1:-1:-1;;3005:5:0;;;3019:1;3014;3005:5;3014:1;3000:15;;;;;:20;2990:30;2982:63;;;;;-1:-1:-1;;;2982:63:0;;;;;;;;;;;;-1:-1:-1;;;2982:63:0;;;;;;;;;;;;;;14531:98;14611:10;14531:98;:::o;6374:511::-;6475:21;6532:1;6517:4;:11;:16;;6509:59;;;;;-1:-1:-1;;;6509:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6509:59:0;;;;;;;;;;;;;;;6600:4;:11;-1:-1:-1;;;;;6589:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6589:23:0;;6579:33;;6636:8;6623:7;6631:1;6623:10;;;;;;;;;;;;;:21;;;;;6660:6;6655:223;6686:1;6672:4;:11;:15;6668:1;:19;6655:223;;;6710:14;6726:15;6745:42;6757:7;6766:4;6771:1;6766:7;;;;;;;;;;;;;;6775:4;6780:1;6784;6780:5;6775:11;;;;;;;6745:42;6709:78;;;;6819:47;6832:7;6840:1;6832:10;;;;;;;;;;;;;;6844:9;6855:10;6819:12;:47::i;:::-;6802:7;6810:1;6814;6810:5;6802:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6689:3:0;;6655:223;;32110:1214;32223:6;32218:1099;32249:1;32235:4;:11;:15;32231:1;:19;32218:1099;;;32273:13;32288:14;32307:4;32312:1;32307:7;;;;;;;;;;;;;;32316:4;32321:1;32325;32321:5;32316:11;;;;;;;;;;;;;;32272:56;;;;32344:14;32363:42;32391:5;32398:6;32363:27;:42::i;:::-;32343:62;;;32420:19;32457:48;32482:7;32491:5;32498:6;32457:24;:48::i;:::-;32420:86;;32521:16;32552:17;32640:13;32655;32673:4;-1:-1:-1;;;;;32673:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32673:18:0;;;;;;;-1:-1:-1;;;;;32639:52:0;;;;-1:-1:-1;32639:52:0;;-1:-1:-1;32707:17:0;;-1:-1:-1;;;;;32748:15:0;;;;;;;:61;;32790:8;32800;32748:61;;;32767:8;32777;32748:61;32706:103;;;;32838:56;32881:12;32845:5;-1:-1:-1;;;;;32838:23:0;;32870:4;32838:38;;;;;;;;;;;;;-1:-1:-1;;;;;32838:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;:56;32824:70;;32924:71;32954:11;32967:12;32981:13;32924:29;:71::i;:::-;32909:86;;32218:1099;;;;33026:15;33043;33071:6;-1:-1:-1;;;;;33062:15:0;:5;-1:-1:-1;;;;;33062:15:0;;:67;;33107:12;33126:1;33062:67;;;33086:1;33090:12;33062:67;33025:104;;;;33144:10;33175:1;33161:4;:11;:15;33157:1;:19;:82;;33236:3;33157:82;;;33179:54;33204:7;33213:6;33221:4;33226:1;33230;33226:5;33221:11;;;;;;;33179:54;33292:12;;;33302:1;33292:12;;;;;;;;;;-1:-1:-1;;;33254:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;33254:51:0;;;;;;;;;;;;;;;;;;;;;;33144:95;;-1:-1:-1;33254:9:0;;;;;;33264:10;;33276;;33144:95;;33292:12;;33254:51;;;;;;;;33292:12;;33254:51;;;;33292:12;;33254:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32252:3:0;;;;;-1:-1:-1;32218:1099:0;;-1:-1:-1;;;;;;;;;;32218:1099:0;5820:472;5913:13;5959:1;5947:9;:13;5939:70;;;;-1:-1:-1;;;5939:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6040:1;6028:9;:13;:31;;;;;6058:1;6045:10;:14;6028:31;6020:84;;;;-1:-1:-1;;;6020:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6115:14;6132:34;6161:4;6132:24;:9;6146;6132:13;:24::i;:::-;:28;;:34::i;:::-;6115:51;-1:-1:-1;6177:16:0;6196:34;6226:3;6196:25;:10;6211:9;6196:14;:25::i;:34::-;6177:53;;6252:32;6282:1;6265:11;6253:9;:23;;;;;;;6252:29;:32::i;:::-;6241:43;5820:472;-1:-1:-1;;;;;;5820:472:0:o;4739:321::-;4821:12;4864:1;4854:7;:11;4846:61;;;;-1:-1:-1;;;4846:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4937:1;4926:8;:12;:28;;;;;4953:1;4942:8;:12;4926:28;4918:81;;;;-1:-1:-1;;;4918:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5044:8;5020:21;:7;5032:8;5020:11;:21::i;:::-;:32;;;;;;;4739:321;-1:-1:-1;;;;4739:321:0:o;19875:1380::-;20093:12;20107;20250:1;-1:-1:-1;;;;;20188:64:0;20206:7;-1:-1:-1;;;;;20188:34:0;;20223:6;20231;20188:50;;;;;;;;;;;;;-1:-1:-1;;;;;20188:50:0;;;;;;-1:-1:-1;;;;;20188:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20188:50:0;-1:-1:-1;;;;;20188:64:0;;20184:150;;;20287:7;-1:-1:-1;;;;;20269:37:0;;20307:6;20315;20269:53;;;;;;;;;;;;;-1:-1:-1;;;;;20269:53:0;;;;;;-1:-1:-1;;;;;20269:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20184:150:0;20345:13;20360;20377:53;20406:7;20415:6;20423;20377:28;:53::i;:::-;20344:86;;;;20445:8;20457:1;20445:13;:30;;;;-1:-1:-1;20462:13:0;;20445:30;20441:807;;;20514:14;;-1:-1:-1;20530:14:0;;-1:-1:-1;20441:807:0;;;20578:19;20600:58;20623:14;20639:8;20649;20600:22;:58::i;:::-;20578:80;;20695:14;20677;:32;20673:564;;20756:10;20738:14;:28;;20730:74;;;;-1:-1:-1;;;20730:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20845:14;;-1:-1:-1;20861:14:0;-1:-1:-1;20861:14:0;20673:564;;;20917:19;20939:58;20962:14;20978:8;20988;20939:22;:58::i;:::-;20917:80;;21041:14;21023;:32;;21016:40;;;;21101:10;21083:14;:28;;21075:74;;;;-1:-1:-1;;;21075:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21190:14;-1:-1:-1;21206:14:0;;-1:-1:-1;20673:564:0;20441:807;;19875:1380;;;;;;;;;;;:::o;4235:391::-;4328:13;4343;4370:14;4389:26;4400:6;4408;4389:10;:26::i;:::-;4369:46;;;4427:13;4442;4475:32;4483:7;4492:6;4500;4475:7;:32::i;:::-;-1:-1:-1;;;;;4460:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4460:62:0;;;;;;;-1:-1:-1;;;;;4426:96:0;;;;-1:-1:-1;4426:96:0;;-1:-1:-1;;;;;;4556:16:0;;;;;;;:62;;4599:8;4609;4556:62;;;4576:8;4586;4556:62;4533:85;;;;-1:-1:-1;4235:391:0;-1:-1:-1;;;;;;;4235:391:0:o;3255:349::-;3330:14;3346;3391:6;-1:-1:-1;;;;;3381:16:0;:6;-1:-1:-1;;;;;3381:16:0;;;3373:66;;;;-1:-1:-1;;;3373:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3478:6;-1:-1:-1;;;;;3469:15:0;:6;-1:-1:-1;;;;;3469:15:0;;:53;;3507:6;3515;3469:53;;;3488:6;3496;3469:53;3450:72;;-1:-1:-1;3450:72:0;-1:-1:-1;;;;;;3541:20:0;;3533:63;;;;;-1:-1:-1;;;3533:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3255:349;;;;;:::o;2638:128::-;2722:5;;;2717:16;;;;2709:49;;;;;-1:-1:-1;;;2709:49:0;;;;;;;;;;;;-1:-1:-1;;;2709:49:0;;;;;;;;;;;;;
Swarm Source
ipfs://3ad8bddb2a05fd8cb079f64f8afda5037128f394b350118e23bd760c531458b0
Loading...
Loading
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.