Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xce520073fb5600472f3d91fce8a32a30585f138fcf78ecf5ed87854dcd86ba2f | Set Gov | 28447415 | 178 days 13 hrs ago | Mycelium: Deployer | IN | 0x77ae0f7128c6ac9f0efdb8a6f0aabd5b979ea80e | 0 ETH | 0.00000712 | |
0xfa9795fe6c0f75f3e00325b140a3184949733fd2f937a8fac61dd4f3960a7bd7 | 0x60806040 | 20213066 | 230 days 11 hrs ago | Mycelium: Deployer | IN | Create: Reader | 0 ETH | 0.007139956295 ETH |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Reader
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan on 2022-09-13 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } interface IVaultUtils { function updateCumulativeFundingRate(address _collateralToken, address _indexToken) external returns (bool); function validateIncreasePosition( address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong ) external view; function validateDecreasePosition( address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver ) external view; function validateLiquidation( address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise ) external view returns (uint256, uint256); function getEntryFundingRate( address _collateralToken, address _indexToken, bool _isLong ) external view returns (uint256); function getPositionFee( address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _sizeDelta ) external view returns (uint256); function getFundingFee( address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _size, uint256 _entryFundingRate ) external view returns (uint256); function getBuyUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256); function getSellUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256); function getSwapFeeBasisPoints( address _tokenIn, address _tokenOut, uint256 _usdgAmount ) external view returns (uint256); function getFeeBasisPoints( address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment ) external view returns (uint256); } interface IVault { function isInitialized() external view returns (bool); function isSwapEnabled() external view returns (bool); function isLeverageEnabled() external view returns (bool); function setVaultUtils(IVaultUtils _vaultUtils) external; function setError(uint256 _errorCode, string calldata _error) external; function router() external view returns (address); function usdg() external view returns (address); function gov() external view returns (address); function whitelistedTokenCount() external view returns (uint256); function maxLeverage() external view returns (uint256); function minProfitTime() external view returns (uint256); function hasDynamicFees() external view returns (bool); function fundingInterval() external view returns (uint256); function totalTokenWeights() external view returns (uint256); function getTargetUsdgAmount(address _token) external view returns (uint256); function inManagerMode() external view returns (bool); function inPrivateLiquidationMode() external view returns (bool); function maxGasPrice() external view returns (uint256); function approvedRouters(address _account, address _router) external view returns (bool); function isLiquidator(address _account) external view returns (bool); function isManager(address _account) external view returns (bool); function minProfitBasisPoints(address _token) external view returns (uint256); function tokenBalances(address _token) external view returns (uint256); function lastFundingTimes(address _token) external view returns (uint256); function setMaxLeverage(uint256 _maxLeverage) external; function setInManagerMode(bool _inManagerMode) external; function setManager(address _manager, bool _isManager) external; function setIsSwapEnabled(bool _isSwapEnabled) external; function setIsLeverageEnabled(bool _isLeverageEnabled) external; function setMaxGasPrice(uint256 _maxGasPrice) external; function setUsdgAmount(address _token, uint256 _amount) external; function setBufferAmount(address _token, uint256 _amount) external; function setMaxGlobalShortSize(address _token, uint256 _amount) external; function setInPrivateLiquidationMode(bool _inPrivateLiquidationMode) external; function setLiquidator(address _liquidator, bool _isActive) external; function setFundingRate( uint256 _fundingInterval, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor ) external; function setFees( uint256 _taxBasisPoints, uint256 _stableTaxBasisPoints, uint256 _mintBurnFeeBasisPoints, uint256 _swapFeeBasisPoints, uint256 _stableSwapFeeBasisPoints, uint256 _marginFeeBasisPoints, uint256 _liquidationFeeUsd, uint256 _minProfitTime, bool _hasDynamicFees ) external; function setTokenConfig( address _token, uint256 _tokenDecimals, uint256 _redemptionBps, uint256 _minProfitBps, uint256 _maxUsdgAmount, bool _isStable, bool _isShortable ) external; function setPriceFeed(address _priceFeed) external; function withdrawFees(address _token, address _receiver) external returns (uint256); function directPoolDeposit(address _token) external; function buyUSDG(address _token, address _receiver) external returns (uint256); function sellUSDG(address _token, address _receiver) external returns (uint256); function swap( address _tokenIn, address _tokenOut, address _receiver ) external returns (uint256); function increasePosition( address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong ) external; function decreasePosition( address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver ) external returns (uint256); function liquidatePosition( address _account, address _collateralToken, address _indexToken, bool _isLong, address _feeReceiver ) external; function tokenToUsdMin(address _token, uint256 _tokenAmount) external view returns (uint256); function priceFeed() external view returns (address); function fundingRateFactor() external view returns (uint256); function stableFundingRateFactor() external view returns (uint256); function cumulativeFundingRates(address _token) external view returns (uint256); function getNextFundingRate(address _token) external view returns (uint256); function getFeeBasisPoints( address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment ) external view returns (uint256); function liquidationFeeUsd() external view returns (uint256); function taxBasisPoints() external view returns (uint256); function stableTaxBasisPoints() external view returns (uint256); function mintBurnFeeBasisPoints() external view returns (uint256); function swapFeeBasisPoints() external view returns (uint256); function stableSwapFeeBasisPoints() external view returns (uint256); function marginFeeBasisPoints() external view returns (uint256); function allWhitelistedTokensLength() external view returns (uint256); function allWhitelistedTokens(uint256) external view returns (address); function whitelistedTokens(address _token) external view returns (bool); function stableTokens(address _token) external view returns (bool); function shortableTokens(address _token) external view returns (bool); function feeReserves(address _token) external view returns (uint256); function globalShortSizes(address _token) external view returns (uint256); function globalShortAveragePrices(address _token) external view returns (uint256); function maxGlobalShortSizes(address _token) external view returns (uint256); function tokenDecimals(address _token) external view returns (uint256); function tokenWeights(address _token) external view returns (uint256); function guaranteedUsd(address _token) external view returns (uint256); function poolAmounts(address _token) external view returns (uint256); function bufferAmounts(address _token) external view returns (uint256); function reservedAmounts(address _token) external view returns (uint256); function usdgAmounts(address _token) external view returns (uint256); function maxUsdgAmounts(address _token) external view returns (uint256); function getRedemptionAmount(address _token, uint256 _usdgAmount) external view returns (uint256); function getMaxPrice(address _token) external view returns (uint256); function getMinPrice(address _token) external view returns (uint256); function getDelta( address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _lastIncreasedTime ) external view returns (bool, uint256); function getPosition( address _account, address _collateralToken, address _indexToken, bool _isLong ) external view returns ( uint256, uint256, uint256, uint256, uint256, uint256, bool, uint256 ); } interface IVaultPriceFeed { function adjustmentBasisPoints(address _token) external view returns (uint256); function isAdjustmentAdditive(address _token) external view returns (bool); function setAdjustment( address _token, bool _isAdditive, uint256 _adjustmentBps ) external; function setUseV2Pricing(bool _useV2Pricing) external; function setIsAmmEnabled(bool _isEnabled) external; function setIsSecondaryPriceEnabled(bool _isEnabled) external; function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints) external; function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints) external; function setFavorPrimaryPrice(bool _favorPrimaryPrice) external; function setPriceSampleSpace(uint256 _priceSampleSpace) external; function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation) external; function getPrice( address _token, bool _maximise, bool _includeAmmPrice, bool _useSwapPricing ) external view returns (uint256); function getAmmPrice(address _token) external view returns (uint256); function getPrimaryPrice(address _token, bool _maximise) external view returns (uint256); function setTokenConfig( address _token, address _priceFeed, uint256 _priceDecimals, bool _isStrictStable ) external; } interface IYieldTracker { function claim(address _account, address _receiver) external returns (uint256); function updateRewards(address _account) external; function getTokensPerInterval() external view returns (uint256); function claimable(address _account) external view returns (uint256); } interface IYieldToken { function totalStaked() external view returns (uint256); function stakedBalance(address _account) external view returns (uint256); function removeAdmin(address _account) external; } interface IPancakeFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IVester { function rewardTracker() external view returns (address); function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function cumulativeClaimAmounts(address _account) external view returns (uint256); function claimedAmounts(address _account) external view returns (uint256); function pairAmounts(address _account) external view returns (uint256); function getVestedAmount(address _account) external view returns (uint256); function transferredAverageStakedAmounts(address _account) external view returns (uint256); function transferredCumulativeRewards(address _account) external view returns (uint256); function cumulativeRewardDeductions(address _account) external view returns (uint256); function bonusRewards(address _account) external view returns (uint256); function transferStakeValues(address _sender, address _receiver) external; function setTransferredAverageStakedAmounts(address _account, uint256 _amount) external; function setTransferredCumulativeRewards(address _account, uint256 _amount) external; function setCumulativeRewardDeductions(address _account, uint256 _amount) external; function setBonusRewards(address _account, uint256 _amount) external; function getMaxVestableAmount(address _account) external view returns (uint256); function getCombinedAverageStakedAmount(address _account) external view returns (uint256); } contract Governable { address public gov; constructor() public { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; } } contract Reader is Governable { using SafeMath for uint256; uint256 public constant BASIS_POINTS_DIVISOR = 10000; uint256 public constant POSITION_PROPS_LENGTH = 9; uint256 public constant PRICE_PRECISION = 10**30; uint256 public constant USDG_DECIMALS = 18; bool public hasMaxGlobalShortSizes; function setConfig(bool _hasMaxGlobalShortSizes) public onlyGov { hasMaxGlobalShortSizes = _hasMaxGlobalShortSizes; } function getMaxAmountIn( IVault _vault, address _tokenIn, address _tokenOut ) public view returns (uint256) { uint256 priceIn = _vault.getMinPrice(_tokenIn); uint256 priceOut = _vault.getMaxPrice(_tokenOut); uint256 tokenInDecimals = _vault.tokenDecimals(_tokenIn); uint256 tokenOutDecimals = _vault.tokenDecimals(_tokenOut); uint256 amountIn; { uint256 poolAmount = _vault.poolAmounts(_tokenOut); uint256 reservedAmount = _vault.reservedAmounts(_tokenOut); uint256 bufferAmount = _vault.bufferAmounts(_tokenOut); uint256 subAmount = reservedAmount > bufferAmount ? reservedAmount : bufferAmount; if (subAmount >= poolAmount) { return 0; } uint256 availableAmount = poolAmount.sub(subAmount); amountIn = availableAmount.mul(priceOut).div(priceIn).mul(10**tokenInDecimals).div(10**tokenOutDecimals); } uint256 maxUsdgAmount = _vault.maxUsdgAmounts(_tokenIn); if (maxUsdgAmount != 0) { if (maxUsdgAmount < _vault.usdgAmounts(_tokenIn)) { return 0; } uint256 maxAmountIn = maxUsdgAmount.sub(_vault.usdgAmounts(_tokenIn)); maxAmountIn = maxAmountIn.mul(10**tokenInDecimals).div(10**USDG_DECIMALS); maxAmountIn = maxAmountIn.mul(PRICE_PRECISION).div(priceIn); if (amountIn > maxAmountIn) { return maxAmountIn; } } return amountIn; } function getAmountOut( IVault _vault, address _tokenIn, address _tokenOut, uint256 _amountIn ) public view returns (uint256, uint256) { uint256 priceIn = _vault.getMinPrice(_tokenIn); uint256 tokenInDecimals = _vault.tokenDecimals(_tokenIn); uint256 tokenOutDecimals = _vault.tokenDecimals(_tokenOut); uint256 feeBasisPoints; { uint256 usdgAmount = _amountIn.mul(priceIn).div(PRICE_PRECISION); usdgAmount = usdgAmount.mul(10**USDG_DECIMALS).div(10**tokenInDecimals); bool isStableSwap = _vault.stableTokens(_tokenIn) && _vault.stableTokens(_tokenOut); uint256 baseBps = isStableSwap ? _vault.stableSwapFeeBasisPoints() : _vault.swapFeeBasisPoints(); uint256 taxBps = isStableSwap ? _vault.stableTaxBasisPoints() : _vault.taxBasisPoints(); uint256 feesBasisPoints0 = _vault.getFeeBasisPoints(_tokenIn, usdgAmount, baseBps, taxBps, true); uint256 feesBasisPoints1 = _vault.getFeeBasisPoints(_tokenOut, usdgAmount, baseBps, taxBps, false); // use the higher of the two fee basis points feeBasisPoints = feesBasisPoints0 > feesBasisPoints1 ? feesBasisPoints0 : feesBasisPoints1; } uint256 priceOut = _vault.getMaxPrice(_tokenOut); uint256 amountOut = _amountIn.mul(priceIn).div(priceOut); amountOut = amountOut.mul(10**tokenOutDecimals).div(10**tokenInDecimals); uint256 amountOutAfterFees = amountOut.mul(BASIS_POINTS_DIVISOR.sub(feeBasisPoints)).div(BASIS_POINTS_DIVISOR); uint256 feeAmount = amountOut.sub(amountOutAfterFees); return (amountOutAfterFees, feeAmount); } function getFeeBasisPoints( IVault _vault, address _tokenIn, address _tokenOut, uint256 _amountIn ) public view returns ( uint256, uint256, uint256 ) { uint256 priceIn = _vault.getMinPrice(_tokenIn); uint256 tokenInDecimals = _vault.tokenDecimals(_tokenIn); uint256 usdgAmount = _amountIn.mul(priceIn).div(PRICE_PRECISION); usdgAmount = usdgAmount.mul(10**USDG_DECIMALS).div(10**tokenInDecimals); bool isStableSwap = _vault.stableTokens(_tokenIn) && _vault.stableTokens(_tokenOut); uint256 baseBps = isStableSwap ? _vault.stableSwapFeeBasisPoints() : _vault.swapFeeBasisPoints(); uint256 taxBps = isStableSwap ? _vault.stableTaxBasisPoints() : _vault.taxBasisPoints(); uint256 feesBasisPoints0 = _vault.getFeeBasisPoints(_tokenIn, usdgAmount, baseBps, taxBps, true); uint256 feesBasisPoints1 = _vault.getFeeBasisPoints(_tokenOut, usdgAmount, baseBps, taxBps, false); // use the higher of the two fee basis points uint256 feeBasisPoints = feesBasisPoints0 > feesBasisPoints1 ? feesBasisPoints0 : feesBasisPoints1; return (feeBasisPoints, feesBasisPoints0, feesBasisPoints1); } function getFees(address _vault, address[] memory _tokens) public view returns (uint256[] memory) { uint256[] memory amounts = new uint256[](_tokens.length); for (uint256 i = 0; i < _tokens.length; i++) { amounts[i] = IVault(_vault).feeReserves(_tokens[i]); } return amounts; } function getTotalStaked(address[] memory _yieldTokens) public view returns (uint256[] memory) { uint256[] memory amounts = new uint256[](_yieldTokens.length); for (uint256 i = 0; i < _yieldTokens.length; i++) { IYieldToken yieldToken = IYieldToken(_yieldTokens[i]); amounts[i] = yieldToken.totalStaked(); } return amounts; } function getStakingInfo(address _account, address[] memory _yieldTrackers) public view returns (uint256[] memory) { uint256 propsLength = 2; uint256[] memory amounts = new uint256[](_yieldTrackers.length * propsLength); for (uint256 i = 0; i < _yieldTrackers.length; i++) { IYieldTracker yieldTracker = IYieldTracker(_yieldTrackers[i]); amounts[i * propsLength] = yieldTracker.claimable(_account); amounts[i * propsLength + 1] = yieldTracker.getTokensPerInterval(); } return amounts; } function getVestingInfo(address _account, address[] memory _vesters) public view returns (uint256[] memory) { uint256 propsLength = 7; uint256[] memory amounts = new uint256[](_vesters.length * propsLength); for (uint256 i = 0; i < _vesters.length; i++) { IVester vester = IVester(_vesters[i]); amounts[i * propsLength] = vester.pairAmounts(_account); amounts[i * propsLength + 1] = vester.getVestedAmount(_account); amounts[i * propsLength + 2] = IERC20(_vesters[i]).balanceOf(_account); amounts[i * propsLength + 3] = vester.claimedAmounts(_account); amounts[i * propsLength + 4] = vester.claimable(_account); amounts[i * propsLength + 5] = vester.getMaxVestableAmount(_account); amounts[i * propsLength + 6] = vester.getCombinedAverageStakedAmount(_account); } return amounts; } function getPairInfo(address _factory, address[] memory _tokens) public view returns (uint256[] memory) { uint256 inputLength = 2; uint256 propsLength = 2; uint256[] memory amounts = new uint256[]((_tokens.length / inputLength) * propsLength); for (uint256 i = 0; i < _tokens.length / inputLength; i++) { address token0 = _tokens[i * inputLength]; address token1 = _tokens[i * inputLength + 1]; address pair = IPancakeFactory(_factory).getPair(token0, token1); amounts[i * propsLength] = IERC20(token0).balanceOf(pair); amounts[i * propsLength + 1] = IERC20(token1).balanceOf(pair); } return amounts; } function getFundingRates( address _vault, address _weth, address[] memory _tokens ) public view returns (uint256[] memory) { uint256 propsLength = 2; uint256[] memory fundingRates = new uint256[](_tokens.length * propsLength); IVault vault = IVault(_vault); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { token = _weth; } uint256 fundingRateFactor = vault.stableTokens(token) ? vault.stableFundingRateFactor() : vault.fundingRateFactor(); uint256 reservedAmount = vault.reservedAmounts(token); uint256 poolAmount = vault.poolAmounts(token); if (poolAmount > 0) { fundingRates[i * propsLength] = fundingRateFactor.mul(reservedAmount).div(poolAmount); } if (vault.cumulativeFundingRates(token) > 0) { uint256 nextRate = vault.getNextFundingRate(token); uint256 baseRate = vault.cumulativeFundingRates(token); fundingRates[i * propsLength + 1] = baseRate.add(nextRate); } } return fundingRates; } function getTokenSupply(IERC20 _token, address[] memory _excludedAccounts) public view returns (uint256) { uint256 supply = _token.totalSupply(); for (uint256 i = 0; i < _excludedAccounts.length; i++) { address account = _excludedAccounts[i]; uint256 balance = _token.balanceOf(account); supply = supply.sub(balance); } return supply; } function getTotalBalance(IERC20 _token, address[] memory _accounts) public view returns (uint256) { uint256 totalBalance = 0; for (uint256 i = 0; i < _accounts.length; i++) { address account = _accounts[i]; uint256 balance = _token.balanceOf(account); totalBalance = totalBalance.add(balance); } return totalBalance; } function getTokenBalances(address _account, address[] memory _tokens) public view returns (uint256[] memory) { uint256[] memory balances = new uint256[](_tokens.length); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { balances[i] = _account.balance; continue; } balances[i] = IERC20(token).balanceOf(_account); } return balances; } function getTokenBalancesWithSupplies(address _account, address[] memory _tokens) public view returns (uint256[] memory) { uint256 propsLength = 2; uint256[] memory balances = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { balances[i * propsLength] = _account.balance; balances[i * propsLength + 1] = 0; continue; } balances[i * propsLength] = IERC20(token).balanceOf(_account); balances[i * propsLength + 1] = IERC20(token).totalSupply(); } return balances; } function getPrices(IVaultPriceFeed _priceFeed, address[] memory _tokens) public view returns (uint256[] memory) { uint256 propsLength = 6; uint256[] memory amounts = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; amounts[i * propsLength] = _priceFeed.getPrice(token, true, true, false); amounts[i * propsLength + 1] = _priceFeed.getPrice(token, false, true, false); amounts[i * propsLength + 2] = _priceFeed.getPrimaryPrice(token, true); amounts[i * propsLength + 3] = _priceFeed.getPrimaryPrice(token, false); amounts[i * propsLength + 4] = _priceFeed.isAdjustmentAdditive(token) ? 1 : 0; amounts[i * propsLength + 5] = _priceFeed.adjustmentBasisPoints(token); } return amounts; } function getVaultTokenInfo( address _vault, address _weth, uint256 _usdgAmount, address[] memory _tokens ) public view returns (uint256[] memory) { uint256 propsLength = 10; IVault vault = IVault(_vault); IVaultPriceFeed priceFeed = IVaultPriceFeed(vault.priceFeed()); uint256[] memory amounts = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { token = _weth; } amounts[i * propsLength] = vault.poolAmounts(token); amounts[i * propsLength + 1] = vault.reservedAmounts(token); amounts[i * propsLength + 2] = vault.usdgAmounts(token); amounts[i * propsLength + 3] = vault.getRedemptionAmount(token, _usdgAmount); amounts[i * propsLength + 4] = vault.tokenWeights(token); amounts[i * propsLength + 5] = vault.getMinPrice(token); amounts[i * propsLength + 6] = vault.getMaxPrice(token); amounts[i * propsLength + 7] = vault.guaranteedUsd(token); amounts[i * propsLength + 8] = priceFeed.getPrimaryPrice(token, false); amounts[i * propsLength + 9] = priceFeed.getPrimaryPrice(token, true); } return amounts; } function getFullVaultTokenInfo( address _vault, address _weth, uint256 _usdgAmount, address[] memory _tokens ) public view returns (uint256[] memory) { uint256 propsLength = 12; IVault vault = IVault(_vault); IVaultPriceFeed priceFeed = IVaultPriceFeed(vault.priceFeed()); uint256[] memory amounts = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { token = _weth; } amounts[i * propsLength] = vault.poolAmounts(token); amounts[i * propsLength + 1] = vault.reservedAmounts(token); amounts[i * propsLength + 2] = vault.usdgAmounts(token); amounts[i * propsLength + 3] = vault.getRedemptionAmount(token, _usdgAmount); amounts[i * propsLength + 4] = vault.tokenWeights(token); amounts[i * propsLength + 5] = vault.bufferAmounts(token); amounts[i * propsLength + 6] = vault.maxUsdgAmounts(token); amounts[i * propsLength + 7] = vault.getMinPrice(token); amounts[i * propsLength + 8] = vault.getMaxPrice(token); amounts[i * propsLength + 9] = vault.guaranteedUsd(token); amounts[i * propsLength + 10] = priceFeed.getPrimaryPrice(token, false); amounts[i * propsLength + 11] = priceFeed.getPrimaryPrice(token, true); } return amounts; } function getVaultTokenInfoV2( address _vault, address _weth, uint256 _usdgAmount, address[] memory _tokens ) public view returns (uint256[] memory) { uint256 propsLength = 14; IVault vault = IVault(_vault); IVaultPriceFeed priceFeed = IVaultPriceFeed(vault.priceFeed()); uint256[] memory amounts = new uint256[](_tokens.length * propsLength); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; if (token == address(0)) { token = _weth; } uint256 maxGlobalShortSize = hasMaxGlobalShortSizes ? vault.maxGlobalShortSizes(token) : 0; amounts[i * propsLength] = vault.poolAmounts(token); amounts[i * propsLength + 1] = vault.reservedAmounts(token); amounts[i * propsLength + 2] = vault.usdgAmounts(token); amounts[i * propsLength + 3] = vault.getRedemptionAmount(token, _usdgAmount); amounts[i * propsLength + 4] = vault.tokenWeights(token); amounts[i * propsLength + 5] = vault.bufferAmounts(token); amounts[i * propsLength + 6] = vault.maxUsdgAmounts(token); amounts[i * propsLength + 7] = vault.globalShortSizes(token); amounts[i * propsLength + 8] = maxGlobalShortSize; amounts[i * propsLength + 9] = vault.getMinPrice(token); amounts[i * propsLength + 10] = vault.getMaxPrice(token); amounts[i * propsLength + 11] = vault.guaranteedUsd(token); amounts[i * propsLength + 12] = priceFeed.getPrimaryPrice(token, false); amounts[i * propsLength + 13] = priceFeed.getPrimaryPrice(token, true); } return amounts; } function getPositions( address _vault, address _account, address[] memory _collateralTokens, address[] memory _indexTokens, bool[] memory _isLong ) public view returns (uint256[] memory) { uint256[] memory amounts = new uint256[](_collateralTokens.length * POSITION_PROPS_LENGTH); for (uint256 i = 0; i < _collateralTokens.length; i++) { { ( uint256 size, uint256 collateral, uint256 averagePrice, uint256 entryFundingRate, , /* reserveAmount */ uint256 realisedPnl, bool hasRealisedProfit, uint256 lastIncreasedTime ) = IVault(_vault).getPosition(_account, _collateralTokens[i], _indexTokens[i], _isLong[i]); amounts[i * POSITION_PROPS_LENGTH] = size; amounts[i * POSITION_PROPS_LENGTH + 1] = collateral; amounts[i * POSITION_PROPS_LENGTH + 2] = averagePrice; amounts[i * POSITION_PROPS_LENGTH + 3] = entryFundingRate; amounts[i * POSITION_PROPS_LENGTH + 4] = hasRealisedProfit ? 1 : 0; amounts[i * POSITION_PROPS_LENGTH + 5] = realisedPnl; amounts[i * POSITION_PROPS_LENGTH + 6] = lastIncreasedTime; } uint256 size = amounts[i * POSITION_PROPS_LENGTH]; uint256 averagePrice = amounts[i * POSITION_PROPS_LENGTH + 2]; uint256 lastIncreasedTime = amounts[i * POSITION_PROPS_LENGTH + 6]; if (averagePrice > 0) { (bool hasProfit, uint256 delta) = IVault(_vault).getDelta( _indexTokens[i], size, averagePrice, _isLong[i], lastIncreasedTime ); amounts[i * POSITION_PROPS_LENGTH + 7] = hasProfit ? 1 : 0; amounts[i * POSITION_PROPS_LENGTH + 8] = delta; } } return amounts; } }
[{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POSITION_PROPS_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDG_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getFees","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getFullVaultTokenInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getFundingRates","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"getMaxAmountIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getPairInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_collateralTokens","type":"address[]"},{"internalType":"address[]","name":"_indexTokens","type":"address[]"},{"internalType":"bool[]","name":"_isLong","type":"bool[]"}],"name":"getPositions","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVaultPriceFeed","name":"_priceFeed","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_yieldTrackers","type":"address[]"}],"name":"getStakingInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getTokenBalances","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getTokenBalancesWithSupplies","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address[]","name":"_excludedAccounts","type":"address[]"}],"name":"getTokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"getTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_yieldTokens","type":"address[]"}],"name":"getTotalStaked","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getVaultTokenInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_usdgAmount","type":"uint256"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"getVaultTokenInfoV2","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address[]","name":"_vesters","type":"address[]"}],"name":"getVestingInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasMaxGlobalShortSizes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_hasMaxGlobalShortSizes","type":"bool"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916331790556159ff80620000336000396000f3fe608060405234801561001057600080fd5b506004361061013e5760003560e01c8063126082cf1461014357806312d43a511461015d57806320542568146101815780632413c8c1146102925780632ac0184c146103335780632e3e3342146103e45780633613d52714610495578063440f018c1461054657806348211934146105a05780637b906e931461065157806386d4d0f514610712578063870d917c146107c35780638e83ca32146107cb578063937a0be81461088c57806395082d251461093d57806395a7535a146109455780639b0183c3146109ff578063a4543ead14610a20578063ad7e549714610ad1578063c6f1d67614610ad9578063cfad57a214610af5578063d7176ca914610b1b578063d802178e14610b70578063dc383cab14610c21578063f3535e6c14610ddf578063fbdb05ca14610e17575b600080fd5b61014b610ec8565b60408051918252519081900360200190f35b610165610ece565b604080516001600160a01b039092168252519081900360200190f35b6102426004803603608081101561019757600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156101d157600080fd5b8201836020820111156101e357600080fd5b803590602001918460208302840111600160201b8311171561020457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610edd945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561027e578181015183820152602001610266565b505050509050019250505060405180910390f35b610242600480360360208110156102a857600080fd5b810190602081018135600160201b8111156102c257600080fd5b8201836020820111156102d457600080fd5b803590602001918460208302840111600160201b831117156102f557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506115eb945050505050565b61014b6004803603604081101561034957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561037357600080fd5b82018360208201111561038557600080fd5b803590602001918460208302840111600160201b831117156103a657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506116e4945050505050565b610242600480360360408110156103fa57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561042457600080fd5b82018360208201111561043657600080fd5b803590602001918460208302840111600160201b8311171561045757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061180f945050505050565b610242600480360360408110156104ab57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156104d557600080fd5b8201836020820111156104e757600080fd5b803590602001918460208302840111600160201b8311171561050857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611a14945050505050565b6105826004803603608081101561055c57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135611e4e565b60408051938452602084019290925282820152519081900360600190f35b610242600480360360408110156105b657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105e057600080fd5b8201836020820111156105f257600080fd5b803590602001918460208302840111600160201b8311171561061357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506123b3945050505050565b6102426004803603608081101561066757600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156106a157600080fd5b8201836020820111156106b357600080fd5b803590602001918460208302840111600160201b831117156106d457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612867945050505050565b6102426004803603604081101561072857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561075257600080fd5b82018360208201111561076457600080fd5b803590602001918460208302840111600160201b8311171561078557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613098945050505050565b61014b613198565b610242600480360360808110156107e157600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561081b57600080fd5b82018360208201111561082d57600080fd5b803590602001918460208302840111600160201b8311171561084e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061319d945050505050565b610242600480360360408110156108a257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156108cc57600080fd5b8201836020820111156108de57600080fd5b803590602001918460208302840111600160201b831117156108ff57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613b1a945050505050565b61014b613caf565b6102426004803603606081101561095b57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561098e57600080fd5b8201836020820111156109a057600080fd5b803590602001918460208302840111600160201b831117156109c157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613cbf945050505050565b610a1e60048036036020811015610a1557600080fd5b5035151561418d565b005b61024260048036036040811015610a3657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610a6057600080fd5b820183602082011115610a7257600080fd5b803590602001918460208302840111600160201b83111715610a9357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614202945050505050565b61014b61446e565b610ae1614473565b604080519115158252519081900360200190f35b610a1e60048036036020811015610b0b57600080fd5b50356001600160a01b0316614483565b610b5760048036036080811015610b3157600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356144fc565b6040805192835260208301919091528051918290030190f35b61024260048036036040811015610b8657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610bb057600080fd5b820183602082011115610bc257600080fd5b803590602001918460208302840111600160201b83111715610be357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614bb2945050505050565b610242600480360360a0811015610c3757600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610c6a57600080fd5b820183602082011115610c7c57600080fd5b803590602001918460208302840111600160201b83111715610c9d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610cec57600080fd5b820183602082011115610cfe57600080fd5b803590602001918460208302840111600160201b83111715610d1f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d6e57600080fd5b820183602082011115610d8057600080fd5b803590602001918460208302840111600160201b83111715610da157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614cfe945050505050565b61014b60048036036060811015610df557600080fd5b506001600160a01b0381358116916020810135821691604090910135166150fa565b61014b60048036036040811015610e2d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610e5757600080fd5b820183602082011115610e6957600080fd5b803590602001918460208302840111600160201b83111715610e8a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506156c1945050505050565b61271081565b6000546001600160a01b031681565b60606000600a905060008690506000816001600160a01b031663741bef1a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2557600080fd5b505afa158015610f39573d6000803e3d6000fd5b505050506040513d6020811015610f4f57600080fd5b5051855190915060609084026001600160401b0381118015610f7057600080fd5b50604051908082528060200260200182016040528015610f9a578160200160208202803683370190505b50905060005b86518110156115de576000878281518110610fb757fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415610fdf5750885b846001600160a01b03166352f55eed826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d602081101561105657600080fd5b50518351849084890290811061106857fe5b602002602001018181525050846001600160a01b031663c3c7b9e9826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156110c157600080fd5b505afa1580156110d5573d6000803e3d6000fd5b505050506040513d60208110156110eb57600080fd5b5051835184906001858a020190811061110057fe5b602002602001018181525050846001600160a01b0316631aa4ace5826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d602081101561118357600080fd5b5051835184906002858a020190811061119857fe5b602002602001018181525050846001600160a01b0316632c668ec1828b6040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156111f957600080fd5b505afa15801561120d573d6000803e3d6000fd5b505050506040513d602081101561122357600080fd5b5051835184906003858a020190811061123857fe5b602002602001018181525050846001600160a01b031663ab2f3ad4826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561129157600080fd5b505afa1580156112a5573d6000803e3d6000fd5b505050506040513d60208110156112bb57600080fd5b5051835184906004858a02019081106112d057fe5b602002602001018181525050846001600160a01b03166381a612d6826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d602081101561135357600080fd5b5051835184906005858a020190811061136857fe5b602002602001018181525050846001600160a01b031663e124e6d2826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113c157600080fd5b505afa1580156113d5573d6000803e3d6000fd5b505050506040513d60208110156113eb57600080fd5b5051835184906006858a020190811061140057fe5b602002602001018181525050846001600160a01b031663f07456ce826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561145957600080fd5b505afa15801561146d573d6000803e3d6000fd5b505050506040513d602081101561148357600080fd5b5051835184906007858a020190811061149857fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600060248301529151918716926356c8c2c192604480840193829003018186803b1580156114f257600080fd5b505afa158015611506573d6000803e3d6000fd5b505050506040513d602081101561151c57600080fd5b5051835184906008858a020190811061153157fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600160248301529151918716926356c8c2c192604480840193829003018186803b15801561158b57600080fd5b505afa15801561159f573d6000803e3d6000fd5b505050506040513d60208110156115b557600080fd5b5051835184906009858a02019081106115ca57fe5b602090810291909101015250600101610fa0565b5098975050505050505050565b60608082516001600160401b038111801561160557600080fd5b5060405190808252806020026020018201604052801561162f578160200160208202803683370190505b50905060005b83518110156116dd57600084828151811061164c57fe5b60200260200101519050806001600160a01b031663817b1cd26040518163ffffffff1660e01b815260040160206040518083038186803b15801561168f57600080fd5b505afa1580156116a3573d6000803e3d6000fd5b505050506040513d60208110156116b957600080fd5b505183518490849081106116c957fe5b602090810291909101015250600101611635565b5092915050565b600080836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561172057600080fd5b505afa158015611734573d6000803e3d6000fd5b505050506040513d602081101561174a57600080fd5b5051905060005b835181101561180557600084828151811061176857fe5b602002602001015190506000866001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156117c157600080fd5b505afa1580156117d5573d6000803e3d6000fd5b505050506040513d60208110156117eb57600080fd5b505190506117f9848261577a565b93505050600101611751565b5090505b92915050565b60606000600290506060818451026001600160401b038111801561183257600080fd5b5060405190808252806020026020018201604052801561185c578160200160208202803683370190505b50905060005b8451811015611a0b57600085828151811061187957fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156118e857866001600160a01b03163183858402815181106118b757fe5b602002602001018181525050600083858402600101815181106118d657fe5b60200260200101818152505050611a03565b806001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561193557600080fd5b505afa158015611949573d6000803e3d6000fd5b505050506040513d602081101561195f57600080fd5b50518351849084870290811061197157fe5b602002602001018181525050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119b657600080fd5b505afa1580156119ca573d6000803e3d6000fd5b505050506040513d60208110156119e057600080fd5b5051835184906001858802019081106119f557fe5b602002602001018181525050505b600101611862565b50949350505050565b60606000600690506060818451026001600160401b0381118015611a3757600080fd5b50604051908082528060200260200182016040528015611a61578160200160208202803683370190505b50905060005b8451811015611a0b576000858281518110611a7e57fe5b602090810291909101810151604080516317e1d38560e11b81526001600160a01b0380841660048301526001602483018190526044830152600060648301529151929450908a1692632fc3a70a92608480840193829003018186803b158015611ae657600080fd5b505afa158015611afa573d6000803e3d6000fd5b505050506040513d6020811015611b1057600080fd5b505183518490848702908110611b2257fe5b602090810291909101810191909152604080516317e1d38560e11b81526001600160a01b0384811660048301526000602483018190526001604484015260648301529151918a1692632fc3a70a92608480840193829003018186803b158015611b8a57600080fd5b505afa158015611b9e573d6000803e3d6000fd5b505050506040513d6020811015611bb457600080fd5b505183518490600185880201908110611bc957fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600160248301529151918a16926356c8c2c192604480840193829003018186803b158015611c2357600080fd5b505afa158015611c37573d6000803e3d6000fd5b505050506040513d6020811015611c4d57600080fd5b505183518490600285880201908110611c6257fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600060248301529151918a16926356c8c2c192604480840193829003018186803b158015611cbc57600080fd5b505afa158015611cd0573d6000803e3d6000fd5b505050506040513d6020811015611ce657600080fd5b505183518490600385880201908110611cfb57fe5b602002602001018181525050866001600160a01b0316636ce8a44b826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611d5457600080fd5b505afa158015611d68573d6000803e3d6000fd5b505050506040513d6020811015611d7e57600080fd5b5051611d8b576000611d8e565b60015b60ff168385840260040181518110611da257fe5b602002602001018181525050866001600160a01b03166348cac277826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611dfb57600080fd5b505afa158015611e0f573d6000803e3d6000fd5b505050506040513d6020811015611e2557600080fd5b505183518490600585880201908110611e3a57fe5b602090810291909101015250600101611a67565b600080600080876001600160a01b03166381a612d6886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ea157600080fd5b505afa158015611eb5573d6000803e3d6000fd5b505050506040513d6020811015611ecb57600080fd5b5051604080516323b95ceb60e21b81526001600160a01b038a811660048301529151929350600092918b1691638ee573ac91602480820192602092909190829003018186803b158015611f1d57600080fd5b505afa158015611f31573d6000803e3d6000fd5b505050506040513d6020811015611f4757600080fd5b505190506000611f6d68327cb2734119d3b7a9601e1b611f6789866157bc565b90615815565b9050611f89600a83900a611f6783670de0b6b3a76400006157bc565b905060008a6001600160a01b03166342b60b038b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611fda57600080fd5b505afa158015611fee573d6000803e3d6000fd5b505050506040513d602081101561200457600080fd5b5051801561208757508a6001600160a01b03166342b60b038a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561205a57600080fd5b505afa15801561206e573d6000803e3d6000fd5b505050506040513d602081101561208457600080fd5b50515b90506000816120fa578b6001600160a01b031663a22f23926040518163ffffffff1660e01b815260040160206040518083038186803b1580156120c957600080fd5b505afa1580156120dd573d6000803e3d6000fd5b505050506040513d60208110156120f357600080fd5b5051612160565b8b6001600160a01b031663df73a2676040518163ffffffff1660e01b815260040160206040518083038186803b15801561213357600080fd5b505afa158015612147573d6000803e3d6000fd5b505050506040513d602081101561215d57600080fd5b50515b90506000826121d3578c6001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121a257600080fd5b505afa1580156121b6573d6000803e3d6000fd5b505050506040513d60208110156121cc57600080fd5b5051612239565b8c6001600160a01b03166310eb56c26040518163ffffffff1660e01b815260040160206040518083038186803b15801561220c57600080fd5b505afa158015612220573d6000803e3d6000fd5b505050506040513d602081101561223657600080fd5b50515b905060008d6001600160a01b031663c7e074c38e87868660016040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182151581526020019550505050505060206040518083038186803b1580156122ad57600080fd5b505afa1580156122c1573d6000803e3d6000fd5b505050506040513d60208110156122d757600080fd5b8101908080519060200190929190505050905060008e6001600160a01b031663c7e074c38e88878760006040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182151581526020019550505050505060206040518083038186803b15801561235c57600080fd5b505afa158015612370573d6000803e3d6000fd5b505050506040513d602081101561238657600080fd5b505190506000818311612399578161239b565b825b9b509199509750505050505050509450945094915050565b60606000600790506060818451026001600160401b03811180156123d657600080fd5b50604051908082528060200260200182016040528015612400578160200160208202803683370190505b50905060005b8451811015611a0b57600085828151811061241d57fe5b60200260200101519050806001600160a01b0316635d50e729886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561247457600080fd5b505afa158015612488573d6000803e3d6000fd5b505050506040513d602081101561249e57600080fd5b5051835184908487029081106124b057fe5b602002602001018181525050806001600160a01b031663d5a73fdd886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561250957600080fd5b505afa15801561251d573d6000803e3d6000fd5b505050506040513d602081101561253357600080fd5b50518351849060018588020190811061254857fe5b60200260200101818152505085828151811061256057fe5b60200260200101516001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156125b457600080fd5b505afa1580156125c8573d6000803e3d6000fd5b505050506040513d60208110156125de57600080fd5b5051835184906002858802019081106125f357fe5b602002602001018181525050806001600160a01b03166371417b32886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561264c57600080fd5b505afa158015612660573d6000803e3d6000fd5b505050506040513d602081101561267657600080fd5b50518351849060038588020190811061268b57fe5b602002602001018181525050806001600160a01b031663402914f5886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156126e457600080fd5b505afa1580156126f8573d6000803e3d6000fd5b505050506040513d602081101561270e57600080fd5b50518351849060048588020190811061272357fe5b602002602001018181525050806001600160a01b03166308f26c76886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561277c57600080fd5b505afa158015612790573d6000803e3d6000fd5b505050506040513d60208110156127a657600080fd5b5051835184906005858802019081106127bb57fe5b602002602001018181525050806001600160a01b03166345f01ee6886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561281457600080fd5b505afa158015612828573d6000803e3d6000fd5b505050506040513d602081101561283e57600080fd5b50518351849060068588020190811061285357fe5b602090810291909101015250600101612406565b60606000600c905060008690506000816001600160a01b031663741bef1a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128af57600080fd5b505afa1580156128c3573d6000803e3d6000fd5b505050506040513d60208110156128d957600080fd5b5051855190915060609084026001600160401b03811180156128fa57600080fd5b50604051908082528060200260200182016040528015612924578160200160208202803683370190505b50905060005b86518110156115de57600087828151811061294157fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156129695750885b846001600160a01b03166352f55eed826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156129b657600080fd5b505afa1580156129ca573d6000803e3d6000fd5b505050506040513d60208110156129e057600080fd5b5051835184908489029081106129f257fe5b602002602001018181525050846001600160a01b031663c3c7b9e9826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612a4b57600080fd5b505afa158015612a5f573d6000803e3d6000fd5b505050506040513d6020811015612a7557600080fd5b5051835184906001858a0201908110612a8a57fe5b602002602001018181525050846001600160a01b0316631aa4ace5826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612ae357600080fd5b505afa158015612af7573d6000803e3d6000fd5b505050506040513d6020811015612b0d57600080fd5b5051835184906002858a0201908110612b2257fe5b602002602001018181525050846001600160a01b0316632c668ec1828b6040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b158015612b8357600080fd5b505afa158015612b97573d6000803e3d6000fd5b505050506040513d6020811015612bad57600080fd5b5051835184906003858a0201908110612bc257fe5b602002602001018181525050846001600160a01b031663ab2f3ad4826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612c1b57600080fd5b505afa158015612c2f573d6000803e3d6000fd5b505050506040513d6020811015612c4557600080fd5b5051835184906004858a0201908110612c5a57fe5b602002602001018181525050846001600160a01b0316634a993ee9826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d6020811015612cdd57600080fd5b5051835184906005858a0201908110612cf257fe5b602002602001018181525050846001600160a01b031663ad1e4f8d826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612d4b57600080fd5b505afa158015612d5f573d6000803e3d6000fd5b505050506040513d6020811015612d7557600080fd5b5051835184906006858a0201908110612d8a57fe5b602002602001018181525050846001600160a01b03166381a612d6826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612de357600080fd5b505afa158015612df7573d6000803e3d6000fd5b505050506040513d6020811015612e0d57600080fd5b5051835184906007858a0201908110612e2257fe5b602002602001018181525050846001600160a01b031663e124e6d2826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612e7b57600080fd5b505afa158015612e8f573d6000803e3d6000fd5b505050506040513d6020811015612ea557600080fd5b5051835184906008858a0201908110612eba57fe5b602002602001018181525050846001600160a01b031663f07456ce826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612f1357600080fd5b505afa158015612f27573d6000803e3d6000fd5b505050506040513d6020811015612f3d57600080fd5b5051835184906009858a0201908110612f5257fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600060248301529151918716926356c8c2c192604480840193829003018186803b158015612fac57600080fd5b505afa158015612fc0573d6000803e3d6000fd5b505050506040513d6020811015612fd657600080fd5b505183518490600a858a0201908110612feb57fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038481166004830152600160248301529151918716926356c8c2c192604480840193829003018186803b15801561304557600080fd5b505afa158015613059573d6000803e3d6000fd5b505050506040513d602081101561306f57600080fd5b505183518490600b858a020190811061308457fe5b60209081029190910101525060010161292a565b60608082516001600160401b03811180156130b257600080fd5b506040519080825280602002602001820160405280156130dc578160200160208202803683370190505b50905060005b835181101561180557846001600160a01b0316631ce9cb8f85838151811061310657fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561314b57600080fd5b505afa15801561315f573d6000803e3d6000fd5b505050506040513d602081101561317557600080fd5b5051825183908390811061318557fe5b60209081029190910101526001016130e2565b601281565b60606000600e905060008690506000816001600160a01b031663741bef1a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156131e557600080fd5b505afa1580156131f9573d6000803e3d6000fd5b505050506040513d602081101561320f57600080fd5b5051855190915060609084026001600160401b038111801561323057600080fd5b5060405190808252806020026020018201604052801561325a578160200160208202803683370190505b50905060005b86518110156115de57600087828151811061327757fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561329f5750885b60008054600160a01b900460ff166132b8576000613332565b856001600160a01b0316639698d25a836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561330557600080fd5b505afa158015613319573d6000803e3d6000fd5b505050506040513d602081101561332f57600080fd5b50515b9050856001600160a01b03166352f55eed836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561338157600080fd5b505afa158015613395573d6000803e3d6000fd5b505050506040513d60208110156133ab57600080fd5b505184518590858a029081106133bd57fe5b602002602001018181525050856001600160a01b031663c3c7b9e9836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561341657600080fd5b505afa15801561342a573d6000803e3d6000fd5b505050506040513d602081101561344057600080fd5b5051845185906001868b020190811061345557fe5b602002602001018181525050856001600160a01b0316631aa4ace5836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156134ae57600080fd5b505afa1580156134c2573d6000803e3d6000fd5b505050506040513d60208110156134d857600080fd5b5051845185906002868b02019081106134ed57fe5b602002602001018181525050856001600160a01b0316632c668ec1838c6040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561354e57600080fd5b505afa158015613562573d6000803e3d6000fd5b505050506040513d602081101561357857600080fd5b5051845185906003868b020190811061358d57fe5b602002602001018181525050856001600160a01b031663ab2f3ad4836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156135e657600080fd5b505afa1580156135fa573d6000803e3d6000fd5b505050506040513d602081101561361057600080fd5b5051845185906004868b020190811061362557fe5b602002602001018181525050856001600160a01b0316634a993ee9836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561367e57600080fd5b505afa158015613692573d6000803e3d6000fd5b505050506040513d60208110156136a857600080fd5b5051845185906005868b02019081106136bd57fe5b602002602001018181525050856001600160a01b031663ad1e4f8d836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561371657600080fd5b505afa15801561372a573d6000803e3d6000fd5b505050506040513d602081101561374057600080fd5b5051845185906006868b020190811061375557fe5b602002602001018181525050856001600160a01b0316638a78daa8836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156137ae57600080fd5b505afa1580156137c2573d6000803e3d6000fd5b505050506040513d60208110156137d857600080fd5b5051845185906007868b02019081106137ed57fe5b60200260200101818152505080848885026008018151811061380b57fe5b602002602001018181525050856001600160a01b03166381a612d6836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561386457600080fd5b505afa158015613878573d6000803e3d6000fd5b505050506040513d602081101561388e57600080fd5b5051845185906009868b02019081106138a357fe5b602002602001018181525050856001600160a01b031663e124e6d2836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138fc57600080fd5b505afa158015613910573d6000803e3d6000fd5b505050506040513d602081101561392657600080fd5b505184518590600a868b020190811061393b57fe5b602002602001018181525050856001600160a01b031663f07456ce836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561399457600080fd5b505afa1580156139a8573d6000803e3d6000fd5b505050506040513d60208110156139be57600080fd5b505184518590600b868b02019081106139d357fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038581166004830152600060248301529151918816926356c8c2c192604480840193829003018186803b158015613a2d57600080fd5b505afa158015613a41573d6000803e3d6000fd5b505050506040513d6020811015613a5757600080fd5b505184518590600c868b0201908110613a6c57fe5b602090810291909101810191909152604080516356c8c2c160e01b81526001600160a01b038581166004830152600160248301529151918816926356c8c2c192604480840193829003018186803b158015613ac657600080fd5b505afa158015613ada573d6000803e3d6000fd5b505050506040513d6020811015613af057600080fd5b505184518590600d868b0201908110613b0557fe5b60209081029190910101525050600101613260565b60606000600290506060818451026001600160401b0381118015613b3d57600080fd5b50604051908082528060200260200182016040528015613b67578160200160208202803683370190505b50905060005b8451811015611a0b576000858281518110613b8457fe5b60200260200101519050806001600160a01b031663402914f5886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613bdb57600080fd5b505afa158015613bef573d6000803e3d6000fd5b505050506040513d6020811015613c0557600080fd5b505183518490848702908110613c1757fe5b602002602001018181525050806001600160a01b0316632459f51d6040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5c57600080fd5b505afa158015613c70573d6000803e3d6000fd5b505050506040513d6020811015613c8657600080fd5b505183518490600185880201908110613c9b57fe5b602090810291909101015250600101613b6d565b68327cb2734119d3b7a9601e1b81565b60606000600290506060818451026001600160401b0381118015613ce257600080fd5b50604051908082528060200260200182016040528015613d0c578160200160208202803683370190505b5090508560005b855181101561417f576000868281518110613d2a57fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415613d525750865b6000836001600160a01b03166342b60b03836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613da157600080fd5b505afa158015613db5573d6000803e3d6000fd5b505050506040513d6020811015613dcb57600080fd5b5051613e3b57836001600160a01b031663c4f718bf6040518163ffffffff1660e01b815260040160206040518083038186803b158015613e0a57600080fd5b505afa158015613e1e573d6000803e3d6000fd5b505050506040513d6020811015613e3457600080fd5b5051613ea1565b836001600160a01b031663134ca63b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613e7457600080fd5b505afa158015613e88573d6000803e3d6000fd5b505050506040513d6020811015613e9e57600080fd5b50515b90506000846001600160a01b031663c3c7b9e9846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613ef257600080fd5b505afa158015613f06573d6000803e3d6000fd5b505050506040513d6020811015613f1c57600080fd5b5051604080516352f55eed60e01b81526001600160a01b0386811660048301529151929350600092918816916352f55eed91602480820192602092909190829003018186803b158015613f6e57600080fd5b505afa158015613f82573d6000803e3d6000fd5b505050506040513d6020811015613f9857600080fd5b505190508015613fcb57613fb081611f6785856157bc565b8789870281518110613fbe57fe5b6020026020010181815250505b6000866001600160a01b031663c65bc7b1866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561401a57600080fd5b505afa15801561402e573d6000803e3d6000fd5b505050506040513d602081101561404457600080fd5b5051111561416f576000866001600160a01b031663a93acac2866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561409b57600080fd5b505afa1580156140af573d6000803e3d6000fd5b505050506040513d60208110156140c557600080fd5b50516040805163c65bc7b160e01b81526001600160a01b0388811660048301529151929350600092918a169163c65bc7b191602480820192602092909190829003018186803b15801561411757600080fd5b505afa15801561412b573d6000803e3d6000fd5b505050506040513d602081101561414157600080fd5b5051905061414f8183615854565b898b89026001018151811061416057fe5b60200260200101818152505050505b505060019092019150613d139050565b5090925050505b9392505050565b6000546001600160a01b031633146141e4576040805162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b604482015290519081900360640190fd5b60008054911515600160a01b0260ff60a01b19909216919091179055565b80516060906002908190839082900482026001600160401b038111801561422857600080fd5b50604051908082528060200260200182016040528015614252578160200160208202803683370190505b50905060005b8386518161426257fe5b04811015614464576000868583028151811061427a57fe5b602002602001015190506000878684026001018151811061429757fe5b602002602001015190506000896001600160a01b031663e6a4390584846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561430157600080fd5b505afa158015614315573d6000803e3d6000fd5b505050506040513d602081101561432b57600080fd5b5051604080516370a0823160e01b81526001600160a01b0380841660048301529151929350908516916370a0823191602480820192602092909190829003018186803b15801561437a57600080fd5b505afa15801561438e573d6000803e3d6000fd5b505050506040513d60208110156143a457600080fd5b5051855186908689029081106143b657fe5b602002602001018181525050816001600160a01b03166370a08231826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561440f57600080fd5b505afa158015614423573d6000803e3d6000fd5b505050506040513d602081101561443957600080fd5b5051855186906001878a020190811061444e57fe5b6020908102919091010152505050600101614258565b5095945050505050565b600981565b600054600160a01b900460ff1681565b6000546001600160a01b031633146144da576040805162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000866001600160a01b03166381a612d6876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561454e57600080fd5b505afa158015614562573d6000803e3d6000fd5b505050506040513d602081101561457857600080fd5b5051604080516323b95ceb60e21b81526001600160a01b0389811660048301529151929350600092918a1691638ee573ac91602480820192602092909190829003018186803b1580156145ca57600080fd5b505afa1580156145de573d6000803e3d6000fd5b505050506040513d60208110156145f457600080fd5b5051604080516323b95ceb60e21b81526001600160a01b0389811660048301529151929350600092918b1691638ee573ac91602480820192602092909190829003018186803b15801561464657600080fd5b505afa15801561465a573d6000803e3d6000fd5b505050506040513d602081101561467057600080fd5b5051905060008061469168327cb2734119d3b7a9601e1b611f678a886157bc565b90506146ad600a85900a611f6783670de0b6b3a76400006157bc565b905060008b6001600160a01b03166342b60b038c6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156146fe57600080fd5b505afa158015614712573d6000803e3d6000fd5b505050506040513d602081101561472857600080fd5b505180156147ab57508b6001600160a01b03166342b60b038b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561477e57600080fd5b505afa158015614792573d6000803e3d6000fd5b505050506040513d60208110156147a857600080fd5b50515b905060008161481e578c6001600160a01b031663a22f23926040518163ffffffff1660e01b815260040160206040518083038186803b1580156147ed57600080fd5b505afa158015614801573d6000803e3d6000fd5b505050506040513d602081101561481757600080fd5b5051614884565b8c6001600160a01b031663df73a2676040518163ffffffff1660e01b815260040160206040518083038186803b15801561485757600080fd5b505afa15801561486b573d6000803e3d6000fd5b505050506040513d602081101561488157600080fd5b50515b90506000826148f7578d6001600160a01b0316637a210a2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156148c657600080fd5b505afa1580156148da573d6000803e3d6000fd5b505050506040513d60208110156148f057600080fd5b505161495d565b8d6001600160a01b03166310eb56c26040518163ffffffff1660e01b815260040160206040518083038186803b15801561493057600080fd5b505afa158015614944573d6000803e3d6000fd5b505050506040513d602081101561495a57600080fd5b50515b905060008e6001600160a01b031663c7e074c38f87868660016040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182151581526020019550505050505060206040518083038186803b1580156149d157600080fd5b505afa1580156149e5573d6000803e3d6000fd5b505050506040513d60208110156149fb57600080fd5b8101908080519060200190929190505050905060008f6001600160a01b031663c7e074c38f88878760006040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182151581526020019550505050505060206040518083038186803b158015614a8057600080fd5b505afa158015614a94573d6000803e3d6000fd5b505050506040513d6020811015614aaa57600080fd5b50519050808211614abb5780614abd565b815b965050505050505060008a6001600160a01b031663e124e6d28a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614b1457600080fd5b505afa158015614b28573d6000803e3d6000fd5b505050506040513d6020811015614b3e57600080fd5b505190506000614b5282611f678b896157bc565b9050614b7185600a0a611f6786600a0a846157bc90919063ffffffff16565b90506000614b8f612710611f67614b88828861577a565b85906157bc565b90506000614b9d838361577a565b919e919d50909b505050505050505050505050565b60608082516001600160401b0381118015614bcc57600080fd5b50604051908082528060200260200182016040528015614bf6578160200160208202803683370190505b50905060005b8351811015611805576000848281518110614c1357fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415614c6157856001600160a01b031631838381518110614c4f57fe5b60200260200101818152505050614cf6565b806001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614cae57600080fd5b505afa158015614cc2573d6000803e3d6000fd5b505050506040513d6020811015614cd857600080fd5b50518351849084908110614ce857fe5b602002602001018181525050505b600101614bfc565b60608060098551026001600160401b0381118015614d1b57600080fd5b50604051908082528060200260200182016040528015614d45578160200160208202803683370190505b50905060005b85518110156150ef5760008060008060008060008e6001600160a01b0316634a3f088d8f8f8b81518110614d7b57fe5b60200260200101518f8c81518110614d8f57fe5b60200260200101518f8d81518110614da357fe5b60200260200101516040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b0316815260200182151581526020019450505050506101006040518083038186803b158015614e1257600080fd5b505afa158015614e26573d6000803e3d6000fd5b505050506040513d610100811015614e3d57600080fd5b50805160208201516040830151606084015160a085015160c086015160e0909601518f51959d50939b509199509750955091935090915087908a9060098b02908110614e8557fe5b602002602001018181525050858960098a0260010181518110614ea457fe5b602002602001018181525050848960098a0260020181518110614ec357fe5b602002602001018181525050838960098a0260030181518110614ee257fe5b60200260200101818152505081614efa576000614efd565b60015b60ff168960098a0260040181518110614f1257fe5b602002602001018181525050828960098a0260050181518110614f3157fe5b602002602001018181525050808960098a0260060181518110614f5057fe5b602002602001018181525050505050505050506000826009830281518110614f7457fe5b602002602001015190506000836009840260020181518110614f9257fe5b602002602001015190506000846009850260060181518110614fb057fe5b6020026020010151905060008211156150e4576000808c6001600160a01b0316635c07eaab8b8881518110614fe157fe5b602002602001015187878d8b81518110614ff757fe5b6020026020010151886040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001831515815260200182815260200195505050505050604080518083038186803b15801561505a57600080fd5b505afa15801561506e573d6000803e3d6000fd5b505050506040513d604081101561508457600080fd5b50805160209091015190925090508161509e5760006150a1565b60015b60ff168760098802600701815181106150b657fe5b602002602001018181525050808760098802600801815181106150d557fe5b60200260200101818152505050505b505050600101614d4b565b509695505050505050565b600080846001600160a01b03166381a612d6856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561514a57600080fd5b505afa15801561515e573d6000803e3d6000fd5b505050506040513d602081101561517457600080fd5b505160408051637092736960e11b81526001600160a01b03868116600483015291519293506000929188169163e124e6d291602480820192602092909190829003018186803b1580156151c657600080fd5b505afa1580156151da573d6000803e3d6000fd5b505050506040513d60208110156151f057600080fd5b5051604080516323b95ceb60e21b81526001600160a01b038881166004830152915192935060009291891691638ee573ac91602480820192602092909190829003018186803b15801561524257600080fd5b505afa158015615256573d6000803e3d6000fd5b505050506040513d602081101561526c57600080fd5b5051604080516323b95ceb60e21b81526001600160a01b0388811660048301529151929350600092918a1691638ee573ac91602480820192602092909190829003018186803b1580156152be57600080fd5b505afa1580156152d2573d6000803e3d6000fd5b505050506040513d60208110156152e857600080fd5b5051604080516352f55eed60e01b81526001600160a01b038981166004830152915192935060009283928c16916352f55eed916024808301926020929190829003018186803b15801561533a57600080fd5b505afa15801561534e573d6000803e3d6000fd5b505050506040513d602081101561536457600080fd5b50516040805163c3c7b9e960e01b81526001600160a01b038b811660048301529151929350600092918d169163c3c7b9e991602480820192602092909190829003018186803b1580156153b657600080fd5b505afa1580156153ca573d6000803e3d6000fd5b505050506040513d60208110156153e057600080fd5b505160408051634a993ee960e01b81526001600160a01b038c811660048301529151929350600092918e1691634a993ee991602480820192602092909190829003018186803b15801561543257600080fd5b505afa158015615446573d6000803e3d6000fd5b505050506040513d602081101561545c57600080fd5b50519050600081831161546f5781615471565b825b905083811061548c5760009950505050505050505050614186565b6000615498858361577a565b90506154c587600a0a611f678a600a0a6154bf8e611f678f886157bc90919063ffffffff16565b906157bc565b955050505050506000896001600160a01b031663ad1e4f8d8a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561551b57600080fd5b505afa15801561552f573d6000803e3d6000fd5b505050506040513d602081101561554557600080fd5b5051905080156115de57896001600160a01b0316631aa4ace58a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561559c57600080fd5b505afa1580156155b0573d6000803e3d6000fd5b505050506040513d60208110156155c657600080fd5b50518110156155de5760009650505050505050614186565b60006156638b6001600160a01b0316631aa4ace58c6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561563057600080fd5b505afa158015615644573d6000803e3d6000fd5b505050506040513d602081101561565a57600080fd5b5051839061577a565b905061567f670de0b6b3a7640000611f6783600a89900a6157bc565b905061569b87611f678368327cb2734119d3b7a9601e1b6157bc565b9050808311156156b357965061418695505050505050565b505098975050505050505050565b600080805b83518110156118055760008482815181106156dd57fe5b602002602001015190506000866001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561573657600080fd5b505afa15801561574a573d6000803e3d6000fd5b505050506040513d602081101561576057600080fd5b5051905061576e8482615854565b935050506001016156c6565b600061418683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506158ac565b6000826157cb57506000611809565b828202828482816157d857fe5b04146141865760405162461bcd60e51b81526004018080602001828103825260218152602001806159a96021913960400191505060405180910390fd5b600061418683836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250615943565b600082820183811015614186576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6000818484111561593b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156159005781810151838201526020016158e8565b50505050905090810190601f16801561592d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836159925760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156159005781810151838201526020016158e8565b50600083858161599e57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220ed864f4c3cd5db8943b40de5c49b1fd63547f1a02e0dcc9ec55c39794b208ad364736f6c634300060c0033
Deployed ByteCode Sourcemap
22224:19476:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22296:52;;;:::i;:::-;;;;;;;;;;;;;;;;21941:18;;;:::i;:::-;;;;-1:-1:-1;;;;;21941:18:0;;;;;;;;;;;;;;34743:1403;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34743:1403:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34743:1403:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34743:1403:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34743:1403:0;;-1:-1:-1;34743:1403:0;;-1:-1:-1;;;;;34743:1403:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27752:391;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27752:391:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27752:391:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27752:391:0;;-1:-1:-1;27752:391:0;;-1:-1:-1;;;;;27752:391:0:i;31718:416::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31718:416:0;;;;;;;;;;;;;;;-1:-1:-1;;;31718:416:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31718:416:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31718:416:0;;-1:-1:-1;31718:416:0;;-1:-1:-1;;;;;31718:416:0:i;33068:758::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33068:758:0;;;;;;;;;;;;;;;-1:-1:-1;;;33068:758:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33068:758:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33068:758:0;;-1:-1:-1;33068:758:0;;-1:-1:-1;;;;;33068:758:0:i;33834:901::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33834:901:0;;;;;;;;;;;;;;;-1:-1:-1;;;33834:901:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33834:901:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33834:901:0;;-1:-1:-1;33834:901:0;;-1:-1:-1;;;;;33834:901:0:i;26090:1315::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26090:1315:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;28733:935;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28733:935:0;;;;;;;;;;;;;;;-1:-1:-1;;;28733:935:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28733:935:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28733:935:0;;-1:-1:-1;28733:935:0;;-1:-1:-1;;;;;28733:935:0:i;36154:1554::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36154:1554:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36154:1554:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36154:1554:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36154:1554:0;;-1:-1:-1;36154:1554:0;;-1:-1:-1;;;;;36154:1554:0:i;27413:331::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27413:331:0;;;;;;;;;;;;;;;-1:-1:-1;;;27413:331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27413:331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27413:331:0;;-1:-1:-1;27413:331:0;;-1:-1:-1;;;;;27413:331:0:i;22466:42::-;;;:::i;37716:1800::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37716:1800:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37716:1800:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37716:1800:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37716:1800:0;;-1:-1:-1;37716:1800:0;;-1:-1:-1;;;;;37716:1800:0:i;28151:574::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28151:574:0;;;;;;;;;;;;;;;-1:-1:-1;;;28151:574:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28151:574:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28151:574:0;;-1:-1:-1;28151:574:0;;-1:-1:-1;;;;;28151:574:0:i;22411:48::-;;;:::i;30412:1298::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30412:1298:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30412:1298:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30412:1298:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30412:1298:0;;-1:-1:-1;30412:1298:0;;-1:-1:-1;;;;;30412:1298:0:i;22560:131::-;;;;;;;;;;;;;;;;-1:-1:-1;22560:131:0;;;;:::i;:::-;;29676:728;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29676:728:0;;;;;;;;;;;;;;;-1:-1:-1;;;29676:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29676:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29676:728:0;;-1:-1:-1;29676:728:0;;-1:-1:-1;;;;;29676:728:0:i;22355:49::-;;;:::i;22517:34::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;22141:76;;;;;;;;;;;;;;;;-1:-1:-1;22141:76:0;-1:-1:-1;;;;;22141:76:0;;:::i;24332:1750::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24332:1750:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32548:512;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32548:512:0;;;;;;;;;;;;;;;-1:-1:-1;;;32548:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32548:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32548:512:0;;-1:-1:-1;32548:512:0;;-1:-1:-1;;;;;32548:512:0:i;39524:2173::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39524:2173:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39524:2173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39524:2173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39524:2173:0;;;;;;;;-1:-1:-1;39524:2173:0;;-1:-1:-1;;;;;39524:2173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39524:2173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39524:2173:0;;;;;;;;-1:-1:-1;39524:2173:0;;-1:-1:-1;;;;;39524:2173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39524:2173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39524:2173:0;;-1:-1:-1;39524:2173:0;;-1:-1:-1;;;;;39524:2173:0:i;22699:1625::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22699:1625:0;;;;;;;;;;;;;;;;;;;:::i;32142:398::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32142:398:0;;;;;;;;;;;;;;;-1:-1:-1;;;32142:398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32142:398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32142:398:0;;-1:-1:-1;32142:398:0;;-1:-1:-1;;;;;32142:398:0:i;22296:52::-;22343:5;22296:52;:::o;21941:18::-;;;-1:-1:-1;;;;;21941:18:0;;:::o;34743:1403::-;34912:16;34941:19;34963:2;34941:24;;34978:12;35000:6;34978:29;;35018:25;35062:5;-1:-1:-1;;;;;35062:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35062:17:0;35134:14;;35062:17;;-1:-1:-1;35093:24:0;;35134:28;;-1:-1:-1;;;;;35120:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35120:43:0;;35093:70;;35179:9;35174:938;35198:7;:14;35194:1;:18;35174:938;;;35234:13;35250:7;35258:1;35250:10;;;;;;;;;;;;;;35234:26;;35296:1;-1:-1:-1;;;;;35279:19:0;:5;-1:-1:-1;;;;;35279:19:0;;35275:73;;;-1:-1:-1;35327:5:0;35275:73;35389:5;-1:-1:-1;;;;;35389:17:0;;35407:5;35389:24;;;;;;;;;;;;;-1:-1:-1;;;;;35389:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35389:24:0;35362;;:7;;35370:15;;;;35362:24;;;;;;;;;;;:51;;;;;35459:5;-1:-1:-1;;;;;35459:21:0;;35481:5;35459:28;;;;;;;;;;;;;-1:-1:-1;;;;;35459:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35459:28:0;35428;;:7;;35454:1;35436:15;;;:19;;35428:28;;;;;;;;;;;:59;;;;;35533:5;-1:-1:-1;;;;;35533:17:0;;35551:5;35533:24;;;;;;;;;;;;;-1:-1:-1;;;;;35533:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35533:24:0;35502:28;;:7;;35528:1;35510:15;;;:19;;35502:28;;;;;;;;;;;:55;;;;;35603:5;-1:-1:-1;;;;;35603:25:0;;35629:5;35636:11;35603:45;;;;;;;;;;;;;-1:-1:-1;;;;;35603:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35603:45:0;35572:28;;:7;;35598:1;35580:15;;;:19;;35572:28;;;;;;;;;;;:76;;;;;35694:5;-1:-1:-1;;;;;35694:18:0;;35713:5;35694:25;;;;;;;;;;;;;-1:-1:-1;;;;;35694:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35694:25:0;35663:28;;:7;;35689:1;35671:15;;;:19;;35663:28;;;;;;;;;;;:56;;;;;35765:5;-1:-1:-1;;;;;35765:17:0;;35783:5;35765:24;;;;;;;;;;;;;-1:-1:-1;;;;;35765:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35765:24:0;35734:28;;:7;;35760:1;35742:15;;;:19;;35734:28;;;;;;;;;;;:55;;;;;35835:5;-1:-1:-1;;;;;35835:17:0;;35853:5;35835:24;;;;;;;;;;;;;-1:-1:-1;;;;;35835:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35835:24:0;35804:28;;:7;;35830:1;35812:15;;;:19;;35804:28;;;;;;;;;;;:55;;;;;35905:5;-1:-1:-1;;;;;35905:19:0;;35925:5;35905:26;;;;;;;;;;;;;-1:-1:-1;;;;;35905:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35905:26:0;35874:28;;:7;;35900:1;35882:15;;;:19;;35874:28;;;;;;;;;;;;;;;;:57;;;;35977:39;;;-1:-1:-1;;;35977:39:0;;-1:-1:-1;;;;;35977:39:0;;;;;;;36010:5;35977:39;;;;;;:25;;;;;;:39;;;;;;;;;;:25;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35977:39:0;35946:28;;:7;;35972:1;35954:15;;;:19;;35946:28;;;;;;;;;;;;;;;;:70;;;;36062:38;;;-1:-1:-1;;;36062:38:0;;-1:-1:-1;;;;;36062:38:0;;;;;;;36095:4;36062:38;;;;;;:25;;;;;;:38;;;;;;;;;;:25;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36062:38:0;36031:28;;:7;;36057:1;36039:15;;;:19;;36031:28;;;;;;;;;;;;;;;:69;-1:-1:-1;35214:3:0;;35174:938;;;-1:-1:-1;36131:7:0;34743:1403;-1:-1:-1;;;;;;;;34743:1403:0:o;27752:391::-;27828:16;27857:24;27898:12;:19;-1:-1:-1;;;;;27884:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27884:34:0;;27857:61;;27934:9;27929:182;27953:12;:19;27949:1;:23;27929:182;;;27994:22;28031:12;28044:1;28031:15;;;;;;;;;;;;;;27994:53;;28075:10;-1:-1:-1;;;;;28075:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28075:24:0;28062:10;;:7;;28070:1;;28062:10;;;;;;;;;;;;;;;:37;-1:-1:-1;27974:3:0;;27929:182;;;-1:-1:-1;28128:7:0;27752:391;-1:-1:-1;;27752:391:0:o;31718:416::-;31814:7;31834:14;31851:6;-1:-1:-1;;;;;31851:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31851:20:0;;-1:-1:-1;31887:9:0;31882:221;31906:17;:24;31902:1;:28;31882:221;;;31952:15;31970:17;31988:1;31970:20;;;;;;;;;;;;;;31952:38;;32005:15;32023:6;-1:-1:-1;;;;;32023:16:0;;32040:7;32023:25;;;;;;;;;;;;;-1:-1:-1;;;;;32023:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32023:25:0;;-1:-1:-1;32072:19:0;:6;32023:25;32072:10;:19::i;:::-;32063:28;-1:-1:-1;;;31932:3:0;;31882:221;;;-1:-1:-1;32120:6:0;-1:-1:-1;31718:416:0;;;;;:::o;33068:758::-;33198:16;33232:19;33254:1;33232:23;;33266:25;33325:11;33308:7;:14;:28;-1:-1:-1;;;;;33294:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33294:43:0;;33266:71;;33353:9;33348:445;33372:7;:14;33368:1;:18;33348:445;;;33408:13;33424:7;33432:1;33424:10;;;;;;;;;;;;;;33408:26;;33470:1;-1:-1:-1;;;;;33453:19:0;:5;-1:-1:-1;;;;;33453:19:0;;33449:183;;;33521:8;-1:-1:-1;;;;;33521:16:0;;33493:8;33506:11;33502:1;:15;33493:25;;;;;;;;;;;;;:44;;;;;33588:1;33556:8;33569:11;33565:1;:15;33583:1;33565:19;33556:29;;;;;;;;;;;;;:33;;;;;33608:8;;;33449:183;33681:5;-1:-1:-1;;;;;33674:23:0;;33698:8;33674:33;;;;;;;;;;;;;-1:-1:-1;;;;;33674:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33674:33:0;33646:25;;:8;;33655:15;;;;33646:25;;;;;;;;;;;:61;;;;;33761:5;-1:-1:-1;;;;;33754:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33754:27:0;33722:29;;:8;;33749:1;33731:15;;;:19;;33722:29;;;;;;;;;;;:59;;;;;33348:445;;33388:3;;33348:445;;;-1:-1:-1;33810:8:0;33068:758;-1:-1:-1;;;;33068:758:0:o;33834:901::-;33928:16;33957:19;33979:1;33957:23;;33993:24;34051:11;34034:7;:14;:28;-1:-1:-1;;;;;34020:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34020:43:0;;33993:70;;34081:9;34076:625;34100:7;:14;34096:1;:18;34076:625;;;34136:13;34152:7;34160:1;34152:10;;;;;;;;;;;;;;;;;;;34204:45;;;-1:-1:-1;;;34204:45:0;;-1:-1:-1;;;;;34204:45:0;;;;;;;34231:4;34204:45;;;;;;;;;;34243:5;34204:45;;;;;;34152:10;;-1:-1:-1;34204:19:0;;;;;;:45;;;;;;;;;;:19;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34204:45:0;34177:24;;:7;;34185:15;;;;34177:24;;;;;;;;;;;;;;;;:72;;;;34295:46;;;-1:-1:-1;;;34295:46:0;;-1:-1:-1;;;;;34295:46:0;;;;;;;34322:5;34295:46;;;;;;34329:4;34295:46;;;;;;;;;;:19;;;;;;:46;;;;;;;;;;:19;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34295:46:0;34264:28;;:7;;34290:1;34272:15;;;:19;;34264:28;;;;;;;;;;;;;;;;:77;;;;34387:39;;;-1:-1:-1;;;34387:39:0;;-1:-1:-1;;;;;34387:39:0;;;;;;;34421:4;34387:39;;;;;;:26;;;;;;:39;;;;;;;;;;:26;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34387:39:0;34356:28;;:7;;34382:1;34364:15;;;:19;;34356:28;;;;;;;;;;;;;;;;:70;;;;34472:40;;;-1:-1:-1;;;34472:40:0;;-1:-1:-1;;;;;34472:40:0;;;;;;;34506:5;34472:40;;;;;;:26;;;;;;:40;;;;;;;;;;:26;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34472:40:0;34441:28;;:7;;34467:1;34449:15;;;:19;;34441:28;;;;;;;;;;;:71;;;;;34558:10;-1:-1:-1;;;;;34558:31:0;;34590:5;34558:38;;;;;;;;;;;;;-1:-1:-1;;;;;34558:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34558:38:0;:46;;34603:1;34558:46;;;34599:1;34558:46;34527:77;;:7;34539:11;34535:1;:15;34553:1;34535:19;34527:28;;;;;;;;;;;;;:77;;;;;34650:10;-1:-1:-1;;;;;34650:32:0;;34683:5;34650:39;;;;;;;;;;;;;-1:-1:-1;;;;;34650:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34650:39:0;34619:28;;:7;;34645:1;34627:15;;;:19;;34619:28;;;;;;;;;;;;;;;:70;-1:-1:-1;34116:3:0;;34076:625;;26090:1315;26293:7;26315;26337;26372:15;26390:6;-1:-1:-1;;;;;26390:18:0;;26409:8;26390:28;;;;;;;;;;;;;-1:-1:-1;;;;;26390:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26390:28:0;26455:30;;;-1:-1:-1;;;26455:30:0;;-1:-1:-1;;;;;26455:30:0;;;;;;;;;26390:28;;-1:-1:-1;26429:23:0;;26455:20;;;;;;:30;;;;;26390:28;;26455:30;;;;;;;;:20;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26455:30:0;;-1:-1:-1;26498:18:0;26519:43;-1:-1:-1;;;26519:22:0;:9;26533:7;26519:13;:22::i;:::-;:26;;:43::i;:::-;26498:64;-1:-1:-1;26586:58:0;26624:2;:19;;;26586:33;26498:64;26601:17;26586:14;:33::i;:58::-;26573:71;;26657:17;26677:6;-1:-1:-1;;;;;26677:19:0;;26697:8;26677:29;;;;;;;;;;;;;-1:-1:-1;;;;;26677:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26677:29:0;:63;;;;;26710:6;-1:-1:-1;;;;;26710:19:0;;26730:9;26710:30;;;;;;;;;;;;;-1:-1:-1;;;;;26710:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26710:30:0;26677:63;26657:83;;26751:15;26769:12;:78;;26820:6;-1:-1:-1;;;;;26820:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26820:27:0;26769:78;;;26784:6;-1:-1:-1;;;;;26784:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26784:33:0;26769:78;26751:96;;26858:14;26875:12;:70;;26922:6;-1:-1:-1;;;;;26922:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26922:23:0;26875:70;;;26890:6;-1:-1:-1;;;;;26890:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26890:29:0;26875:70;26858:87;;26956:24;26983:6;-1:-1:-1;;;;;26983:24:0;;27008:8;27018:10;27030:7;27039:6;27047:4;26983:69;;;;;;;;;;;;;-1:-1:-1;;;;;26983:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26956:96;;27063:24;27090:6;-1:-1:-1;;;;;27090:24:0;;27115:9;27126:10;27138:7;27147:6;27155:5;27090:71;;;;;;;;;;;;;-1:-1:-1;;;;;27090:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27090:71:0;;-1:-1:-1;27227:22:0;27252:35;;;:73;;27309:16;27252:73;;;27290:16;27252:73;27227:98;-1:-1:-1;27362:16:0;;-1:-1:-1;27380:16:0;-1:-1:-1;;;;;;;;26090:1315:0;;;;;;;;:::o;28733:935::-;28823:16;28852:19;28874:1;28852:23;;28886:24;28945:11;28927:8;:15;:29;-1:-1:-1;;;;;28913:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28913:44:0;;28886:71;;28973:9;28968:668;28992:8;:15;28988:1;:19;28968:668;;;29029:14;29054:8;29063:1;29054:11;;;;;;;;;;;;;;29029:37;;29108:6;-1:-1:-1;;;;;29108:18:0;;29127:8;29108:28;;;;;;;;;;;;;-1:-1:-1;;;;;29108:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29108:28:0;29081:24;;:7;;29089:15;;;;29081:24;;;;;;;;;;;:55;;;;;29182:6;-1:-1:-1;;;;;29182:22:0;;29205:8;29182:32;;;;;;;;;;;;;-1:-1:-1;;;;;29182:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29182:32:0;29151:28;;:7;;29177:1;29159:15;;;:19;;29151:28;;;;;;;;;;;:63;;;;;29267:8;29276:1;29267:11;;;;;;;;;;;;;;-1:-1:-1;;;;;29260:29:0;;29290:8;29260:39;;;;;;;;;;;;;-1:-1:-1;;;;;29260:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29260:39:0;29229:28;;:7;;29255:1;29237:15;;;:19;;29229:28;;;;;;;;;;;:70;;;;;29345:6;-1:-1:-1;;;;;29345:21:0;;29367:8;29345:31;;;;;;;;;;;;;-1:-1:-1;;;;;29345:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29345:31:0;29314:28;;:7;;29340:1;29322:15;;;:19;;29314:28;;;;;;;;;;;:62;;;;;29422:6;-1:-1:-1;;;;;29422:16:0;;29439:8;29422:26;;;;;;;;;;;;;-1:-1:-1;;;;;29422:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29422:26:0;29391:28;;:7;;29417:1;29399:15;;;:19;;29391:28;;;;;;;;;;;:57;;;;;29494:6;-1:-1:-1;;;;;29494:27:0;;29522:8;29494:37;;;;;;;;;;;;;-1:-1:-1;;;;;29494:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29494:37:0;29463:28;;:7;;29489:1;29471:15;;;:19;;29463:28;;;;;;;;;;;:68;;;;;29577:6;-1:-1:-1;;;;;29577:37:0;;29615:8;29577:47;;;;;;;;;;;;;-1:-1:-1;;;;;29577:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29577:47:0;29546:28;;:7;;29572:1;29554:15;;;:19;;29546:28;;;;;;;;;;;;;;;:78;-1:-1:-1;29009:3:0;;28968:668;;36154:1554;36327:16;36356:19;36378:2;36356:24;;36393:12;36415:6;36393:29;;36433:25;36477:5;-1:-1:-1;;;;;36477:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36477:17:0;36549:14;;36477:17;;-1:-1:-1;36508:24:0;;36549:28;;-1:-1:-1;;;;;36535:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36535:43:0;;36508:70;;36594:9;36589:1085;36613:7;:14;36609:1;:18;36589:1085;;;36649:13;36665:7;36673:1;36665:10;;;;;;;;;;;;;;36649:26;;36711:1;-1:-1:-1;;;;;36694:19:0;:5;-1:-1:-1;;;;;36694:19:0;;36690:73;;;-1:-1:-1;36742:5:0;36690:73;36804:5;-1:-1:-1;;;;;36804:17:0;;36822:5;36804:24;;;;;;;;;;;;;-1:-1:-1;;;;;36804:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36804:24:0;36777;;:7;;36785:15;;;;36777:24;;;;;;;;;;;:51;;;;;36874:5;-1:-1:-1;;;;;36874:21:0;;36896:5;36874:28;;;;;;;;;;;;;-1:-1:-1;;;;;36874:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36874:28:0;36843;;:7;;36869:1;36851:15;;;:19;;36843:28;;;;;;;;;;;:59;;;;;36948:5;-1:-1:-1;;;;;36948:17:0;;36966:5;36948:24;;;;;;;;;;;;;-1:-1:-1;;;;;36948:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36948:24:0;36917:28;;:7;;36943:1;36925:15;;;:19;;36917:28;;;;;;;;;;;:55;;;;;37018:5;-1:-1:-1;;;;;37018:25:0;;37044:5;37051:11;37018:45;;;;;;;;;;;;;-1:-1:-1;;;;;37018:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37018:45:0;36987:28;;:7;;37013:1;36995:15;;;:19;;36987:28;;;;;;;;;;;:76;;;;;37109:5;-1:-1:-1;;;;;37109:18:0;;37128:5;37109:25;;;;;;;;;;;;;-1:-1:-1;;;;;37109:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37109:25:0;37078:28;;:7;;37104:1;37086:15;;;:19;;37078:28;;;;;;;;;;;:56;;;;;37180:5;-1:-1:-1;;;;;37180:19:0;;37200:5;37180:26;;;;;;;;;;;;;-1:-1:-1;;;;;37180:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37180:26:0;37149:28;;:7;;37175:1;37157:15;;;:19;;37149:28;;;;;;;;;;;:57;;;;;37252:5;-1:-1:-1;;;;;37252:20:0;;37273:5;37252:27;;;;;;;;;;;;;-1:-1:-1;;;;;37252:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37252:27:0;37221:28;;:7;;37247:1;37229:15;;;:19;;37221:28;;;;;;;;;;;:58;;;;;37325:5;-1:-1:-1;;;;;37325:17:0;;37343:5;37325:24;;;;;;;;;;;;;-1:-1:-1;;;;;37325:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37325:24:0;37294:28;;:7;;37320:1;37302:15;;;:19;;37294:28;;;;;;;;;;;:55;;;;;37395:5;-1:-1:-1;;;;;37395:17:0;;37413:5;37395:24;;;;;;;;;;;;;-1:-1:-1;;;;;37395:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37395:24:0;37364:28;;:7;;37390:1;37372:15;;;:19;;37364:28;;;;;;;;;;;:55;;;;;37465:5;-1:-1:-1;;;;;37465:19:0;;37485:5;37465:26;;;;;;;;;;;;;-1:-1:-1;;;;;37465:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37465:26:0;37434:28;;:7;;37460:1;37442:15;;;:19;;37434:28;;;;;;;;;;;;;;;;:57;;;;37538:39;;;-1:-1:-1;;;37538:39:0;;-1:-1:-1;;;;;37538:39:0;;;;;;;37571:5;37538:39;;;;;;:25;;;;;;:39;;;;;;;;;;:25;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37538:39:0;37506:29;;:7;;37532:2;37514:15;;;:20;;37506:29;;;;;;;;;;;;;;;;:71;;;;37624:38;;;-1:-1:-1;;;37624:38:0;;-1:-1:-1;;;;;37624:38:0;;;;;;;37657:4;37624:38;;;;;;:25;;;;;;:38;;;;;;;;;;:25;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37624:38:0;37592:29;;:7;;37618:2;37600:15;;;:20;;37592:29;;;;;;;;;;;;;;;:70;-1:-1:-1;36629:3:0;;36589:1085;;27413:331;27493:16;27522:24;27563:7;:14;-1:-1:-1;;;;;27549:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27549:29:0;;27522:56;;27594:9;27589:123;27613:7;:14;27609:1;:18;27589:123;;;27669:6;-1:-1:-1;;;;;27662:26:0;;27689:7;27697:1;27689:10;;;;;;;;;;;;;;27662:38;;;;;;;;;;;;;-1:-1:-1;;;;;27662:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27662:38:0;27649:10;;:7;;27657:1;;27649:10;;;;;;;;;;;;;;;:51;27629:3;;27589:123;;22466:42;22506:2;22466:42;:::o;37716:1800::-;37887:16;37916:19;37938:2;37916:24;;37953:12;37975:6;37953:29;;37993:25;38037:5;-1:-1:-1;;;;;38037:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38037:17:0;38109:14;;38037:17;;-1:-1:-1;38068:24:0;;38109:28;;-1:-1:-1;;;;;38095:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38095:43:0;;38068:70;;38154:9;38149:1333;38173:7;:14;38169:1;:18;38149:1333;;;38209:13;38225:7;38233:1;38225:10;;;;;;;;;;;;;;38209:26;;38271:1;-1:-1:-1;;;;;38254:19:0;:5;-1:-1:-1;;;;;38254:19:0;;38250:73;;;-1:-1:-1;38302:5:0;38250:73;38339:26;38368:22;;-1:-1:-1;;;38368:22:0;;;;:61;;38428:1;38368:61;;;38393:5;-1:-1:-1;;;;;38393:25:0;;38419:5;38393:32;;;;;;;;;;;;;-1:-1:-1;;;;;38393:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38393:32:0;38368:61;38339:90;;38471:5;-1:-1:-1;;;;;38471:17:0;;38489:5;38471:24;;;;;;;;;;;;;-1:-1:-1;;;;;38471:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38471:24:0;38444;;:7;;38452:15;;;;38444:24;;;;;;;;;;;:51;;;;;38541:5;-1:-1:-1;;;;;38541:21:0;;38563:5;38541:28;;;;;;;;;;;;;-1:-1:-1;;;;;38541:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38541:28:0;38510;;:7;;38536:1;38518:15;;;:19;;38510:28;;;;;;;;;;;:59;;;;;38615:5;-1:-1:-1;;;;;38615:17:0;;38633:5;38615:24;;;;;;;;;;;;;-1:-1:-1;;;;;38615:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38615:24:0;38584:28;;:7;;38610:1;38592:15;;;:19;;38584:28;;;;;;;;;;;:55;;;;;38685:5;-1:-1:-1;;;;;38685:25:0;;38711:5;38718:11;38685:45;;;;;;;;;;;;;-1:-1:-1;;;;;38685:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38685:45:0;38654:28;;:7;;38680:1;38662:15;;;:19;;38654:28;;;;;;;;;;;:76;;;;;38776:5;-1:-1:-1;;;;;38776:18:0;;38795:5;38776:25;;;;;;;;;;;;;-1:-1:-1;;;;;38776:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38776:25:0;38745:28;;:7;;38771:1;38753:15;;;:19;;38745:28;;;;;;;;;;;:56;;;;;38847:5;-1:-1:-1;;;;;38847:19:0;;38867:5;38847:26;;;;;;;;;;;;;-1:-1:-1;;;;;38847:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38847:26:0;38816:28;;:7;;38842:1;38824:15;;;:19;;38816:28;;;;;;;;;;;:57;;;;;38919:5;-1:-1:-1;;;;;38919:20:0;;38940:5;38919:27;;;;;;;;;;;;;-1:-1:-1;;;;;38919:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38919:27:0;38888:28;;:7;;38914:1;38896:15;;;:19;;38888:28;;;;;;;;;;;:58;;;;;38992:5;-1:-1:-1;;;;;38992:22:0;;39015:5;38992:29;;;;;;;;;;;;;-1:-1:-1;;;;;38992:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38992:29:0;38961:28;;:7;;38987:1;38969:15;;;:19;;38961:28;;;;;;;;;;;:60;;;;;39067:18;39036:7;39048:11;39044:1;:15;39062:1;39044:19;39036:28;;;;;;;;;;;;;:49;;;;;39131:5;-1:-1:-1;;;;;39131:17:0;;39149:5;39131:24;;;;;;;;;;;;;-1:-1:-1;;;;;39131:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39131:24:0;39100:28;;:7;;39126:1;39108:15;;;:19;;39100:28;;;;;;;;;;;:55;;;;;39202:5;-1:-1:-1;;;;;39202:17:0;;39220:5;39202:24;;;;;;;;;;;;;-1:-1:-1;;;;;39202:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39202:24:0;39170:29;;:7;;39196:2;39178:15;;;:20;;39170:29;;;;;;;;;;;:56;;;;;39273:5;-1:-1:-1;;;;;39273:19:0;;39293:5;39273:26;;;;;;;;;;;;;-1:-1:-1;;;;;39273:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39273:26:0;39241:29;;:7;;39267:2;39249:15;;;:20;;39241:29;;;;;;;;;;;;;;;;:58;;;;39346:39;;;-1:-1:-1;;;39346:39:0;;-1:-1:-1;;;;;39346:39:0;;;;;;;39379:5;39346:39;;;;;;:25;;;;;;:39;;;;;;;;;;:25;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39346:39:0;39314:29;;:7;;39340:2;39322:15;;;:20;;39314:29;;;;;;;;;;;;;;;;:71;;;;39432:38;;;-1:-1:-1;;;39432:38:0;;-1:-1:-1;;;;;39432:38:0;;;;;;;39465:4;39432:38;;;;;;:25;;;;;;:38;;;;;;;;;;:25;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39432:38:0;39400:29;;:7;;39426:2;39408:15;;;:20;;39400:29;;;;;;;;;;;;;;;:70;-1:-1:-1;;38189:3:0;;38149:1333;;28151:574;28247:16;28276:19;28298:1;28276:23;;28310:24;28375:11;28351:14;:21;:35;-1:-1:-1;;;;;28337:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28337:50:0;;28310:77;;28403:9;28398:295;28422:14;:21;28418:1;:25;28398:295;;;28465:26;28508:14;28523:1;28508:17;;;;;;;;;;;;;;28465:61;;28568:12;-1:-1:-1;;;;;28568:22:0;;28591:8;28568:32;;;;;;;;;;;;;-1:-1:-1;;;;;28568:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28568:32:0;28541:24;;:7;;28549:15;;;;28541:24;;;;;;;;;;;:59;;;;;28646:12;-1:-1:-1;;;;;28646:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28646:35:0;28615:28;;:7;;28641:1;28623:15;;;:19;;28615:28;;;;;;;;;;;;;;;:66;-1:-1:-1;28445:3:0;;28398:295;;22411:48;-1:-1:-1;;;22411:48:0;:::o;30412:1298::-;30549:16;30578:19;30600:1;30578:23;;30612:29;30675:11;30658:7;:14;:28;-1:-1:-1;;;;;30644:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30644:43:0;-1:-1:-1;30612:75:0;-1:-1:-1;30720:6:0;30698:12;30740:931;30764:7;:14;30760:1;:18;30740:931;;;30800:13;30816:7;30824:1;30816:10;;;;;;;;;;;;;;30800:26;;30862:1;-1:-1:-1;;;;;30845:19:0;:5;-1:-1:-1;;;;;30845:19:0;;30841:73;;;-1:-1:-1;30893:5:0;30841:73;30930:25;30958:5;-1:-1:-1;;;;;30958:18:0;;30977:5;30958:25;;;;;;;;;;;;;-1:-1:-1;;;;;30958:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30958:25:0;:121;;31054:5;-1:-1:-1;;;;;31054:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31054:25:0;30958:121;;;31003:5;-1:-1:-1;;;;;31003:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31003:31:0;30958:121;30930:149;;31094:22;31119:5;-1:-1:-1;;;;;31119:21:0;;31141:5;31119:28;;;;;;;;;;;;;-1:-1:-1;;;;;31119:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31119:28:0;31183:24;;;-1:-1:-1;;;31183:24:0;;-1:-1:-1;;;;;31183:24:0;;;;;;;;;31119:28;;-1:-1:-1;31162:18:0;;31183:17;;;;;;:24;;;;;31119:28;;31183:24;;;;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31183:24:0;;-1:-1:-1;31228:14:0;;31224:140;;31295:53;31337:10;31295:37;:17;31317:14;31295:21;:37::i;:53::-;31263:12;31280:11;31276:1;:15;31263:29;;;;;;;;;;;;;:85;;;;;31224:140;31422:1;31384:5;-1:-1:-1;;;;;31384:28:0;;31413:5;31384:35;;;;;;;;;;;;;-1:-1:-1;;;;;31384:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31384:35:0;:39;31380:280;;;31444:16;31463:5;-1:-1:-1;;;;;31463:24:0;;31488:5;31463:31;;;;;;;;;;;;;-1:-1:-1;;;;;31463:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31463:31:0;31532:35;;;-1:-1:-1;;;31532:35:0;;-1:-1:-1;;;;;31532:35:0;;;;;;;;;31463:31;;-1:-1:-1;31513:16:0;;31532:28;;;;;;:35;;;;;31463:31;;31532:35;;;;;;;;:28;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31532:35:0;;-1:-1:-1;31622:22:0;31532:35;31635:8;31622:12;:22::i;:::-;31586:12;31603:11;31599:1;:15;31617:1;31599:19;31586:33;;;;;;;;;;;;;:58;;;;;31380:280;;;-1:-1:-1;;30780:3:0;;;;;-1:-1:-1;30740:931:0;;-1:-1:-1;30740:931:0;;-1:-1:-1;31690:12:0;;-1:-1:-1;;;30412:1298:0;;;;;;:::o;22560:131::-;22084:3;;-1:-1:-1;;;;;22084:3:0;22070:10;:17;22062:51;;;;;-1:-1:-1;;;22062:51:0;;;;;;;;;;;;-1:-1:-1;;;22062:51:0;;;;;;;;;;;;;;;22635:22:::1;:48:::0;;;::::1;;-1:-1:-1::0;;;22635:48:0::1;-1:-1:-1::0;;;;22635:48:0;;::::1;::::0;;;::::1;::::0;;22560:131::o;29676:728::-;29901:14;;29762:16;;29813:1;;;;29762:16;;29901:28;;;29900:44;;-1:-1:-1;;;;;29886:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29886:59:0;;29859:86;;29961:9;29956:416;29997:11;29980:7;:14;:28;;;;;;29976:1;:32;29956:416;;;30030:14;30047:7;30059:11;30055:1;:15;30047:24;;;;;;;;;;;;;;30030:41;;30086:14;30103:7;30115:11;30111:1;:15;30129:1;30111:19;30103:28;;;;;;;;;;;;;;30086:45;;30146:12;30177:8;-1:-1:-1;;;;;30161:33:0;;30195:6;30203;30161:49;;;;;;;;;;;;;-1:-1:-1;;;;;30161:49:0;;;;;;-1:-1:-1;;;;;30161:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30161:49:0;30254:30;;;-1:-1:-1;;;30254:30:0;;-1:-1:-1;;;;;30254:30:0;;;;;;;;;30161:49;;-1:-1:-1;30254:24:0;;;;;;:30;;;;;30161:49;;30254:30;;;;;;;;:24;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30254:30:0;30227:24;;:7;;30235:15;;;;30227:24;;;;;;;;;;;:57;;;;;30337:6;-1:-1:-1;;;;;30330:24:0;;30355:4;30330:30;;;;;;;;;;;;;-1:-1:-1;;;;;30330:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30330:30:0;30299:28;;:7;;30325:1;30307:15;;;:19;;30299:28;;;;;;;;;;;;;;;:61;-1:-1:-1;;;30010:3:0;;29956:416;;;-1:-1:-1;30389:7:0;29676:728;-1:-1:-1;;;;;29676:728:0:o;22355:49::-;22403:1;22355:49;:::o;22517:34::-;;;-1:-1:-1;;;22517:34:0;;;;;:::o;22141:76::-;22084:3;;-1:-1:-1;;;;;22084:3:0;22070:10;:17;22062:51;;;;;-1:-1:-1;;;22062:51:0;;;;;;;;;;;;-1:-1:-1;;;22062:51:0;;;;;;;;;;;;;;;22199:3:::1;:10:::0;;-1:-1:-1;;;;;;22199:10:0::1;-1:-1:-1::0;;;;;22199:10:0;;;::::1;::::0;;;::::1;::::0;;22141:76::o;24332:1750::-;24489:7;24498;24518:15;24536:6;-1:-1:-1;;;;;24536:18:0;;24555:8;24536:28;;;;;;;;;;;;;-1:-1:-1;;;;;24536:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24536:28:0;24603:30;;;-1:-1:-1;;;24603:30:0;;-1:-1:-1;;;;;24603:30:0;;;;;;;;;24536:28;;-1:-1:-1;24577:23:0;;24603:20;;;;;;:30;;;;;24536:28;;24603:30;;;;;;;;:20;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24603:30:0;24671:31;;;-1:-1:-1;;;24671:31:0;;-1:-1:-1;;;;;24671:31:0;;;;;;;;;24603:30;;-1:-1:-1;24644:24:0;;24671:20;;;;;;:31;;;;;24603:30;;24671:31;;;;;;;;:20;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24671:31:0;;-1:-1:-1;24715:22:0;;24784:43;-1:-1:-1;;;24784:22:0;:9;24798:7;24784:13;:22::i;:43::-;24763:64;-1:-1:-1;24855:58:0;24893:2;:19;;;24855:33;24763:64;24870:17;24855:14;:33::i;:58::-;24842:71;;24930:17;24950:6;-1:-1:-1;;;;;24950:19:0;;24970:8;24950:29;;;;;;;;;;;;;-1:-1:-1;;;;;24950:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24950:29:0;:63;;;;;24983:6;-1:-1:-1;;;;;24983:19:0;;25003:9;24983:30;;;;;;;;;;;;;-1:-1:-1;;;;;24983:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24983:30:0;24950:63;24930:83;;25028:15;25046:12;:78;;25097:6;-1:-1:-1;;;;;25097:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25097:27:0;25046:78;;;25061:6;-1:-1:-1;;;;;25061:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25061:33:0;25046:78;25028:96;;25139:14;25156:12;:70;;25203:6;-1:-1:-1;;;;;25203:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25203:23:0;25156:70;;;25171:6;-1:-1:-1;;;;;25171:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25171:29:0;25156:70;25139:87;;25241:24;25268:6;-1:-1:-1;;;;;25268:24:0;;25293:8;25303:10;25315:7;25324:6;25332:4;25268:69;;;;;;;;;;;;;-1:-1:-1;;;;;25268:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25241:96;;25352:24;25379:6;-1:-1:-1;;;;;25379:24:0;;25404:9;25415:10;25427:7;25436:6;25444:5;25379:71;;;;;;;;;;;;;-1:-1:-1;;;;;25379:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25379:71:0;;-1:-1:-1;25541:35:0;;;:73;;25598:16;25541:73;;;25579:16;25541:73;25524:90;;24332:1750;;;;;;25638:16;25657:6;-1:-1:-1;;;;;25657:18:0;;25676:9;25657:29;;;;;;;;;;;;;-1:-1:-1;;;;;25657:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25657:29:0;;-1:-1:-1;25697:17:0;25717:36;25657:29;25717:22;:9;25731:7;25717:13;:22::i;:36::-;25697:56;;25776:60;25820:15;25816:2;:19;25776:35;25794:16;25790:2;:20;25776:9;:13;;:35;;;;:::i;:60::-;25764:72;-1:-1:-1;25849:26:0;25878:81;22343:5;25878:55;25892:40;22343:5;25917:14;25892:24;:40::i;:::-;25878:9;;:13;:55::i;:81::-;25849:110;-1:-1:-1;25970:17:0;25990:33;:9;25849:110;25990:13;:33::i;:::-;26044:18;;;;-1:-1:-1;24332:1750:0;;-1:-1:-1;;;;;;;;;;;;24332:1750:0:o;32548:512::-;32639:16;32668:25;32710:7;:14;-1:-1:-1;;;;;32696:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32696:29:0;;32668:57;;32741:9;32736:291;32760:7;:14;32756:1;:18;32736:291;;;32796:13;32812:7;32820:1;32812:10;;;;;;;;;;;;;;32796:26;;32858:1;-1:-1:-1;;;;;32841:19:0;:5;-1:-1:-1;;;;;32841:19:0;;32837:117;;;32895:8;-1:-1:-1;;;;;32895:16:0;;32881:8;32890:1;32881:11;;;;;;;;;;;;;:30;;;;;32930:8;;;32837:117;32989:5;-1:-1:-1;;;;;32982:23:0;;33006:8;32982:33;;;;;;;;;;;;;-1:-1:-1;;;;;32982:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32982:33:0;32968:11;;:8;;32977:1;;32968:11;;;;;;;;;;;:47;;;;;32736:291;;32776:3;;32736:291;;39524:2173;39743:16;39772:24;22403:1;39813:17;:24;:48;-1:-1:-1;;;;;39799:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39799:63:0;;39772:90;;39880:9;39875:1788;39899:17;:24;39895:1;:28;39875:1788;;;39987:12;40022:18;40063:20;40106:24;40217:19;40259:22;40304:25;40358:6;-1:-1:-1;;;;;40351:26:0;;40378:8;40388:17;40406:1;40388:20;;;;;;;;;;;;;;40410:12;40423:1;40410:15;;;;;;;;;;;;;;40427:7;40435:1;40427:10;;;;;;;;;;;;;;40351:87;;;;;;;;;;;;;-1:-1:-1;;;;;40351:87:0;;;;;;-1:-1:-1;;;;;40351:87:0;;;;;;-1:-1:-1;;;;;40351:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40351:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;40459:34;;40351:87;;-1:-1:-1;40351:87:0;;-1:-1:-1;40351:87:0;;-1:-1:-1;40351:87:0;-1:-1:-1;40351:87:0;-1:-1:-1;40351:87:0;;-1:-1:-1;40351:87:0;;-1:-1:-1;40351:87:0;;40459:7;;22403:1;40467:25;;;40459:34;;;;;;;;;;;:41;;;;;40560:10;40519:7;22403:1;40527;:25;40555:1;40527:29;40519:38;;;;;;;;;;;;;:51;;;;;40630:12;40589:7;22403:1;40597;:25;40625:1;40597:29;40589:38;;;;;;;;;;;;;:53;;;;;40702:16;40661:7;22403:1;40669;:25;40697:1;40669:29;40661:38;;;;;;;;;;;;;:57;;;;;40778:17;:25;;40802:1;40778:25;;;40798:1;40778:25;40737:66;;:7;22403:1;40745;:25;40773:1;40745:29;40737:38;;;;;;;;;;;;;:66;;;;;40863:11;40822:7;22403:1;40830;:25;40858:1;40830:29;40822:38;;;;;;;;;;;;;:52;;;;;40934:17;40893:7;22403:1;40901;:25;40929:1;40901:29;40893:38;;;;;;;;;;;;;:58;;;;;39875:1788;;;;;;;40983:12;40998:7;22403:1;41006;:25;40998:34;;;;;;;;;;;;;;40983:49;;41047:20;41070:7;22403:1;41078;:25;41106:1;41078:29;41070:38;;;;;;;;;;;;;;41047:61;;41123:25;41151:7;22403:1;41159;:25;41187:1;41159:29;41151:38;;;;;;;;;;;;;;41123:66;;41223:1;41208:12;:16;41204:448;;;41246:14;41262:13;41286:6;-1:-1:-1;;;;;41279:23:0;;41325:12;41338:1;41325:15;;;;;;;;;;;;;;41363:4;41390:12;41425:7;41433:1;41425:10;;;;;;;;;;;;;;41458:17;41279:215;;;;;;;;;;;;;-1:-1:-1;;;;;41279:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41279:215:0;;;;;;;;;-1:-1:-1;41279:215:0;-1:-1:-1;41279:215:0;41554:17;;41570:1;41554:17;;;41566:1;41554:17;41513:58;;:7;22403:1;41521;:25;41549:1;41521:29;41513:38;;;;;;;;;;;;;:58;;;;;41631:5;41590:7;22403:1;41598;:25;41626:1;41598:29;41590:38;;;;;;;;;;;;;:46;;;;;41204:448;;;-1:-1:-1;;;39925:3:0;;39875:1788;;;-1:-1:-1;41682:7:0;39524:2173;-1:-1:-1;;;;;;39524:2173:0:o;22699:1625::-;22830:7;22850:15;22868:6;-1:-1:-1;;;;;22868:18:0;;22887:8;22868:28;;;;;;;;;;;;;-1:-1:-1;;;;;22868:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22868:28:0;22926:29;;;-1:-1:-1;;;22926:29:0;;-1:-1:-1;;;;;22926:29:0;;;;;;;;;22868:28;;-1:-1:-1;22907:16:0;;22926:18;;;;;;:29;;;;;22868:28;;22926:29;;;;;;;;:18;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22926:29:0;22994:30;;;-1:-1:-1;;;22994:30:0;;-1:-1:-1;;;;;22994:30:0;;;;;;;;;22926:29;;-1:-1:-1;22968:23:0;;22994:20;;;;;;:30;;;;;22926:29;;22994:30;;;;;;;;:20;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22994:30:0;23062:31;;;-1:-1:-1;;;23062:31:0;;-1:-1:-1;;;;;23062:31:0;;;;;;;;;22994:30;;-1:-1:-1;23035:24:0;;23062:20;;;;;;:31;;;;;22994:30;;23062:31;;;;;;;;:20;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23062:31:0;23171:29;;;-1:-1:-1;;;23171:29:0;;-1:-1:-1;;;;;23171:29:0;;;;;;;;;23062:31;;-1:-1:-1;23106:16:0;;;;23171:18;;;;;:29;;;;;23062:31;;23171:29;;;;;;;:18;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23171:29:0;23240:33;;;-1:-1:-1;;;23240:33:0;;-1:-1:-1;;;;;23240:33:0;;;;;;;;;23171:29;;-1:-1:-1;23215:22:0;;23240;;;;;;:33;;;;;23171:29;;23240:33;;;;;;;;:22;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23240:33:0;23311:31;;;-1:-1:-1;;;23311:31:0;;-1:-1:-1;;;;;23311:31:0;;;;;;;;;23240:33;;-1:-1:-1;23288:20:0;;23311;;;;;;:31;;;;;23240:33;;23311:31;;;;;;;;:20;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23311:31:0;;-1:-1:-1;23357:17:0;23377:29;;;:61;;23426:12;23377:61;;;23409:14;23377:61;23357:81;;23470:10;23457:9;:23;23453:72;;23508:1;23501:8;;;;;;;;;;;;;23453:72;23539:23;23565:25;:10;23580:9;23565:14;:25::i;:::-;23539:51;;23616:93;23692:16;23688:2;:20;23616:67;23667:15;23663:2;:19;23616:42;23650:7;23616:29;23636:8;23616:15;:19;;:29;;;;:::i;:42::-;:46;;:67::i;:93::-;23605:104;;22699:1625;;;;;23733:21;23757:6;-1:-1:-1;;;;;23757:21:0;;23779:8;23757:31;;;;;;;;;;;;;-1:-1:-1;;;;;23757:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23757:31:0;;-1:-1:-1;23805:18:0;;23801:488;;23860:6;-1:-1:-1;;;;;23860:18:0;;23879:8;23860:28;;;;;;;;;;;;;-1:-1:-1;;;;;23860:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23860:28:0;23844:44;;23840:93;;;23916:1;23909:8;;;;;;;;;;23840:93;23949:19;23971:47;23989:6;-1:-1:-1;;;;;23989:18:0;;24008:8;23989:28;;;;;;;;;;;;;-1:-1:-1;;;;;23989:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23989:28:0;23971:13;;:17;:47::i;:::-;23949:69;-1:-1:-1;24047:59:0;24088:17;24047:36;23949:69;24088:2;24063:19;;;24047:15;:36::i;:59::-;24033:73;-1:-1:-1;24135:45:0;24172:7;24135:32;24033:73;-1:-1:-1;;;24135:15:0;:32::i;:45::-;24121:59;;24212:11;24201:8;:22;24197:81;;;24251:11;-1:-1:-1;24244:18:0;;-1:-1:-1;;;;;;24244:18:0;24197:81;23801:488;-1:-1:-1;24308:8:0;22699:1625;-1:-1:-1;;;;;;;;22699:1625:0:o;32142:398::-;32231:7;;;32286:217;32310:9;:16;32306:1;:20;32286:217;;;32348:15;32366:9;32376:1;32366:12;;;;;;;;;;;;;;32348:30;;32393:15;32411:6;-1:-1:-1;;;;;32411:16:0;;32428:7;32411:25;;;;;;;;;;;;;-1:-1:-1;;;;;32411:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32411:25:0;;-1:-1:-1;32466:25:0;:12;32411:25;32466:16;:25::i;:::-;32451:40;-1:-1:-1;;;32328:3:0;;32286:217;;4113:136;4171:7;4198:43;4202:1;4205;4198:43;;;;;;;;;;;;;;;;;:3;:43::i;5037:471::-;5095:7;5340:6;5336:47;;-1:-1:-1;5370:1:0;5363:8;;5336:47;5407:5;;;5411:1;5407;:5;:1;5431:5;;;;;:10;5423:56;;;;-1:-1:-1;;;5423:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5984:132;6042:7;6069:39;6073:1;6076;6069:39;;;;;;;;;;;;;-1:-1:-1;;;6069:39:0;;;:3;:39::i;3649:181::-;3707:7;3739:5;;;3763:6;;;;3755:46;;;;;-1:-1:-1;;;3755:46:0;;;;;;;;;;;;-1:-1:-1;;;3755:46:0;;;;;;;;;;;;;;4552:226;4672:7;4708:12;4700:6;;;;4692:29;;;;-1:-1:-1;;;4692:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4744:5:0;;;4552:226::o;6612:312::-;6732:7;6767:12;6760:5;6752:28;;;;-1:-1:-1;;;6752:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6791:9;6807:1;6803;:5;;;;;;;6612:312;-1:-1:-1;;;;;6612:312:0:o
Metadata Hash
ed864f4c3cd5db8943b40de5c49b1fd63547f1a02e0dcc9ec55c39794b208ad3
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.