Source Code
Latest 25 from a total of 529 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Get Reward | 11891044 | 1834 days ago | IN | 0 ETH | 0.02481184 | ||||
| Get Reward | 11878034 | 1836 days ago | IN | 0 ETH | 0.03073616 | ||||
| Get Reward | 11758862 | 1854 days ago | IN | 0 ETH | 0.01296504 | ||||
| Withdraw | 11697794 | 1863 days ago | IN | 0 ETH | 0.00942117 | ||||
| Withdraw | 11685603 | 1865 days ago | IN | 0 ETH | 0.01017179 | ||||
| Withdraw | 11678206 | 1866 days ago | IN | 0 ETH | 0.00644049 | ||||
| Withdraw | 11664520 | 1868 days ago | IN | 0 ETH | 0.00364453 | ||||
| Withdraw | 11663307 | 1869 days ago | IN | 0 ETH | 0.00471122 | ||||
| Withdraw | 11653246 | 1870 days ago | IN | 0 ETH | 0.00595569 | ||||
| Withdraw | 11653070 | 1870 days ago | IN | 0 ETH | 0.00506541 | ||||
| Withdraw | 11645621 | 1871 days ago | IN | 0 ETH | 0.00560881 | ||||
| Stake | 11645587 | 1871 days ago | IN | 0 ETH | 0.00899065 | ||||
| Exit | 11638017 | 1872 days ago | IN | 0 ETH | 0.01068028 | ||||
| Get Reward | 11637981 | 1872 days ago | IN | 0 ETH | 0.01121665 | ||||
| Stake | 11629656 | 1874 days ago | IN | 0 ETH | 0.00850624 | ||||
| Stake | 11621968 | 1875 days ago | IN | 0 ETH | 0.00958737 | ||||
| Notify Reward Am... | 11621846 | 1875 days ago | IN | 0 ETH | 0.00842354 | ||||
| Set_DURATION | 11621824 | 1875 days ago | IN | 0 ETH | 0.00329832 | ||||
| Exit | 11620858 | 1875 days ago | IN | 0 ETH | 0.01108691 | ||||
| Exit | 11620785 | 1875 days ago | IN | 0 ETH | 0.0142305 | ||||
| Get Reward | 11620785 | 1875 days ago | IN | 0 ETH | 0.00885577 | ||||
| Exit | 11620758 | 1875 days ago | IN | 0 ETH | 0.01568902 | ||||
| Exit | 11620748 | 1875 days ago | IN | 0 ETH | 0.0127604 | ||||
| Exit | 11620731 | 1875 days ago | IN | 0 ETH | 0.01206848 | ||||
| Exit | 11620731 | 1875 days ago | IN | 0 ETH | 0.01414986 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
UniswapReward
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-12-13
*/
/**
*Submitted for verification at Etherscan.io on 09-16
*/
/***
*
*
* https://pros.finance
* MIT License
* ===========
*
* Copyright (c) 2020 pros
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
// File: @openzeppelin/contracts/math/Math.sol
pragma solidity ^0.5.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow, so we distribute
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
}
// File: @openzeppelin/contracts/math/SafeMath.sol
/*
* ABDK Math 64.64 Smart Contract Library. Copyright © 2019 by ABDK Consulting.
* Author: Mikhail Vladimirov <mikhail.vladimirov@gmail.com>
*/
/**
* Smart contract library of mathematical functions operating with signed
* 64.64-bit fixed point numbers. Signed 64.64-bit fixed point number is
* basically a simple fraction whose numerator is signed 128-bit integer and
* denominator is 2^64. As long as denominator is always the same, there is no
* need to store it, thus in Solidity signed 64.64-bit fixed point numbers are
* represented by int128 type holding only the numerator.
*/
pragma solidity ^0.5.0;
/**
* @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.
*
* _Available since v2.4.0._
*/
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.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
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.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/GSN/Context.sol
pragma solidity ^0.5.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/ownership/Ownable.sol
pragma solidity ^0.5.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _owner;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: contracts/interface/IERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
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);
function mint(address account, uint amount) external;
/**
* @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);
}
// File: contracts/interface/IPlayerBook.sol
pragma solidity ^0.5.0;
interface IPlayerBook {
function settleReward( address from,uint256 amount ) external returns (uint256);
function bindRefer( address from,string calldata affCode ) external returns (bool);
function hasRefer(address from) external returns(bool);
}
// File: contracts/interface/IPool.sol
pragma solidity ^0.5.0;
interface IPool {
function totalSupply( ) external view returns (uint256);
function balanceOf( address player ) external view returns (uint256);
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.5.5;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*
* _Available since v2.4.0._
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
// File: contracts/library/SafeERC20.sol
pragma solidity ^0.5.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));
function safeTransfer(IERC20 token, address to, uint256 value) internal {
(bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SELECTOR, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'SafeERC20: TRANSFER_FAILED');
}
// function safeTransfer(IERC20 token, address to, uint256 value) internal {
// callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
// }
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/library/priMath.sol
pragma solidity ^0.5.0;
library prosMath {
/**
* Calculate sqrt (x) rounding down, where x is unsigned 256-bit integer
* number.
*
* @param x unsigned 256-bit integer number
* @return unsigned 128-bit integer number
*/
function sqrt(uint256 x) public pure returns (uint256 y) {
uint256 z = (x + 1) / 2;
y = x;
while (z < y) {
y = z;
z = (x / z + z) / 2;
}
}
}
// File: contracts/library/Governance.sol
pragma solidity ^0.5.0;
contract Governance {
address public _governance;
constructor() public {
_governance = tx.origin;
}
event GovernanceTransferred(address indexed previousOwner, address indexed newOwner);
modifier onlyGovernance {
require(msg.sender == _governance, "not governance");
_;
}
function setGovernance(address governance) public onlyGovernance
{
require(governance != address(0), "new governance the zero address");
emit GovernanceTransferred(_governance, governance);
_governance = governance;
}
}
// File: contracts/interface/IPowerStrategy.sol
pragma solidity ^0.5.0;
interface IPowerStrategy {
function lpIn(address sender, uint256 amount) external;
function lpOut(address sender, uint256 amount) external;
function getPower(address sender) view external returns (uint256);
}
// File: contracts/library/LPTokenWrapper.sol
pragma solidity ^0.5.0;
contract LPTokenWrapper is IPool,Governance {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public _lpToken = IERC20(0x51D287C63301d574Eef7C7615bf02A19e9549B8A); //切换一下对应的LP_token的币地址就行
address public _playerBook = address(0x21A4086a6Cdb332c851B76cccD21aCAB6428D9E4); //切换一下对应的邀请的记录
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
uint256 private _totalPower;
mapping(address => uint256) private _powerBalances;
address public _powerStrategy = address(0x0);//token币的地址
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function setLp_token(address LP_token) public onlyGovernance {
//return _totalSupply;
_lpToken = IERC20(LP_token);
}
function set_playBook(address playbook) public onlyGovernance {
//return _totalSupply;
_playerBook = playbook;
}
function setPowerStragegy(address strategy) public onlyGovernance{
_powerStrategy = strategy;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function balanceOfPower(address account) public view returns (uint256) {
return _powerBalances[account];
}
function totalPower() public view returns (uint256) {
return _totalPower;
}
function stake(uint256 amount, string memory affCode) public {
_totalSupply = _totalSupply.add(amount);
_balances[msg.sender] = _balances[msg.sender].add(amount);
if( _powerStrategy != address(0x0)){
_totalPower = _totalPower.sub(_powerBalances[msg.sender]);
IPowerStrategy(_powerStrategy).lpIn(msg.sender, amount);
_powerBalances[msg.sender] = IPowerStrategy(_powerStrategy).getPower(msg.sender);
_totalPower = _totalPower.add(_powerBalances[msg.sender]);
}else{
_totalPower = _totalSupply;
_powerBalances[msg.sender] = _balances[msg.sender];
}
_lpToken.safeTransferFrom(msg.sender, address(this), amount);
if (!IPlayerBook(_playerBook).hasRefer(msg.sender)) {
IPlayerBook(_playerBook).bindRefer(msg.sender, affCode);
}
}
function withdraw(uint256 amount) public {
require(amount > 0, "amout > 0");
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
if( _powerStrategy != address(0x0)){
_totalPower = _totalPower.sub(_powerBalances[msg.sender]);
IPowerStrategy(_powerStrategy).lpOut(msg.sender, amount);
_powerBalances[msg.sender] = IPowerStrategy(_powerStrategy).getPower(msg.sender);
_totalPower = _totalPower.add(_powerBalances[msg.sender]);
}else{
_totalPower = _totalSupply;
_powerBalances[msg.sender] = _balances[msg.sender];
}
_lpToken.safeTransfer( msg.sender, amount);
}
}
interface AllPool{
function is_Re(address user) view external returns(bool);
// function set_user_isRe(address user,address pool,string calldata name) external;
function get_Address_pool(address user) view external returns(address);
}
// File: contracts/reward/UniswapReward.sol
pragma solidity ^0.5.0;
contract UniswapReward is LPTokenWrapper{
using SafeERC20 for IERC20;
IERC20 public _pros = IERC20(0x306Dd7CD66d964f598B4D2ec92b5a9B275D7fEb3);
address public _teamWallet = 0xde7a7E8Db75D56B095263c63ecB4CfE8157ee3dd;
address public _rewardPool = 0xde7a7E8Db75D56B095263c63ecB4CfE8157ee3dd;
address public _allpool = 0xC682bD99eE552B6f7d931aFee2A9425806e155E9;
int128 private dayNums;
int128 baseReward = 8000;
// uint256 public constant DURATION = 7 days;
// should do this ?
uint256 public DURATION = 1 days;
uint256 public _initReward = 0;
uint256 public base_ = 30*10e3;
uint256 public rate_forReward = 1;
uint256 public base_Rate_Reward = 100;
//init amount should be ?
uint256 public _startTime = now + 365 days;
uint256 public _periodFinish = 0;
uint256 public _rewardRate = 0;
uint256 public _lastUpdateTime;
uint256 public _rewardPerTokenStored;
uint256 public _teamRewardRate = 0;
uint256 public _poolRewardRate = 0;
uint256 public _baseRate = 10000;
uint256 public _punishTime = 10 days;
mapping(address => uint256) public _userRewardPerTokenPaid;
mapping(address => uint256) public _rewards;
mapping(address => uint256) public _lastStakedTime;
bool public _hasStart = false;
event RewardAdded(uint256 reward);
event Staked(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
event RewardPaid(address indexed user, uint256 reward);
modifier updateReward(address account) {
_rewardPerTokenStored = rewardPerToken();
_lastUpdateTime = lastTimeRewardApplicable();
if (account != address(0)) {
_rewards[account] = earned(account);
_userRewardPerTokenPaid[account] = _rewardPerTokenStored;
}
_;
}
function set_DURATION(uint256 _DURATION) public onlyGovernance{
DURATION = _DURATION;
}
function set_baseReward(int128 _baseReward) public onlyGovernance{
baseReward = _baseReward;
}
function set_pros_address(address pri)public onlyGovernance{
_pros = IERC20(pri);
}
function set_teamWallet(address team)public onlyGovernance{
_teamWallet = team;
}
function set_rewardpool(address pool)public onlyGovernance{
_rewardPool = pool;
}
//set the initamount for onwer
function set_initReward(uint256 initamount) public onlyGovernance{
_initReward = initamount;
}
/* Fee collection for any other token */
function seize(IERC20 token, uint256 amount) external onlyGovernance{
require(token != _pros, "reward");
require(token != _lpToken, "stake");
token.safeTransfer(_governance, amount);
}
function setTeamRewardRate( uint256 teamRewardRate ) public onlyGovernance{
_teamRewardRate = teamRewardRate;
}
function setPoolRewardRate( uint256 poolRewardRate ) public onlyGovernance{
_poolRewardRate = poolRewardRate;
}
function setWithDrawPunishTime( uint256 punishTime ) public onlyGovernance{
_punishTime = punishTime;
}
function lastTimeRewardApplicable() public view returns (uint256) {
return Math.min(block.timestamp, _periodFinish);
}
function rewardPerToken() public view returns (uint256) { //to change to the address thing for dip problem
if (totalPower() == 0) { //totalPower change ----- totaldipost[token]
return _rewardPerTokenStored;
}
return
_rewardPerTokenStored.add(
lastTimeRewardApplicable()
.sub(_lastUpdateTime)
.mul(_rewardRate) //change for the _rewardRate[token]
.mul(1e18)
.div(totalPower()) //change for the totalPower[token] ----
);
}
//diposit funtion should define the pri address setprice interface also
//function
function earned(address account) public view returns (uint256) {
return
balanceOfPower(account)
.mul(rewardPerToken().sub(_userRewardPerTokenPaid[account]))
.div(1e18)
.add(_rewards[account]);
}
// stake visibility is public as overriding LPTokenWrapper's stake() function
function stake(uint256 amount, string memory affCode)
public
updateReward(msg.sender)
checkHalve
checkStart
isRegister
{
require(amount > 0, "Cannot stake 0");
super.stake(amount, affCode);
_lastStakedTime[msg.sender] = now;
emit Staked(msg.sender, amount);
}
function withdraw(uint256 amount)
public
updateReward(msg.sender)
checkHalve
checkStart
{
require(amount > 0, "Cannot withdraw 0");
super.withdraw(amount);
emit Withdrawn(msg.sender, amount);
}
function exit() external {
withdraw(balanceOf(msg.sender));
getReward();
}
function getReward() public updateReward(msg.sender) checkHalve checkStart {
uint256 reward = earned(msg.sender);
if (reward > 0) {
_rewards[msg.sender] = 0;
address set_play = AllPool(_allpool).get_Address_pool(msg.sender)==0x0000000000000000000000000000000000000000?_playerBook:AllPool(_allpool).get_Address_pool(msg.sender);
uint256 fee = IPlayerBook(set_play).settleReward(msg.sender,reward);
// uint256 fee = IPlayerBook(_playerBook).settleReward(msg.sender, reward);
if(fee > 0){
_pros.safeTransfer(set_play, fee);
}
uint256 teamReward = reward.mul(_teamRewardRate).div(_baseRate);
if(teamReward>0){
_pros.safeTransfer(_teamWallet, teamReward);
}
uint256 leftReward = reward.sub(fee).sub(teamReward);
uint256 poolReward = 0;
//withdraw time check
if(now < (_lastStakedTime[msg.sender] + _punishTime) ){
poolReward = leftReward.mul(_poolRewardRate).div(_baseRate);
}
if(poolReward>0){
_pros.safeTransfer(_rewardPool, poolReward);
leftReward = leftReward.sub(poolReward);
}
if(leftReward>0){
_pros.safeTransfer(msg.sender, leftReward );
}
emit RewardPaid(msg.sender, leftReward);
}
}
modifier checkHalve() {
if (block.timestamp >= _periodFinish) {
// _initReward = _initReward.mul(50).div(100);
update_initreward();
_pros.mint(address(this), _initReward);
_rewardRate = _initReward.div(DURATION);
_periodFinish = block.timestamp.add(DURATION);
emit RewardAdded(_initReward);
}
_;
}
modifier checkStart() {
require(block.timestamp > _startTime, "not start");
_;
}
modifier isRegister(){
require(AllPool(_allpool).is_Re(msg.sender)==true,"address not register or name already register");
_;
}
function update_initreward() private {
dayNums = dayNums + 1;
uint256 thisreward = base_.mul(rate_forReward).mul(10**18).mul((base_Rate_Reward.sub(rate_forReward))**(uint256(dayNums-1))).div(base_Rate_Reward**(uint256(dayNums)));
_initReward = uint256(thisreward);
}
// function update_initreward() private {
// dayNums = dayNums + 1;
// int128 precision = 10000000;
// int256 thisreward;
// int128 BASE_Rate = precision-precision*dayNums/60;
// uint256 count = 0;
// int128[] memory list = new int128[](15);
// int128 Yun_number = BASE_Rate;
// int128 d = 0;
// if(dayNums<=180){
// for(int128 i=0;i<15;i++){
// Yun_number = Yun_number*2;
// int128 A = 1;
// if(Yun_number>precision){
// d = d+(A<<(63-count));
// Yun_number-=precision;
// list[count] = int128(1);
// count+=1;
// }else{
// //d = d+(B<<(63-count));
// list[count] = int128(0);
// count+=1;
// }
// }
// thisreward = int256(ABDKMath64x64.toInt(ABDKMath64x64.exp(d)*baseReward));
// }else if(dayNums<=25*365){
// thisreward = int256(1000);
// }
// thisreward = thisreward*10**18;
// _initReward = uint256(thisreward);
// }
// set fix time to start reward
function startReward(uint256 startTime)
external
onlyGovernance
updateReward(address(0))
{
require(_hasStart == false, "has started");
_hasStart = true;
_startTime = startTime;
update_initreward();
_rewardRate = _initReward.div(DURATION);
_pros.mint(address(this), _initReward);
_lastUpdateTime = _startTime;
_periodFinish = _startTime.add(DURATION);
emit RewardAdded(_initReward);
}
//
//for extra reward
function notifyRewardAmount(uint256 reward)
external
onlyGovernance
updateReward(address(0))
{
IERC20(_pros).safeTransferFrom(msg.sender, address(this), reward);
if (block.timestamp >= _periodFinish) {
_rewardRate = reward.div(DURATION);
} else {
uint256 remaining = _periodFinish.sub(block.timestamp);
uint256 leftover = remaining.mul(_rewardRate);
_rewardRate = reward.add(leftover).div(DURATION);
}
_lastUpdateTime = block.timestamp;
_periodFinish = block.timestamp.add(DURATION);
emit RewardAdded(reward);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"GovernanceTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_allpool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_baseRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_hasStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_initReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastStakedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_playerBook","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_poolRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_powerStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_pros","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_punishTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_teamRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"base_","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"base_Rate_Reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rate_forReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"seize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"LP_token","type":"address"}],"name":"setLp_token","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"poolRewardRate","type":"uint256"}],"name":"setPoolRewardRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"strategy","type":"address"}],"name":"setPowerStragegy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"teamRewardRate","type":"uint256"}],"name":"setTeamRewardRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"punishTime","type":"uint256"}],"name":"setWithDrawPunishTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_DURATION","type":"uint256"}],"name":"set_DURATION","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"int128","name":"_baseReward","type":"int128"}],"name":"set_baseReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"initamount","type":"uint256"}],"name":"set_initReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"playbook","type":"address"}],"name":"set_playBook","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pri","type":"address"}],"name":"set_pros_address","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"set_rewardpool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"team","type":"address"}],"name":"set_teamWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"affCode","type":"string"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"}],"name":"startReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040527351d287c63301d574eef7c7615bf02a19e9549b8a600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507321a4086a6cdb332c851b76cccd21acab6428d9e4600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073306dd7cd66d964f598b4d2ec92b5a9b275d7feb3600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de7a7e8db75d56b095263c63ecb4cfe8157ee3dd600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de7a7e8db75d56b095263c63ecb4cfe8157ee3dd600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c682bd99ee552b6f7d931afee2a9425806e155e9600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f40600c60106101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff16021790555062015180600d556000600e55620493e0600f55600160105560646011556301e1338042016012556000601355600060145560006017556000601855612710601955620d2f00601a556000601e60006101000a81548160ff021916908315150217905550326000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061506e806103346000396000f3fe608060405234801561001057600080fd5b50600436106103265760003560e01c806380faa57d116101b8578063d742a14d11610104578063eb9253c0116100a2578063ee6318811161007c578063ee63188114610d9d578063f9cff35114610de7578063fa1acb5c14610e31578063ffd832c114610e4f57610326565b8063eb9253c014610ced578063ed6525c414610d3b578063edf3b09c14610d5957610326565b8063dc7ced3d116100de578063dc7ced3d14610bb2578063e45a98dd14610bfc578063e7e4e1f714610c1e578063e9fad8ee14610ce357610326565b8063d742a14d14610b0c578063da3a274114610b50578063db3ad22c14610b9457610326565b8063b14d94e511610171578063c3b2c5041161014b578063c3b2c50414610a32578063c909f15214610a7c578063cd3daf9d14610aaa578063d42cdb5a14610ac857610326565b8063b14d94e51461098b578063bb1b4269146109bc578063c1482ce814610a1457610326565b806380faa57d1461087b578063927b26b9146108995780639a6b25a3146108b75780639f3fbd2b146108e5578063aa981e6514610903578063ab033ea91461094757610326565b8063358b1e2b1161027757806356728e9d116102305780636adafab51161020a5780636adafab51461077f57806370a082311461079d5780637b4d0812146107f55780637d6dfb7e1461082357610326565b806356728e9d146106b157806365d82b8a1461070957806368fd25cd1461076157610326565b8063358b1e2b146105b557806337e294d5146105e35780633c6b16ab1461062d5780633d18b9121461065b578063491835341461066557806353364da01461069357610326565b80631407c664116102e45780631be05289116102be5780631be05289146104d55780631c2f3e3d146104f357806329d245aa1461053d5780632e1a7d4d1461058757610326565b80631407c6641461044f578063167519431461046d57806318160ddd146104b757610326565b80628cc2621461032b57806307604b6c14610383578063097a23b8146103a15780630ba86f05146103bf578063121544b9146103ed57806312b7d59b1461040b575b600080fd5b61036d6004803603602081101561034157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b61038b610f54565b6040518082815260200191505060405180910390f35b6103a9610f5a565b6040518082815260200191505060405180910390f35b6103eb600480360360208110156103d557600080fd5b8101908080359060200190929190505050610f60565b005b6103f561102c565b6040518082815260200191505060405180910390f35b61044d6004803603602081101561042157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611032565b005b610457611138565b6040518082815260200191505060405180910390f35b61047561113e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104bf611164565b6040518082815260200191505060405180910390f35b6104dd61116e565b6040518082815260200191505060405180910390f35b6104fb611174565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610545611199565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105b36004803603602081101561059d57600080fd5b81019080803590602001909291905050506111bf565b005b6105e1600480360360208110156105cb57600080fd5b8101908080359060200190929190505050611531565b005b6105eb6115fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106596004803603602081101561064357600080fd5b8101908080359060200190929190505050611623565b005b610663611901565b005b6106916004803603602081101561067b57600080fd5b81019080803590602001909291905050506121b5565b005b61069b612281565b6040518082815260200191505060405180910390f35b6106f3600480360360208110156106c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612287565b6040518082815260200191505060405180910390f35b61074b6004803603602081101561071f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061229f565b6040518082815260200191505060405180910390f35b6107696122b7565b6040518082815260200191505060405180910390f35b6107876122bd565b6040518082815260200191505060405180910390f35b6107df600480360360208110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122c3565b6040518082815260200191505060405180910390f35b6108216004803603602081101561080b57600080fd5b810190808035906020019092919050505061230c565b005b6108656004803603602081101561083957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123d8565b6040518082815260200191505060405180910390f35b6108836123f0565b6040518082815260200191505060405180910390f35b6108a1612403565b6040518082815260200191505060405180910390f35b6108e3600480360360208110156108cd57600080fd5b8101908080359060200190929190505050612409565b005b6108ed6124d5565b6040518082815260200191505060405180910390f35b6109456004803603602081101561091957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124db565b005b6109896004803603602081101561095d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125e1565b005b6109ba600480360360208110156109a157600080fd5b810190808035600f0b9060200190929190505050612804565b005b6109fe600480360360208110156109d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612905565b6040518082815260200191505060405180910390f35b610a1c61294e565b6040518082815260200191505060405180910390f35b610a3a612954565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610aa860048036036020811015610a9257600080fd5b810190808035906020019092919050505061297a565b005b610ab2612d17565b6040518082815260200191505060405180910390f35b610b0a60048036036020811015610ade57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612daf565b005b610b4e60048036036020811015610b2257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eb5565b005b610b9260048036036020811015610b6657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fbb565b005b610b9c6130c1565b6040518082815260200191505060405180910390f35b610bba6130cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c046130f1565b604051808215151515815260200191505060405180910390f35b610ce160048036036040811015610c3457600080fd5b810190808035906020019092919080359060200190640100000000811115610c5b57600080fd5b820183602082011115610c6d57600080fd5b80359060200191846001830284011164010000000083111715610c8f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613104565b005b610ceb6135f2565b005b610d3960048036036040811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061360d565b005b610d436138a7565b6040518082815260200191505060405180910390f35b610d9b60048036036020811015610d6f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506138ad565b005b610da56139b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610def6139d9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e396139ff565b6040518082815260200191505060405180910390f35b610e57613a05565b6040518082815260200191505060405180910390f35b6000610f4d601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f3f670de0b6b3a7640000610f31610f1a601b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0c612d17565b613a0b90919063ffffffff16565b610f2388612905565b613a5590919063ffffffff16565b613adb90919063ffffffff16565b613b2590919063ffffffff16565b9050919050565b600f5481565b60105481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b8060178190555050565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b600d5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b336111c8612d17565b6016819055506111d66123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112a35761121981610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60135442106113e9576112b4613bad565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b5050505061138e600d54600e54613adb90919063ffffffff16565b6014819055506113a9600d5442613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d600e546040518082815260200191505060405180910390a15b6012544211611460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082116114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b6114df82613ca1565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600e8190555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b60006116ef612d17565b6016819055506116fd6123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117ca5761174081610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611819333084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614191909392919063ffffffff16565b601354421061184257611837600d5483613adb90919063ffffffff16565b6014819055506118a4565b600061185942601354613a0b90919063ffffffff16565b9050600061187260145483613a5590919063ffffffff16565b905061189b600d5461188d8387613b2590919063ffffffff16565b613adb90919063ffffffff16565b60148190555050505b426015819055506118c0600d5442613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d826040518082815260200191505060405180910390a15050565b3361190a612d17565b6016819055506119186123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146119e55761195b81610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6013544210611b2b576119f6613bad565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611aa157600080fd5b505af1158015611ab5573d6000803e3d6000fd5b50505050611ad0600d54600e54613adb90919063ffffffff16565b601481905550611aeb600d5442613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d600e546040518082815260200191505060405180910390a15b6012544211611ba2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611bad33610e6d565b905060008111156121b1576000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f972be42336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cb557600080fd5b505afa158015611cc9573d6000803e3d6000fd5b505050506040513d6020811015611cdf57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611dea57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f972be42336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611daa57600080fd5b505afa158015611dbe573d6000803e3d6000fd5b505050506040513d6020811015611dd457600080fd5b8101908080519060200190929190505050611e0e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905060008173ffffffffffffffffffffffffffffffffffffffff166335380a5533856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e9957600080fd5b505af1158015611ead573d6000803e3d6000fd5b505050506040513d6020811015611ec357600080fd5b810190808051906020019092919050505090506000811115611f2d57611f2c8282600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b5b6000611f58601954611f4a60175487613a5590919063ffffffff16565b613adb90919063ffffffff16565b90506000811115611fd357611fd2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b5b6000611ffa82611fec8588613a0b90919063ffffffff16565b613a0b90919063ffffffff16565b90506000809050601a54601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054014210156120785761207560195461206760185485613a5590919063ffffffff16565b613adb90919063ffffffff16565b90505b6000811115612106576120f0600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b6121038183613a0b90919063ffffffff16565b91505b600082111561215d5761215c3383600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b5b3373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486836040518082815260200191505060405180910390a250505050505b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600d8190555050565b60185481565b601d6020528060005260406000206000915090505481565b601b6020528060005260406000206000915090505481565b60145481565b60155481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b8060188190555050565b601c6020528060005260406000206000915090505481565b60006123fe426013546144e4565b905090565b60195481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80601a8190555050565b601a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461259d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6e657720676f7665726e616e636520746865207a65726f20616464726573730081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60106101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60115481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b6000612a46612d17565b601681905550612a546123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612b2157612a9781610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60001515601e60009054906101000a900460ff16151514612baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f686173207374617274656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001601e60006101000a81548160ff02191690831515021790555081601281905550612bd4613bad565b612beb600d54600e54613adb90919063ffffffff16565b601481905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612c9c57600080fd5b505af1158015612cb0573d6000803e3d6000fd5b50505050601254601581905550612cd4600d54601254613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d600e546040518082815260200191505060405180910390a15050565b600080612d226130c1565b1415612d32576016549050612dac565b612da9612d98612d406130c1565b612d8a670de0b6b3a7640000612d7c601454612d6e601554612d606123f0565b613a0b90919063ffffffff16565b613a5590919063ffffffff16565b613a5590919063ffffffff16565b613adb90919063ffffffff16565b601654613b2590919063ffffffff16565b90505b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461307d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600554905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60009054906101000a900460ff1681565b3361310d612d17565b60168190555061311b6123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146131e85761315e81610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601354421061332e576131f9613bad565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b505050506132d3600d54600e54613adb90919063ffffffff16565b6014819055506132ee600d5442613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d600e546040518082815260200191505060405180910390a15b60125442116133a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d82c0339336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561344857600080fd5b505afa15801561345c573d6000803e3d6000fd5b505050506040513d602081101561347257600080fd5b81019080805190602001909291905050501515146134db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614fe3602d913960400191505060405180910390fd5b60008311613551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b61355b83836144fd565b42601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d846040518082815260200191505060405180910390a2505050565b6136036135fe336122c3565b6111bf565b61360b611901565b565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f726577617264000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613857576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f7374616b6500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6138a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b5050565b60175481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461396f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600e5481565b6000613a4d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614ba5565b905092915050565b600080831415613a685760009050613ad5565b6000828402905082848281613a7957fe5b0414613ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614fc26021913960400191505060405180910390fd5b809150505b92915050565b6000613b1d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c65565b905092915050565b600080828401905083811015613ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6001600c60009054906101000a9004600f0b01600c60006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506000613c95600c60009054906101000a9004600f0b600f0b6011540a613c876001600c60009054906101000a9004600f0b03600f0b613c47601054601154613a0b90919063ffffffff16565b0a613c79670de0b6b3a7640000613c6b601054600f54613a5590919063ffffffff16565b613a5590919063ffffffff16565b613a5590919063ffffffff16565b613adb90919063ffffffff16565b905080600e8190555050565b60008111613d17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f616d6f7574203e2030000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b613d2c81600354613a0b90919063ffffffff16565b600381905550613d8481600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a0b90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140b457613e71600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600554613a0b90919063ffffffff16565b600581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d961455133836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613f2057600080fd5b505af1158015613f34573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635dd9147c336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613fd757600080fd5b505afa158015613feb573d6000803e3d6000fd5b505050506040513d602081101561400157600080fd5b8101908080519060200190929190505050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a9600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600554613b2590919063ffffffff16565b600581905550614141565b600354600581905550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61418e3382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b50565b614291848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614d2b565b50505050565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106143c457805182526020820191506020810190506020830392506143a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614426576040519150601f19603f3d011682016040523d82523d6000602084013e61442b565b606091505b509150915081801561446b575060008151148061446a575080806020019051602081101561445857600080fd5b81019080805190602001909291905050505b5b6144dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5361666545524332303a205452414e534645525f4641494c454400000000000081525060200191505060405180910390fd5b5050505050565b60008183106144f357816144f5565b825b905092915050565b61451282600354613b2590919063ffffffff16565b60038190555061456a82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b2590919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461489a57614657600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600554613a0b90919063ffffffff16565b600581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663da562a9833846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561470657600080fd5b505af115801561471a573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635dd9147c336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156147bd57600080fd5b505afa1580156147d1573d6000803e3d6000fd5b505050506040513d60208110156147e757600080fd5b8101908080519060200190929190505050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061488f600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600554613b2590919063ffffffff16565b600581905550614927565b600354600581905550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b614976333084600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614191909392919063ffffffff16565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a526a92b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015614a1757600080fd5b505af1158015614a2b573d6000803e3d6000fd5b505050506040513d6020811015614a4157600080fd5b8101908080519060200190929190505050614ba157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d66d140733836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b17578082015181840152602081019050614afc565b50505050905090810190601f168015614b445780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015614b6457600080fd5b505af1158015614b78573d6000803e3d6000fd5b505050506040513d6020811015614b8e57600080fd5b8101908080519060200190929190505050505b5050565b6000838311158290614c52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c17578082015181840152602081019050614bfc565b50505050905090810190601f168015614c445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290614d11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cd6578082015181840152602081019050614cbb565b50505050905090810190601f168015614d035780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d1d57fe5b049050809150509392505050565b614d4a8273ffffffffffffffffffffffffffffffffffffffff16614f76565b614dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310614e0b5780518252602082019150602081019050602083039250614de8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614e6d576040519150601f19603f3d011682016040523d82523d6000602084013e614e72565b606091505b509150915081614eea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115614f7057808060200190516020811015614f0957600080fd5b8101908080519060200190929190505050614f6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615010602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015614fb857506000801b8214155b9250505091905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7761646472657373206e6f74207265676973746572206f72206e616d6520616c72656164792072656769737465725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158201530b183096a823ab60d53c3a251a1210deafee1065bf8930773376bfca2c09864736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103265760003560e01c806380faa57d116101b8578063d742a14d11610104578063eb9253c0116100a2578063ee6318811161007c578063ee63188114610d9d578063f9cff35114610de7578063fa1acb5c14610e31578063ffd832c114610e4f57610326565b8063eb9253c014610ced578063ed6525c414610d3b578063edf3b09c14610d5957610326565b8063dc7ced3d116100de578063dc7ced3d14610bb2578063e45a98dd14610bfc578063e7e4e1f714610c1e578063e9fad8ee14610ce357610326565b8063d742a14d14610b0c578063da3a274114610b50578063db3ad22c14610b9457610326565b8063b14d94e511610171578063c3b2c5041161014b578063c3b2c50414610a32578063c909f15214610a7c578063cd3daf9d14610aaa578063d42cdb5a14610ac857610326565b8063b14d94e51461098b578063bb1b4269146109bc578063c1482ce814610a1457610326565b806380faa57d1461087b578063927b26b9146108995780639a6b25a3146108b75780639f3fbd2b146108e5578063aa981e6514610903578063ab033ea91461094757610326565b8063358b1e2b1161027757806356728e9d116102305780636adafab51161020a5780636adafab51461077f57806370a082311461079d5780637b4d0812146107f55780637d6dfb7e1461082357610326565b806356728e9d146106b157806365d82b8a1461070957806368fd25cd1461076157610326565b8063358b1e2b146105b557806337e294d5146105e35780633c6b16ab1461062d5780633d18b9121461065b578063491835341461066557806353364da01461069357610326565b80631407c664116102e45780631be05289116102be5780631be05289146104d55780631c2f3e3d146104f357806329d245aa1461053d5780632e1a7d4d1461058757610326565b80631407c6641461044f578063167519431461046d57806318160ddd146104b757610326565b80628cc2621461032b57806307604b6c14610383578063097a23b8146103a15780630ba86f05146103bf578063121544b9146103ed57806312b7d59b1461040b575b600080fd5b61036d6004803603602081101561034157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b61038b610f54565b6040518082815260200191505060405180910390f35b6103a9610f5a565b6040518082815260200191505060405180910390f35b6103eb600480360360208110156103d557600080fd5b8101908080359060200190929190505050610f60565b005b6103f561102c565b6040518082815260200191505060405180910390f35b61044d6004803603602081101561042157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611032565b005b610457611138565b6040518082815260200191505060405180910390f35b61047561113e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104bf611164565b6040518082815260200191505060405180910390f35b6104dd61116e565b6040518082815260200191505060405180910390f35b6104fb611174565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610545611199565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105b36004803603602081101561059d57600080fd5b81019080803590602001909291905050506111bf565b005b6105e1600480360360208110156105cb57600080fd5b8101908080359060200190929190505050611531565b005b6105eb6115fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106596004803603602081101561064357600080fd5b8101908080359060200190929190505050611623565b005b610663611901565b005b6106916004803603602081101561067b57600080fd5b81019080803590602001909291905050506121b5565b005b61069b612281565b6040518082815260200191505060405180910390f35b6106f3600480360360208110156106c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612287565b6040518082815260200191505060405180910390f35b61074b6004803603602081101561071f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061229f565b6040518082815260200191505060405180910390f35b6107696122b7565b6040518082815260200191505060405180910390f35b6107876122bd565b6040518082815260200191505060405180910390f35b6107df600480360360208110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122c3565b6040518082815260200191505060405180910390f35b6108216004803603602081101561080b57600080fd5b810190808035906020019092919050505061230c565b005b6108656004803603602081101561083957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123d8565b6040518082815260200191505060405180910390f35b6108836123f0565b6040518082815260200191505060405180910390f35b6108a1612403565b6040518082815260200191505060405180910390f35b6108e3600480360360208110156108cd57600080fd5b8101908080359060200190929190505050612409565b005b6108ed6124d5565b6040518082815260200191505060405180910390f35b6109456004803603602081101561091957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124db565b005b6109896004803603602081101561095d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125e1565b005b6109ba600480360360208110156109a157600080fd5b810190808035600f0b9060200190929190505050612804565b005b6109fe600480360360208110156109d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612905565b6040518082815260200191505060405180910390f35b610a1c61294e565b6040518082815260200191505060405180910390f35b610a3a612954565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610aa860048036036020811015610a9257600080fd5b810190808035906020019092919050505061297a565b005b610ab2612d17565b6040518082815260200191505060405180910390f35b610b0a60048036036020811015610ade57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612daf565b005b610b4e60048036036020811015610b2257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eb5565b005b610b9260048036036020811015610b6657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fbb565b005b610b9c6130c1565b6040518082815260200191505060405180910390f35b610bba6130cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c046130f1565b604051808215151515815260200191505060405180910390f35b610ce160048036036040811015610c3457600080fd5b810190808035906020019092919080359060200190640100000000811115610c5b57600080fd5b820183602082011115610c6d57600080fd5b80359060200191846001830284011164010000000083111715610c8f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613104565b005b610ceb6135f2565b005b610d3960048036036040811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061360d565b005b610d436138a7565b6040518082815260200191505060405180910390f35b610d9b60048036036020811015610d6f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506138ad565b005b610da56139b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610def6139d9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e396139ff565b6040518082815260200191505060405180910390f35b610e57613a05565b6040518082815260200191505060405180910390f35b6000610f4d601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f3f670de0b6b3a7640000610f31610f1a601b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0c612d17565b613a0b90919063ffffffff16565b610f2388612905565b613a5590919063ffffffff16565b613adb90919063ffffffff16565b613b2590919063ffffffff16565b9050919050565b600f5481565b60105481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b8060178190555050565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b600d5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b336111c8612d17565b6016819055506111d66123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112a35761121981610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60135442106113e9576112b4613bad565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b5050505061138e600d54600e54613adb90919063ffffffff16565b6014819055506113a9600d5442613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d600e546040518082815260200191505060405180910390a15b6012544211611460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082116114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b6114df82613ca1565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600e8190555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b60006116ef612d17565b6016819055506116fd6123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117ca5761174081610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611819333084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614191909392919063ffffffff16565b601354421061184257611837600d5483613adb90919063ffffffff16565b6014819055506118a4565b600061185942601354613a0b90919063ffffffff16565b9050600061187260145483613a5590919063ffffffff16565b905061189b600d5461188d8387613b2590919063ffffffff16565b613adb90919063ffffffff16565b60148190555050505b426015819055506118c0600d5442613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d826040518082815260200191505060405180910390a15050565b3361190a612d17565b6016819055506119186123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146119e55761195b81610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6013544210611b2b576119f6613bad565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611aa157600080fd5b505af1158015611ab5573d6000803e3d6000fd5b50505050611ad0600d54600e54613adb90919063ffffffff16565b601481905550611aeb600d5442613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d600e546040518082815260200191505060405180910390a15b6012544211611ba2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611bad33610e6d565b905060008111156121b1576000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f972be42336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cb557600080fd5b505afa158015611cc9573d6000803e3d6000fd5b505050506040513d6020811015611cdf57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611dea57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f972be42336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611daa57600080fd5b505afa158015611dbe573d6000803e3d6000fd5b505050506040513d6020811015611dd457600080fd5b8101908080519060200190929190505050611e0e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905060008173ffffffffffffffffffffffffffffffffffffffff166335380a5533856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e9957600080fd5b505af1158015611ead573d6000803e3d6000fd5b505050506040513d6020811015611ec357600080fd5b810190808051906020019092919050505090506000811115611f2d57611f2c8282600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b5b6000611f58601954611f4a60175487613a5590919063ffffffff16565b613adb90919063ffffffff16565b90506000811115611fd357611fd2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b5b6000611ffa82611fec8588613a0b90919063ffffffff16565b613a0b90919063ffffffff16565b90506000809050601a54601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054014210156120785761207560195461206760185485613a5590919063ffffffff16565b613adb90919063ffffffff16565b90505b6000811115612106576120f0600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b6121038183613a0b90919063ffffffff16565b91505b600082111561215d5761215c3383600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b5b3373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486836040518082815260200191505060405180910390a250505050505b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600d8190555050565b60185481565b601d6020528060005260406000206000915090505481565b601b6020528060005260406000206000915090505481565b60145481565b60155481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b8060188190555050565b601c6020528060005260406000206000915090505481565b60006123fe426013546144e4565b905090565b60195481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80601a8190555050565b601a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461259d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6e657720676f7665726e616e636520746865207a65726f20616464726573730081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60106101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60115481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b6000612a46612d17565b601681905550612a546123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612b2157612a9781610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60001515601e60009054906101000a900460ff16151514612baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f686173207374617274656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001601e60006101000a81548160ff02191690831515021790555081601281905550612bd4613bad565b612beb600d54600e54613adb90919063ffffffff16565b601481905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612c9c57600080fd5b505af1158015612cb0573d6000803e3d6000fd5b50505050601254601581905550612cd4600d54601254613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d600e546040518082815260200191505060405180910390a15050565b600080612d226130c1565b1415612d32576016549050612dac565b612da9612d98612d406130c1565b612d8a670de0b6b3a7640000612d7c601454612d6e601554612d606123f0565b613a0b90919063ffffffff16565b613a5590919063ffffffff16565b613a5590919063ffffffff16565b613adb90919063ffffffff16565b601654613b2590919063ffffffff16565b90505b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461307d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600554905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60009054906101000a900460ff1681565b3361310d612d17565b60168190555061311b6123f0565b601581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146131e85761315e81610e6d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601654601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601354421061332e576131f9613bad565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b505050506132d3600d54600e54613adb90919063ffffffff16565b6014819055506132ee600d5442613b2590919063ffffffff16565b6013819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d600e546040518082815260200191505060405180910390a15b60125442116133a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d82c0339336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561344857600080fd5b505afa15801561345c573d6000803e3d6000fd5b505050506040513d602081101561347257600080fd5b81019080805190602001909291905050501515146134db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614fe3602d913960400191505060405180910390fd5b60008311613551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b61355b83836144fd565b42601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d846040518082815260200191505060405180910390a2505050565b6136036135fe336122c3565b6111bf565b61360b611901565b565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f726577617264000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613857576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f7374616b6500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6138a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b5050565b60175481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461396f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f7420676f7665726e616e636500000000000000000000000000000000000081525060200191505060405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600e5481565b6000613a4d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614ba5565b905092915050565b600080831415613a685760009050613ad5565b6000828402905082848281613a7957fe5b0414613ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614fc26021913960400191505060405180910390fd5b809150505b92915050565b6000613b1d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c65565b905092915050565b600080828401905083811015613ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6001600c60009054906101000a9004600f0b01600c60006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506000613c95600c60009054906101000a9004600f0b600f0b6011540a613c876001600c60009054906101000a9004600f0b03600f0b613c47601054601154613a0b90919063ffffffff16565b0a613c79670de0b6b3a7640000613c6b601054600f54613a5590919063ffffffff16565b613a5590919063ffffffff16565b613a5590919063ffffffff16565b613adb90919063ffffffff16565b905080600e8190555050565b60008111613d17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f616d6f7574203e2030000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b613d2c81600354613a0b90919063ffffffff16565b600381905550613d8481600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a0b90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140b457613e71600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600554613a0b90919063ffffffff16565b600581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d961455133836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613f2057600080fd5b505af1158015613f34573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635dd9147c336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613fd757600080fd5b505afa158015613feb573d6000803e3d6000fd5b505050506040513d602081101561400157600080fd5b8101908080519060200190929190505050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a9600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600554613b2590919063ffffffff16565b600581905550614141565b600354600581905550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61418e3382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166142979092919063ffffffff16565b50565b614291848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614d2b565b50505050565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106143c457805182526020820191506020810190506020830392506143a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614426576040519150601f19603f3d011682016040523d82523d6000602084013e61442b565b606091505b509150915081801561446b575060008151148061446a575080806020019051602081101561445857600080fd5b81019080805190602001909291905050505b5b6144dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5361666545524332303a205452414e534645525f4641494c454400000000000081525060200191505060405180910390fd5b5050505050565b60008183106144f357816144f5565b825b905092915050565b61451282600354613b2590919063ffffffff16565b60038190555061456a82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b2590919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461489a57614657600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600554613a0b90919063ffffffff16565b600581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663da562a9833846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561470657600080fd5b505af115801561471a573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635dd9147c336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156147bd57600080fd5b505afa1580156147d1573d6000803e3d6000fd5b505050506040513d60208110156147e757600080fd5b8101908080519060200190929190505050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061488f600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600554613b2590919063ffffffff16565b600581905550614927565b600354600581905550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b614976333084600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614191909392919063ffffffff16565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a526a92b336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015614a1757600080fd5b505af1158015614a2b573d6000803e3d6000fd5b505050506040513d6020811015614a4157600080fd5b8101908080519060200190929190505050614ba157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d66d140733836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b17578082015181840152602081019050614afc565b50505050905090810190601f168015614b445780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015614b6457600080fd5b505af1158015614b78573d6000803e3d6000fd5b505050506040513d6020811015614b8e57600080fd5b8101908080519060200190929190505050505b5050565b6000838311158290614c52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c17578082015181840152602081019050614bfc565b50505050905090810190601f168015614c445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290614d11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cd6578082015181840152602081019050614cbb565b50505050905090810190601f168015614d035780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d1d57fe5b049050809150509392505050565b614d4a8273ffffffffffffffffffffffffffffffffffffffff16614f76565b614dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310614e0b5780518252602082019150602081019050602083039250614de8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614e6d576040519150601f19603f3d011682016040523d82523d6000602084013e614e72565b606091505b509150915081614eea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115614f7057808060200190516020811015614f0957600080fd5b8101908080519060200190929190505050614f6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615010602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015614fb857506000801b8214155b9250505091905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7761646472657373206e6f74207265676973746572206f72206e616d6520616c72656164792072656769737465725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158201530b183096a823ab60d53c3a251a1210deafee1065bf8930773376bfca2c09864736f6c63430005110032
Deployed Bytecode Sourcemap
27928:10146:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27928:10146:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32074:272;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32074:272:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28552:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28589:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30830:125;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30830:125:0;;;;;;;;;;;;;;;;;:::i;:::-;;28879:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30208:95;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30208:95:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;28766:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28245:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25011:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28469:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23380:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24489:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32799:266;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32799:266:0;;;;;;;;;;;;;;;;;:::i;:::-;;30446:108;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30446:108:0;;;;;;;;;;;;;;;;;:::i;:::-;;28089:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37408:663;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37408:663:0;;;;;;;;;;;;;;;;;:::i;:::-;;33178:1511;;;:::i;:::-;;29871:102;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29871:102:0;;;;;;;;;;;;;;;;;:::i;:::-;;28965:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29205:50;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29205:50:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29090:58;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29090:58:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28805:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28842;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25526:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25526:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30963:126;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30963:126:0;;;;;;;;;;;;;;;;;:::i;:::-;;29155:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29155:43:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31223:132;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29006:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31097:118;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31097:118:0;;;;;;;;;;;;;;;;;:::i;:::-;;29045:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25407:111;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25407:111:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;23694:256;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23694:256:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;29985:108;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29985:108:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25644:120;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25644:120:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28629:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28010:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36862:504;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36862:504:0;;;;;;;;;;;;;;;;;:::i;:::-;;31373:596;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25262:137;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25262:137:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25114:140;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25114:140:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;30105:97;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30105:97:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25776:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28167:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29264:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32437:354;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32437:354:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;32437:354:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32437:354:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;32437:354:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;32437:354:0;;;;;;;;;;;;;;;:::i;:::-;;33073:97;;;:::i;:::-;;30606:216;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30606:216:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28924:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30309:95;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30309:95:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;24937:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24623:80;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28716:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28509:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32074:272;32128:7;32168:170;32320:8;:17;32329:7;32320:17;;;;;;;;;;;;;;;;32168:129;32292:4;32168:101;32214:54;32235:23;:32;32259:7;32235:32;;;;;;;;;;;;;;;;32214:16;:14;:16::i;:::-;:20;;:54;;;;:::i;:::-;32168:23;32183:7;32168:14;:23::i;:::-;:45;;:101;;;;:::i;:::-;:123;;:129;;;;:::i;:::-;:151;;:170;;;;:::i;:::-;32148:190;;32074:272;;;:::o;28552:30::-;;;;:::o;28589:33::-;;;;:::o;30830:125::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30933:14;30915:15;:32;;;;30830:125;:::o;28879:36::-;;;;:::o;30208:95::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30291:4;30277:11;;:18;;;;;;;;;;;;;;;;;;30208:95;:::o;28766:32::-;;;;:::o;28245:68::-;;;;;;;;;;;;;:::o;25011:91::-;25055:7;25082:12;;25075:19;;25011:91;:::o;28469:33::-;;;;:::o;23380:26::-;;;;;;;;;;;;;:::o;24489:75::-;;;;;;;;;;;;;:::o;32799:266::-;32871:10;29598:16;:14;:16::i;:::-;29574:21;:40;;;;29643:26;:24;:26::i;:::-;29625:15;:44;;;;29703:1;29684:21;;:7;:21;;;29680:160;;29742:15;29749:7;29742:6;:15::i;:::-;29722:8;:17;29731:7;29722:17;;;;;;;;;;;;;;;:35;;;;29807:21;;29772:23;:32;29796:7;29772:32;;;;;;;;;;;;;;;:56;;;;29680:160;34753:13;;34734:15;:32;34730:355;;34843:19;:17;:19::i;:::-;34877:5;;;;;;;;;;;:10;;;34896:4;34903:11;;34877:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34877:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34877:38:0;;;;34944:25;34960:8;;34944:11;;:15;;:25;;;;:::i;:::-;34930:11;:39;;;;35000:29;35020:8;;35000:15;:19;;:29;;;;:::i;:::-;34984:13;:45;;;;35049:24;35061:11;;35049:24;;;;;;;;;;;;;;;;;;34730:355;35175:10;;35157:15;:28;35149:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32956:1;32947:6;:10;32939:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32990:22;33005:6;32990:14;:22::i;:::-;33038:10;33028:29;;;33050:6;33028:29;;;;;;;;;;;;;;;;;;32799:266;;:::o;30446:108::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30536:10;30522:11;:24;;;;30446:108;:::o;28089:71::-;;;;;;;;;;;;;:::o;37408:663::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37524:1;29598:16;:14;:16::i;:::-;29574:21;:40;;;;29643:26;:24;:26::i;:::-;29625:15;:44;;;;29703:1;29684:21;;:7;:21;;;29680:160;;29742:15;29749:7;29742:6;:15::i;:::-;29722:8;:17;29731:7;29722:17;;;;;;;;;;;;;;;:35;;;;29807:21;;29772:23;:32;29796:7;29772:32;;;;;;;;;;;;;;;:56;;;;29680:160;37544:65;37575:10;37595:4;37602:6;37551:5;;;;;;;;;;;37544:30;;;;:65;;;;;;:::i;:::-;37643:13;;37624:15;:32;37620:309;;37687:20;37698:8;;37687:6;:10;;:20;;;;:::i;:::-;37673:11;:34;;;;37620:309;;;37740:17;37760:34;37778:15;37760:13;;:17;;:34;;;;:::i;:::-;37740:54;;37809:16;37828:26;37842:11;;37828:9;:13;;:26;;;;:::i;:::-;37809:45;;37883:34;37908:8;;37883:20;37894:8;37883:6;:10;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;37869:11;:48;;;;37620:309;;;37957:15;37939;:33;;;;37999:29;38019:8;;37999:15;:19;;:29;;;;:::i;:::-;37983:13;:45;;;;38044:19;38056:6;38044:19;;;;;;;;;;;;;;;;;;23677:1;37408:663;:::o;33178:1511::-;33219:10;29598:16;:14;:16::i;:::-;29574:21;:40;;;;29643:26;:24;:26::i;:::-;29625:15;:44;;;;29703:1;29684:21;;:7;:21;;;29680:160;;29742:15;29749:7;29742:6;:15::i;:::-;29722:8;:17;29731:7;29722:17;;;;;;;;;;;;;;;:35;;;;29807:21;;29772:23;:32;29796:7;29772:32;;;;;;;;;;;;;;;:56;;;;29680:160;34753:13;;34734:15;:32;34730:355;;34843:19;:17;:19::i;:::-;34877:5;;;;;;;;;;;:10;;;34896:4;34903:11;;34877:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34877:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34877:38:0;;;;34944:25;34960:8;;34944:11;;:15;;:25;;;;:::i;:::-;34930:11;:39;;;;35000:29;35020:8;;35000:15;:19;;:29;;;;:::i;:::-;34984:13;:45;;;;35049:24;35061:11;;35049:24;;;;;;;;;;;;;;;;;;34730:355;35175:10;;35157:15;:28;35149:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33264:14;33281:18;33288:10;33281:6;:18::i;:::-;33264:35;;33323:1;33314:6;:10;33310:1372;;;33364:1;33341:8;:20;33350:10;33341:20;;;;;;;;;;;;;;;:24;;;;33394:16;33461:42;33413:90;;33421:8;;;;;;;;;;;33413:34;;;33448:10;33413:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33413:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33413:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33413:46:0;;;;;;;;;;;;;;;;:90;;;:149;;33524:8;;;;;;;;;;;33516:34;;;33551:10;33516:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33516:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33516:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33516:46:0;;;;;;;;;;;;;;;;33413:149;;;33504:11;;;;;;;;;;;33413:149;33394:168;;33577:11;33603:8;33591:34;;;33626:10;33637:6;33591:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33591:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33591:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33591:53:0;;;;;;;;;;;;;;;;33577:67;;33757:1;33751:3;:7;33748:79;;;33778:33;33797:8;33807:3;33778:5;;;;;;;;;;;:18;;;;:33;;;;;:::i;:::-;33748:79;33855:18;33876:42;33908:9;;33876:27;33887:15;;33876:6;:10;;:27;;;;:::i;:::-;:31;;:42;;;;:::i;:::-;33855:63;;33947:1;33936:10;:12;33933:94;;;33968:43;33987:11;;;;;;;;;;;34000:10;33968:5;;;;;;;;;;;:18;;;;:43;;;;;:::i;:::-;33933:94;34041:18;34062:31;34082:10;34062:15;34073:3;34062:6;:10;;:15;;;;:::i;:::-;:19;;:31;;;;:::i;:::-;34041:52;;34108:18;34129:1;34108:22;;34225:11;;34195:15;:27;34211:10;34195:27;;;;;;;;;;;;;;;;:41;34187:3;:50;34184:149;;;34271:46;34307:9;;34271:31;34286:15;;34271:10;:14;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;34258:59;;34184:149;34361:1;34350:10;:12;34347:152;;;34382:43;34401:11;;;;;;;;;;;34414:10;34382:5;;;;;;;;;;;:18;;;;:43;;;;;:::i;:::-;34457:26;34472:10;34457;:14;;:26;;;;:::i;:::-;34444:39;;34347:152;34529:1;34518:10;:12;34515:94;;;34550:43;34569:10;34581;34550:5;;;;;;;;;;;:18;;;;:43;;;;;:::i;:::-;34515:94;34647:10;34636:34;;;34659:10;34636:34;;;;;;;;;;;;;;;;;;33310:1372;;;;;;35210:1;33178:1511;:::o;29871:102::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29955:9;29944:8;:20;;;;29871:102;:::o;28965:34::-;;;;:::o;29205:50::-;;;;;;;;;;;;;;;;;:::o;29090:58::-;;;;;;;;;;;;;;;;;:::o;28805:30::-;;;;:::o;28842:::-;;;;:::o;25526:110::-;25583:7;25610:9;:18;25620:7;25610:18;;;;;;;;;;;;;;;;25603:25;;25526:110;;;:::o;30963:126::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31067:14;31049:15;:32;;;;30963:126;:::o;29155:43::-;;;;;;;;;;;;;;;;;:::o;31223:132::-;31280:7;31307:40;31316:15;31333:13;;31307:8;:40::i;:::-;31300:47;;31223:132;:::o;29006:32::-;;;;:::o;31097:118::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31197:10;31183:11;:24;;;;31097:118;:::o;29045:36::-;;;;:::o;25407:111::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25502:8;25485:14;;:25;;;;;;;;;;;;;;;;;;25407:111;:::o;23694:256::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23807:1;23785:24;;:10;:24;;;;23777:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23896:10;23861:46;;23883:11;;;;;;;;;;;23861:46;;;;;;;;;;;;23932:10;23918:11;;:24;;;;;;;;;;;;;;;;;;23694:256;:::o;29985:108::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30074:11;30061:10;;:24;;;;;;;;;;;;;;;;;;;;29985:108;:::o;25644:120::-;25706:7;25733:14;:23;25748:7;25733:23;;;;;;;;;;;;;;;;25726:30;;25644:120;;;:::o;28629:37::-;;;;:::o;28010:72::-;;;;;;;;;;;;;:::o;36862:504::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36974:1;29598:16;:14;:16::i;:::-;29574:21;:40;;;;29643:26;:24;:26::i;:::-;29625:15;:44;;;;29703:1;29684:21;;:7;:21;;;29680:160;;29742:15;29749:7;29742:6;:15::i;:::-;29722:8;:17;29731:7;29722:17;;;;;;;;;;;;;;;:35;;;;29807:21;;29772:23;:32;29796:7;29772:32;;;;;;;;;;;;;;;:56;;;;29680:160;37015:5;37002:18;;:9;;;;;;;;;;;:18;;;36994:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37059:4;37047:9;;:16;;;;;;;;;;;;;;;;;;37087:9;37074:10;:22;;;;37107:19;:17;:19::i;:::-;37151:25;37167:8;;37151:11;;:15;;:25;;;;:::i;:::-;37137:11;:39;;;;37188:5;;;;;;;;;;;:10;;;37207:4;37214:11;;37188:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37188:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37188:38:0;;;;37255:10;;37237:15;:28;;;;37292:24;37307:8;;37292:10;;:14;;:24;;;;:::i;:::-;37276:13;:40;;;;37334:24;37346:11;;37334:24;;;;;;;;;;;;;;;;;;23677:1;36862:504;:::o;31373:596::-;31420:7;31510:1;31494:12;:10;:12::i;:::-;:17;31490:124;;;31581:21;;31574:28;;;;31490:124;31644:317;31688:217;31892:12;:10;:12::i;:::-;31688:177;31860:4;31688:109;31785:11;;31688:70;31742:15;;31688:26;:24;:26::i;:::-;:53;;:70;;;;:::i;:::-;:96;;:109;;;;:::i;:::-;:171;;:177;;;;:::i;:::-;:203;;:217;;;;:::i;:::-;31644:21;;:25;;:317;;;;:::i;:::-;31624:337;;31373:596;;:::o;25262:137::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25383:8;25369:11;;:22;;;;;;;;;;;;;;;;;;25262:137;:::o;25114:140::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25237:8;25219;;:27;;;;;;;;;;;;;;;;;;25114:140;:::o;30105:97::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30190:3;30175:5;;:19;;;;;;;;;;;;;;;;;;30105:97;:::o;25776:89::-;25819:7;25846:11;;25839:18;;25776:89;:::o;28167:71::-;;;;;;;;;;;;;:::o;29264:29::-;;;;;;;;;;;;;:::o;32437:354::-;32529:10;29598:16;:14;:16::i;:::-;29574:21;:40;;;;29643:26;:24;:26::i;:::-;29625:15;:44;;;;29703:1;29684:21;;:7;:21;;;29680:160;;29742:15;29749:7;29742:6;:15::i;:::-;29722:8;:17;29731:7;29722:17;;;;;;;;;;;;;;;:35;;;;29807:21;;29772:23;:32;29796:7;29772:32;;;;;;;;;;;;;;;:56;;;;29680:160;34753:13;;34734:15;:32;34730:355;;34843:19;:17;:19::i;:::-;34877:5;;;;;;;;;;;:10;;;34896:4;34903:11;;34877:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34877:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34877:38:0;;;;34944:25;34960:8;;34944:11;;:15;;:25;;;;:::i;:::-;34930:11;:39;;;;35000:29;35020:8;;35000:15;:19;;:29;;;;:::i;:::-;34984:13;:45;;;;35049:24;35061:11;;35049:24;;;;;;;;;;;;;;;;;;34730:355;35175:10;;35157:15;:28;35149:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35308:4;35271:41;;35279:8;;;;;;;;;;;35271:23;;;35295:10;35271:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35271:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35271:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35271:35:0;;;;;;;;;;;;;;;;:41;;;35263:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32634:1;32625:6;:10;32617:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32665:28;32677:6;32685:7;32665:11;:28::i;:::-;32736:3;32706:15;:27;32722:10;32706:27;;;;;;;;;;;;;;;:33;;;;32764:10;32757:26;;;32776:6;32757:26;;;;;;;;;;;;;;;;;;32437:354;;;:::o;33073:97::-;33109:31;33118:21;33128:10;33118:9;:21::i;:::-;33109:8;:31::i;:::-;33151:11;:9;:11::i;:::-;33073:97::o;30606:216::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30702:5;;;;;;;;;;;30693:14;;:5;:14;;;;30685:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30746:8;;;;;;;;;;;30737:17;;:5;:17;;;;30729:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30775:39;30794:11;;;;;;;;;;;30807:6;30775:5;:18;;;;:39;;;;;:::i;:::-;30606:216;;:::o;28924:34::-;;;;:::o;30309:95::-;23636:11;;;;;;;;;;;23622:25;;:10;:25;;;23614:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30392:4;30378:11;;:18;;;;;;;;;;;;;;;;;;30309:95;:::o;24937:44::-;;;;;;;;;;;;;:::o;24623:80::-;;;;;;;;;;;;;:::o;28716:43::-;;;;:::o;28509:30::-;;;;:::o;4128:136::-;4186:7;4213:43;4217:1;4220;4213:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4206:50;;4128:136;;;;:::o;5044:471::-;5102:7;5352:1;5347;:6;5343:47;;;5377:1;5370:8;;;;5343:47;5402:9;5418:1;5414;:5;5402:17;;5447:1;5442;5438;:5;;;;;;:10;5430:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5506:1;5499:8;;;5044:471;;;;;:::o;5983:132::-;6041:7;6068:39;6072:1;6075;6068:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6061:46;;5983:132;;;;:::o;3672:181::-;3730:7;3750:9;3766:1;3762;:5;3750:17;;3791:1;3786;:6;;3778:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3844:1;3837:8;;;3672:181;;;;:::o;35393:289::-;35458:1;35448:7;;;;;;;;;;;:11;35438:7;;:21;;;;;;;;;;;;;;;;;;;;35470:18;35491:145;35626:7;;;;;;;;;;;35618:16;;35599;;:36;35491:103;35590:1;35582:7;;;;;;;;;;;:9;35574:18;;35534:36;35555:14;;35534:16;;:20;;:36;;;;:::i;:::-;35533:60;35491:37;35521:6;35491:25;35501:14;;35491:5;;:9;;:25;;;;:::i;:::-;:29;;:37;;;;:::i;:::-;:41;;:103;;;;:::i;:::-;:107;;:145;;;;:::i;:::-;35470:166;;35666:10;35644:11;:33;;;;35393:289;:::o;26796:769::-;26865:1;26856:6;:10;26848:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26908:24;26925:6;26908:12;;:16;;:24;;;;:::i;:::-;26893:12;:39;;;;26967:33;26993:6;26967:9;:21;26977:10;26967:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;26943:9;:21;26953:10;26943:21;;;;;;;;;;;;;;;:57;;;;27051:3;27025:30;;:14;;;;;;;;;;;:30;;;27021:482;;27086:43;27102:14;:26;27117:10;27102:26;;;;;;;;;;;;;;;;27086:11;;:15;;:43;;;;:::i;:::-;27072:11;:57;;;;27159:14;;;;;;;;;;;27144:36;;;27181:10;27193:6;27144:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27144:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27144:56:0;;;;27259:14;;;;;;;;;;;27244:39;;;27284:10;27244:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27244:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27244:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27244:51:0;;;;;;;;;;;;;;;;27215:14;:26;27230:10;27215:26;;;;;;;;;;;;;;;:80;;;;27324:43;27340:14;:26;27355:10;27340:26;;;;;;;;;;;;;;;;27324:11;;:15;;:43;;;;:::i;:::-;27310:11;:57;;;;27021:482;;;27414:12;;27400:11;:26;;;;27470:9;:21;27480:10;27470:21;;;;;;;;;;;;;;;;27441:14;:26;27456:10;27441:26;;;;;;;;;;;;;;;:50;;;;27021:482;27515:42;27538:10;27550:6;27515:8;;;;;;;;;;;:21;;;;:42;;;;;:::i;:::-;26796:769;:::o;19790:204::-;19891:95;19910:5;19940;:18;;;:27;;;;19969:4;19975:2;19979:5;19917:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19917:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;19917:68:0;19891:18;:95::i;:::-;19790:204;;;;:::o;19293:298::-;19377:12;19391:17;19420:5;19412:19;;19248:34;;;;;;;;;;;;;;;;;19238:45;;;;;;19465:2;19469:5;19432:43;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19432:43:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;19432:43:0;19412:64;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;19412:64:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;19376:100:0;;;;19495:7;:57;;;;;19522:1;19507:4;:11;:16;:44;;;;19538:4;19527:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19527:24:0;;;;;;;;;;;;;;;;19507:44;19495:57;19487:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19293:298;;;;;:::o;1706:106::-;1764:7;1795:1;1791;:5;:13;;1803:1;1791:13;;;1799:1;1791:13;1784:20;;1706:106;;;;:::o;25875:913::-;25962:24;25979:6;25962:12;;:16;;:24;;;;:::i;:::-;25947:12;:39;;;;26021:33;26047:6;26021:9;:21;26031:10;26021:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;25997:9;:21;26007:10;25997:21;;;;;;;;;;;;;;;:57;;;;26097:3;26071:30;;:14;;;;;;;;;;;:30;;;26067:481;;26132:43;26148:14;:26;26163:10;26148:26;;;;;;;;;;;;;;;;26132:11;;:15;;:43;;;;:::i;:::-;26118:11;:57;;;;26205:14;;;;;;;;;;;26190:35;;;26226:10;26238:6;26190:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26190:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26190:55:0;;;;26306:14;;;;;;;;;;;26291:39;;;26331:10;26291:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26291:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26291:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26291:51:0;;;;;;;;;;;;;;;;26262:14;:26;26277:10;26262:26;;;;;;;;;;;;;;;:80;;;;26371:43;26387:14;:26;26402:10;26387:26;;;;;;;;;;;;;;;;26371:11;;:15;;:43;;;;:::i;:::-;26357:11;:57;;;;26067:481;;;26459:12;;26445:11;:26;;;;26515:9;:21;26525:10;26515:21;;;;;;;;;;;;;;;;26486:14;:26;26501:10;26486:26;;;;;;;;;;;;;;;:50;;;;26067:481;26560:60;26586:10;26606:4;26613:6;26560:8;;;;;;;;;;;:25;;;;:60;;;;;;:::i;:::-;26652:11;;;;;;;;;;;26640:33;;;26674:10;26640:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26640:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26640:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26640:45:0;;;;;;;;;;;;;;;;26635:134;;26714:11;;;;;;;;;;;26702:34;;;26737:10;26749:7;26702:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;26702:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26702:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26702:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26702:55:0;;;;;;;;;;;;;;;;;26635:134;25875:913;;:::o;4601:192::-;4687:7;4720:1;4715;:6;;4723:12;4707:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4707:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4747:9;4763:1;4759;:5;4747:17;;4784:1;4777:8;;;4601:192;;;;;:::o;6645:345::-;6731:7;6830:1;6826;:5;6833:12;6818:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6818:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6857:9;6873:1;6869;:5;;;;;;6857:17;;6981:1;6974:8;;;6645:345;;;;;:::o;21645:1114::-;22249:27;22257:5;22249:25;;;:27::i;:::-;22241:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22386:12;22400:23;22435:5;22427:19;;22447:4;22427:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;22427:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;22385:67:0;;;;22471:7;22463:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22552:1;22532:10;:17;:21;22528:224;;;22674:10;22663:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22663:30:0;;;;;;;;;;;;;;;;22655:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22528:224;21645:1114;;;;:::o;16241:619::-;16301:4;16563:16;16590:19;16612:66;16590:88;;;;16781:7;16769:20;16757:32;;16821:11;16809:8;:23;;:42;;;;;16848:3;16836:15;;:8;:15;;16809:42;16801:51;;;;16241:619;;;:::o
Swarm Source
bzzr://1530b183096a823ab60d53c3a251a1210deafee1065bf8930773376bfca2c098
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.