Source Code
Latest 25 from a total of 1,943,171 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Submit | 82864552 | 2 mins ago | IN | 0.15518023 AVAX | 0.00243187 | ||||
| Submit | 82864468 | 3 mins ago | IN | 0.11083386 AVAX | 0.00128025 | ||||
| Submit | 82864440 | 3 mins ago | IN | 0.11083386 AVAX | 0.00164592 | ||||
| Submit | 82864325 | 5 mins ago | IN | 0 AVAX | 0.00557859 | ||||
| Submit | 82864299 | 6 mins ago | IN | 0.11084285 AVAX | 0.00165408 | ||||
| Submit | 82864293 | 6 mins ago | IN | 0 AVAX | 0.00288702 | ||||
| Submit | 82864265 | 7 mins ago | IN | 0.11084285 AVAX | 0.00165661 | ||||
| Submit | 82864165 | 8 mins ago | IN | 0.39903429 AVAX | 0.00492192 | ||||
| Submit | 82863998 | 11 mins ago | IN | 0.39873932 AVAX | 0.00496349 | ||||
| Submit | 82863987 | 11 mins ago | IN | 0.39866225 AVAX | 0.00497147 | ||||
| Submit | 82863966 | 12 mins ago | IN | 0.24340599 AVAX | 0.00496174 | ||||
| Submit | 82863819 | 14 mins ago | IN | 0 AVAX | 0.00567277 | ||||
| Withdraw All | 82863811 | 14 mins ago | IN | 0 AVAX | 0.00021191 | ||||
| Submit | 82863697 | 16 mins ago | IN | 0 AVAX | 0.00306678 | ||||
| Claim | 82863649 | 17 mins ago | IN | 0 AVAX | 0.00420232 | ||||
| Claim | 82863555 | 19 mins ago | IN | 0.10684823 AVAX | 0.00387551 | ||||
| Submit | 82863521 | 19 mins ago | IN | 0.35302658 AVAX | 0.00512258 | ||||
| Submit | 82862913 | 30 mins ago | IN | 0.39623388 AVAX | 0.00493236 | ||||
| Submit | 82862897 | 30 mins ago | IN | 0.39623388 AVAX | 0.00493533 | ||||
| Submit | 82862847 | 31 mins ago | IN | 0.39623388 AVAX | 0.00492579 | ||||
| Submit | 82862782 | 32 mins ago | IN | 0.39623388 AVAX | 0.00493416 | ||||
| Submit | 82862477 | 37 mins ago | IN | 0 AVAX | 0.00504796 | ||||
| Submit | 82862344 | 39 mins ago | IN | 0 AVAX | 0.00508207 | ||||
| Submit | 82862343 | 39 mins ago | IN | 0 AVAX | 0.00506974 | ||||
| Submit | 82862343 | 39 mins ago | IN | 0 AVAX | 0.00509191 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 82863811 | 14 mins ago | 268.16701964 AVAX | ||||
| 82807522 | 16 hrs ago | 63.01617949 AVAX | ||||
| 82789529 | 21 hrs ago | 328.08502207 AVAX | ||||
| 82715923 | 43 hrs ago | 11.4970249 AVAX | ||||
| 82711669 | 44 hrs ago | 34.06090853 AVAX | ||||
| 82699003 | 47 hrs ago | 229.91945511 AVAX | ||||
| 82644824 | 2 days ago | 40.49467787 AVAX | ||||
| 82632774 | 2 days ago | 783.31011038 AVAX | ||||
| 82480611 | 4 days ago | 19.2155568 AVAX | ||||
| 82475592 | 4 days ago | 197.34579559 AVAX | ||||
| 82436372 | 5 days ago | 343.128504 AVAX | ||||
| 82386681 | 5 days ago | 648.05247962 AVAX | ||||
| 82272216 | 7 days ago | 168.80006272 AVAX | ||||
| 82229523 | 7 days ago | 128.55534927 AVAX | ||||
| 82194655 | 8 days ago | 183.02272063 AVAX | ||||
| 82148739 | 8 days ago | 32.08317788 AVAX | ||||
| 82146172 | 8 days ago | 17.74227102 AVAX | ||||
| 82143234 | 8 days ago | 50.93532812 AVAX | ||||
| 82137698 | 8 days ago | 120.13558992 AVAX | ||||
| 82109787 | 9 days ago | 401.50177743 AVAX | ||||
| 82048838 | 9 days ago | 1,614.73833087 AVAX | ||||
| 81807187 | 12 days ago | 22.00213463 AVAX | ||||
| 81804895 | 12 days ago | 42.27275697 AVAX | ||||
| 81799701 | 12 days ago | 33.67556423 AVAX | ||||
| 81795314 | 12 days ago | 81.34951562 AVAX |
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
POPA_SUBMISSIONS
Compiler Version
v0.8.34+commit.80d5c536
Contract Source Code (Solidity)
/**
*Submitted for verification at snowscan.xyz on 2026-03-11
*/
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/utils/Pausable.sol
// OpenZeppelin Contracts (last updated v5.3.0) (utils/Pausable.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
bool private _paused;
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
/**
* @dev The operation failed because the contract is paused.
*/
error EnforcedPause();
/**
* @dev The operation failed because the contract is not paused.
*/
error ExpectedPause();
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
if (paused()) {
revert EnforcedPause();
}
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
if (!paused()) {
revert ExpectedPause();
}
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @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.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/access/Ownable2Step.sol
// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which provides access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This extension of the {Ownable} contract includes a two-step mechanism to transfer
* ownership, where the new owner must call {acceptOwnership} in order to replace the
* old one. This can help prevent common mistakes, such as transfers of ownership to
* incorrect accounts, or to contracts that are unable to interact with the
* permission system.
*
* The initial owner is specified at deployment time in the constructor for `Ownable`. This
* can later be changed with {transferOwnership} and {acceptOwnership}.
*
* This module is used through inheritance. It will make available all functions
* from parent (Ownable).
*/
abstract contract Ownable2Step is Ownable {
address private _pendingOwner;
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
/**
* @dev Returns the address of the pending owner.
*/
function pendingOwner() public view virtual returns (address) {
return _pendingOwner;
}
/**
* @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
* Can only be called by the current owner.
*
* Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.
*/
function transferOwnership(address newOwner) public virtual override onlyOwner {
_pendingOwner = newOwner;
emit OwnershipTransferStarted(owner(), newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual override {
delete _pendingOwner;
super._transferOwnership(newOwner);
}
/**
* @dev The new owner accepts the ownership transfer.
*/
function acceptOwnership() public virtual {
address sender = _msgSender();
if (pendingOwner() != sender) {
revert OwnableUnauthorizedAccount(sender);
}
_transferOwnership(sender);
}
}
// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}
// File: mining/WalletAuthorizable.sol
pragma solidity ^0.8.28;
abstract contract WalletAuthorizable {
IWalletSecurePin public walletSecurePin;
bool public authorizationCheckEnabled;
error UnauthorizedWallet();
error InvalidAddress();
event WalletSecurePinUpdated(address indexed oldContract, address indexed newContract);
event AuthorizationCheckToggled(bool enabled);
constructor(address _walletSecurePin) {
if (_walletSecurePin == address(0)) revert InvalidAddress();
walletSecurePin = IWalletSecurePin(_walletSecurePin);
authorizationCheckEnabled = true;
emit WalletSecurePinUpdated(address(0), _walletSecurePin);
}
modifier onlyAuthorizedWallet(address owner) {
_validateWalletAuthorization(owner);
_;
}
modifier onlyOwnerOrAuthorized(address owner) {
_validateWalletAuthorization(owner);
_;
}
function _validateWalletAuthorization(address owner) internal view virtual {
if (owner == address(0)) revert InvalidAddress();
if (!authorizationCheckEnabled) return;
if (msg.sender == owner) return;
if (address(walletSecurePin) == address(0)) {
revert UnauthorizedWallet();
}
bool authorized = false;
try walletSecurePin.isAuthorizedWallet(owner, msg.sender) returns (bool result) {
authorized = result;
} catch {
}
if (!authorized) {
revert UnauthorizedWallet();
}
}
function _setWalletSecurePin(address _walletSecurePin) internal virtual {
if (_walletSecurePin == address(0)) revert InvalidAddress();
address oldContract = address(walletSecurePin);
walletSecurePin = IWalletSecurePin(_walletSecurePin);
emit WalletSecurePinUpdated(oldContract, _walletSecurePin);
}
function updateWalletSecurePin(address _walletSecurePin) public virtual {
_setWalletSecurePin(_walletSecurePin);
}
function toggleAuthorizationCheck(bool enabled) public virtual {
_setAuthorizationCheck(enabled);
}
function _setAuthorizationCheck(bool enabled) internal virtual {
authorizationCheckEnabled = enabled;
emit AuthorizationCheckToggled(enabled);
}
function getWalletSecurePinAddress() external view returns (address) {
return address(walletSecurePin);
}
function isAuthorizationCheckEnabled() external view returns (bool) {
return authorizationCheckEnabled;
}
function isWalletAuthorized(address owner, address wallet) external view returns (bool) {
if (owner == address(0) || wallet == address(0)) return false;
if (!authorizationCheckEnabled) return true;
if (wallet == owner) return true;
if (address(walletSecurePin) == address(0)) return false;
try walletSecurePin.isAuthorizedWallet(owner, wallet) returns (bool result) {
return result;
} catch {
return false;
}
}
}
interface IWalletSecurePin {
function isAuthorizedWallet(address externalWallet, address internalWallet) external view returns (bool);
}
// File: mining/mining_stable_MQT.sol
pragma solidity ^0.8.34;
contract POPA_SUBMISSIONS is Pausable, Ownable2Step, ReentrancyGuard, WalletAuthorizable {
mapping ( address => bool ) public allowedContracts;
mapping ( uint256 => uint256 ) public totalDailyShares;
mapping ( bytes => shareData ) public submitted;
mapping ( bytes => shareData ) public claimed;
mapping ( address => submittedData[] ) public submittedByDock;
mapping ( address => mapping(uint => bool) ) public submittedByOwner;
mapping ( uint => mapping(uint => address) ) public submittedByMiner;
mapping (bytes => bool) public usedData;
mapping (uint => uint) public dailySubmissions;
POPA_SUBMISSIONS public legacyCon;
mapping (address => mapping ( uint=> bool)) public legacySubmittedByOwner;
mapping (address => uint) public daysClaimed;
mapping (address => mapping (uint => bool)) public dayClaimed;
int public timeZoneOffset;
uint public startingDate;
uint public daysBuffer;
bool public checkDataUnique;
IDock public dockCon;
IAirdrops public airdropsCon;
IActivities public activitiesCon;
IFees public feesCon;
ILogs public logsCon;
ILease public leaseCon;
IPhantom public phantomCon;
address public usdToken;
address public wrappedCoin;
address public mainToken;
mapping(uint => address) public stableTkns;
constructor(address _walletSecurePin)
Ownable(msg.sender)
WalletAuthorizable(_walletSecurePin)
{
legacyCon = POPA_SUBMISSIONS(0xd14F01bfa5999E65780167A0EA530Ecf3D0AA24D);
dockCon = IDock(0x836344e444d999FDdecb6E9CC2Feb08E16D38789);
airdropsCon = IAirdrops(0x929b9A9f01E7E3A857A483011596EF98876f8830);
activitiesCon = IActivities(0xAe10DA21826d1954FbBdb7165F90C3B135524245);
phantomCon = IPhantom(0x36ae20f15BaDe66f9Ae22D1A3795cfe1310691d7);
feesCon = IFees(0x30F536dcfd52fC57A2c6C32BDA1cf9D62826CCE1);
usdToken = 0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7;
wrappedCoin = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7;
mainToken = 0xef0cdae2FfEEeFA539a244a16b3f46ba75b8c810;
daysBuffer = 3;
timeZoneOffset = -5;
logsCon = ILogs(0xC2bae1d5950Afac275d7F0Cc8d10F62963C59b12);
leaseCon = ILease(address(0));
stableTkns[0] = 0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7;
stableTkns[1] = 0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E;
// Skip legacy import in constructor to avoid deployment issues
// __importLegacyGlobalShares(19920, 20350);
}
struct shareData{address _owner;uint shares;uint day;}
struct submittedData{uint shares;uint _day;}
struct submittedPerDay{uint _day;uint _nbr;uint _shares;}
struct removeSubmitData{uint tokenId;uint index;}
struct dockCompData{uint _userSlots; uint _dockedNbr; uint[] _docked; uint _leasedNbr; uint[] _leased; uint[] _phantom;}
event submitEvent(uint _shares,address _owner,uint _round);
event claimEvent(address _owner,uint _totalDays,uint _totalShares);
function pause() public onlyOwner {_pause();}
function unpause() public onlyOwner {_unpause();}
modifier onlyAllowedContract (){require(allowedContracts[msg.sender] == true);_;}
function allowContract ( address _addr ) onlyOwner public {
allowedContracts[_addr ] = true;
}
function disallowContract ( address _addr ) onlyOwner public {
allowedContracts[_addr ] = false;
}
function __importLegacyGlobalShares(uint _start, uint _end) public onlyOwner {
uint totalImported = 0;
for (uint i= _start; i<= _end; i++) {
totalDailyShares[i] = legacyCon.totalDailyShares(i);
unchecked { ++totalImported; }
}
}
function getUserDockComposition(address _user) public view returns (dockCompData memory compData) {
IDock.userDock memory dock = dockCon.getUserDock(_user);
compData._userSlots = dock._userSlots;
compData._docked = dock._userDock;
compData._dockedNbr = compData._docked.length;
if (address(leaseCon) != address(0)) {
compData._leased = leaseCon.getLeased(_user);
} else {
compData._leased = new uint[](0);
}
compData._leasedNbr = compData._leased.length;
if (address(phantomCon) != address(0)) {
(uint tier, uint count) = phantomCon.getUserActivePhantom(_user);
if (tier > 0 && count > 0) {
compData._phantom = new uint[](count);
for (uint i = 0; i < count; i++) {
compData._phantom[i] = tier;
}
} else {
compData._phantom = new uint[](0);
}
} else {
compData._phantom = new uint[](0);
}
}
function getUserDockCompositionLit(address _user) public view returns (uint[] memory allMiners) {
uint[] memory docked = dockCon.getUserDock(_user)._userDock;
uint dockedCount = docked.length;
uint[] memory leased;
uint leasedCount = 0;
if (address(leaseCon) != address(0)) {
leased = leaseCon.getLeased(_user);
leasedCount = leased.length;
}
uint phantomCount = 0;
uint phantomTier = 0;
if (address(phantomCon) != address(0)) {
(phantomTier, phantomCount) = phantomCon.getUserActivePhantom(_user);
if (phantomTier == 0) phantomCount = 0;
}
uint totalCount = dockedCount + leasedCount + phantomCount;
if (totalCount == 0) {
return new uint[](0);
}
allMiners = new uint[](totalCount);
uint index = 0;
for (uint i = 0; i < dockedCount;) {
allMiners[index++] = docked[i];
unchecked { ++i; }
}
for (uint i = 0; i < leasedCount;) {
allMiners[index++] = leased[i];
unchecked { ++i; }
}
if (phantomCount > 0) {
for (uint i = 0; i < phantomCount;) {
allMiners[index++] = phantomTier;
unchecked { ++i; }
}
}
return allMiners;
}
function submit (uint _currency,address _owner,uint[] calldata _tokensId,uint256[] calldata data,uint[] calldata workouts,uint _day)
public
payable
whenNotPaused
nonReentrant
onlyAuthorizedWallet(_owner)
returns ( bool )
{ require(_owner != msg.sender, "Wallet not allowed");
require( isValidDateToSubmit(_day), "Submission outdated");
require(!submittedByOwner[_owner][_day], "Already submitted");
uint[] memory tokensId = getUserDockCompositionLit(_owner);
require(tokensId.length > 0, "No tokens to submit with");
(uint _feeUsd, uint _fees) = feesCon.getSubFees(tokensId);
_processFeePayment(_currency, _feeUsd, _fees);
if (checkDataUnique) {
bytes memory fPrint = dataFprint(_day,data,workouts);
require(!usedData[fPrint], "Data already submitted");
usedData[fPrint] = true;
}
_validateMinersNotSubmitted(tokensId, _day);
uint _shares = activitiesCon.multiComputeAllSharesBoosted(_owner, _day, tokensId, data, workouts);
require(_shares > 0, "Zero shares can't be submitted");
_recordSubmission(_owner, _day, _shares, tokensId);
_logSubmitAction(_owner, _day, _shares, tokensId);
emit submitEvent(_shares, _owner, _day);
return true;
}
function _logSubmitAction(address _owner, uint _day, uint _shares, uint[] memory tokensId) internal {
if(address(logsCon) != address(0)){
uint[] memory _values = new uint[](2);
_values[0] = _day;
_values[1] = _shares;
logsCon.logAction(_owner, 1, _values, tokensId);
}
}
function _validateMinersNotSubmitted(uint[] memory tokensId, uint _day) internal view {
for (uint i = 0; i < tokensId.length;) {
uint tokenId = tokensId[i];
if(tokenId > 100){
require(submittedByMiner[tokenId][_day] == address(0), "One or more miners already submitted");
}
unchecked { ++i; }
}
}
function _recordSubmission(address _owner, uint _day, uint _shares, uint[] memory tokensId) internal {
bytes memory track = trackId(_owner, _day);
shareData memory fin_data = shareData(_owner, _shares, _day);
for (uint i = 0; i < tokensId.length;) {
uint tokenId = tokensId[i];
if(tokenId > 100){
submittedByMiner[tokenId][_day] = _owner;
}
unchecked { ++i; }
}
totalDailyShares[_day] += _shares;
dailySubmissions[_day] += 1;
submittedByDock[_owner].push(submittedData(_shares, _day));
submittedByOwner[_owner][_day] = true;
submitted[track] = fin_data;
}
function _claim (address _owner, uint _currency) internal returns ( IAirdrops.sharesData[] memory ) {
submittedData[] memory allClaims = getPendingClaims(_owner);
uint totalDays = _countValidDays(allClaims);
(uint _feeUsd, uint _fees) = getClaimFees(totalDays);
_processFeePayment(_currency, _feeUsd, _fees);
return _processClaimData(_owner, allClaims, totalDays);
}
function _countValidDays(submittedData[] memory allClaims) internal view returns (uint) {
uint claimsLength = allClaims.length;
uint maxDays = getMaxClaimDays();
uint totalDays = 0;
for (uint i = 0; i < claimsLength && totalDays < maxDays; ) {
if (isValidDateToMine(allClaims[i]._day)) {
unchecked { ++totalDays; }
}
unchecked { ++i; }
}
return totalDays;
}
function _processClaimData(address _owner, submittedData[] memory allClaims, uint totalDays) internal returns (IAirdrops.sharesData[] memory) {
uint32 RATIO_MULTIPLIER = 1000000;
IAirdrops.sharesData[] memory array = new IAirdrops.sharesData[](totalDays);
uint totalShares = 0;
uint _processed = 0;
uint claimsLength = allClaims.length;
for (uint i = 0; i < claimsLength && _processed < totalDays; ) {
if (isValidDateToMine(allClaims[i]._day)) {
totalShares += _processSingleClaim(_owner, allClaims[i], array, _processed, RATIO_MULTIPLIER);
unchecked { ++_processed; }
}
unchecked { ++i; }
}
_logClaimAction(_owner, totalDays, totalShares);
emit claimEvent(_owner, totalDays, totalShares);
return array;
}
function _processSingleClaim(address _owner, submittedData memory claimData, IAirdrops.sharesData[] memory array, uint arrayIndex, uint32 RATIO_MULTIPLIER) internal returns (uint) {
uint dayShares = claimData.shares;
uint dayTotal = totalDailyShares[claimData._day];
uint32 ratio = uint32((dayShares * RATIO_MULTIPLIER) / dayTotal);
array[arrayIndex] = IAirdrops.sharesData(ratio, claimData._day);
_updateClaimRecords(_owner, claimData._day);
return dayShares;
}
function _updateClaimRecords(address _owner, uint claimDay) internal {
dayClaimed[_owner][claimDay] = true;
bytes memory track = trackId(_owner, claimDay);
claimed[track] = submitted[track];
delete submitted[track];
removeFromSubmitterByNft(_owner, claimDay);
}
function _logClaimAction(address _owner, uint totalDays, uint totalShares) internal {
if(address(logsCon) != address(0)){
uint[] memory _values = new uint[](2);
_values[0] = totalDays;
_values[1] = totalShares;
logsCon.logAction(_owner, 2, _values, new uint[](0));
}
}
function claim (uint _currency, address _owner)
payable
whenNotPaused
nonReentrant
onlyAuthorizedWallet(_owner)
public
returns ( bool )
{
IAirdrops.sharesData[] memory totalRatio = _claim(_owner, _currency);
airdropsCon.claimTokens(_owner, totalRatio);
return true;
}
function addDailyShares (uint32 _day, uint _shares) public onlyAllowedContract {
totalDailyShares[_day] += _shares;
}
function removeFromSubmitterByNft(address _owner, uint _day) private {
submittedData[] storage submissions = submittedByDock[_owner];
uint len = submissions.length;
uint index = len;
for (uint i = 0; i < len; i++) {
if (submissions[i]._day == _day) {index = i;break;}
}
if (index == len) {return;}
for (uint i = index; i < len - 1; i++) {submissions[i] = submissions[i + 1];}
submissions.pop();
}
function isAlreadySubmitted (address _owner, uint _days) public view returns (bool) {
bool legacySubmitted = false;
if (address(legacyCon) != address(0)) {legacySubmitted = legacyCon.isAlreadySubmitted(_owner, _days);}
return submittedByOwner[_owner][_days] || legacySubmitted;
}
function isAlreadySubmittedByMiner (uint _tkn, uint _day) public view returns (bool) {
return submittedByMiner[_tkn][_day] != address(0);
}
function getInvalidMinersToSubmit(uint[] memory _tkns, uint _day) public view returns (uint[] memory _invalid) {
uint count = 0;
for (uint i = 0; i < _tkns.length; i++) {if (isAlreadySubmittedByMiner(_tkns[i], _day)) {count++;}}
_invalid = new uint[](count);
uint index = 0;
for (uint i = 0; i < _tkns.length; i++) {if (isAlreadySubmittedByMiner(_tkns[i], _day)) {_invalid[index++] = _tkns[i];}}
return _invalid;
}
function getPendingClaimsNbr(address _owner) public view returns(uint){return getPendingClaims(_owner).length;}
function getPendingClaims(address _owner) public view returns (submittedData[] memory) {
submittedData[] memory old;
if (address(legacyCon) != address(0)) {old = legacyCon.getPendingClaims(_owner);} else {old = new submittedData[](0) ;}
submittedData[] memory current = submittedByDock[_owner];
submittedData[] memory combinedTemp = new submittedData[](old.length + current.length);
uint count = 0;
for (uint i = 0; i < old.length; i++) {if (!dayClaimed[_owner][old[i]._day]) {combinedTemp[count++] = old[i];}}
for (uint j = 0; j < current.length; j++) {if (!dayClaimed[_owner][current[j]._day]) {combinedTemp[count++] = current[j];}}
submittedData[] memory combined = new submittedData[](count);
for (uint k = 0; k < count; k++) {combined[k] = combinedTemp[k];}
return combined;
}
function getSubmissionsPerDay(uint _day, uint _length) public view returns (submittedPerDay[] memory) {
submittedPerDay[] memory array = new submittedPerDay[](_length);
for (uint i = 0; i < _length; i++) {
array[i] = submittedPerDay(_day - i, dailySubmissions[_day - i], totalDailyShares[_day - i]);
}
return array;
}
function getSubPerDay (address _owner, uint32 _days) public view returns (shareData memory) {
bytes memory ref = trackId(_owner, _days);
shareData memory cur = submitted[ref];
if (cur.shares == 0 && address(legacyCon) != address(0)) {
return legacyCon.getSubPerDay(_owner, _days);
}
return cur;
}
function getClaimPerDay (address _owner, uint32 _days) public view returns (shareData memory) {
bytes memory ref = trackId(_owner, _days);
shareData memory cur = claimed[ref];
if (cur.shares == 0 && address(legacyCon) != address(0)) {
return legacyCon.getClaimPerDay(_owner, _days);
}
return cur;
}
function getDate() public view returns(uint){return getTime() / 1 days;}
function getTime() public view virtual returns(uint){return uint(int(block.timestamp) + (timeZoneOffset * 1 hours));}
function SetTimeZoneOffset(int _value) public onlyOwner {
timeZoneOffset = _value;
}
function getDayShares (uint _day) public view returns (uint) {return totalDailyShares[_day];}
function simulateShares(uint[] calldata tokensId,uint256[] calldata data,uint[] calldata workouts) public view returns(uint){return activitiesCon.multiComputeAllShares(tokensId, data, workouts);}
function simulateSharesBoosted(address user, uint256 day, uint[] calldata tokensId,uint256[] calldata data,uint[] calldata workouts) public view returns(uint){return activitiesCon.multiComputeAllSharesBoosted(user, day, tokensId, data, workouts);}
function isValidDateToSubmit (uint _days) public view returns (bool) {return (getDate() - _days) < daysBuffer;}
function isValidDateToMine (uint _days) public view returns (bool) {if(_days > getDate()) return false;if(_days < startingDate) return false;return (getDate() - _days) > (daysBuffer - 1);}
function getAirdropsPerDay() public view returns (IAirdrops.dailyDistribution[] memory){return airdropsCon.getAirdropsPerDay();}
function getAirdropsActive() public view returns (address[] memory) {
IAirdrops.dailyDistribution[] memory list = airdropsCon.getAirdropsPerDay();
uint listLength = list.length;
uint activeCount = 0;
for (uint i = 0; i < listLength;) {
(,,,,,,bool active) = airdropsCon.getTokenData(list[i]._addr);
if (active) {
unchecked { ++activeCount; }
}
unchecked { ++i; }
}
address[] memory array = new address[](activeCount);
uint index = 0;
for (uint i = 0; i < listLength;) {
(,,,,,,bool active) = airdropsCon.getTokenData(list[i]._addr);
if (active) {
array[index] = list[i]._addr;
unchecked { ++index; }
}
unchecked { ++i; }
}
return array;
}
function trackId (address _owner, uint _days) public pure returns (bytes memory) {return abi.encodePacked(_owner, _days);}
function dataFprint(uint _days, uint256[] calldata data, uint[] calldata workouts) public pure returns (bytes memory) {return abi.encodePacked(_days, data, workouts);}
function getMaxClaimDays () public view returns (uint){ return feesCon.getMaxClaimDays();}
function getTokenValueTier () public view returns (uint){return feesCon.getTokenValueTier();}
function getSubFees (uint[] calldata tokensId) public view returns (uint _usd, uint _coin){return feesCon.getSubFees(tokensId);}
function getClaimFees(uint _days) public view returns (uint _usd, uint _coin){return feesCon.getClaimFees(_days);}
function convertToStable(uint _value6, address _tokenAddress) public view returns (uint) {
require(_tokenAddress != address(0), "Invalid token address");
uint8 decimals = ERC20(_tokenAddress).decimals();
if (decimals == 6) {
return _value6;
} else if (decimals == 18) {
return _value6 * 10**12;
} else {
uint decimalDifference = uint(decimals) - 6;
return _value6 * (10 ** decimalDifference);
}
}
function _processFeePayment(uint _currency, uint _feeUsd, uint _feeNative) internal {
if (_currency == 0) {
// Pay with native token (AVAX)
require(msg.value >= _feeNative, "Not enough funds sent");
} else if (_currency >= 1 && _currency <= 5) {
// Pay with stable token
uint stableIndex = _currency - 1;
address stableToken = stableTkns[stableIndex];
require(stableToken != address(0), "Invalid currency");
uint stableAmount = convertToStable(_feeUsd, stableToken);
require(ERC20(stableToken).transferFrom(msg.sender, address(this), stableAmount), "Token transfer failed");
} else {
revert("Invalid currency");
}
}
function setusdTokenAddress(address _addr) public onlyOwner {
usdToken = _addr;
}
function setwrappedCoinAddress(address _addr) public onlyOwner {
wrappedCoin = _addr;
}
function setLegacyContract (address _addr) public onlyOwner {
legacyCon = POPA_SUBMISSIONS(_addr);
}
function setActivitiesContract (address _addr) public onlyOwner {
activitiesCon = IActivities(_addr);
}
function setdockContract (address _addr) public onlyOwner {
dockCon = IDock(_addr);
}
function setFeesContract (address _addr) public onlyOwner {
feesCon = IFees(_addr);
}
function setLogsContract (address _addr) public onlyOwner {
logsCon = ILogs(_addr);
}
function setLeaseContract (address _addr) public onlyOwner {
leaseCon = ILease(_addr);
}
function setPhantomContract (address _addr) public onlyOwner {
phantomCon = IPhantom(_addr);
}
function setAirdropsContract (address _addr) public onlyOwner {
airdropsCon = IAirdrops(_addr);
}
function setStableTkn(uint _index, address _tokenAddress) public onlyOwner {
require(_index < 5, "Token index must be less than 5");
stableTkns[_index] = _tokenAddress;
}
function getStableTkns() public view returns (address[] memory) {
uint validCount = 0;
for (uint i = 0; i < 5; i++) {
if (stableTkns[i] != address(0)) {
validCount++;
}
}
address[] memory validTokens = new address[](validCount);
uint index = 0;
for (uint i = 0; i < 5; i++) {
if (stableTkns[i] != address(0)) {
validTokens[index++] = stableTkns[i];
}
}
return validTokens;
}
function updateWalletSecurePin(address _walletSecurePin)
public
override
onlyOwner
{
_setWalletSecurePin(_walletSecurePin);
}
function toggleAuthorizationCheck(bool enabled)
public
override
onlyOwner
{
_setAuthorizationCheck(enabled);
}
function setStartingDate (uint _days) public onlyOwner {
startingDate = _days;
}
function setUniqueCheck (bool _v) public onlyOwner {
checkDataUnique = _v;
}
function setDaysBuffer (uint _days) public onlyOwner {
daysBuffer = _days;
}
function getDaysBuffer () public view returns (uint) {return daysBuffer;}
function adjustShares(uint _day, address[] calldata _wallets, uint[] calldata _correctShares) public onlyOwner {
require(_wallets.length == _correctShares.length, "Arrays length mismatch");
require(_wallets.length > 0, "Empty arrays");
int totalDifference = 0;
for (uint i = 0; i < _wallets.length; i++) {
address wallet = _wallets[i];
uint correctShares = _correctShares[i];
// Get current submitted shares (handles legacy contract)
shareData memory currentData = getSubPerDay(wallet, uint32(_day));
require(currentData.shares > 0, "No submission found for wallet");
require(currentData.day == _day, "Day mismatch");
// Calculate difference (current - correct)
int difference = int(currentData.shares) - int(correctShares);
totalDifference += difference;
// Update submitted shares to correct value in current contract
bytes memory track = trackId(wallet, _day);
submitted[track].shares = correctShares;
submitted[track]._owner = wallet;
submitted[track].day = _day;
}
// Adjust global daily shares
// If totalDifference is positive, we over-counted, so subtract
// If totalDifference is negative, we under-counted, so add
if (totalDifference > 0) {
totalDailyShares[_day] -= uint(totalDifference);
} else if (totalDifference < 0) {
totalDailyShares[_day] += uint(-totalDifference);
}
}
function getBalance() public view returns(uint) {return address(this).balance;}
function withdraw() public onlyOwner nonReentrant {
uint amount = getBalance();
(bool success, ) = payable(msg.sender).call{value: amount}("");
require(success, "Transfer failed");
}
function withdrawAmount(uint _amount) public onlyOwner nonReentrant {
require(_amount <= getBalance(), "err : Amount > Balance");
(bool success, ) = payable(msg.sender).call{value: _amount}("");
require(success, "Transfer failed");
}
function transferToken (address _tokenAddress, address addr, uint amount) public onlyOwner nonReentrant returns (uint256) {
ERC20(_tokenAddress).transfer(addr, amount);
return ERC20(_tokenAddress).balanceOf(address(this));
}
function withdrawAllStable() public onlyOwner nonReentrant {
address payable to = payable(msg.sender);
for (uint i = 0; i < 5; i++) {
if (stableTkns[i] != address(0)) {
uint balance = ERC20(stableTkns[i]).balanceOf(address(this));
if (balance > 0) {
ERC20(stableTkns[i]).transfer(to, balance);
}
}
}
}
function withdrawTokenAll(address _tokenAddress) public onlyOwner nonReentrant {
require(_tokenAddress != address(0), "Invalid token address");
uint balance = ERC20(_tokenAddress).balanceOf(address(this));
require(balance > 0, "No balance to withdraw");
address payable to = payable(msg.sender);
ERC20(_tokenAddress).transfer(to, balance);
}
function withdrawAll() public onlyOwner nonReentrant {
// Withdraw all native coin
uint nativeAmount = getBalance();
if (nativeAmount > 0) {
(bool success, ) = payable(msg.sender).call{value: nativeAmount}("");
require(success, "Native transfer failed");
}
// Withdraw all stable tokens
for (uint i = 0; i < 5; i++) {
if (stableTkns[i] != address(0)) {
uint balance = ERC20(stableTkns[i]).balanceOf(address(this));
if (balance > 0) {
ERC20(stableTkns[i]).transfer(msg.sender, balance);
}
}
}
}
}
interface IActivities {
function nftType (uint tokenId) external pure returns(uint);
function computeAllShares (uint tokenId,uint[] calldata data,uint[] calldata workouts_list) external view returns ( uint );
function multiComputeAllShares(uint[] calldata tokensId,uint[] calldata data,uint[] calldata workouts_list) external view returns ( uint );
function multiComputeAllSharesBoosted(address user, uint256 day, uint[] calldata tokensId, uint[] calldata data, uint[] calldata workouts_list) external view returns (uint);
function getMiningLevelBonus(uint tknId) external view returns (uint);
}
interface IDock {
struct userDock {uint _userSlots;uint[] _userDock;}
function getUserDock(address user) external view returns (userDock memory);
function isOwnerOfAll(address _owner, uint[] calldata _nfts) external view returns (bool);
function maxSlots() external view returns (uint);
}
interface IAirdrops {
struct dailyDistribution {address _addr; string _name;uint _perDay; uint _startingDay;}
struct sharesData {uint32 _shares; uint _day;}
function getAirdropsPerDay() external view returns (dailyDistribution[] memory);
function getTokenData(address addr) external view returns (address _addr,string memory _name,string memory _symbol,uint256 _supply,uint256 _perDay,uint256 _claimed,bool _active );
function claimTokens (address addr, sharesData[] memory ratios) external returns (bool);
function claimTokens (address addr, sharesData[] memory ratios, address[] calldata _tkns) external returns (bool);
}
interface ITokenPricing {
function getPrice(address tokenIn, address tokenOut, uint amountIn) external view returns (uint amountOut);
}
interface ERC20 {
function decimals() external view returns (uint8);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
interface IFees {
function getMaxClaimDays () external view returns (uint);
function getTokenValueTier () external view returns (uint);
function getSubFeesPerMiner (uint tknId) external view returns (uint _usd, uint _coin);
function getSubFees (uint[] calldata tokensId) external view returns (uint _usd, uint _coin);
function getClaimFees(uint _days) external view returns (uint _usd, uint _coin);
}
interface ILogs {
function logAction (address _user, uint _type, uint[] memory _values, uint[] memory _values2) external;
}
interface ILease {
function getLeased (address _user) external view returns (uint[] memory items);
}
interface IPhantom {
function getUserActivePhantom (address _user) external view returns (uint tier, uint count);
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_walletSecurePin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"UnauthorizedWallet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AuthorizationCheckToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldContract","type":"address"},{"indexed":true,"internalType":"address","name":"newContract","type":"address"}],"name":"WalletSecurePinUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_totalDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalShares","type":"uint256"}],"name":"claimEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_shares","type":"uint256"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_round","type":"uint256"}],"name":"submitEvent","type":"event"},{"inputs":[{"internalType":"int256","name":"_value","type":"int256"}],"name":"SetTimeZoneOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"__importLegacyGlobalShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activitiesCon","outputs":[{"internalType":"contract IActivities","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_day","type":"uint32"},{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"addDailyShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256[]","name":"_correctShares","type":"uint256[]"}],"name":"adjustShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropsCon","outputs":[{"internalType":"contract IAirdrops","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"allowContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authorizationCheckEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkDataUnique","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currency","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"claimed","outputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value6","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"convertToStable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dailySubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"}],"name":"dataFprint","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"dayClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daysBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"daysClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"disallowContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dockCon","outputs":[{"internalType":"contract IDock","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesCon","outputs":[{"internalType":"contract IFees","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAirdropsActive","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAirdropsPerDay","outputs":[{"components":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_perDay","type":"uint256"},{"internalType":"uint256","name":"_startingDay","type":"uint256"}],"internalType":"struct IAirdrops.dailyDistribution[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"getClaimFees","outputs":[{"internalType":"uint256","name":"_usd","type":"uint256"},{"internalType":"uint256","name":"_coin","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint32","name":"_days","type":"uint32"}],"name":"getClaimPerDay","outputs":[{"components":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"internalType":"struct POPA_SUBMISSIONS.shareData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getDayShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDaysBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tkns","type":"uint256[]"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getInvalidMinersToSubmit","outputs":[{"internalType":"uint256[]","name":"_invalid","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxClaimDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getPendingClaims","outputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"internalType":"struct POPA_SUBMISSIONS.submittedData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getPendingClaimsNbr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableTkns","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"}],"name":"getSubFees","outputs":[{"internalType":"uint256","name":"_usd","type":"uint256"},{"internalType":"uint256","name":"_coin","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint32","name":"_days","type":"uint32"}],"name":"getSubPerDay","outputs":[{"components":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"internalType":"struct POPA_SUBMISSIONS.shareData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"getSubmissionsPerDay","outputs":[{"components":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"uint256","name":"_nbr","type":"uint256"},{"internalType":"uint256","name":"_shares","type":"uint256"}],"internalType":"struct POPA_SUBMISSIONS.submittedPerDay[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenValueTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserDockComposition","outputs":[{"components":[{"internalType":"uint256","name":"_userSlots","type":"uint256"},{"internalType":"uint256","name":"_dockedNbr","type":"uint256"},{"internalType":"uint256[]","name":"_docked","type":"uint256[]"},{"internalType":"uint256","name":"_leasedNbr","type":"uint256"},{"internalType":"uint256[]","name":"_leased","type":"uint256[]"},{"internalType":"uint256[]","name":"_phantom","type":"uint256[]"}],"internalType":"struct POPA_SUBMISSIONS.dockCompData","name":"compData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserDockCompositionLit","outputs":[{"internalType":"uint256[]","name":"allMiners","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWalletSecurePinAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isAlreadySubmitted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tkn","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"isAlreadySubmittedByMiner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAuthorizationCheckEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isValidDateToMine","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isValidDateToSubmit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"isWalletAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaseCon","outputs":[{"internalType":"contract ILease","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legacyCon","outputs":[{"internalType":"contract POPA_SUBMISSIONS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"legacySubmittedByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logsCon","outputs":[{"internalType":"contract ILogs","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phantomCon","outputs":[{"internalType":"contract IPhantom","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setActivitiesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setAirdropsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"setDaysBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLeaseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLegacyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLogsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setPhantomContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setStableTkn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"setStartingDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_v","type":"bool"}],"name":"setUniqueCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setdockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setusdTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setwrappedCoinAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"}],"name":"simulateShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"}],"name":"simulateSharesBoosted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stableTkns","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currency","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256[]","name":"_tokensId","type":"uint256[]"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"submit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"submitted","outputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByDock","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByMiner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeZoneOffset","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleAuthorizationCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalDailyShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"trackId","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletSecurePin","type":"address"}],"name":"updateWalletSecurePin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"usedData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletSecurePin","outputs":[{"internalType":"contract IWalletSecurePin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllStable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"withdrawTokenAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrappedCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561000f575f5ffd5b506040516162cd3803806162cd83398101604081905261002e9161031d565b80338061005457604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005d816102a9565b5060016002556001600160a01b03811661008a5760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a81b0319166001600160a01b038316908117600160a01b179091556040515f907f958d75e6176f26b8dda305a07f2e6abbc057c250bec1e18cbdf586dc235154e6908290a35050600d80546001600160a01b031990811673d14f01bfa5999e65780167a0ea530ecf3d0aa24d179091556014805474836344e444d999fddecb6e9cc2feb08e16d3878900610100600160a81b031990911617905560158054821673929b9a9f01e7e3a857a483011596ef98876f883017905560168054821673ae10da21826d1954fbbdb7165f90c3b135524245179055601a805482167336ae20f15bade66f9ae22d1a3795cfe1310691d71790556017805482167330f536dcfd52fc57a2c6c32bda1cf9d62826cce1179055601b80548216739702230a8ea53601f5cd2dc00fdbc13d4df4a8c7908117909155601c8054831673b31f66aa3c1e785363f0875a1b74e27b85fd66c7179055601d8054831673ef0cdae2ffeeefa539a244a16b3f46ba75b8c810179055600360135560041960115560188054831673c2bae1d5950afac275d7f0cc8d10f62963c59b121790556019805483169055601e6020527f65ce8396b736f5da9d881cc6fbcb11ef9721292dc41ec8c40879fd9edea5744d80548316909117905560015f527f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e98f805490911673b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e17905561034a565b600180546001600160a01b03191690556102c2816102c5565b50565b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b5f6020828403121561032d575f5ffd5b81516001600160a01b0381168114610343575f5ffd5b9392505050565b615f76806103575f395ff3fe60806040526004361061057b575f3560e01c80638456cb59116102cd578063d01460ca1161017a578063ec45864e116100e3578063f6df80551161009d578063f897a22b11610078578063f897a22b1461125e578063f8fd09e41461127d578063ff62309c146112a1578063ffc345c6146112c0575f5ffd5b8063f6df8055146111c4578063f7f5ed6114611214578063f88c4d0214611233575f5ffd5b8063ec45864e146110fb578063ef62071f14611134578063f2fde38b14611153578063f30ea6be14611172578063f5537ede14611186578063f6bd02fa146111a5575f5ffd5b8063e30c397811610134578063e30c39781461102e578063e438005d1461104b578063e4542aae1461106a578063e5a82bf714611089578063e5b5462d146110bd578063e9a3ccfa146110dc575f5ffd5b8063d01460ca14610f80578063d2f9d45b14610f9f578063d9be4b3e14610fbe578063dac6b05014610fdd578063ddd5e1b214610ffc578063dfda09051461100f575f5ffd5b80639ea507f211610236578063b6907c93116101f0578063c0382c08116101cb578063c0382c0814610f04578063c1df5cc814610f23578063cb0e122a14610f42578063cef59a9e14610f61575f5ffd5b8063b6907c9314610e51578063b6b67d9e14610e70578063bbac408c14610e8f575f5ffd5b80639ea507f214610da25780639edbc24614610dc15780639ff7a39d14610de0578063a7a6296014610dff578063b246794914610e13578063b3b3adc114610e32575f5ffd5b80638f3277fe116102875780638f3277fe14610ce5578063925b506a14610cf957806394a4c34a14610d2457806399a5432a14610d4357806399f9140514610d575780639d2e7b3414610d83575f5ffd5b80638456cb5914610c3d57806384be319d14610c51578063853828b614610c705780638685343614610c845780638da5cb5b14610ca35780638e45870f14610cc4575f5ffd5b806349b89bd31161042b5780636371177e11610394578063715018a61161034e57806377646389116103295780637764638914610bcb57806379ba509714610bea57806379dd33c214610bfe57806381da45b214610c1e575f5ffd5b8063715018a614610b765780637231535a14610b8a5780637232ed2714610b9f575f5ffd5b80636371177e14610a785780636725cda114610a9557806367645bbb14610ab45780636a9f280714610af35780636d37eda514610b2c57806370f9cecf14610b57575f5ffd5b80635629d258116103e55780635629d258146109ac57806358a215b0146109cb57806359fa047d146109ea5780635c975abb14610a245780635e37fb0014610a3a5780636167227a14610a59575f5ffd5b806349b89bd3146108e15780634b6592cc1461090057806351e0e26b1461091f578063527ba9af1461094d57806353d09aac1461096c578063557ed1ba14610998575f5ffd5b80633b6567c6116104e75780633e0e44d0116104a15780633fc15f151161047c5780633fc15f15146108705780633fce59081461088f578063430fe9c1146108ae578063440f82c9146108c2575f5ffd5b80633e0e44d0146108285780633e3ff7b6146108475780633f4ba83a1461085c575f5ffd5b80633b6567c6146107325780633c010dc9146107515780633ccfd60b1461078a5780633d93e02e1461079e5780633db7aced146107ca5780633de2662c146107de575f5ffd5b806319174c231161053857806319174c231461065a5780631e5e99061461068657806323eab2c2146106b157806332cbe4c4146106c457806334dc8ea5146106dd5780633728040814610711575f5ffd5b806304a8d7071461057f5780630562b9f7146105a757806307e438e2146105c85780630966a6a5146105ff57806312065fe01461061e57806312bd43bd14610630575b5f5ffd5b34801561058a575f5ffd5b5061059460135481565b6040519081526020015b60405180910390f35b3480156105b2575f5ffd5b506105c66105c1366004614d38565b6112df565b005b3480156105d3575f5ffd5b50600d546105e7906001600160a01b031681565b6040516001600160a01b03909116815260200161059e565b34801561060a575f5ffd5b506105c6610619366004614d63565b6113d2565b348015610629575f5ffd5b5047610594565b34801561063b575f5ffd5b50600354600160a01b900460ff165b604051901515815260200161059e565b348015610665575f5ffd5b50610679610674366004614d7e565b6113fc565b60405161059e9190614d9e565b348015610691575f5ffd5b506105946106a0366004614d38565b5f9081526005602052604090205490565b61064a6106bf366004614e31565b611501565b3480156106cf575f5ffd5b5060145461064a9060ff1681565b3480156106e8575f5ffd5b506106fc6106f7366004614eef565b611924565b6040805192835260208301919091520161059e565b34801561071c575f5ffd5b506107256119a4565b60405161059e9190614f5b565b34801561073d575f5ffd5b506105c661074c366004614d63565b611a17565b34801561075c575f5ffd5b5061064a61076b366004614ff4565b600960209081525f928352604080842090915290825290205460ff1681565b348015610795575f5ffd5b506105c6611a28565b3480156107a9575f5ffd5b506107bd6107b83660046150ce565b611acf565b60405161059e91906151a5565b3480156107d5575f5ffd5b50610594611bea565b3480156107e9575f5ffd5b506107fd6107f83660046151cf565b611c55565b6040805182516001600160a01b0316815260208084015190820152918101519082015260600161059e565b348015610833575f5ffd5b506106fc610842366004614d38565b611d85565b348015610852575f5ffd5b5061059460125481565b348015610867575f5ffd5b506105c6611dfc565b34801561087b575f5ffd5b50601d546105e7906001600160a01b031681565b34801561089a575f5ffd5b506105946108a9366004615202565b611e0c565b3480156108b9575f5ffd5b50610594611e90565b3480156108cd575f5ffd5b506105946108dc366004614d63565b611ea7565b3480156108ec575f5ffd5b506105946108fb36600461529e565b611eb8565b34801561090b575f5ffd5b506018546105e7906001600160a01b031681565b34801561092a575f5ffd5b5061064a610939366004614d63565b60046020525f908152604090205460ff1681565b348015610958575f5ffd5b50601c546105e7906001600160a01b031681565b348015610977575f5ffd5b5061098b610986366004614d63565b611fcd565b60405161059e91906152cc565b3480156109a3575f5ffd5b50610594612282565b3480156109b7575f5ffd5b506105c66109c6366004614d63565b61229d565b3480156109d6575f5ffd5b506105c66109e5366004614d38565b61242b565b3480156109f5575f5ffd5b5061064a610a0436600461536f565b8051602081830181018051600b8252928201919093012091525460ff1681565b348015610a2f575f5ffd5b505f5460ff1661064a565b348015610a45575f5ffd5b506105c6610a54366004614d63565b612438565b348015610a64575f5ffd5b506003546105e7906001600160a01b031681565b348015610a83575f5ffd5b506003546001600160a01b03166105e7565b348015610aa0575f5ffd5b506105c6610aaf366004614d63565b612460565b348015610abf575f5ffd5b506105e7610ace366004614d7e565b600a60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610afe575f5ffd5b5061064a610b0d366004614ff4565b601060209081525f928352604080842090915290825290205460ff1681565b348015610b37575f5ffd5b50610594610b46366004614d38565b60056020525f908152604090205481565b348015610b62575f5ffd5b5061064a610b71366004614ff4565b61248a565b348015610b81575f5ffd5b506105c6612548565b348015610b95575f5ffd5b5061059460115481565b348015610baa575f5ffd5b50610bbe610bb9366004614ff4565b612559565b60405161059e91906153e3565b348015610bd6575f5ffd5b506105c6610be536600461529e565b612597565b348015610bf5575f5ffd5b506105c661261c565b348015610c09575f5ffd5b5060035461064a90600160a01b900460ff1681565b348015610c29575f5ffd5b506105c6610c38366004615402565b61265d565b348015610c48575f5ffd5b506105c6612678565b348015610c5c575f5ffd5b50610594610c6b36600461541d565b612688565b348015610c7b575f5ffd5b506105c6612705565b348015610c8f575f5ffd5b506105c6610c9e366004614d63565b6128da565b348015610cae575f5ffd5b505f5461010090046001600160a01b03166105e7565b348015610ccf575f5ffd5b50610cd8612904565b60405161059e91906154d4565b348015610cf0575f5ffd5b50610594612bae565b348015610d04575f5ffd5b50610594610d13366004614d38565b600c6020525f908152604090205481565b348015610d2f575f5ffd5b506107fd610d3e3660046151cf565b612bf5565b348015610d4e575f5ffd5b50601354610594565b348015610d62575f5ffd5b50610d76610d71366004614d63565b612cd9565b60405161059e9190615514565b348015610d8e575f5ffd5b506107bd610d9d366004614d63565b613097565b348015610dad575f5ffd5b506106fc610dbc366004614ff4565b6133af565b348015610dcc575f5ffd5b506105c6610ddb366004614d7e565b6133e7565b348015610deb575f5ffd5b506105c6610dfa366004614d63565b613490565b348015610e0a575f5ffd5b50610cd86134c0565b348015610e1e575f5ffd5b506016546105e7906001600160a01b031681565b348015610e3d575f5ffd5b506105c6610e4c366004615402565b6135d4565b348015610e5c575f5ffd5b5061064a610e6b366004615557565b6135e5565b348015610e7b575f5ffd5b506105c6610e8a366004615583565b6136e0565b348015610e9a575f5ffd5b50610edf610ea936600461536f565b80516020818301810180516007825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b03909416845260208401929092529082015260600161059e565b348015610f0f575f5ffd5b506105c6610f1e36600461559d565b61372c565b348015610f2e575f5ffd5b5061064a610f3d366004614d38565b6139df565b348015610f4d575f5ffd5b506015546105e7906001600160a01b031681565b348015610f6c575f5ffd5b506105c6610f7b366004614d63565b613a30565b348015610f8b575f5ffd5b5061064a610f9a366004614d38565b613a5a565b348015610faa575f5ffd5b50610bbe610fb936600461559d565b613a78565b348015610fc9575f5ffd5b506017546105e7906001600160a01b031681565b348015610fe8575f5ffd5b506105c6610ff7366004614d63565b613aad565b61064a61100a36600461529e565b613ad7565b34801561101a575f5ffd5b506019546105e7906001600160a01b031681565b348015611039575f5ffd5b506001546001600160a01b03166105e7565b348015611056575f5ffd5b506105c6611065366004614d63565b613b80565b348015611075575f5ffd5b506105c6611084366004614d38565b613baa565b348015611094575f5ffd5b506105e76110a3366004614d38565b601e6020525f90815260409020546001600160a01b031681565b3480156110c8575f5ffd5b5061064a6110d7366004614d7e565b613bb7565b3480156110e7575f5ffd5b50601a546105e7906001600160a01b031681565b348015611106575f5ffd5b5061064a611115366004614ff4565b600e60209081525f928352604080842090915290825290205460ff1681565b34801561113f575f5ffd5b506105c661114e366004614d38565b613bde565b34801561115e575f5ffd5b506105c661116d366004614d63565b613beb565b34801561117d575f5ffd5b506105c6613c61565b348015611191575f5ffd5b506105946111a0366004615614565b613da2565b3480156111b0575f5ffd5b506105c66111bf366004614d63565b613e9d565b3480156111cf575f5ffd5b50610edf6111de36600461536f565b80516020818301810180516006825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b34801561121f575f5ffd5b506105c661122e366004614d63565b613ec8565b34801561123e575f5ffd5b5061059461124d366004614d63565b600f6020525f908152604090205481565b348015611269575f5ffd5b50601b546105e7906001600160a01b031681565b348015611288575f5ffd5b506014546105e79061010090046001600160a01b031681565b3480156112ac575f5ffd5b506105c66112bb366004614d63565b613ef2565b3480156112cb575f5ffd5b506105c66112da366004614d63565b613f1c565b6112e7613f46565b6112ef613f78565b4781111561133d5760405162461bcd60e51b8152602060048201526016602482015275657272203a20416d6f756e74203e2042616c616e636560501b60448201526064015b60405180910390fd5b6040515f90339083908381818185875af1925050503d805f811461137c576040519150601f19603f3d011682016040523d82523d5f602084013e611381565b606091505b50509050806113c45760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611334565b506113cf6001600255565b50565b6113da613f46565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f826001600160401b038111156114175761141761501e565b60405190808252806020026020018201604052801561146957816020015b61145660405180606001604052805f81526020015f81526020015f81525090565b8152602001906001900390816114355790505b5090505f5b838110156114f7576040518060600160405280828761148d9190615666565b8152602001600c5f61149f858a615666565b81526020019081526020015f2054815260200160055f84896114c19190615666565b81526020019081526020015f20548152508282815181106114e4576114e4615679565b602090810291909101015260010161146e565b5090505b92915050565b5f61150a613fa0565b611512613f78565b8861151c81613fc3565b336001600160a01b038b16036115695760405162461bcd60e51b815260206004820152601260248201527115d85b1b195d081b9bdd08185b1b1bddd95960721b6044820152606401611334565b61157283613a5a565b6115b45760405162461bcd60e51b815260206004820152601360248201527214dd589b5a5cdcda5bdb881bdd5d19185d1959606a1b6044820152606401611334565b6001600160a01b038a165f90815260096020908152604080832086845290915290205460ff161561161b5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481cdd589b5a5d1d1959607a1b6044820152606401611334565b5f6116258b613097565b90505f8151116116775760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320746f207375626d6974207769746800000000000000006044820152606401611334565b6017546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea5906116ab9086906004016151a5565b6040805180830381865afa1580156116c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e9919061568d565b915091506116f88e83836140d0565b60145460ff16156117b0575f611711878c8c8c8c613a78565b9050600b8160405161172391906156af565b9081526040519081900360200190205460ff161561177c5760405162461bcd60e51b815260206004820152601660248201527511185d1848185b1c9958591e481cdd589b5a5d1d195960521b6044820152606401611334565b6001600b8260405161178e91906156af565b908152604051908190036020019020805491151560ff19909216919091179055505b6117ba83876142a2565b5f60165f9054906101000a90046001600160a01b03166001600160a01b03166337d5b9eb8f89878f8f8f8f6040518863ffffffff1660e01b815260040161180797969594939291906156f5565b602060405180830381865afa158015611822573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118469190615751565b90505f81116118975760405162461bcd60e51b815260206004820152601e60248201527f5a65726f207368617265732063616e2774206265207375626d697474656400006044820152606401611334565b6118a38e888387614357565b6118af8e8883876144ff565b7f2dad5bc61871201926333cea2842b88a9e0b9e6dce31832196e80d8e810890f1818f896040516118fc939291909283526001600160a01b03919091166020830152604082015260600190565b60405180910390a16001955050505050506119176001600255565b9998505050505050505050565b6017546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea59061195a9087908790600401615768565b6040805180830381865afa158015611974573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611998919061568d565b915091505b9250929050565b601554604080516306e5008160e31b815290516060926001600160a01b0316916337280408916004808301925f9291908290030181865afa1580156119eb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a1291908101906157c8565b905090565b611a1f613f46565b6113cf816145d9565b611a30613f46565b611a38613f78565b60405147905f90339083908381818185875af1925050503d805f8114611a79576040519150601f19603f3d011682016040523d82523d5f602084013e611a7e565b606091505b5050905080611ac15760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611334565b5050611acd6001600255565b565b60605f805b8451811015611b1b57611b00858281518110611af257611af2615679565b602002602001015185613bb7565b15611b135781611b0f816158d0565b9250505b600101611ad4565b50806001600160401b03811115611b3457611b3461501e565b604051908082528060200260200182016040528015611b5d578160200160208202803683370190505b5091505f805b8551811015611be157611b8f868281518110611b8157611b81615679565b602002602001015186613bb7565b15611bd957858181518110611ba657611ba6615679565b6020026020010151848380611bba906158d0565b945081518110611bcc57611bcc615679565b6020026020010181815250505b600101611b63565b50505092915050565b60175460408051633db7aced60e01b815290515f926001600160a01b031691633db7aced9160048083019260209291908290030181865afa158015611c31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a129190615751565b611c7f60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f611c90848463ffffffff16612559565b90505f600782604051611ca391906156af565b908152604080516020928190038301812060608201835280546001600160a01b03168252600181015493820184905260020154918101919091529150158015611cf65750600d546001600160a01b031615155b15611d7d57600d54604051630f78998b60e21b81526001600160a01b03878116600483015263ffffffff8716602483015290911690633de2662c906044015b606060405180830381865afa158015611d50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d7491906158e8565b925050506114fb565b949350505050565b6017546040516303e0e44d60e41b8152600481018390525f9182916001600160a01b0390911690633e0e44d0906024016040805180830381865afa158015611dcf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df3919061568d565b91509150915091565b611e04613f46565b611acd614651565b60165460405163d75ac32760e01b81525f916001600160a01b03169063d75ac32790611e46908a908a908a908a908a908a90600401615949565b602060405180830381865afa158015611e61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e859190615751565b979650505050505050565b5f62015180611e9d612282565b611a129190615984565b5f611eb182612cd9565b5192915050565b5f6001600160a01b038216611f075760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401611334565b5f826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f44573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6891906159a3565b90508060ff16600603611f7e57839150506114fb565b8060ff16601203611fa057611f988464e8d4a510006159c3565b9150506114fb565b5f611faf600660ff8416615666565b9050611fbc81600a615abd565b611d7490866159c3565b5092915050565b6120036040518060c001604052805f81526020015f8152602001606081526020015f815260200160608152602001606081525090565b601454604051637539189960e11b81526001600160a01b0384811660048301525f926101009004169063ea723132906024015f60405180830381865afa15801561204f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120769190810190615b2d565b805183526020808201516040850181905251908401526019549091506001600160a01b031615612118576019546040516355682d0760e01b81526001600160a01b038581166004830152909116906355682d07906024015f60405180830381865afa1580156120e7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261210e9190810190615ba1565b608083015261212c565b604080515f81526020810190915260808301525b6080820151516060830152601a546001600160a01b03161561226857601a5460405162445ac960e21b81526001600160a01b0385811660048301525f9283929116906301116b24906024016040805180830381865afa158015612191573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b5919061568d565b915091505f821180156121c757505f81115b1561224d57806001600160401b038111156121e4576121e461501e565b60405190808252806020026020018201604052801561220d578160200160208202803683370190505b5060a08501525f5b8181101561224757828560a00151828151811061223457612234615679565b6020908102919091010152600101612215565b50612261565b604080515f81526020810190915260a08501525b505061227c565b604080515f81526020810190915260a08301525b50919050565b5f601154610e106122939190615bd2565b611a129042615c01565b6122a5613f46565b6122ad613f78565b6001600160a01b0381166122fb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401611334565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561233f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123639190615751565b90505f81116123ad5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401611334565b60405163a9059cbb60e01b8152336004820181905260248201839052906001600160a01b0384169063a9059cbb906044016020604051808303815f875af11580156123fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241e9190615c28565b5050506113cf6001600255565b612433613f46565b601355565b612440613f46565b6001600160a01b03165f908152600460205260409020805460ff19169055565b612468613f46565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600d545f9081906001600160a01b03161561251557600d546040516370f9cecf60e01b81526001600160a01b03868116600483015260248201869052909116906370f9cecf90604401602060405180830381865afa1580156124ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125129190615c28565b90505b6001600160a01b0384165f90815260096020908152604080832086845290915290205460ff1680611d7d57509392505050565b612550613f46565b611acd5f6146a2565b604051606083811b6bffffffffffffffffffffffff191660208301526034820183905290605401604051602081830303815290604052905092915050565b61259f613f46565b600582106125ef5760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e20696e646578206d757374206265206c657373207468616e2035006044820152606401611334565b5f918252601e602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b60015433906001600160a01b031681146126545760405163118cdaa760e01b81526001600160a01b0382166004820152602401611334565b6113cf816146a2565b612665613f46565b6014805460ff1916911515919091179055565b612680613f46565b611acd6146bb565b6016546040516337d5b9eb60e01b81525f916001600160a01b0316906337d5b9eb906126c6908c908c908c908c908c908c908c908c90600401615c43565b602060405180830381865afa1580156126e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119179190615751565b61270d613f46565b612715613f78565b4780156127ac576040515f90339083908381818185875af1925050503d805f811461275b576040519150601f19603f3d011682016040523d82523d5f602084013e612760565b606091505b50509050806127aa5760405162461bcd60e51b815260206004820152601660248201527513985d1a5d99481d1c985b9cd9995c8819985a5b195960521b6044820152606401611334565b505b5f5b6005811015611ac1575f818152601e60205260409020546001600160a01b0316156128d2575f818152601e60205260408082205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612824573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128489190615751565b905080156128d0575f828152601e60205260409081902054905163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af11580156128aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ce9190615c28565b505b505b6001016127ae565b6128e2613f46565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b60605f60155f9054906101000a90046001600160a01b03166001600160a01b031663372804086040518163ffffffff1660e01b81526004015f60405180830381865afa158015612956573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261297d91908101906157c8565b80519091505f805b82811015612a485760155484515f916001600160a01b0316906313ff7e9f908790859081106129b6576129b6615679565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015612a03573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a2a9190810190615ca1565b96505050505050508015612a3f578260010192505b50600101612985565b505f816001600160401b03811115612a6257612a6261501e565b604051908082528060200260200182016040528015612a8b578160200160208202803683370190505b5090505f805b84811015612ba35760155486515f916001600160a01b0316906313ff7e9f90899085908110612ac257612ac2615679565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015612b0f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b369190810190615ca1565b96505050505050508015612b9a57868281518110612b5657612b56615679565b60200260200101515f0151848481518110612b7357612b73615679565b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b50600101612a91565b509095945050505050565b601754604080516347993bff60e11b815290515f926001600160a01b031691638f3277fe9160048083019260209291908290030181865afa158015611c31573d5f5f3e3d5ffd5b612c1f60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f612c30848463ffffffff16612559565b90505f600682604051612c4391906156af565b908152604080516020928190038301812060608201835280546001600160a01b03168252600181015493820184905260020154918101919091529150158015612c965750600d546001600160a01b031615155b15611d7d57600d54604051634a5261a560e11b81526001600160a01b03878116600483015263ffffffff87166024830152909116906394a4c34a90604401611d35565b600d5460609081906001600160a01b031615612d6457600d546040516399f9140560e01b81526001600160a01b038581166004830152909116906399f91405906024015f60405180830381865afa158015612d36573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d5d9190810190615d49565b9050612da3565b604080515f8082526020820190925290612d9f565b604080518082019091525f8082526020820152815260200190600190039081612d795790505b5090505b6001600160a01b0383165f90815260086020908152604080832080548251818502810185019093528083529192909190849084015b82821015612e1b578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190612dd8565b5050505090505f81518351612e309190615dfe565b6001600160401b03811115612e4757612e4761501e565b604051908082528060200260200182016040528015612e8b57816020015b604080518082019091525f8082526020820152815260200190600190039081612e655790505b5090505f805b8451811015612f38576001600160a01b0387165f9081526010602052604081208651909190879084908110612ec857612ec8615679565b60209081029190910181015181015182528101919091526040015f205460ff16612f3057848181518110612efe57612efe615679565b6020026020010151838380612f12906158d0565b945081518110612f2457612f24615679565b60200260200101819052505b600101612e91565b505f5b8351811015612fe2576001600160a01b0387165f9081526010602052604081208551909190869084908110612f7257612f72615679565b60209081029190910181015181015182528101919091526040015f205460ff16612fda57838181518110612fa857612fa8615679565b6020026020010151838380612fbc906158d0565b945081518110612fce57612fce615679565b60200260200101819052505b600101612f3b565b505f816001600160401b03811115612ffc57612ffc61501e565b60405190808252806020026020018201604052801561304057816020015b604080518082019091525f808252602082015281526020019060019003908161301a5790505b5090505f5b8281101561308c5783818151811061305f5761305f615679565b602002602001015182828151811061307957613079615679565b6020908102919091010152600101613045565b509695505050505050565b601454604051637539189960e11b81526001600160a01b0383811660048301526060925f926101009091049091169063ea723132906024015f60405180830381865afa1580156130e9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131109190810190615b2d565b602001518051601954919250906060905f906001600160a01b0316156131a5576019546040516355682d0760e01b81526001600160a01b038881166004830152909116906355682d07906024015f60405180830381865afa158015613177573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261319e9190810190615ba1565b9150815190505b601a545f9081906001600160a01b03161561323457601a5460405162445ac960e21b81526001600160a01b038a81166004830152909116906301116b24906024016040805180830381865afa158015613200573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613224919061568d565b925090505f819003613234575f91505b5f826132408588615dfe565b61324a9190615dfe565b9050805f0361326e575050604080515f815260208101909152979650505050505050565b806001600160401b038111156132865761328661501e565b6040519080825280602002602001820160405280156132af578160200160208202803683370190505b5097505f805b87811015613308578881815181106132cf576132cf615679565b60200260200101518a83806132e3906158d0565b9450815181106132f5576132f5615679565b60209081029190910101526001016132b5565b505f5b8581101561335e5786818151811061332557613325615679565b60200260200101518a8380613339906158d0565b94508151811061334b5761334b615679565b602090810291909101015260010161330b565b5083156133a2575f5b848110156133a057838a8361337b816158d0565b94508151811061338d5761338d615679565b6020908102919091010152600101613367565b505b5050505050505050919050565b6008602052815f5260405f2081815481106133c8575f80fd5b5f91825260209091206002909102018054600190910154909250905082565b6133ef613f46565b5f825b82811161348a57600d54604051636d37eda560e01b8152600481018390526001600160a01b0390911690636d37eda590602401602060405180830381865afa158015613440573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134649190615751565b5f8281526005602052604090205560019091019080613482816158d0565b9150506133f2565b50505050565b613498613f46565b601480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60605f805b6005811015613500575f818152601e60205260409020546001600160a01b0316156134f857816134f4816158d0565b9250505b6001016134c5565b505f816001600160401b0381111561351a5761351a61501e565b604051908082528060200260200182016040528015613543578160200160208202803683370190505b5090505f805b60058110156135cb575f818152601e60205260409020546001600160a01b0316156135c3575f818152601e60205260409020546001600160a01b03168383613590816158d0565b9450815181106135a2576135a2615679565b60200260200101906001600160a01b031690816001600160a01b0316815250505b600101613549565b50909392505050565b6135dc613f46565b6113cf816146f7565b5f6001600160a01b038316158061360357506001600160a01b038216155b1561360f57505f6114fb565b600354600160a01b900460ff16613628575060016114fb565b826001600160a01b0316826001600160a01b031603613649575060016114fb565b6003546001600160a01b031661366057505f6114fb565b600354604051632305259560e01b81526001600160a01b038581166004830152848116602483015290911690632305259590604401602060405180830381865afa9250505080156136ce575060408051601f3d908101601f191682019092526136cb91810190615c28565b60015b6136d957505f6114fb565b90506114fb565b335f9081526004602052604090205460ff1615156001146136ff575f5ffd5b63ffffffff82165f9081526005602052604081208054839290613723908490615dfe565b90915550505050565b613734613f46565b82811461377c5760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401611334565b826137b85760405162461bcd60e51b815260206004820152600c60248201526b456d7074792061727261797360a01b6044820152606401611334565b5f805b84811015613972575f8686838181106137d6576137d6615679565b90506020020160208101906137eb9190614d63565b90505f85858481811061380057613800615679565b9050602002013590505f613814838b612bf5565b90505f8160200151116138695760405162461bcd60e51b815260206004820152601e60248201527f4e6f207375626d697373696f6e20666f756e6420666f722077616c6c657400006044820152606401611334565b898160400151146138ab5760405162461bcd60e51b815260206004820152600c60248201526b088c2f240dad2e6dac2e8c6d60a31b6044820152606401611334565b5f8282602001516138bc9190615e11565b90506138c88187615c01565b95505f6138d5858d612559565b9050836006826040516138e891906156af565b9081526020016040518091039020600101819055508460068260405161390e91906156af565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091558c9060069061394e9084906156af565b908152604051908190036020019020600201555050600190930192506137bb915050565b505f8113156139a3575f8681526005602052604081208054839290613998908490615666565b909155506139d79050565b5f8112156139d7576139b481615e30565b5f87815260056020526040812080549091906139d1908490615dfe565b90915550505b505050505050565b5f6139e8611e90565b8211156139f657505f919050565b601254821015613a0757505f919050565b6001601354613a169190615666565b82613a1f611e90565b613a299190615666565b1192915050565b613a38613f46565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f60135482613a67611e90565b613a719190615666565b1092915050565b60608585858585604051602001613a93959493929190615e71565b604051602081830303815290604052905095945050505050565b613ab5613f46565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f613ae0613fa0565b613ae8613f78565b81613af281613fc3565b5f613afd848661474f565b6015546040516264974560e91b81529192506001600160a01b03169063c92e8a0090613b2f9087908590600401615e8d565b6020604051808303815f875af1158015613b4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6f9190615c28565b506001925050506114fb6001600255565b613b88613f46565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b613bb2613f46565b601155565b5f918252600a602090815260408084209284529190529020546001600160a01b0316151590565b613be6613f46565b601255565b613bf3613f46565b600180546001600160a01b0383166001600160a01b03199091168117909155613c295f546001600160a01b036101009091041690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b613c69613f46565b613c71613f78565b335f5b6005811015611ac1575f818152601e60205260409020546001600160a01b031615613d9a575f818152601e60205260408082205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613cea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0e9190615751565b90508015613d98575f828152601e60205260409081902054905163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015613d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d969190615c28565b505b505b600101613c74565b5f613dab613f46565b613db3613f78565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af1158015613dff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e239190615c28565b506040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015613e66573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8a9190615751565b9050613e966001600255565b9392505050565b613ea5613f46565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b613ed0613f46565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b613efa613f46565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b613f24613f46565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03610100909104163314611acd5760405163118cdaa760e01b8152336004820152602401611334565b6002805403613f9a57604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b5f5460ff1615611acd5760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b038116613fea5760405163e6c4247b60e01b815260040160405180910390fd5b600354600160a01b900460ff16613ffe5750565b6001600160a01b03811633036140115750565b6003546001600160a01b031661403a57604051634d7df47f60e01b815260040160405180910390fd5b600354604051632305259560e01b81526001600160a01b0383811660048301523360248301525f921690632305259590604401602060405180830381865afa9250505080156140a6575060408051601f3d908101601f191682019092526140a391810190615c28565b60015b156140ae5790505b806140cc57604051634d7df47f60e01b815260040160405180910390fd5b5050565b825f03614124578034101561411f5760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b6044820152606401611334565b505050565b60018310158015614136575060058311155b15614267575f614147600185615666565b5f818152601e60205260409020549091506001600160a01b0316806141a15760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401611334565b5f6141ac8583611eb8565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038316906323b872dd906064016020604051808303815f875af11580156141ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142239190615c28565b6139d75760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401611334565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401611334565b5f5b825181101561411f575f8382815181106142c0576142c0615679565b60200260200101519050606481111561434e575f818152600a602090815260408083208684529091529020546001600160a01b03161561434e5760405162461bcd60e51b8152602060048201526024808201527f4f6e65206f72206d6f7265206d696e65727320616c7265616479207375626d696044820152631d1d195960e21b6064820152608401611334565b506001016142a4565b5f6143628585612559565b604080516060810182526001600160a01b0388168152602081018690529081018690529091505f5b83518110156143f4575f8482815181106143a6576143a6615679565b6020026020010151905060648111156143eb575f818152600a602090815260408083208a8452909152902080546001600160a01b0319166001600160a01b038a161790555b5060010161438a565b505f8581526005602052604081208054869290614412908490615dfe565b90915550505f858152600c60205260408120805460019290614435908490615dfe565b90915550506001600160a01b0386165f818152600860209081526040808320815180830183528981528084018b81528254600181810185559387528587209251600290910290920191825551908201559383526009825280832089845290915290819020805460ff19169092179091555181906006906144b69085906156af565b9081526040805160209281900383019020835181546001600160a01b0319166001600160a01b039091161781559183015160018301559190910151600290910155505050505050565b6018546001600160a01b03161561348a576040805160028082526060820183525f9260208301908036833701905050905083815f8151811061454357614543615679565b602002602001018181525050828160018151811061456357614563615679565b60209081029190910101526018546040516353dc3a9d60e01b81526001600160a01b03909116906353dc3a9d906145a590889060019086908890600401615ef4565b5f604051808303815f87803b1580156145bc575f5ffd5b505af11580156145ce573d5f5f3e3d5ffd5b505050505050505050565b6001600160a01b0381166146005760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f958d75e6176f26b8dda305a07f2e6abbc057c250bec1e18cbdf586dc235154e6905f90a35050565b61465961478e565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556113cf816147b0565b6146c3613fa0565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586146853390565b60038054821515600160a01b0260ff60a01b199091161790556040517f4e923f6d403856ede9e32222960f8ea845b4a9f5d00a799d3deb2db8a5af9c7c9061474490831515815260200190565b60405180910390a150565b60605f61475b84612cd9565b90505f61476782614808565b90505f5f61477483611d85565b915091506147838683836140d0565b611e85878585614870565b5f5460ff16611acd57604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b80515f9081614815611bea565b90505f805b838110801561482857508282105b156148675761485386828151811061484257614842615679565b6020026020010151602001516139df565b1561485f578160010191505b60010161481a565b50949350505050565b6060620f42405f836001600160401b0381111561488f5761488f61501e565b6040519080825280602002602001820160405280156148d357816020015b604080518082019091525f80825260208201528152602001906001900390816148ad5790505b5085519091505f908190815b81811080156148ed57508783105b1561494d5761490789828151811061484257614842615679565b15614945576149328a8a838151811061492257614922615679565b602002602001015187868a6149b0565b61493c9085615dfe565b93508260010192505b6001016148df565b50614959898885614a3e565b604080516001600160a01b038b168152602081018990529081018490527f983bf7148e3e9ebde769e6a1d5b19b34b9c318555cfb03836448a9376bd68d459060600160405180910390a15091979650505050505050565b83516020808601515f9081526005909152604081205490919082816149db63ffffffff8716856159c3565b6149e59190615984565b905060405180604001604052808263ffffffff1681526020018960200151815250878781518110614a1857614a18615679565b6020026020010181905250614a31898960200151614b3f565b5090979650505050505050565b6018546001600160a01b03161561411f576040805160028082526060820183525f9260208301908036833701905050905082815f81518110614a8257614a82615679565b6020026020010181815250508181600181518110614aa257614aa2615679565b60209081029190910101526018546001600160a01b03166353dc3a9d856002845f604051908082528060200260200182016040528015614aec578160200160208202803683370190505b506040518563ffffffff1660e01b8152600401614b0c9493929190615ef4565b5f604051808303815f87803b158015614b23575f5ffd5b505af1158015614b35573d5f5f3e3d5ffd5b5050505050505050565b6001600160a01b0382165f9081526010602090815260408083208484529091528120805460ff19166001179055614b768383612559565b9050600681604051614b8891906156af565b9081526020016040518091039020600782604051614ba691906156af565b908152604051908190036020018120825481546001600160a01b0319166001600160a01b0390911617815560018084015490820155600292830154920191909155600690614bf59083906156af565b90815260405190819003602001902080546001600160a01b03191681555f6001820181905560029091015561411f83836001600160a01b0382165f9081526008602052604081208054909181905b82811015614c835784848281548110614c5e57614c5e615679565b905f5260205f2090600202016001015403614c7b57809150614c83565b600101614c43565b50818103614c92575050505050565b805b614c9f600184615666565b811015614d045783614cb2826001615dfe565b81548110614cc257614cc2615679565b905f5260205f209060020201848281548110614ce057614ce0615679565b5f918252602090912082546002909202019081556001918201549082015501614c94565b5082805480614d1557614d15615f2c565b5f8281526020812060025f19909301928302018181556001015590555050505050565b5f60208284031215614d48575f5ffd5b5035919050565b6001600160a01b03811681146113cf575f5ffd5b5f60208284031215614d73575f5ffd5b8135613e9681614d4f565b5f5f60408385031215614d8f575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015612ba357835180518452602081015160208501526040810151604085015250606083019250602084019350600181019050614db7565b5f5f83601f840112614e01575f5ffd5b5081356001600160401b03811115614e17575f5ffd5b6020830191508360208260051b850101111561199d575f5ffd5b5f5f5f5f5f5f5f5f5f60c08a8c031215614e49575f5ffd5b8935985060208a0135614e5b81614d4f565b975060408a01356001600160401b03811115614e75575f5ffd5b614e818c828d01614df1565b90985096505060608a01356001600160401b03811115614e9f575f5ffd5b614eab8c828d01614df1565b90965094505060808a01356001600160401b03811115614ec9575f5ffd5b614ed58c828d01614df1565b9a9d999c50979a9699959894979660a00135949350505050565b5f5f60208385031215614f00575f5ffd5b82356001600160401b03811115614f15575f5ffd5b614f2185828601614df1565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614fe857868503603f19018452815180516001600160a01b03168652602080820151608091880182905290614fbc90880182614f2d565b604083810151908901526060928301519290970191909152506020938401939190910190600101614f81565b50929695505050505050565b5f5f60408385031215615005575f5ffd5b823561501081614d4f565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156150545761505461501e565b60405290565b604080519081016001600160401b03811182821017156150545761505461501e565b604051601f8201601f191681016001600160401b03811182821017156150a4576150a461501e565b604052919050565b5f6001600160401b038211156150c4576150c461501e565b5060051b60200190565b5f5f604083850312156150df575f5ffd5b82356001600160401b038111156150f4575f5ffd5b8301601f81018513615104575f5ffd5b8035615117615112826150ac565b61507c565b8082825260208201915060208360051b850101925087831115615138575f5ffd5b6020840193505b8284101561515a57833582526020938401939091019061513f565b976020969096013596505050505050565b5f8151808452602084019350602083015f5b8281101561519b57815186526020958601959091019060010161517d565b5093949350505050565b602081525f613e96602083018461516b565b803563ffffffff811681146151ca575f5ffd5b919050565b5f5f604083850312156151e0575f5ffd5b82356151eb81614d4f565b91506151f9602084016151b7565b90509250929050565b5f5f5f5f5f5f60608789031215615217575f5ffd5b86356001600160401b0381111561522c575f5ffd5b61523889828a01614df1565b90975095505060208701356001600160401b03811115615256575f5ffd5b61526289828a01614df1565b90955093505060408701356001600160401b03811115615280575f5ffd5b61528c89828a01614df1565b979a9699509497509295939492505050565b5f5f604083850312156152af575f5ffd5b8235915060208301356152c181614d4f565b809150509250929050565b6020815281516020820152602082015160408201525f604083015160c060608401526152fb60e084018261516b565b9050606084015160808401526080840151601f198483030160a0850152615322828261516b565b91505060a0840151601f198483030160c0850152615340828261516b565b95945050505050565b5f6001600160401b038211156153615761536161501e565b50601f01601f191660200190565b5f6020828403121561537f575f5ffd5b81356001600160401b03811115615394575f5ffd5b8201601f810184136153a4575f5ffd5b80356153b261511282615349565b8181528560208385010111156153c6575f5ffd5b816020840160208301375f91810160200191909152949350505050565b602081525f613e966020830184614f2d565b80151581146113cf575f5ffd5b5f60208284031215615412575f5ffd5b8135613e96816153f5565b5f5f5f5f5f5f5f5f60a0898b031215615434575f5ffd5b883561543f81614d4f565b97506020890135965060408901356001600160401b03811115615460575f5ffd5b61546c8b828c01614df1565b90975095505060608901356001600160401b0381111561548a575f5ffd5b6154968b828c01614df1565b90955093505060808901356001600160401b038111156154b4575f5ffd5b6154c08b828c01614df1565b999c989b5096995094979396929594505050565b602080825282518282018190525f918401906040840190835b81811015612ba35783516001600160a01b03168352602093840193909201916001016154ed565b602080825282518282018190525f918401906040840190835b81811015612ba357835180518452602090810151818501529093019260409092019160010161552d565b5f5f60408385031215615568575f5ffd5b823561557381614d4f565b915060208301356152c181614d4f565b5f5f60408385031215615594575f5ffd5b615010836151b7565b5f5f5f5f5f606086880312156155b1575f5ffd5b8535945060208601356001600160401b038111156155cd575f5ffd5b6155d988828901614df1565b90955093505060408601356001600160401b038111156155f7575f5ffd5b61560388828901614df1565b969995985093965092949392505050565b5f5f5f60608486031215615626575f5ffd5b833561563181614d4f565b9250602084013561564181614d4f565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114fb576114fb615652565b634e487b7160e01b5f52603260045260245ffd5b5f5f6040838503121561569e575f5ffd5b505080516020909101519092909150565b5f82518060208501845e5f920191825250919050565b8183525f6001600160fb1b038311156156dc575f5ffd5b8260051b80836020870137939093016020019392505050565b60018060a01b038816815286602082015260a060408201525f61571b60a083018861516b565b828103606084015261572e8187896156c5565b905082810360808401526157438185876156c5565b9a9950505050505050505050565b5f60208284031215615761575f5ffd5b5051919050565b602081525f611d7d6020830184866156c5565b5f82601f83011261578a575f5ffd5b815161579861511282615349565b8181528460208386010111156157ac575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156157d8575f5ffd5b81516001600160401b038111156157ed575f5ffd5b8201601f810184136157fd575f5ffd5b805161580b615112826150ac565b8082825260208201915060208360051b85010192508683111561582c575f5ffd5b602084015b8381101561308c5780516001600160401b0381111561584e575f5ffd5b85016080818a03601f19011215615863575f5ffd5b61586b615032565b602082015161587981614d4f565b815260408201516001600160401b03811115615893575f5ffd5b6158a28b60208386010161577b565b6020838101919091526060848101516040850152608090940151938301939093525084529283019201615831565b5f600182016158e1576158e1615652565b5060010190565b5f60608284031280156158f9575f5ffd5b50604051606081016001600160401b038111828210171561591c5761591c61501e565b604052825161592a81614d4f565b8152602083810151908201526040928301519281019290925250919050565b606081525f61595c60608301888a6156c5565b828103602084015261596f8187896156c5565b905082810360408401526119178185876156c5565b5f8261599e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156159b3575f5ffd5b815160ff81168114613e96575f5ffd5b80820281158282048414176114fb576114fb615652565b6001815b6001841115615a15578085048111156159f9576159f9615652565b6001841615615a0757908102905b60019390931c9280026159de565b935093915050565b5f82615a2b575060016114fb565b81615a3757505f6114fb565b8160018114615a4d5760028114615a5757615a73565b60019150506114fb565b60ff841115615a6857615a68615652565b50506001821b6114fb565b5060208310610133831016604e8410600b8410161715615a96575081810a6114fb565b615aa25f1984846159da565b805f1904821115615ab557615ab5615652565b029392505050565b5f613e968383615a1d565b5f82601f830112615ad7575f5ffd5b8151615ae5615112826150ac565b8082825260208201915060208360051b860101925085831115615b06575f5ffd5b602085015b83811015615b23578051835260209283019201615b0b565b5095945050505050565b5f60208284031215615b3d575f5ffd5b81516001600160401b03811115615b52575f5ffd5b820160408185031215615b63575f5ffd5b615b6b61505a565b8151815260208201516001600160401b03811115615b87575f5ffd5b615b9386828501615ac8565b602083015250949350505050565b5f60208284031215615bb1575f5ffd5b81516001600160401b03811115615bc6575f5ffd5b611d7d84828501615ac8565b8082025f8212600160ff1b84141615615bed57615bed615652565b81810583148215176114fb576114fb615652565b8082018281125f831280158216821582161715615c2057615c20615652565b505092915050565b5f60208284031215615c38575f5ffd5b8151613e96816153f5565b60018060a01b038916815287602082015260a060408201525f615c6a60a08301888a6156c5565b8281036060840152615c7d8187896156c5565b90508281036080840152615c928185876156c5565b9b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215615cb7575f5ffd5b8751615cc281614d4f565b60208901519097506001600160401b03811115615cdd575f5ffd5b615ce98a828b0161577b565b96505060408801516001600160401b03811115615d04575f5ffd5b615d108a828b0161577b565b60608a015160808b015160a08c015160c08d0151939950919750955093509050615d39816153f5565b8091505092959891949750929550565b5f60208284031215615d59575f5ffd5b81516001600160401b03811115615d6e575f5ffd5b8201601f81018413615d7e575f5ffd5b8051615d8c615112826150ac565b8082825260208201915060208360061b850101925086831115615dad575f5ffd5b6020840193505b82841015615df45760408488031215615dcb575f5ffd5b615dd361505a565b84518152602080860151818301529083526040909401939190910190615db4565b9695505050505050565b808201808211156114fb576114fb615652565b8181035f831280158383131683831282161715611fc657611fc6615652565b5f600160ff1b8201615e4457615e44615652565b505f0390565b5f6001600160fb1b03831115615e5e575f5ffd5b8260051b80838637939093019392505050565b8581525f611e85615e86602084018789615e4a565b8486615e4a565b6001600160a01b03831681526040602080830182905283519183018290525f91908401906060840190835b81811015615ee8578351805163ffffffff1684526020908101518185015290930192604090920191600101615eb8565b50909695505050505050565b60018060a01b0385168152836020820152608060408201525f615f1a608083018561516b565b8281036060840152611e85818561516b565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220412a6aad9b489fc3059470ff469d67fb7371573b44eaadaea22b2f37c70402a064736f6c634300082200330000000000000000000000001864a44ea59d2ce58c88c9e65fc66e031ff1d70d
Deployed Bytecode
0x60806040526004361061057b575f3560e01c80638456cb59116102cd578063d01460ca1161017a578063ec45864e116100e3578063f6df80551161009d578063f897a22b11610078578063f897a22b1461125e578063f8fd09e41461127d578063ff62309c146112a1578063ffc345c6146112c0575f5ffd5b8063f6df8055146111c4578063f7f5ed6114611214578063f88c4d0214611233575f5ffd5b8063ec45864e146110fb578063ef62071f14611134578063f2fde38b14611153578063f30ea6be14611172578063f5537ede14611186578063f6bd02fa146111a5575f5ffd5b8063e30c397811610134578063e30c39781461102e578063e438005d1461104b578063e4542aae1461106a578063e5a82bf714611089578063e5b5462d146110bd578063e9a3ccfa146110dc575f5ffd5b8063d01460ca14610f80578063d2f9d45b14610f9f578063d9be4b3e14610fbe578063dac6b05014610fdd578063ddd5e1b214610ffc578063dfda09051461100f575f5ffd5b80639ea507f211610236578063b6907c93116101f0578063c0382c08116101cb578063c0382c0814610f04578063c1df5cc814610f23578063cb0e122a14610f42578063cef59a9e14610f61575f5ffd5b8063b6907c9314610e51578063b6b67d9e14610e70578063bbac408c14610e8f575f5ffd5b80639ea507f214610da25780639edbc24614610dc15780639ff7a39d14610de0578063a7a6296014610dff578063b246794914610e13578063b3b3adc114610e32575f5ffd5b80638f3277fe116102875780638f3277fe14610ce5578063925b506a14610cf957806394a4c34a14610d2457806399a5432a14610d4357806399f9140514610d575780639d2e7b3414610d83575f5ffd5b80638456cb5914610c3d57806384be319d14610c51578063853828b614610c705780638685343614610c845780638da5cb5b14610ca35780638e45870f14610cc4575f5ffd5b806349b89bd31161042b5780636371177e11610394578063715018a61161034e57806377646389116103295780637764638914610bcb57806379ba509714610bea57806379dd33c214610bfe57806381da45b214610c1e575f5ffd5b8063715018a614610b765780637231535a14610b8a5780637232ed2714610b9f575f5ffd5b80636371177e14610a785780636725cda114610a9557806367645bbb14610ab45780636a9f280714610af35780636d37eda514610b2c57806370f9cecf14610b57575f5ffd5b80635629d258116103e55780635629d258146109ac57806358a215b0146109cb57806359fa047d146109ea5780635c975abb14610a245780635e37fb0014610a3a5780636167227a14610a59575f5ffd5b806349b89bd3146108e15780634b6592cc1461090057806351e0e26b1461091f578063527ba9af1461094d57806353d09aac1461096c578063557ed1ba14610998575f5ffd5b80633b6567c6116104e75780633e0e44d0116104a15780633fc15f151161047c5780633fc15f15146108705780633fce59081461088f578063430fe9c1146108ae578063440f82c9146108c2575f5ffd5b80633e0e44d0146108285780633e3ff7b6146108475780633f4ba83a1461085c575f5ffd5b80633b6567c6146107325780633c010dc9146107515780633ccfd60b1461078a5780633d93e02e1461079e5780633db7aced146107ca5780633de2662c146107de575f5ffd5b806319174c231161053857806319174c231461065a5780631e5e99061461068657806323eab2c2146106b157806332cbe4c4146106c457806334dc8ea5146106dd5780633728040814610711575f5ffd5b806304a8d7071461057f5780630562b9f7146105a757806307e438e2146105c85780630966a6a5146105ff57806312065fe01461061e57806312bd43bd14610630575b5f5ffd5b34801561058a575f5ffd5b5061059460135481565b6040519081526020015b60405180910390f35b3480156105b2575f5ffd5b506105c66105c1366004614d38565b6112df565b005b3480156105d3575f5ffd5b50600d546105e7906001600160a01b031681565b6040516001600160a01b03909116815260200161059e565b34801561060a575f5ffd5b506105c6610619366004614d63565b6113d2565b348015610629575f5ffd5b5047610594565b34801561063b575f5ffd5b50600354600160a01b900460ff165b604051901515815260200161059e565b348015610665575f5ffd5b50610679610674366004614d7e565b6113fc565b60405161059e9190614d9e565b348015610691575f5ffd5b506105946106a0366004614d38565b5f9081526005602052604090205490565b61064a6106bf366004614e31565b611501565b3480156106cf575f5ffd5b5060145461064a9060ff1681565b3480156106e8575f5ffd5b506106fc6106f7366004614eef565b611924565b6040805192835260208301919091520161059e565b34801561071c575f5ffd5b506107256119a4565b60405161059e9190614f5b565b34801561073d575f5ffd5b506105c661074c366004614d63565b611a17565b34801561075c575f5ffd5b5061064a61076b366004614ff4565b600960209081525f928352604080842090915290825290205460ff1681565b348015610795575f5ffd5b506105c6611a28565b3480156107a9575f5ffd5b506107bd6107b83660046150ce565b611acf565b60405161059e91906151a5565b3480156107d5575f5ffd5b50610594611bea565b3480156107e9575f5ffd5b506107fd6107f83660046151cf565b611c55565b6040805182516001600160a01b0316815260208084015190820152918101519082015260600161059e565b348015610833575f5ffd5b506106fc610842366004614d38565b611d85565b348015610852575f5ffd5b5061059460125481565b348015610867575f5ffd5b506105c6611dfc565b34801561087b575f5ffd5b50601d546105e7906001600160a01b031681565b34801561089a575f5ffd5b506105946108a9366004615202565b611e0c565b3480156108b9575f5ffd5b50610594611e90565b3480156108cd575f5ffd5b506105946108dc366004614d63565b611ea7565b3480156108ec575f5ffd5b506105946108fb36600461529e565b611eb8565b34801561090b575f5ffd5b506018546105e7906001600160a01b031681565b34801561092a575f5ffd5b5061064a610939366004614d63565b60046020525f908152604090205460ff1681565b348015610958575f5ffd5b50601c546105e7906001600160a01b031681565b348015610977575f5ffd5b5061098b610986366004614d63565b611fcd565b60405161059e91906152cc565b3480156109a3575f5ffd5b50610594612282565b3480156109b7575f5ffd5b506105c66109c6366004614d63565b61229d565b3480156109d6575f5ffd5b506105c66109e5366004614d38565b61242b565b3480156109f5575f5ffd5b5061064a610a0436600461536f565b8051602081830181018051600b8252928201919093012091525460ff1681565b348015610a2f575f5ffd5b505f5460ff1661064a565b348015610a45575f5ffd5b506105c6610a54366004614d63565b612438565b348015610a64575f5ffd5b506003546105e7906001600160a01b031681565b348015610a83575f5ffd5b506003546001600160a01b03166105e7565b348015610aa0575f5ffd5b506105c6610aaf366004614d63565b612460565b348015610abf575f5ffd5b506105e7610ace366004614d7e565b600a60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610afe575f5ffd5b5061064a610b0d366004614ff4565b601060209081525f928352604080842090915290825290205460ff1681565b348015610b37575f5ffd5b50610594610b46366004614d38565b60056020525f908152604090205481565b348015610b62575f5ffd5b5061064a610b71366004614ff4565b61248a565b348015610b81575f5ffd5b506105c6612548565b348015610b95575f5ffd5b5061059460115481565b348015610baa575f5ffd5b50610bbe610bb9366004614ff4565b612559565b60405161059e91906153e3565b348015610bd6575f5ffd5b506105c6610be536600461529e565b612597565b348015610bf5575f5ffd5b506105c661261c565b348015610c09575f5ffd5b5060035461064a90600160a01b900460ff1681565b348015610c29575f5ffd5b506105c6610c38366004615402565b61265d565b348015610c48575f5ffd5b506105c6612678565b348015610c5c575f5ffd5b50610594610c6b36600461541d565b612688565b348015610c7b575f5ffd5b506105c6612705565b348015610c8f575f5ffd5b506105c6610c9e366004614d63565b6128da565b348015610cae575f5ffd5b505f5461010090046001600160a01b03166105e7565b348015610ccf575f5ffd5b50610cd8612904565b60405161059e91906154d4565b348015610cf0575f5ffd5b50610594612bae565b348015610d04575f5ffd5b50610594610d13366004614d38565b600c6020525f908152604090205481565b348015610d2f575f5ffd5b506107fd610d3e3660046151cf565b612bf5565b348015610d4e575f5ffd5b50601354610594565b348015610d62575f5ffd5b50610d76610d71366004614d63565b612cd9565b60405161059e9190615514565b348015610d8e575f5ffd5b506107bd610d9d366004614d63565b613097565b348015610dad575f5ffd5b506106fc610dbc366004614ff4565b6133af565b348015610dcc575f5ffd5b506105c6610ddb366004614d7e565b6133e7565b348015610deb575f5ffd5b506105c6610dfa366004614d63565b613490565b348015610e0a575f5ffd5b50610cd86134c0565b348015610e1e575f5ffd5b506016546105e7906001600160a01b031681565b348015610e3d575f5ffd5b506105c6610e4c366004615402565b6135d4565b348015610e5c575f5ffd5b5061064a610e6b366004615557565b6135e5565b348015610e7b575f5ffd5b506105c6610e8a366004615583565b6136e0565b348015610e9a575f5ffd5b50610edf610ea936600461536f565b80516020818301810180516007825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b03909416845260208401929092529082015260600161059e565b348015610f0f575f5ffd5b506105c6610f1e36600461559d565b61372c565b348015610f2e575f5ffd5b5061064a610f3d366004614d38565b6139df565b348015610f4d575f5ffd5b506015546105e7906001600160a01b031681565b348015610f6c575f5ffd5b506105c6610f7b366004614d63565b613a30565b348015610f8b575f5ffd5b5061064a610f9a366004614d38565b613a5a565b348015610faa575f5ffd5b50610bbe610fb936600461559d565b613a78565b348015610fc9575f5ffd5b506017546105e7906001600160a01b031681565b348015610fe8575f5ffd5b506105c6610ff7366004614d63565b613aad565b61064a61100a36600461529e565b613ad7565b34801561101a575f5ffd5b506019546105e7906001600160a01b031681565b348015611039575f5ffd5b506001546001600160a01b03166105e7565b348015611056575f5ffd5b506105c6611065366004614d63565b613b80565b348015611075575f5ffd5b506105c6611084366004614d38565b613baa565b348015611094575f5ffd5b506105e76110a3366004614d38565b601e6020525f90815260409020546001600160a01b031681565b3480156110c8575f5ffd5b5061064a6110d7366004614d7e565b613bb7565b3480156110e7575f5ffd5b50601a546105e7906001600160a01b031681565b348015611106575f5ffd5b5061064a611115366004614ff4565b600e60209081525f928352604080842090915290825290205460ff1681565b34801561113f575f5ffd5b506105c661114e366004614d38565b613bde565b34801561115e575f5ffd5b506105c661116d366004614d63565b613beb565b34801561117d575f5ffd5b506105c6613c61565b348015611191575f5ffd5b506105946111a0366004615614565b613da2565b3480156111b0575f5ffd5b506105c66111bf366004614d63565b613e9d565b3480156111cf575f5ffd5b50610edf6111de36600461536f565b80516020818301810180516006825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b34801561121f575f5ffd5b506105c661122e366004614d63565b613ec8565b34801561123e575f5ffd5b5061059461124d366004614d63565b600f6020525f908152604090205481565b348015611269575f5ffd5b50601b546105e7906001600160a01b031681565b348015611288575f5ffd5b506014546105e79061010090046001600160a01b031681565b3480156112ac575f5ffd5b506105c66112bb366004614d63565b613ef2565b3480156112cb575f5ffd5b506105c66112da366004614d63565b613f1c565b6112e7613f46565b6112ef613f78565b4781111561133d5760405162461bcd60e51b8152602060048201526016602482015275657272203a20416d6f756e74203e2042616c616e636560501b60448201526064015b60405180910390fd5b6040515f90339083908381818185875af1925050503d805f811461137c576040519150601f19603f3d011682016040523d82523d5f602084013e611381565b606091505b50509050806113c45760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611334565b506113cf6001600255565b50565b6113da613f46565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f826001600160401b038111156114175761141761501e565b60405190808252806020026020018201604052801561146957816020015b61145660405180606001604052805f81526020015f81526020015f81525090565b8152602001906001900390816114355790505b5090505f5b838110156114f7576040518060600160405280828761148d9190615666565b8152602001600c5f61149f858a615666565b81526020019081526020015f2054815260200160055f84896114c19190615666565b81526020019081526020015f20548152508282815181106114e4576114e4615679565b602090810291909101015260010161146e565b5090505b92915050565b5f61150a613fa0565b611512613f78565b8861151c81613fc3565b336001600160a01b038b16036115695760405162461bcd60e51b815260206004820152601260248201527115d85b1b195d081b9bdd08185b1b1bddd95960721b6044820152606401611334565b61157283613a5a565b6115b45760405162461bcd60e51b815260206004820152601360248201527214dd589b5a5cdcda5bdb881bdd5d19185d1959606a1b6044820152606401611334565b6001600160a01b038a165f90815260096020908152604080832086845290915290205460ff161561161b5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481cdd589b5a5d1d1959607a1b6044820152606401611334565b5f6116258b613097565b90505f8151116116775760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320746f207375626d6974207769746800000000000000006044820152606401611334565b6017546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea5906116ab9086906004016151a5565b6040805180830381865afa1580156116c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e9919061568d565b915091506116f88e83836140d0565b60145460ff16156117b0575f611711878c8c8c8c613a78565b9050600b8160405161172391906156af565b9081526040519081900360200190205460ff161561177c5760405162461bcd60e51b815260206004820152601660248201527511185d1848185b1c9958591e481cdd589b5a5d1d195960521b6044820152606401611334565b6001600b8260405161178e91906156af565b908152604051908190036020019020805491151560ff19909216919091179055505b6117ba83876142a2565b5f60165f9054906101000a90046001600160a01b03166001600160a01b03166337d5b9eb8f89878f8f8f8f6040518863ffffffff1660e01b815260040161180797969594939291906156f5565b602060405180830381865afa158015611822573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118469190615751565b90505f81116118975760405162461bcd60e51b815260206004820152601e60248201527f5a65726f207368617265732063616e2774206265207375626d697474656400006044820152606401611334565b6118a38e888387614357565b6118af8e8883876144ff565b7f2dad5bc61871201926333cea2842b88a9e0b9e6dce31832196e80d8e810890f1818f896040516118fc939291909283526001600160a01b03919091166020830152604082015260600190565b60405180910390a16001955050505050506119176001600255565b9998505050505050505050565b6017546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea59061195a9087908790600401615768565b6040805180830381865afa158015611974573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611998919061568d565b915091505b9250929050565b601554604080516306e5008160e31b815290516060926001600160a01b0316916337280408916004808301925f9291908290030181865afa1580156119eb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a1291908101906157c8565b905090565b611a1f613f46565b6113cf816145d9565b611a30613f46565b611a38613f78565b60405147905f90339083908381818185875af1925050503d805f8114611a79576040519150601f19603f3d011682016040523d82523d5f602084013e611a7e565b606091505b5050905080611ac15760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611334565b5050611acd6001600255565b565b60605f805b8451811015611b1b57611b00858281518110611af257611af2615679565b602002602001015185613bb7565b15611b135781611b0f816158d0565b9250505b600101611ad4565b50806001600160401b03811115611b3457611b3461501e565b604051908082528060200260200182016040528015611b5d578160200160208202803683370190505b5091505f805b8551811015611be157611b8f868281518110611b8157611b81615679565b602002602001015186613bb7565b15611bd957858181518110611ba657611ba6615679565b6020026020010151848380611bba906158d0565b945081518110611bcc57611bcc615679565b6020026020010181815250505b600101611b63565b50505092915050565b60175460408051633db7aced60e01b815290515f926001600160a01b031691633db7aced9160048083019260209291908290030181865afa158015611c31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a129190615751565b611c7f60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f611c90848463ffffffff16612559565b90505f600782604051611ca391906156af565b908152604080516020928190038301812060608201835280546001600160a01b03168252600181015493820184905260020154918101919091529150158015611cf65750600d546001600160a01b031615155b15611d7d57600d54604051630f78998b60e21b81526001600160a01b03878116600483015263ffffffff8716602483015290911690633de2662c906044015b606060405180830381865afa158015611d50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d7491906158e8565b925050506114fb565b949350505050565b6017546040516303e0e44d60e41b8152600481018390525f9182916001600160a01b0390911690633e0e44d0906024016040805180830381865afa158015611dcf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df3919061568d565b91509150915091565b611e04613f46565b611acd614651565b60165460405163d75ac32760e01b81525f916001600160a01b03169063d75ac32790611e46908a908a908a908a908a908a90600401615949565b602060405180830381865afa158015611e61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e859190615751565b979650505050505050565b5f62015180611e9d612282565b611a129190615984565b5f611eb182612cd9565b5192915050565b5f6001600160a01b038216611f075760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401611334565b5f826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f44573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6891906159a3565b90508060ff16600603611f7e57839150506114fb565b8060ff16601203611fa057611f988464e8d4a510006159c3565b9150506114fb565b5f611faf600660ff8416615666565b9050611fbc81600a615abd565b611d7490866159c3565b5092915050565b6120036040518060c001604052805f81526020015f8152602001606081526020015f815260200160608152602001606081525090565b601454604051637539189960e11b81526001600160a01b0384811660048301525f926101009004169063ea723132906024015f60405180830381865afa15801561204f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120769190810190615b2d565b805183526020808201516040850181905251908401526019549091506001600160a01b031615612118576019546040516355682d0760e01b81526001600160a01b038581166004830152909116906355682d07906024015f60405180830381865afa1580156120e7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261210e9190810190615ba1565b608083015261212c565b604080515f81526020810190915260808301525b6080820151516060830152601a546001600160a01b03161561226857601a5460405162445ac960e21b81526001600160a01b0385811660048301525f9283929116906301116b24906024016040805180830381865afa158015612191573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b5919061568d565b915091505f821180156121c757505f81115b1561224d57806001600160401b038111156121e4576121e461501e565b60405190808252806020026020018201604052801561220d578160200160208202803683370190505b5060a08501525f5b8181101561224757828560a00151828151811061223457612234615679565b6020908102919091010152600101612215565b50612261565b604080515f81526020810190915260a08501525b505061227c565b604080515f81526020810190915260a08301525b50919050565b5f601154610e106122939190615bd2565b611a129042615c01565b6122a5613f46565b6122ad613f78565b6001600160a01b0381166122fb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401611334565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561233f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123639190615751565b90505f81116123ad5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401611334565b60405163a9059cbb60e01b8152336004820181905260248201839052906001600160a01b0384169063a9059cbb906044016020604051808303815f875af11580156123fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241e9190615c28565b5050506113cf6001600255565b612433613f46565b601355565b612440613f46565b6001600160a01b03165f908152600460205260409020805460ff19169055565b612468613f46565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600d545f9081906001600160a01b03161561251557600d546040516370f9cecf60e01b81526001600160a01b03868116600483015260248201869052909116906370f9cecf90604401602060405180830381865afa1580156124ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125129190615c28565b90505b6001600160a01b0384165f90815260096020908152604080832086845290915290205460ff1680611d7d57509392505050565b612550613f46565b611acd5f6146a2565b604051606083811b6bffffffffffffffffffffffff191660208301526034820183905290605401604051602081830303815290604052905092915050565b61259f613f46565b600582106125ef5760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e20696e646578206d757374206265206c657373207468616e2035006044820152606401611334565b5f918252601e602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b60015433906001600160a01b031681146126545760405163118cdaa760e01b81526001600160a01b0382166004820152602401611334565b6113cf816146a2565b612665613f46565b6014805460ff1916911515919091179055565b612680613f46565b611acd6146bb565b6016546040516337d5b9eb60e01b81525f916001600160a01b0316906337d5b9eb906126c6908c908c908c908c908c908c908c908c90600401615c43565b602060405180830381865afa1580156126e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119179190615751565b61270d613f46565b612715613f78565b4780156127ac576040515f90339083908381818185875af1925050503d805f811461275b576040519150601f19603f3d011682016040523d82523d5f602084013e612760565b606091505b50509050806127aa5760405162461bcd60e51b815260206004820152601660248201527513985d1a5d99481d1c985b9cd9995c8819985a5b195960521b6044820152606401611334565b505b5f5b6005811015611ac1575f818152601e60205260409020546001600160a01b0316156128d2575f818152601e60205260408082205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612824573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128489190615751565b905080156128d0575f828152601e60205260409081902054905163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af11580156128aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ce9190615c28565b505b505b6001016127ae565b6128e2613f46565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b60605f60155f9054906101000a90046001600160a01b03166001600160a01b031663372804086040518163ffffffff1660e01b81526004015f60405180830381865afa158015612956573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261297d91908101906157c8565b80519091505f805b82811015612a485760155484515f916001600160a01b0316906313ff7e9f908790859081106129b6576129b6615679565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015612a03573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a2a9190810190615ca1565b96505050505050508015612a3f578260010192505b50600101612985565b505f816001600160401b03811115612a6257612a6261501e565b604051908082528060200260200182016040528015612a8b578160200160208202803683370190505b5090505f805b84811015612ba35760155486515f916001600160a01b0316906313ff7e9f90899085908110612ac257612ac2615679565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015612b0f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b369190810190615ca1565b96505050505050508015612b9a57868281518110612b5657612b56615679565b60200260200101515f0151848481518110612b7357612b73615679565b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b50600101612a91565b509095945050505050565b601754604080516347993bff60e11b815290515f926001600160a01b031691638f3277fe9160048083019260209291908290030181865afa158015611c31573d5f5f3e3d5ffd5b612c1f60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f612c30848463ffffffff16612559565b90505f600682604051612c4391906156af565b908152604080516020928190038301812060608201835280546001600160a01b03168252600181015493820184905260020154918101919091529150158015612c965750600d546001600160a01b031615155b15611d7d57600d54604051634a5261a560e11b81526001600160a01b03878116600483015263ffffffff87166024830152909116906394a4c34a90604401611d35565b600d5460609081906001600160a01b031615612d6457600d546040516399f9140560e01b81526001600160a01b038581166004830152909116906399f91405906024015f60405180830381865afa158015612d36573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d5d9190810190615d49565b9050612da3565b604080515f8082526020820190925290612d9f565b604080518082019091525f8082526020820152815260200190600190039081612d795790505b5090505b6001600160a01b0383165f90815260086020908152604080832080548251818502810185019093528083529192909190849084015b82821015612e1b578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190612dd8565b5050505090505f81518351612e309190615dfe565b6001600160401b03811115612e4757612e4761501e565b604051908082528060200260200182016040528015612e8b57816020015b604080518082019091525f8082526020820152815260200190600190039081612e655790505b5090505f805b8451811015612f38576001600160a01b0387165f9081526010602052604081208651909190879084908110612ec857612ec8615679565b60209081029190910181015181015182528101919091526040015f205460ff16612f3057848181518110612efe57612efe615679565b6020026020010151838380612f12906158d0565b945081518110612f2457612f24615679565b60200260200101819052505b600101612e91565b505f5b8351811015612fe2576001600160a01b0387165f9081526010602052604081208551909190869084908110612f7257612f72615679565b60209081029190910181015181015182528101919091526040015f205460ff16612fda57838181518110612fa857612fa8615679565b6020026020010151838380612fbc906158d0565b945081518110612fce57612fce615679565b60200260200101819052505b600101612f3b565b505f816001600160401b03811115612ffc57612ffc61501e565b60405190808252806020026020018201604052801561304057816020015b604080518082019091525f808252602082015281526020019060019003908161301a5790505b5090505f5b8281101561308c5783818151811061305f5761305f615679565b602002602001015182828151811061307957613079615679565b6020908102919091010152600101613045565b509695505050505050565b601454604051637539189960e11b81526001600160a01b0383811660048301526060925f926101009091049091169063ea723132906024015f60405180830381865afa1580156130e9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131109190810190615b2d565b602001518051601954919250906060905f906001600160a01b0316156131a5576019546040516355682d0760e01b81526001600160a01b038881166004830152909116906355682d07906024015f60405180830381865afa158015613177573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261319e9190810190615ba1565b9150815190505b601a545f9081906001600160a01b03161561323457601a5460405162445ac960e21b81526001600160a01b038a81166004830152909116906301116b24906024016040805180830381865afa158015613200573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613224919061568d565b925090505f819003613234575f91505b5f826132408588615dfe565b61324a9190615dfe565b9050805f0361326e575050604080515f815260208101909152979650505050505050565b806001600160401b038111156132865761328661501e565b6040519080825280602002602001820160405280156132af578160200160208202803683370190505b5097505f805b87811015613308578881815181106132cf576132cf615679565b60200260200101518a83806132e3906158d0565b9450815181106132f5576132f5615679565b60209081029190910101526001016132b5565b505f5b8581101561335e5786818151811061332557613325615679565b60200260200101518a8380613339906158d0565b94508151811061334b5761334b615679565b602090810291909101015260010161330b565b5083156133a2575f5b848110156133a057838a8361337b816158d0565b94508151811061338d5761338d615679565b6020908102919091010152600101613367565b505b5050505050505050919050565b6008602052815f5260405f2081815481106133c8575f80fd5b5f91825260209091206002909102018054600190910154909250905082565b6133ef613f46565b5f825b82811161348a57600d54604051636d37eda560e01b8152600481018390526001600160a01b0390911690636d37eda590602401602060405180830381865afa158015613440573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134649190615751565b5f8281526005602052604090205560019091019080613482816158d0565b9150506133f2565b50505050565b613498613f46565b601480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60605f805b6005811015613500575f818152601e60205260409020546001600160a01b0316156134f857816134f4816158d0565b9250505b6001016134c5565b505f816001600160401b0381111561351a5761351a61501e565b604051908082528060200260200182016040528015613543578160200160208202803683370190505b5090505f805b60058110156135cb575f818152601e60205260409020546001600160a01b0316156135c3575f818152601e60205260409020546001600160a01b03168383613590816158d0565b9450815181106135a2576135a2615679565b60200260200101906001600160a01b031690816001600160a01b0316815250505b600101613549565b50909392505050565b6135dc613f46565b6113cf816146f7565b5f6001600160a01b038316158061360357506001600160a01b038216155b1561360f57505f6114fb565b600354600160a01b900460ff16613628575060016114fb565b826001600160a01b0316826001600160a01b031603613649575060016114fb565b6003546001600160a01b031661366057505f6114fb565b600354604051632305259560e01b81526001600160a01b038581166004830152848116602483015290911690632305259590604401602060405180830381865afa9250505080156136ce575060408051601f3d908101601f191682019092526136cb91810190615c28565b60015b6136d957505f6114fb565b90506114fb565b335f9081526004602052604090205460ff1615156001146136ff575f5ffd5b63ffffffff82165f9081526005602052604081208054839290613723908490615dfe565b90915550505050565b613734613f46565b82811461377c5760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401611334565b826137b85760405162461bcd60e51b815260206004820152600c60248201526b456d7074792061727261797360a01b6044820152606401611334565b5f805b84811015613972575f8686838181106137d6576137d6615679565b90506020020160208101906137eb9190614d63565b90505f85858481811061380057613800615679565b9050602002013590505f613814838b612bf5565b90505f8160200151116138695760405162461bcd60e51b815260206004820152601e60248201527f4e6f207375626d697373696f6e20666f756e6420666f722077616c6c657400006044820152606401611334565b898160400151146138ab5760405162461bcd60e51b815260206004820152600c60248201526b088c2f240dad2e6dac2e8c6d60a31b6044820152606401611334565b5f8282602001516138bc9190615e11565b90506138c88187615c01565b95505f6138d5858d612559565b9050836006826040516138e891906156af565b9081526020016040518091039020600101819055508460068260405161390e91906156af565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091558c9060069061394e9084906156af565b908152604051908190036020019020600201555050600190930192506137bb915050565b505f8113156139a3575f8681526005602052604081208054839290613998908490615666565b909155506139d79050565b5f8112156139d7576139b481615e30565b5f87815260056020526040812080549091906139d1908490615dfe565b90915550505b505050505050565b5f6139e8611e90565b8211156139f657505f919050565b601254821015613a0757505f919050565b6001601354613a169190615666565b82613a1f611e90565b613a299190615666565b1192915050565b613a38613f46565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f60135482613a67611e90565b613a719190615666565b1092915050565b60608585858585604051602001613a93959493929190615e71565b604051602081830303815290604052905095945050505050565b613ab5613f46565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f613ae0613fa0565b613ae8613f78565b81613af281613fc3565b5f613afd848661474f565b6015546040516264974560e91b81529192506001600160a01b03169063c92e8a0090613b2f9087908590600401615e8d565b6020604051808303815f875af1158015613b4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6f9190615c28565b506001925050506114fb6001600255565b613b88613f46565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b613bb2613f46565b601155565b5f918252600a602090815260408084209284529190529020546001600160a01b0316151590565b613be6613f46565b601255565b613bf3613f46565b600180546001600160a01b0383166001600160a01b03199091168117909155613c295f546001600160a01b036101009091041690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b613c69613f46565b613c71613f78565b335f5b6005811015611ac1575f818152601e60205260409020546001600160a01b031615613d9a575f818152601e60205260408082205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613cea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0e9190615751565b90508015613d98575f828152601e60205260409081902054905163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015613d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d969190615c28565b505b505b600101613c74565b5f613dab613f46565b613db3613f78565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af1158015613dff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e239190615c28565b506040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015613e66573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8a9190615751565b9050613e966001600255565b9392505050565b613ea5613f46565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b613ed0613f46565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b613efa613f46565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b613f24613f46565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03610100909104163314611acd5760405163118cdaa760e01b8152336004820152602401611334565b6002805403613f9a57604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b5f5460ff1615611acd5760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b038116613fea5760405163e6c4247b60e01b815260040160405180910390fd5b600354600160a01b900460ff16613ffe5750565b6001600160a01b03811633036140115750565b6003546001600160a01b031661403a57604051634d7df47f60e01b815260040160405180910390fd5b600354604051632305259560e01b81526001600160a01b0383811660048301523360248301525f921690632305259590604401602060405180830381865afa9250505080156140a6575060408051601f3d908101601f191682019092526140a391810190615c28565b60015b156140ae5790505b806140cc57604051634d7df47f60e01b815260040160405180910390fd5b5050565b825f03614124578034101561411f5760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b6044820152606401611334565b505050565b60018310158015614136575060058311155b15614267575f614147600185615666565b5f818152601e60205260409020549091506001600160a01b0316806141a15760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401611334565b5f6141ac8583611eb8565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038316906323b872dd906064016020604051808303815f875af11580156141ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142239190615c28565b6139d75760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401611334565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401611334565b5f5b825181101561411f575f8382815181106142c0576142c0615679565b60200260200101519050606481111561434e575f818152600a602090815260408083208684529091529020546001600160a01b03161561434e5760405162461bcd60e51b8152602060048201526024808201527f4f6e65206f72206d6f7265206d696e65727320616c7265616479207375626d696044820152631d1d195960e21b6064820152608401611334565b506001016142a4565b5f6143628585612559565b604080516060810182526001600160a01b0388168152602081018690529081018690529091505f5b83518110156143f4575f8482815181106143a6576143a6615679565b6020026020010151905060648111156143eb575f818152600a602090815260408083208a8452909152902080546001600160a01b0319166001600160a01b038a161790555b5060010161438a565b505f8581526005602052604081208054869290614412908490615dfe565b90915550505f858152600c60205260408120805460019290614435908490615dfe565b90915550506001600160a01b0386165f818152600860209081526040808320815180830183528981528084018b81528254600181810185559387528587209251600290910290920191825551908201559383526009825280832089845290915290819020805460ff19169092179091555181906006906144b69085906156af565b9081526040805160209281900383019020835181546001600160a01b0319166001600160a01b039091161781559183015160018301559190910151600290910155505050505050565b6018546001600160a01b03161561348a576040805160028082526060820183525f9260208301908036833701905050905083815f8151811061454357614543615679565b602002602001018181525050828160018151811061456357614563615679565b60209081029190910101526018546040516353dc3a9d60e01b81526001600160a01b03909116906353dc3a9d906145a590889060019086908890600401615ef4565b5f604051808303815f87803b1580156145bc575f5ffd5b505af11580156145ce573d5f5f3e3d5ffd5b505050505050505050565b6001600160a01b0381166146005760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f958d75e6176f26b8dda305a07f2e6abbc057c250bec1e18cbdf586dc235154e6905f90a35050565b61465961478e565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556113cf816147b0565b6146c3613fa0565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586146853390565b60038054821515600160a01b0260ff60a01b199091161790556040517f4e923f6d403856ede9e32222960f8ea845b4a9f5d00a799d3deb2db8a5af9c7c9061474490831515815260200190565b60405180910390a150565b60605f61475b84612cd9565b90505f61476782614808565b90505f5f61477483611d85565b915091506147838683836140d0565b611e85878585614870565b5f5460ff16611acd57604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b80515f9081614815611bea565b90505f805b838110801561482857508282105b156148675761485386828151811061484257614842615679565b6020026020010151602001516139df565b1561485f578160010191505b60010161481a565b50949350505050565b6060620f42405f836001600160401b0381111561488f5761488f61501e565b6040519080825280602002602001820160405280156148d357816020015b604080518082019091525f80825260208201528152602001906001900390816148ad5790505b5085519091505f908190815b81811080156148ed57508783105b1561494d5761490789828151811061484257614842615679565b15614945576149328a8a838151811061492257614922615679565b602002602001015187868a6149b0565b61493c9085615dfe565b93508260010192505b6001016148df565b50614959898885614a3e565b604080516001600160a01b038b168152602081018990529081018490527f983bf7148e3e9ebde769e6a1d5b19b34b9c318555cfb03836448a9376bd68d459060600160405180910390a15091979650505050505050565b83516020808601515f9081526005909152604081205490919082816149db63ffffffff8716856159c3565b6149e59190615984565b905060405180604001604052808263ffffffff1681526020018960200151815250878781518110614a1857614a18615679565b6020026020010181905250614a31898960200151614b3f565b5090979650505050505050565b6018546001600160a01b03161561411f576040805160028082526060820183525f9260208301908036833701905050905082815f81518110614a8257614a82615679565b6020026020010181815250508181600181518110614aa257614aa2615679565b60209081029190910101526018546001600160a01b03166353dc3a9d856002845f604051908082528060200260200182016040528015614aec578160200160208202803683370190505b506040518563ffffffff1660e01b8152600401614b0c9493929190615ef4565b5f604051808303815f87803b158015614b23575f5ffd5b505af1158015614b35573d5f5f3e3d5ffd5b5050505050505050565b6001600160a01b0382165f9081526010602090815260408083208484529091528120805460ff19166001179055614b768383612559565b9050600681604051614b8891906156af565b9081526020016040518091039020600782604051614ba691906156af565b908152604051908190036020018120825481546001600160a01b0319166001600160a01b0390911617815560018084015490820155600292830154920191909155600690614bf59083906156af565b90815260405190819003602001902080546001600160a01b03191681555f6001820181905560029091015561411f83836001600160a01b0382165f9081526008602052604081208054909181905b82811015614c835784848281548110614c5e57614c5e615679565b905f5260205f2090600202016001015403614c7b57809150614c83565b600101614c43565b50818103614c92575050505050565b805b614c9f600184615666565b811015614d045783614cb2826001615dfe565b81548110614cc257614cc2615679565b905f5260205f209060020201848281548110614ce057614ce0615679565b5f918252602090912082546002909202019081556001918201549082015501614c94565b5082805480614d1557614d15615f2c565b5f8281526020812060025f19909301928302018181556001015590555050505050565b5f60208284031215614d48575f5ffd5b5035919050565b6001600160a01b03811681146113cf575f5ffd5b5f60208284031215614d73575f5ffd5b8135613e9681614d4f565b5f5f60408385031215614d8f575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015612ba357835180518452602081015160208501526040810151604085015250606083019250602084019350600181019050614db7565b5f5f83601f840112614e01575f5ffd5b5081356001600160401b03811115614e17575f5ffd5b6020830191508360208260051b850101111561199d575f5ffd5b5f5f5f5f5f5f5f5f5f60c08a8c031215614e49575f5ffd5b8935985060208a0135614e5b81614d4f565b975060408a01356001600160401b03811115614e75575f5ffd5b614e818c828d01614df1565b90985096505060608a01356001600160401b03811115614e9f575f5ffd5b614eab8c828d01614df1565b90965094505060808a01356001600160401b03811115614ec9575f5ffd5b614ed58c828d01614df1565b9a9d999c50979a9699959894979660a00135949350505050565b5f5f60208385031215614f00575f5ffd5b82356001600160401b03811115614f15575f5ffd5b614f2185828601614df1565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614fe857868503603f19018452815180516001600160a01b03168652602080820151608091880182905290614fbc90880182614f2d565b604083810151908901526060928301519290970191909152506020938401939190910190600101614f81565b50929695505050505050565b5f5f60408385031215615005575f5ffd5b823561501081614d4f565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156150545761505461501e565b60405290565b604080519081016001600160401b03811182821017156150545761505461501e565b604051601f8201601f191681016001600160401b03811182821017156150a4576150a461501e565b604052919050565b5f6001600160401b038211156150c4576150c461501e565b5060051b60200190565b5f5f604083850312156150df575f5ffd5b82356001600160401b038111156150f4575f5ffd5b8301601f81018513615104575f5ffd5b8035615117615112826150ac565b61507c565b8082825260208201915060208360051b850101925087831115615138575f5ffd5b6020840193505b8284101561515a57833582526020938401939091019061513f565b976020969096013596505050505050565b5f8151808452602084019350602083015f5b8281101561519b57815186526020958601959091019060010161517d565b5093949350505050565b602081525f613e96602083018461516b565b803563ffffffff811681146151ca575f5ffd5b919050565b5f5f604083850312156151e0575f5ffd5b82356151eb81614d4f565b91506151f9602084016151b7565b90509250929050565b5f5f5f5f5f5f60608789031215615217575f5ffd5b86356001600160401b0381111561522c575f5ffd5b61523889828a01614df1565b90975095505060208701356001600160401b03811115615256575f5ffd5b61526289828a01614df1565b90955093505060408701356001600160401b03811115615280575f5ffd5b61528c89828a01614df1565b979a9699509497509295939492505050565b5f5f604083850312156152af575f5ffd5b8235915060208301356152c181614d4f565b809150509250929050565b6020815281516020820152602082015160408201525f604083015160c060608401526152fb60e084018261516b565b9050606084015160808401526080840151601f198483030160a0850152615322828261516b565b91505060a0840151601f198483030160c0850152615340828261516b565b95945050505050565b5f6001600160401b038211156153615761536161501e565b50601f01601f191660200190565b5f6020828403121561537f575f5ffd5b81356001600160401b03811115615394575f5ffd5b8201601f810184136153a4575f5ffd5b80356153b261511282615349565b8181528560208385010111156153c6575f5ffd5b816020840160208301375f91810160200191909152949350505050565b602081525f613e966020830184614f2d565b80151581146113cf575f5ffd5b5f60208284031215615412575f5ffd5b8135613e96816153f5565b5f5f5f5f5f5f5f5f60a0898b031215615434575f5ffd5b883561543f81614d4f565b97506020890135965060408901356001600160401b03811115615460575f5ffd5b61546c8b828c01614df1565b90975095505060608901356001600160401b0381111561548a575f5ffd5b6154968b828c01614df1565b90955093505060808901356001600160401b038111156154b4575f5ffd5b6154c08b828c01614df1565b999c989b5096995094979396929594505050565b602080825282518282018190525f918401906040840190835b81811015612ba35783516001600160a01b03168352602093840193909201916001016154ed565b602080825282518282018190525f918401906040840190835b81811015612ba357835180518452602090810151818501529093019260409092019160010161552d565b5f5f60408385031215615568575f5ffd5b823561557381614d4f565b915060208301356152c181614d4f565b5f5f60408385031215615594575f5ffd5b615010836151b7565b5f5f5f5f5f606086880312156155b1575f5ffd5b8535945060208601356001600160401b038111156155cd575f5ffd5b6155d988828901614df1565b90955093505060408601356001600160401b038111156155f7575f5ffd5b61560388828901614df1565b969995985093965092949392505050565b5f5f5f60608486031215615626575f5ffd5b833561563181614d4f565b9250602084013561564181614d4f565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114fb576114fb615652565b634e487b7160e01b5f52603260045260245ffd5b5f5f6040838503121561569e575f5ffd5b505080516020909101519092909150565b5f82518060208501845e5f920191825250919050565b8183525f6001600160fb1b038311156156dc575f5ffd5b8260051b80836020870137939093016020019392505050565b60018060a01b038816815286602082015260a060408201525f61571b60a083018861516b565b828103606084015261572e8187896156c5565b905082810360808401526157438185876156c5565b9a9950505050505050505050565b5f60208284031215615761575f5ffd5b5051919050565b602081525f611d7d6020830184866156c5565b5f82601f83011261578a575f5ffd5b815161579861511282615349565b8181528460208386010111156157ac575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156157d8575f5ffd5b81516001600160401b038111156157ed575f5ffd5b8201601f810184136157fd575f5ffd5b805161580b615112826150ac565b8082825260208201915060208360051b85010192508683111561582c575f5ffd5b602084015b8381101561308c5780516001600160401b0381111561584e575f5ffd5b85016080818a03601f19011215615863575f5ffd5b61586b615032565b602082015161587981614d4f565b815260408201516001600160401b03811115615893575f5ffd5b6158a28b60208386010161577b565b6020838101919091526060848101516040850152608090940151938301939093525084529283019201615831565b5f600182016158e1576158e1615652565b5060010190565b5f60608284031280156158f9575f5ffd5b50604051606081016001600160401b038111828210171561591c5761591c61501e565b604052825161592a81614d4f565b8152602083810151908201526040928301519281019290925250919050565b606081525f61595c60608301888a6156c5565b828103602084015261596f8187896156c5565b905082810360408401526119178185876156c5565b5f8261599e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156159b3575f5ffd5b815160ff81168114613e96575f5ffd5b80820281158282048414176114fb576114fb615652565b6001815b6001841115615a15578085048111156159f9576159f9615652565b6001841615615a0757908102905b60019390931c9280026159de565b935093915050565b5f82615a2b575060016114fb565b81615a3757505f6114fb565b8160018114615a4d5760028114615a5757615a73565b60019150506114fb565b60ff841115615a6857615a68615652565b50506001821b6114fb565b5060208310610133831016604e8410600b8410161715615a96575081810a6114fb565b615aa25f1984846159da565b805f1904821115615ab557615ab5615652565b029392505050565b5f613e968383615a1d565b5f82601f830112615ad7575f5ffd5b8151615ae5615112826150ac565b8082825260208201915060208360051b860101925085831115615b06575f5ffd5b602085015b83811015615b23578051835260209283019201615b0b565b5095945050505050565b5f60208284031215615b3d575f5ffd5b81516001600160401b03811115615b52575f5ffd5b820160408185031215615b63575f5ffd5b615b6b61505a565b8151815260208201516001600160401b03811115615b87575f5ffd5b615b9386828501615ac8565b602083015250949350505050565b5f60208284031215615bb1575f5ffd5b81516001600160401b03811115615bc6575f5ffd5b611d7d84828501615ac8565b8082025f8212600160ff1b84141615615bed57615bed615652565b81810583148215176114fb576114fb615652565b8082018281125f831280158216821582161715615c2057615c20615652565b505092915050565b5f60208284031215615c38575f5ffd5b8151613e96816153f5565b60018060a01b038916815287602082015260a060408201525f615c6a60a08301888a6156c5565b8281036060840152615c7d8187896156c5565b90508281036080840152615c928185876156c5565b9b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215615cb7575f5ffd5b8751615cc281614d4f565b60208901519097506001600160401b03811115615cdd575f5ffd5b615ce98a828b0161577b565b96505060408801516001600160401b03811115615d04575f5ffd5b615d108a828b0161577b565b60608a015160808b015160a08c015160c08d0151939950919750955093509050615d39816153f5565b8091505092959891949750929550565b5f60208284031215615d59575f5ffd5b81516001600160401b03811115615d6e575f5ffd5b8201601f81018413615d7e575f5ffd5b8051615d8c615112826150ac565b8082825260208201915060208360061b850101925086831115615dad575f5ffd5b6020840193505b82841015615df45760408488031215615dcb575f5ffd5b615dd361505a565b84518152602080860151818301529083526040909401939190910190615db4565b9695505050505050565b808201808211156114fb576114fb615652565b8181035f831280158383131683831282161715611fc657611fc6615652565b5f600160ff1b8201615e4457615e44615652565b505f0390565b5f6001600160fb1b03831115615e5e575f5ffd5b8260051b80838637939093019392505050565b8581525f611e85615e86602084018789615e4a565b8486615e4a565b6001600160a01b03831681526040602080830182905283519183018290525f91908401906060840190835b81811015615ee8578351805163ffffffff1684526020908101518185015290930192604090920191600101615eb8565b50909695505050505050565b60018060a01b0385168152836020820152608060408201525f615f1a608083018561516b565b8281036060840152611e85818561516b565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220412a6aad9b489fc3059470ff469d67fb7371573b44eaadaea22b2f37c70402a064736f6c63430008220033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001864a44ea59d2ce58c88c9e65fc66e031ff1d70d
-----Decoded View---------------
Arg [0] : _walletSecurePin (address): 0x1864a44eA59d2cE58C88C9e65FC66E031Ff1D70D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001864a44ea59d2ce58c88c9e65fc66e031ff1d70d
Deployed Bytecode Sourcemap
16632:27536:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17579:22;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;17579:22:0;;;;;;;;42122:265;;;;;;;;;;-1:-1:-1;42122:265:0;;;;;:::i;:::-;;:::i;:::-;;17277:33;;;;;;;;;;-1:-1:-1;17277:33:0;;;;-1:-1:-1;;;;;17277:33:0;;;;;;-1:-1:-1;;;;;616:32:1;;;598:51;;586:2;571:18;17277:33:0;427:228:1;38063:99:0;;;;;;;;;;-1:-1:-1;38063:99:0;;;;;:::i;:::-;;:::i;41817:79::-;;;;;;;;;;-1:-1:-1;41873:21:0;41817:79;;15727:119;;;;;;;;;;-1:-1:-1;15813:25:0;;-1:-1:-1;;;15813:25:0;;;;15727:119;;;1213:14:1;;1206:22;1188:41;;1176:2;1161:18;15727:119:0;1048:187:1;32081:371:0;;;;;;;;;;-1:-1:-1;32081:371:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33503:93::-;;;;;;;;;;-1:-1:-1;33503:93:0;;;;;:::i;:::-;33558:4;33572:22;;;:16;:22;;;;;;;33503:93;23067:1454;;;;;;:::i;:::-;;:::i;17610:27::-;;;;;;;;;;-1:-1:-1;17610:27:0;;;;;;;;35923:128;;;;;;;;;;-1:-1:-1;35923:128:0;;;;;:::i;:::-;;:::i;:::-;;;;4881:25:1;;;4937:2;4922:18;;4915:34;;;;4854:18;35923:128:0;4707:248:1;34369:128:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39398:175::-;;;;;;;;;;-1:-1:-1;39398:175:0;;;;;:::i;:::-;;:::i;17026:69::-;;;;;;;;;;-1:-1:-1;17026:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;41902:214;;;;;;;;;;;;;:::i;30603:473::-;;;;;;;;;;-1:-1:-1;30603:473:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35724:90::-;;;;;;;;;;;;;:::i;32823:361::-;;;;;;;;;;-1:-1:-1;32823:361:0;;;;;:::i;:::-;;:::i;:::-;;;;10415:13:1;;-1:-1:-1;;;;;10411:39:1;10393:58;;10507:4;10495:17;;;10489:24;10467:20;;;10460:54;10558:17;;;10552:24;10530:20;;;10523:54;10381:2;10366:18;32823:361:0;10195:388:1;36057:114:0;;;;;;;;;;-1:-1:-1;36057:114:0;;;;;:::i;:::-;;:::i;17548:24::-;;;;;;;;;;;;;;;;19789:49;;;;;;;;;;;;;:::i;17928:24::-;;;;;;;;;;-1:-1:-1;17928:24:0;;;;-1:-1:-1;;;;;17928:24:0;;;33602:195;;;;;;;;;;-1:-1:-1;33602:195:0;;;;;:::i;:::-;;:::i;33196:72::-;;;;;;;;;;;;;:::i;31082:111::-;;;;;;;;;;-1:-1:-1;31082:111:0;;;;;:::i;:::-;;:::i;36183:517::-;;;;;;;;;;-1:-1:-1;36183:517:0;;;;;:::i;:::-;;:::i;17774:20::-;;;;;;;;;;-1:-1:-1;17774:20:0;;;;-1:-1:-1;;;;;17774:20:0;;;16728:52;;;;;;;;;;-1:-1:-1;16728:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17895:26;;;;;;;;;;-1:-1:-1;17895:26:0;;;;-1:-1:-1;;;;;17895:26:0;;;20458:1101;;;;;;;;;;-1:-1:-1;20458:1101:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33274:117::-;;;;;;;;;;;;;:::i;43083:391::-;;;;;;;;;;-1:-1:-1;43083:391:0;;;;;:::i;:::-;;:::i;39947:90::-;;;;;;;;;;-1:-1:-1;39947:90:0;;;;;:::i;:::-;;:::i;17178:39::-;;;;;;;;;;-1:-1:-1;17178:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2785:86;;;;;;;;;;-1:-1:-1;2832:4:0;2856:7;;;2785:86;;20045:113;;;;;;;;;;-1:-1:-1;20045:113:0;;;;;:::i;:::-;;:::i;13154:39::-;;;;;;;;;;-1:-1:-1;13154:39:0;;;;-1:-1:-1;;;;;13154:39:0;;;15588:119;;;;;;;;;;-1:-1:-1;15683:15:0;;-1:-1:-1;;;;;15683:15:0;15588:119;;37507:95;;;;;;;;;;-1:-1:-1;37507:95:0;;;;;:::i;:::-;;:::i;17102:69::-;;;;;;;;;;-1:-1:-1;17102:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17102:69:0;;;17448:61;;;;;;;;;;-1:-1:-1;17448:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:55;;;;;;;;;;-1:-1:-1;16787:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;30127:311;;;;;;;;;;-1:-1:-1;30127:311:0;;;;;:::i;:::-;;:::i;6158:103::-;;;;;;;;;;;;;:::i;17516:25::-;;;;;;;;;;;;;;;;35421:122;;;;;;;;;;-1:-1:-1;35421:122:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38614:193::-;;;;;;;;;;-1:-1:-1;38614:193:0;;;;;:::i;:::-;;:::i;9286:235::-;;;;;;;;;;;;;:::i;13200:37::-;;;;;;;;;;-1:-1:-1;13200:37:0;;;;-1:-1:-1;;;13200:37:0;;;;;;39851:90;;;;;;;;;;-1:-1:-1;39851:90:0;;;;;:::i;:::-;;:::i;19738:45::-;;;;;;;;;;;;;:::i;33803:247::-;;;;;;;;;;-1:-1:-1;33803:247:0;;;;;:::i;:::-;;:::i;43480:685::-;;;;;;;;;;;;;:::i;38168:99::-;;;;;;;;;;-1:-1:-1;38168:99:0;;;;;:::i;:::-;;:::i;5483:87::-;;;;;;;;;;-1:-1:-1;5529:7:0;5556:6;;;;-1:-1:-1;;;;;5556:6:0;5483:87;;34503:912;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35820:93::-;;;;;;;;;;;;;:::i;17224:46::-;;;;;;;;;;-1:-1:-1;17224:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;32458:359;;;;;;;;;;-1:-1:-1;32458:359:0;;;;;:::i;:::-;;:::i;40043:73::-;;;;;;;;;;-1:-1:-1;40104:10:0;;40043:73;;31199:876;;;;;;;;;;-1:-1:-1;31199:876:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21573:1482::-;;;;;;;;;;-1:-1:-1;21573:1482:0;;;;;:::i;:::-;;:::i;16957:62::-;;;;;;;;;;-1:-1:-1;16957:62:0;;;;;:::i;:::-;;:::i;20166:286::-;;;;;;;;;;-1:-1:-1;20166:286:0;;;;;:::i;:::-;;:::i;37958:99::-;;;;;;;;;;-1:-1:-1;37958:99:0;;;;;:::i;:::-;;:::i;38819:567::-;;;;;;;;;;;;;:::i;17708:32::-;;;;;;;;;;-1:-1:-1;17708:32:0;;;;-1:-1:-1;;;;;17708:32:0;;;39585:160;;;;;;;;;;-1:-1:-1;39585:160:0;;;;;:::i;:::-;;:::i;15866:536::-;;;;;;;;;;-1:-1:-1;15866:536:0;;;;;:::i;:::-;;:::i;29497:132::-;;;;;;;;;;-1:-1:-1;29497:132:0;;;;;:::i;:::-;;:::i;16904:46::-;;;;;;;;;;-1:-1:-1;16904:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16904:46:0;;;;;;;;;;;-1:-1:-1;;;;;19246:32:1;;;19228:51;;19310:2;19295:18;;19288:34;;;;19338:18;;;19331:34;19216:2;19201:18;16904:46:0;19026:345:1;40124:1685:0;;;;;;;;;;-1:-1:-1;40124:1685:0;;;;;:::i;:::-;;:::i;34173:188::-;;;;;;;;;;-1:-1:-1;34173:188:0;;;;;:::i;:::-;;:::i;17673:28::-;;;;;;;;;;-1:-1:-1;17673:28:0;;;;-1:-1:-1;;;;;17673:28:0;;;38381:108;;;;;;;;;;-1:-1:-1;38381:108:0;;;;;:::i;:::-;;:::i;34056:111::-;;;;;;;;;;-1:-1:-1;34056:111:0;;;;;:::i;:::-;;:::i;35549:167::-;;;;;;;;;;-1:-1:-1;35549:167:0;;;;;:::i;:::-;;:::i;17747:20::-;;;;;;;;;;-1:-1:-1;17747:20:0;;;;-1:-1:-1;;;;;17747:20:0;;;38495:111;;;;;;;;;;-1:-1:-1;38495:111:0;;;;;:::i;:::-;;:::i;29128:363::-;;;;;;:::i;:::-;;:::i;17801:22::-;;;;;;;;;;-1:-1:-1;17801:22:0;;;;-1:-1:-1;;;;;17801:22:0;;;8247:101;;;;;;;;;;-1:-1:-1;8327:13:0;;-1:-1:-1;;;;;8327:13:0;8247:101;;38273:102;;;;;;;;;;-1:-1:-1;38273:102:0;;;;;:::i;:::-;;:::i;33397:98::-;;;;;;;;;;-1:-1:-1;33397:98:0;;;;;:::i;:::-;;:::i;17965:42::-;;;;;;;;;;-1:-1:-1;17965:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;17965:42:0;;;30444:153;;;;;;;;;;-1:-1:-1;30444:153:0;;;;;:::i;:::-;;:::i;17830:26::-;;;;;;;;;;-1:-1:-1;17830:26:0;;;;-1:-1:-1;;;;;17830:26:0;;;17317:73;;;;;;;;;;-1:-1:-1;17317:73:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;39751:94;;;;;;;;;;-1:-1:-1;39751:94:0;;;;;:::i;:::-;;:::i;8674:181::-;;;;;;;;;;-1:-1:-1;8674:181:0;;;;;:::i;:::-;;:::i;42646:431::-;;;;;;;;;;;;;:::i;42393:247::-;;;;;;;;;;-1:-1:-1;42393:247:0;;;;;:::i;:::-;;:::i;19931:108::-;;;;;;;;;;-1:-1:-1;19931:108:0;;;;;:::i;:::-;;:::i;16849:48::-;;;;;;;;;;-1:-1:-1;16849:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16849:48:0;;;;;;;37608:101;;;;;;;;;;-1:-1:-1;37608:101:0;;;;;:::i;:::-;;:::i;17397:44::-;;;;;;;;;;-1:-1:-1;17397:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;17865:23;;;;;;;;;;-1:-1:-1;17865:23:0;;;;-1:-1:-1;;;;;17865:23:0;;;17646:20;;;;;;;;;;-1:-1:-1;17646:20:0;;;;;;;-1:-1:-1;;;;;17646:20:0;;;37715:114;;;;;;;;;;-1:-1:-1;37715:114:0;;;;;:::i;:::-;;:::i;37835:117::-;;;;;;;;;;-1:-1:-1;37835:117:0;;;;;:::i;:::-;;:::i;42122:265::-;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;41873::::0;42209:7:::2;:23;;42201:58;;;::::0;-1:-1:-1;;;42201:58:0;;23167:2:1;42201:58:0::2;::::0;::::2;23149:21:1::0;23206:2;23186:18;;;23179:30;-1:-1:-1;;;23225:18:1;;;23218:52;23287:18;;42201:58:0::2;;;;;;;;;42289:44;::::0;42271:12:::2;::::0;42297:10:::2;::::0;42321:7;;42271:12;42289:44;42271:12;42289:44;42321:7;42297:10;42289:44:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42270:63;;;42352:7;42344:35;;;::::0;-1:-1:-1;;;42344:35:0;;23728:2:1;42344:35:0::2;::::0;::::2;23710:21:1::0;23767:2;23747:18;;;23740:30;-1:-1:-1;;;23786:18:1;;;23779:45;23841:18;;42344:35:0::2;23526:339:1::0;42344:35:0::2;42190:197;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;12161:20:::1;42122:265:::0;:::o;38063:99::-;5369:13;:11;:13::i;:::-;38132:7:::1;:22:::0;;-1:-1:-1;;;;;;38132:22:0::1;-1:-1:-1::0;;;;;38132:22:0;;;::::1;::::0;;;::::1;::::0;;38063:99::o;32081:371::-;32157:24;32194:30;32249:7;-1:-1:-1;;;;;32227:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;32227:30:0;;;;;;;;;;;;;;;;-1:-1:-1;32194:63:0;-1:-1:-1;32273:6:0;32268:154;32289:7;32285:1;:11;32268:154;;;32329:81;;;;;;;;32352:1;32345:4;:8;;;;:::i;:::-;32329:81;;;;32355:16;:26;32372:8;32379:1;32372:4;:8;:::i;:::-;32355:26;;;;;;;;;;;;32329:81;;;;32383:16;:26;32407:1;32400:4;:8;;;;:::i;:::-;32383:26;;;;;;;;;;;;32329:81;;;32318:5;32324:1;32318:8;;;;;;;;:::i;:::-;;;;;;;;;;:92;32298:3;;32268:154;;;-1:-1:-1;32439:5:0;-1:-1:-1;32081:371:0;;;;;:::o;23067:1454::-;23339:4;2390:19;:17;:19::i;:::-;12117:21:::1;:19;:21::i;:::-;23312:6:::2;13843:35;13872:5;13843:28;:35::i;:::-;23374:10:::3;-1:-1:-1::0;;;;;23364:20:0;::::3;::::0;23356:51:::3;;;::::0;-1:-1:-1;;;23356:51:0;;24469:2:1;23356:51:0::3;::::0;::::3;24451:21:1::0;24508:2;24488:18;;;24481:30;-1:-1:-1;;;24527:18:1;;;24520:48;24585:18;;23356:51:0::3;24267:342:1::0;23356:51:0::3;23427:25;23447:4;23427:19;:25::i;:::-;23418:58;;;::::0;-1:-1:-1;;;23418:58:0;;24816:2:1;23418:58:0::3;::::0;::::3;24798:21:1::0;24855:2;24835:18;;;24828:30;-1:-1:-1;;;24874:18:1;;;24867:49;24933:18;;23418:58:0::3;24614:343:1::0;23418:58:0::3;-1:-1:-1::0;;;;;23496:24:0;::::3;;::::0;;;:16:::3;:24;::::0;;;;;;;:30;;;;;;;;;::::3;;23495:31;23487:61;;;::::0;-1:-1:-1;;;23487:61:0;;25164:2:1;23487:61:0::3;::::0;::::3;25146:21:1::0;25203:2;25183:18;;;25176:30;-1:-1:-1;;;25222:18:1;;;25215:47;25279:18;;23487:61:0::3;24962:341:1::0;23487:61:0::3;23569:22;23594:33;23620:6;23594:25;:33::i;:::-;23569:58;;23664:1;23646:8;:15;:19;23638:56;;;::::0;-1:-1:-1;;;23638:56:0;;25510:2:1;23638:56:0::3;::::0;::::3;25492:21:1::0;25549:2;25529:18;;;25522:30;25588:26;25568:18;;;25561:54;25632:18;;23638:56:0::3;25308:348:1::0;23638:56:0::3;23744:7;::::0;:28:::3;::::0;-1:-1:-1;;;23744:28:0;;23716:12:::3;::::0;;;-1:-1:-1;;;;;23744:7:0;;::::3;::::0;:18:::3;::::0;:28:::3;::::0;23763:8;;23744:28:::3;;;:::i;:::-;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23715:57;;;;23783:45;23802:9;23813:7;23822:5;23783:18;:45::i;:::-;23853:15;::::0;::::3;;23849:205;;;23885:19;23907:30;23918:4;23923;;23928:8;;23907:10;:30::i;:::-;23885:52;;23961:8;23970:6;23961:16;;;;;;:::i;:::-;::::0;;;::::3;::::0;;;;;::::3;::::0;;;;::::3;;23960:17;23952:52;;;::::0;-1:-1:-1;;;23952:52:0;;26517:2:1;23952:52:0::3;::::0;::::3;26499:21:1::0;26556:2;26536:18;;;26529:30;-1:-1:-1;;;26575:18:1;;;26568:52;26637:18;;23952:52:0::3;26315:346:1::0;23952:52:0::3;24038:4;24019:8;24028:6;24019:16;;;;;;:::i;:::-;::::0;;;::::3;::::0;;;;;::::3;::::0;;;:23;;;::::3;;-1:-1:-1::0;;24019:23:0;;::::3;::::0;;;::::3;::::0;;-1:-1:-1;23849:205:0::3;24074:43;24102:8;24112:4;24074:27;:43::i;:::-;24138:12;24153:13;;;;;;;;;-1:-1:-1::0;;;;;24153:13:0::3;-1:-1:-1::0;;;;;24153:42:0::3;;24196:6;24204:4;24210:8;24220:4;;24226:8;;24153:82;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24138:97;;24264:1;24254:7;:11;24246:54;;;::::0;-1:-1:-1;;;24246:54:0;;28330:2:1;24246:54:0::3;::::0;::::3;28312:21:1::0;28369:2;28349:18;;;28342:30;28408:32;28388:18;;;28381:60;28458:18;;24246:54:0::3;28128:354:1::0;24246:54:0::3;24321:50;24339:6;24347:4;24353:7;24362:8;24321:17;:50::i;:::-;24382:49;24399:6;24407:4;24413:7;24422:8;24382:16;:49::i;:::-;24457:34;24469:7;24478:6;24486:4;24457:34;;;;;;;28689:25:1::0;;;-1:-1:-1;;;;;28750:32:1;;;;28745:2;28730:18;;28723:60;28814:2;28799:18;;28792:34;28677:2;28662:18;;28487:345;24457:34:0::3;;;;;;;;24509:4;24502:11;;;;;;12149:1:::2;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;12161:20:::1;23067:1454:::0;;;;;;;;;;;:::o;35923:128::-;36021:7;;:28;;-1:-1:-1;;;36021:28:0;;35991:9;;;;-1:-1:-1;;;;;36021:7:0;;;;:18;;:28;;36040:8;;;;36021:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36014:35;;;;35923:128;;;;;;:::o;34369:::-;34464:11;;:31;;;-1:-1:-1;;;34464:31:0;;;;34419:36;;-1:-1:-1;;;;;34464:11:0;;:29;;:31;;;;;:11;;:31;;;;;;;:11;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34464:31:0;;;;;;;;;;;;:::i;:::-;34457:38;;34369:128;:::o;39398:175::-;5369:13;:11;:13::i;:::-;39528:37:::1;39548:16;39528:19;:37::i;41902:214::-:0;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;42019:43:::2;::::0;41873:21;;41963:11:::2;::::0;42027:10:::2;::::0;41873:21;;41963:11;42019:43;41963:11;42019:43;41873:21;42027:10;42019:43:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42000:62;;;42081:7;42073:35;;;::::0;-1:-1:-1;;;42073:35:0;;23728:2:1;42073:35:0::2;::::0;::::2;23710:21:1::0;23767:2;23747:18;;;23740:30;-1:-1:-1;;;23786:18:1;;;23779:45;23841:18;;42073:35:0::2;23526:339:1::0;42073:35:0::2;41952:164;;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;12161:20:::1;41902:214::o:0;30603:473::-;30690:22;30725:10;;30750:99;30771:5;:12;30767:1;:16;30750:99;;;30795:41;30821:5;30827:1;30821:8;;;;;;;;:::i;:::-;;;;;;;30831:4;30795:25;:41::i;:::-;30791:57;;;30839:7;;;;:::i;:::-;;;;30791:57;30785:3;;30750:99;;;;30881:5;-1:-1:-1;;;;;30870:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30870:17:0;-1:-1:-1;30859:28:0;-1:-1:-1;30898:10:0;;30923:120;30944:5;:12;30940:1;:16;30923:120;;;30968:41;30994:5;31000:1;30994:8;;;;;;;;:::i;:::-;;;;;;;31004:4;30968:25;:41::i;:::-;30964:78;;;31032:5;31038:1;31032:8;;;;;;;;:::i;:::-;;;;;;;31012;31021:7;;;;;:::i;:::-;;;31012:17;;;;;;;;:::i;:::-;;;;;;:28;;;;;30964:78;30958:3;;30923:120;;;;31053:15;;30603:473;;;;:::o;35724:90::-;35787:7;;:25;;;-1:-1:-1;;;35787:25:0;;;;35773:4;;-1:-1:-1;;;;;35787:7:0;;:23;;:25;;;;;;;;;;;;;;:7;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32823:361::-;32899:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32899:16:0;32928;32947:22;32955:6;32963:5;32947:22;;:7;:22::i;:::-;32928:41;;32980:20;33003:7;33011:3;33003:12;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32980:35;;;;;;;-1:-1:-1;;;;;32980:35:0;;;;;;;;;;;;;;;;;;;;;;;33003:12;-1:-1:-1;33030:15:0;:51;;;;-1:-1:-1;33057:9:0;;-1:-1:-1;;;;;33057:9:0;33049:32;;33030:51;33026:130;;;33105:9;;:39;;-1:-1:-1;;;33105:39:0;;-1:-1:-1;;;;;31712:32:1;;;33105:39:0;;;31694:51:1;31793:10;31781:23;;31761:18;;;31754:51;33105:9:0;;;;:24;;31667:18:1;;33105:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33098:46;;;;;;33026:130;33173:3;32823:361;-1:-1:-1;;;;32823:361:0:o;36057:114::-;36142:7;;:27;;-1:-1:-1;;;36142:27:0;;;;;160:25:1;;;36112:9:0;;;;-1:-1:-1;;;;;36142:7:0;;;;:20;;133:18:1;;36142:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36135:34;;;;36057:114;;;:::o;19789:49::-;5369:13;:11;:13::i;:::-;19826:10:::1;:8;:10::i;33602:195::-:0;33734:13;;:61;;-1:-1:-1;;;33734:61:0;;33721:4;;-1:-1:-1;;;;;33734:13:0;;:35;;:61;;33770:8;;;;33780:4;;;;33786:8;;;;33734:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33727:68;33602:195;-1:-1:-1;;;;;;;33602:195:0:o;33196:72::-;33235:4;33260:6;33248:9;:7;:9::i;:::-;:18;;;;:::i;31082:111::-;31147:4;31160:24;31177:6;31160:16;:24::i;:::-;:31;;31082:111;-1:-1:-1;;31082:111:0:o;36183:517::-;36266:4;-1:-1:-1;;;;;36291:27:0;;36283:61;;;;-1:-1:-1;;;36283:61:0;;33801:2:1;36283:61:0;;;33783:21:1;33840:2;33820:18;;;33813:30;-1:-1:-1;;;33859:18:1;;;33852:51;33920:18;;36283:61:0;33599:345:1;36283:61:0;36355:14;36378:13;-1:-1:-1;;;;;36372:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36355:48;;36428:8;:13;;36440:1;36428:13;36424:269;;36465:7;36458:14;;;;;36424:269;36494:8;:14;;36506:2;36494:14;36490:203;;36532:16;:7;36542:6;36532:16;:::i;:::-;36525:23;;;;;36490:203;36581:22;36606:18;36623:1;36606:14;;;:18;:::i;:::-;36581:43;-1:-1:-1;36657:23:0;36581:43;36657:2;:23;:::i;:::-;36646:35;;:7;:35;:::i;36490:203::-;36272:428;36183:517;;;;:::o;20458:1101::-;20526:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20526:28:0;20598:7;;:26;;-1:-1:-1;;;20598:26:0;;-1:-1:-1;;;;;616:32:1;;;20598:26:0;;;598:51:1;20569:26:0;;20598:7;;;;;:19;;571:18:1;;20598:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20598:26:0;;;;;;;;;;;;:::i;:::-;20657:15;;20635:37;;20702:14;;;;;20683:16;;;:33;;;20749:23;20727:19;;;:45;20807:8;;20569:55;;-1:-1:-1;;;;;;20807:8:0;20799:31;20795:173;;20866:8;;:25;;-1:-1:-1;;;20866:25:0;;-1:-1:-1;;;;;616:32:1;;;20866:25:0;;;598:51:1;20866:8:0;;;;:18;;571::1;;20866:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20866:25:0;;;;;;;;;;;;:::i;:::-;20847:16;;;:44;20795:173;;;20943:13;;;20954:1;20943:13;;;;;;;;20924:16;;;:32;20795:173;21000:16;;;;:23;20978:19;;;:45;21058:10;;-1:-1:-1;;;;;21058:10:0;21050:33;21046:506;;21126:10;;:38;;-1:-1:-1;;;21126:38:0;;-1:-1:-1;;;;;616:32:1;;;21126:38:0;;;598:51:1;21101:9:0;;;;21126:10;;;:31;;571:18:1;;21126:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21100:64;;;;21190:1;21183:4;:8;:21;;;;;21203:1;21195:5;:9;21183:21;21179:296;;;21256:5;-1:-1:-1;;;;;21245:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21245:17:0;-1:-1:-1;21225:17:0;;;:37;21288:6;21283:103;21304:5;21300:1;:9;21283:103;;;21362:4;21339:8;:17;;;21357:1;21339:20;;;;;;;;:::i;:::-;;;;;;;;;;:27;21311:3;;21283:103;;;;21179:296;;;21446:13;;;21457:1;21446:13;;;;;;;;21426:17;;;:33;21179:296;21085:401;;21046:506;;;21527:13;;;21538:1;21527:13;;;;;;;;21507:17;;;:33;21046:506;20556:1003;20458:1101;;;:::o;33274:117::-;33321:4;33363:14;;33380:7;33363:24;;;;:::i;:::-;33339:49;;33343:15;33339:49;:::i;43083:391::-;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;43181:27:0;::::2;43173:61;;;::::0;-1:-1:-1;;;43173:61:0;;33801:2:1;43173:61:0::2;::::0;::::2;33783:21:1::0;33840:2;33820:18;;;33813:30;-1:-1:-1;;;33859:18:1;;;33852:51;33920:18;;43173:61:0::2;33599:345:1::0;43173:61:0::2;43260:45;::::0;-1:-1:-1;;;43260:45:0;;43299:4:::2;43260:45;::::0;::::2;598:51:1::0;43245:12:0::2;::::0;-1:-1:-1;;;;;43260:30:0;::::2;::::0;::::2;::::0;571:18:1;;43260:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43245:60;;43334:1;43324:7;:11;43316:46;;;::::0;-1:-1:-1;;;43316:46:0;;38313:2:1;43316:46:0::2;::::0;::::2;38295:21:1::0;38352:2;38332:18;;;38325:30;-1:-1:-1;;;38371:18:1;;;38364:52;38433:18;;43316:46:0::2;38111:346:1::0;43316:46:0::2;43424:42;::::0;-1:-1:-1;;;43424:42:0;;43402:10:::2;43424:42;::::0;::::2;38644:51:1::0;;;38711:18;;;38704:34;;;43402:10:0;-1:-1:-1;;;;;43424:29:0;::::2;::::0;::::2;::::0;38617:18:1;;43424:42:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43162:312;;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;39947:90;5369:13;:11;:13::i;:::-;40011:10:::1;:18:::0;39947:90::o;20045:113::-;5369:13;:11;:13::i;:::-;-1:-1:-1;;;;;20118:24:0::1;20145:5;20118:24:::0;;;:16:::1;:24;::::0;;;;:32;;-1:-1:-1;;20118:32:0::1;::::0;;20045:113::o;37507:95::-;5369:13;:11;:13::i;:::-;37578:8:::1;:16:::0;;-1:-1:-1;;;;;;37578:16:0::1;-1:-1:-1::0;;;;;37578:16:0;;;::::1;::::0;;;::::1;::::0;;37507:95::o;30127:311::-;30273:9;;30205:4;;;;-1:-1:-1;;;;;30273:9:0;30265:32;30261:102;;30318:9;;:43;;-1:-1:-1;;;30318:43:0;;-1:-1:-1;;;;;38662:32:1;;;30318:43:0;;;38644:51:1;38711:18;;;38704:34;;;30318:9:0;;;;:28;;38617:18:1;;30318:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30300:61;;30261:102;-1:-1:-1;;;;;30380:24:0;;;;;;:16;:24;;;;;;;;:31;;;;;;;;;;;;:50;;-1:-1:-1;30415:15:0;30373:57;-1:-1:-1;;;30127:311:0:o;6158:103::-;5369:13;:11;:13::i;:::-;6223:30:::1;6250:1;6223:18;:30::i;35421:122::-:0;35510:31;;35488:12;39451:15:1;;;-1:-1:-1;;39447:53:1;35510:31:0;;;39435:66:1;39517:12;;;39510:28;;;35488:12:0;39554::1;;35510:31:0;;;;;;;;;;;;35503:38;;35421:122;;;;:::o;38614:193::-;5369:13;:11;:13::i;:::-;38717:1:::1;38708:6;:10;38700:54;;;::::0;-1:-1:-1;;;38700:54:0;;39779:2:1;38700:54:0::1;::::0;::::1;39761:21:1::0;39818:2;39798:18;;;39791:30;39857:33;39837:18;;;39830:61;39908:18;;38700:54:0::1;39577:355:1::0;38700:54:0::1;38765:18;::::0;;;:10:::1;:18;::::0;;;;;:34;;-1:-1:-1;;;;;;38765:34:0::1;-1:-1:-1::0;;;;;38765:34:0;;::::1;::::0;;;::::1;::::0;;38614:193::o;9286:235::-;8327:13;;775:10;;-1:-1:-1;;;;;8327:13:0;9383:24;;9379:98;;9431:34;;-1:-1:-1;;;9431:34:0;;-1:-1:-1;;;;;616:32:1;;9431:34:0;;;598:51:1;571:18;;9431:34:0;427:228:1;9379:98:0;9487:26;9506:6;9487:18;:26::i;39851:90::-;5369:13;:11;:13::i;:::-;39913:15:::1;:20:::0;;-1:-1:-1;;39913:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39851:90::o;19738:45::-;5369:13;:11;:13::i;:::-;19773:8:::1;:6;:8::i;33803:247::-:0;33969:13;;:79;;-1:-1:-1;;;33969:79:0;;33956:4;;-1:-1:-1;;;;;33969:13:0;;:42;;:79;;34012:4;;34018:3;;34023:8;;;;34033:4;;;;34039:8;;;;33969:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43480:685::-;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;41873::::0;43628:16;;43624:174:::2;;43680:49;::::0;43662:12:::2;::::0;43688:10:::2;::::0;43712:12;;43662;43680:49;43662:12;43680:49;43712:12;43688:10;43680:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43661:68;;;43752:7;43744:42;;;::::0;-1:-1:-1;;;43744:42:0;;41077:2:1;43744:42:0::2;::::0;::::2;41059:21:1::0;41116:2;41096:18;;;41089:30;-1:-1:-1;;;41135:18:1;;;41128:52;41197:18;;43744:42:0::2;40875:346:1::0;43744:42:0::2;43646:152;43624:174;43852:6;43847:311;43868:1;43864;:5;43847:311;;;43920:1;43895:13:::0;;;:10:::2;:13;::::0;;;;;-1:-1:-1;;;;;43895:13:0::2;:27:::0;43891:256:::2;;43943:12;43964:13:::0;;;:10:::2;:13;::::0;;;;;;43958:45;;-1:-1:-1;;;43958:45:0;;43997:4:::2;43958:45;::::0;::::2;598:51:1::0;-1:-1:-1;;;;;43964:13:0;;::::2;::::0;43958:30:::2;::::0;571:18:1;;43958:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43943:60:::0;-1:-1:-1;44026:11:0;;44022:110:::2;;44068:13;::::0;;;:10:::2;:13;::::0;;;;;;;44062:50;;-1:-1:-1;;;44062:50:0;;44092:10:::2;44062:50;::::0;::::2;38644:51:1::0;38711:18;;;38704:34;;;-1:-1:-1;;;;;44068:13:0;;::::2;::::0;44062:29:::2;::::0;38617:18:1;;44062:50:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44022:110;43924:223;43891:256;43871:3;;43847:311;;38168:99:::0;5369:13;:11;:13::i;:::-;38237:7:::1;:22:::0;;-1:-1:-1;;;;;;38237:22:0::1;-1:-1:-1::0;;;;;38237:22:0;;;::::1;::::0;;;::::1;::::0;;38168:99::o;34503:912::-;34553:16;34582:41;34626:11;;;;;;;;;-1:-1:-1;;;;;34626:11:0;-1:-1:-1;;;;;34626:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34626:31:0;;;;;;;;;;;;:::i;:::-;34686:11;;34582:75;;-1:-1:-1;34668:15:0;;34751:242;34772:10;34768:1;:14;34751:242;;;34822:11;;34847:7;;34807:11;;-1:-1:-1;;;;;34822:11:0;;:24;;34847:4;;34852:1;;34847:7;;;;;;:::i;:::-;;;;;;;;;;;:13;34822:39;;-1:-1:-1;;;;;;34822:39:0;;;;;;;-1:-1:-1;;;;;616:32:1;;;34822:39:0;;;598:51:1;571:18;;34822:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34822:39:0;;;;;;;;;;;;:::i;:::-;34800:61;;;;;;;;34880:6;34876:74;;;34919:13;;;;;34876:74;-1:-1:-1;34976:3:0;;34751:242;;;;35015:22;35054:11;-1:-1:-1;;;;;35040:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35040:26:0;-1:-1:-1;35015:51:0;-1:-1:-1;35077:10:0;;35102:283;35123:10;35119:1;:14;35102:283;;;35173:11;;35198:7;;35158:11;;-1:-1:-1;;;;;35173:11:0;;:24;;35198:4;;35203:1;;35198:7;;;;;;:::i;:::-;;;;;;;;;;;:13;35173:39;;-1:-1:-1;;;;;;35173:39:0;;;;;;;-1:-1:-1;;;;;616:32:1;;;35173:39:0;;;598:51:1;571:18;;35173:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35173:39:0;;;;;;;;;;;;:::i;:::-;35151:61;;;;;;;;35231:6;35227:115;;;35273:4;35278:1;35273:7;;;;;;;;:::i;:::-;;;;;;;:13;;;35258:5;35264;35258:12;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;35258:28:0;;;-1:-1:-1;;;;;35258:28:0;;;;;35317:7;;;;;35227:115;-1:-1:-1;35368:3:0;;35102:283;;;-1:-1:-1;35402:5:0;;34503:912;-1:-1:-1;;;;;34503:912:0:o;35820:93::-;35884:7;;:27;;;-1:-1:-1;;;35884:27:0;;;;35871:4;;-1:-1:-1;;;;;35884:7:0;;:25;;:27;;;;;;;;;;;;;;:7;:27;;;;;;;;;;;;;;32458:359;32532:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32532:16:0;32561;32580:22;32588:6;32596:5;32580:22;;:7;:22::i;:::-;32561:41;;32613:20;32636:9;32646:3;32636:14;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32613:37;;;;;;;-1:-1:-1;;;;;32613:37:0;;;;;;;;;;;;;;;;;;;;;;;32636:14;-1:-1:-1;32665:15:0;:51;;;;-1:-1:-1;32692:9:0;;-1:-1:-1;;;;;32692:9:0;32684:32;;32665:51;32661:128;;;32740:9;;:37;;-1:-1:-1;;;32740:37:0;;-1:-1:-1;;;;;31712:32:1;;;32740:37:0;;;31694:51:1;31793:10;31781:23;;31761:18;;;31754:51;32740:9:0;;;;:22;;31667:18:1;;32740:37:0;31522:289:1;31199:876:0;31346:9;;31262:22;;;;-1:-1:-1;;;;;31346:9:0;31338:32;31334:119;;31379:9;;:34;;-1:-1:-1;;;31379:34:0;;-1:-1:-1;;;;;616:32:1;;;31379:34:0;;;598:51:1;31379:9:0;;;;:26;;571:18:1;;31379:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31379:34:0;;;;;;;;;;;;:::i;:::-;31373:40;;31334:119;;;31428:22;;;31448:1;31428:22;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;31428:22:0;;;;;;;;;;;;;;;;31422:28;;31334:119;-1:-1:-1;;;;;31496:23:0;;31463:30;31496:23;;;:15;:23;;;;;;;;31463:56;;;;;;;;;;;;;;;;;;;31496:23;;31463:56;:30;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31530:35;31601:7;:14;31588:3;:10;:27;;;;:::i;:::-;-1:-1:-1;;;;;31568:48:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;31568:48:0;;;;;;;;;;;;;;;-1:-1:-1;31530:86:0;-1:-1:-1;31627:10:0;;31652:111;31673:3;:10;31669:1;:14;31652:111;;;-1:-1:-1;;;;;31696:18:0;;;;;;:10;:18;;;;;31715:6;;31696:18;;;31715:3;;31719:1;;31715:6;;;;;;:::i;:::-;;;;;;;;;;;;:11;;;31696:31;;;;;;;;;;-1:-1:-1;31696:31:0;;;;31691:71;;31754:3;31758:1;31754:6;;;;;;;;:::i;:::-;;;;;;;31730:12;31743:7;;;;;:::i;:::-;;;31730:21;;;;;;;;:::i;:::-;;;;;;:30;;;;31691:71;31685:3;;31652:111;;;-1:-1:-1;31778:6:0;31773:123;31794:7;:14;31790:1;:18;31773:123;;;-1:-1:-1;;;;;31821:18:0;;;;;;:10;:18;;;;;31840:10;;31821:18;;;31840:7;;31848:1;;31840:10;;;;;;:::i;:::-;;;;;;;;;;;;:15;;;31821:35;;;;;;;;;;-1:-1:-1;31821:35:0;;;;31816:79;;31883:7;31891:1;31883:10;;;;;;;;:::i;:::-;;;;;;;31859:12;31872:7;;;;;:::i;:::-;;;31859:21;;;;;;;;:::i;:::-;;;;;;:34;;;;31816:79;31810:3;;31773:123;;;;31906:31;31960:5;-1:-1:-1;;;;;31940:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;31940:26:0;;;;;;;;;;;;;;;-1:-1:-1;31906:60:0;-1:-1:-1;31982:6:0;31977:65;31998:5;31994:1;:9;31977:65;;;32025:12;32038:1;32025:15;;;;;;;;:::i;:::-;;;;;;;32011:8;32020:1;32011:11;;;;;;;;:::i;:::-;;;;;;;;;;:29;32005:3;;31977:65;;;-1:-1:-1;32059:8:0;31199:876;-1:-1:-1;;;;;;31199:876:0:o;21573:1482::-;21705:7;;:26;;-1:-1:-1;;;21705:26:0;;-1:-1:-1;;;;;616:32:1;;;21705:26:0;;;598:51:1;21644:23:0;;21682:20;;21705:7;;;;;;;;:19;;571:18:1;;21705:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21705:26:0;;;;;;;;;;;;:::i;:::-;:36;;;21771:13;;21881:8;;21705:36;;-1:-1:-1;21771:13:0;21807:20;;21752:16;;-1:-1:-1;;;;;21881:8:0;21873:31;21869:140;;21930:8;;:25;;-1:-1:-1;;;21930:25:0;;-1:-1:-1;;;;;616:32:1;;;21930:25:0;;;598:51:1;21930:8:0;;;;:18;;571::1;;21930:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21930:25:0;;;;;;;;;;;;:::i;:::-;21921:34;;21984:6;:13;21970:27;;21869:140;22106:10;;22031:17;;;;-1:-1:-1;;;;;22106:10:0;22098:33;22094:187;;22178:10;;:38;;-1:-1:-1;;;22178:38:0;;-1:-1:-1;;;;;616:32:1;;;22178:38:0;;;598:51:1;22178:10:0;;;;:31;;571:18:1;;22178:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22148:68;-1:-1:-1;22148:68:0;-1:-1:-1;22250:1:0;22235:16;;;22231:38;;22268:1;22253:16;;22231:38;22303:15;22349:12;22321:25;22335:11;22321;:25;:::i;:::-;:40;;;;:::i;:::-;22303:58;;22376:10;22390:1;22376:15;22372:68;;-1:-1:-1;;22415:13:0;;;22426:1;22415:13;;;;;;;;;22408:20;-1:-1:-1;;;;;;;21573:1482:0:o;22372:68::-;22483:10;-1:-1:-1;;;;;22472:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22472:22:0;-1:-1:-1;22460:34:0;-1:-1:-1;22505:10:0;;22542:124;22563:11;22559:1;:15;22542:124;;;22613:6;22620:1;22613:9;;;;;;;;:::i;:::-;;;;;;;22592;22602:7;;;;;:::i;:::-;;;22592:18;;;;;;;;:::i;:::-;;;;;;;;;;:30;22649:3;;22542:124;;;-1:-1:-1;22693:6:0;22688:124;22709:11;22705:1;:15;22688:124;;;22759:6;22766:1;22759:9;;;;;;;;:::i;:::-;;;;;;;22738;22748:7;;;;;:::i;:::-;;;22738:18;;;;;;;;:::i;:::-;;;;;;;;;;:30;22795:3;;22688:124;;;-1:-1:-1;22838:16:0;;22834:187;;22876:6;22871:139;22892:12;22888:1;:16;22871:139;;;22947:11;22926:9;22936:7;;;;:::i;:::-;;;22926:18;;;;;;;;:::i;:::-;;;;;;;;;;:32;22989:3;;22871:139;;;;22834:187;23031:16;;;;;;;;21573:1482;;;:::o;16957:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16957:62:0;-1:-1:-1;16957:62:0;:::o;20166:286::-;5369:13;:11;:13::i;:::-;20254:18:::1;20300:6:::0;20287:158:::1;20312:4;20308:1;:8;20287:158;;20360:9;::::0;:29:::1;::::0;-1:-1:-1;;;20360:29:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;20360:9:0;;::::1;::::0;:26:::1;::::0;133:18:1;;20360:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20338:19;::::0;;;:16:::1;:19;::::0;;;;:51;20416:15:::1;::::0;;::::1;::::0;20355:1;20318:3:::1;20355:1:::0;20318:3:::1;:::i;:::-;;;;20287:158;;;;20243:209;20166:286:::0;;:::o;37958:99::-;5369:13;:11;:13::i;:::-;38027:7:::1;:22:::0;;-1:-1:-1;;;;;38027:22:0;;::::1;;;-1:-1:-1::0;;;;;;38027:22:0;;::::1;::::0;;;::::1;::::0;;37958:99::o;38819:567::-;38865:16;38894:15;;38934:135;38955:1;38951;:5;38934:135;;;39007:1;38982:13;;;:10;:13;;;;;;-1:-1:-1;;;;;38982:13:0;:27;38978:80;;39030:12;;;;:::i;:::-;;;;38978:80;38958:3;;38934:135;;;;39089:28;39134:10;-1:-1:-1;;;;;39120:25:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39120:25:0;-1:-1:-1;39089:56:0;-1:-1:-1;39156:10:0;;39181:159;39202:1;39198;:5;39181:159;;;39254:1;39229:13;;;:10;:13;;;;;;-1:-1:-1;;;;;39229:13:0;:27;39225:104;;39300:13;;;;:10;:13;;;;;;-1:-1:-1;;;;;39300:13:0;39277:11;39289:7;;;;:::i;:::-;;;39277:20;;;;;;;;:::i;:::-;;;;;;:36;-1:-1:-1;;;;;39277:36:0;;;-1:-1:-1;;;;;39277:36:0;;;;;39225:104;39205:3;;39181:159;;;-1:-1:-1;39367:11:0;;38819:567;-1:-1:-1;;;38819:567:0:o;39585:160::-;5369:13;:11;:13::i;:::-;39706:31:::1;39729:7;39706:22;:31::i;15866:536::-:0;15948:4;-1:-1:-1;;;;;15969:19:0;;;;:43;;-1:-1:-1;;;;;;15992:20:0;;;15969:43;15965:61;;;-1:-1:-1;16021:5:0;16014:12;;15965:61;16054:25;;-1:-1:-1;;;16054:25:0;;;;16049:43;;-1:-1:-1;16088:4:0;16081:11;;16049:43;16127:5;-1:-1:-1;;;;;16117:15:0;:6;-1:-1:-1;;;;;16117:15:0;;16113:32;;-1:-1:-1;16141:4:0;16134:11;;16113:32;16168:15;;-1:-1:-1;;;;;16168:15:0;16156:56;;-1:-1:-1;16207:5:0;16200:12;;16156:56;16237:15;;:49;;-1:-1:-1;;;16237:49:0;;-1:-1:-1;;;;;43940:32:1;;;16237:49:0;;;43922:51:1;44009:32;;;43989:18;;;43982:60;16237:15:0;;;;:34;;43895:18:1;;16237:49:0;;;;;;;;;;;;;;;;;;-1:-1:-1;16237:49:0;;;;;;;;-1:-1:-1;;16237:49:0;;;;;;;;;;;;:::i;:::-;;;16233:162;;-1:-1:-1;16378:5:0;16371:12;;16233:162;16331:6;-1:-1:-1;16324:13:0;;29497:132;19901:10;19884:28;;;;:16;:28;;;;;;;;:36;;:28;:36;19876:45;;;;;;29588:22:::1;::::0;::::1;;::::0;;;:16:::1;:22;::::0;;;;:33;;29614:7;;29588:22;:33:::1;::::0;29614:7;;29588:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;29497:132:0:o;40124:1685::-;5369:13;:11;:13::i;:::-;40254:40;;::::1;40246:75;;;::::0;-1:-1:-1;;;40246:75:0;;44255:2:1;40246:75:0::1;::::0;::::1;44237:21:1::0;44294:2;44274:18;;;44267:30;-1:-1:-1;;;44313:18:1;;;44306:52;44375:18;;40246:75:0::1;44053:346:1::0;40246:75:0::1;40340:19:::0;40332:44:::1;;;::::0;-1:-1:-1;;;40332:44:0;;44606:2:1;40332:44:0::1;::::0;::::1;44588:21:1::0;44645:2;44625:18;;;44618:30;-1:-1:-1;;;44664:18:1;;;44657:42;44716:18;;40332:44:0::1;44404:336:1::0;40332:44:0::1;40397:19;::::0;40441:955:::1;40458:19:::0;;::::1;40441:955;;;40499:14;40516:8;;40525:1;40516:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;40499:28;;40542:18;40563:14;;40578:1;40563:17;;;;;;;:::i;:::-;;;;;;;40542:38;;40680:28;40711:34;40724:6;40739:4;40711:12;:34::i;:::-;40680:65;;40803:1;40782:11;:18;;;:22;40774:65;;;::::0;-1:-1:-1;;;40774:65:0;;44947:2:1;40774:65:0::1;::::0;::::1;44929:21:1::0;44986:2;44966:18;;;44959:30;45025:32;45005:18;;;44998:60;45075:18;;40774:65:0::1;44745:354:1::0;40774:65:0::1;40881:4;40862:11;:15;;;:23;40854:48;;;::::0;-1:-1:-1;;;40854:48:0;;45306:2:1;40854:48:0::1;::::0;::::1;45288:21:1::0;45345:2;45325:18;;;45318:30;-1:-1:-1;;;45364:18:1;;;45357:42;45416:18;;40854:48:0::1;45104:336:1::0;40854:48:0::1;40988:14;41035:13;41009:11;:18;;;41005:44;;;;:::i;:::-;40988:61:::0;-1:-1:-1;41064:29:0::1;40988:61:::0;41064:29;::::1;:::i;:::-;;;41199:18;41220:21;41228:6;41236:4;41220:7;:21::i;:::-;41199:42;;41282:13;41256:9;41266:5;41256:16;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;:39;;;;41336:6;41310:9;41320:5;41310:16;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:32;;-1:-1:-1;;;;;41310:32:0;;;::::1;-1:-1:-1::0;;;;;;41310:32:0;;::::1;::::0;;;::::1;::::0;;;41380:4;;41357:9:::1;::::0;:16:::1;::::0;41367:5;;41357:16:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:20:::1;;:27:::0;-1:-1:-1;;40479:3:0::1;::::0;;::::1;::::0;-1:-1:-1;40441:955:0::1;::::0;-1:-1:-1;;40441:955:0::1;;;41619:1;41601:15;:19;41597:205;;;41637:22;::::0;;;:16:::1;:22;::::0;;;;:47;;41668:15;;41637:22;:47:::1;::::0;41668:15;;41637:47:::1;:::i;:::-;::::0;;;-1:-1:-1;41597:205:0::1;::::0;-1:-1:-1;41597:205:0::1;;41724:1;41706:15;:19;41702:100;;;41773:16;41774:15:::0;41773:16:::1;:::i;:::-;41742:22;::::0;;;:16:::1;:22;::::0;;;;:48;;:22;;;:48:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;41702:100:0::1;40235:1574;40124:1685:::0;;;;;:::o;34173:188::-;34234:4;34252:9;:7;:9::i;:::-;34244:5;:17;34241:34;;;-1:-1:-1;34270:5:0;;34173:188;-1:-1:-1;34173:188:0:o;34241:34::-;34287:12;;34279:5;:20;34276:37;;;-1:-1:-1;34308:5:0;;34173:188;-1:-1:-1;34173:188:0:o;34276:37::-;34357:1;34344:10;;:14;;;;:::i;:::-;34334:5;34322:9;:7;:9::i;:::-;:17;;;;:::i;:::-;34321:38;;34173:188;-1:-1:-1;;34173:188:0:o;38381:108::-;5369:13;:11;:13::i;:::-;38453:10:::1;:28:::0;;-1:-1:-1;;;;;;38453:28:0::1;-1:-1:-1::0;;;;;38453:28:0;;;::::1;::::0;;;::::1;::::0;;38381:108::o;34056:111::-;34119:4;34155:10;;34146:5;34134:9;:7;:9::i;:::-;:17;;;;:::i;:::-;34133:32;;34056:111;-1:-1:-1;;34056:111:0:o;35549:167::-;35653:12;35692:5;35699:4;;35705:8;;35675:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35668:46;;35549:167;;;;;;;:::o;38495:111::-;5369:13;:11;:13::i;:::-;38568:11:::1;:30:::0;;-1:-1:-1;;;;;;38568:30:0::1;-1:-1:-1::0;;;;;38568:30:0;;;::::1;::::0;;;::::1;::::0;;38495:111::o;29128:363::-;29315:4;2390:19;:17;:19::i;:::-;12117:21:::1;:19;:21::i;:::-;29271:6:::2;13843:35;13872:5;13843:28;:35::i;:::-;29339:40:::3;29382:25;29389:6;29397:9;29382:6;:25::i;:::-;29418:11;::::0;:43:::3;::::0;-1:-1:-1;;;29418:43:0;;29339:68;;-1:-1:-1;;;;;;29418:11:0::3;::::0;:23:::3;::::0;:43:::3;::::0;29442:6;;29339:68;;29418:43:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29479:4;29472:11;;;12149:1:::2;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;38273:102;5369:13;:11;:13::i;:::-;38343:8:::1;:24:::0;;-1:-1:-1;;;;;;38343:24:0::1;-1:-1:-1::0;;;;;38343:24:0;;;::::1;::::0;;;::::1;::::0;;38273:102::o;33397:98::-;5369:13;:11;:13::i;:::-;33464:14:::1;:23:::0;33397:98::o;30444:153::-;30523:4;30547:22;;;:16;:22;;;;;;;;:28;;;;;;;;;-1:-1:-1;;;;;30547:28:0;:42;;;30444:153::o;39751:94::-;5369:13;:11;:13::i;:::-;39817:12:::1;:20:::0;39751:94::o;8674:181::-;5369:13;:11;:13::i;:::-;8764::::1;:24:::0;;-1:-1:-1;;;;;8764:24:0;::::1;-1:-1:-1::0;;;;;;8764:24:0;;::::1;::::0;::::1;::::0;;;8829:7:::1;5529::::0;5556:6;-1:-1:-1;;;;;5556:6:0;;;;;;5483:87;8829:7:::1;-1:-1:-1::0;;;;;8804:43:0::1;;;;;;;;;;;8674:181:::0;:::o;42646:431::-;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;42745:10:::2;42716:18;42767:303;42788:1;42784;:5;42767:303;;;42840:1;42815:13:::0;;;:10:::2;:13;::::0;;;;;-1:-1:-1;;;;;42815:13:0::2;:27:::0;42811:248:::2;;42863:12;42884:13:::0;;;:10:::2;:13;::::0;;;;;;42878:45;;-1:-1:-1;;;42878:45:0;;42917:4:::2;42878:45;::::0;::::2;598:51:1::0;-1:-1:-1;;;;;42884:13:0;;::::2;::::0;42878:30:::2;::::0;571:18:1;;42878:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42863:60:::0;-1:-1:-1;42946:11:0;;42942:102:::2;;42988:13;::::0;;;:10:::2;:13;::::0;;;;;;;42982:42;;-1:-1:-1;;;42982:42:0;;-1:-1:-1;;;;;38662:32:1;;;42982:42:0::2;::::0;::::2;38644:51:1::0;38711:18;;;38704:34;;;42988:13:0;;::::2;::::0;42982:29:::2;::::0;38617:18:1;;42982:42:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42942:102;42844:215;42811:248;42791:3;;42767:303;;42393:247:::0;42506:7;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;42526:43:::2;::::0;-1:-1:-1;;;42526:43:0;;-1:-1:-1;;;;;38662:32:1;;;42526:43:0::2;::::0;::::2;38644:51:1::0;38711:18;;;38704:34;;;42526:29:0;::::2;::::0;::::2;::::0;38617:18:1;;42526:43:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;42587:45:0::2;::::0;-1:-1:-1;;;42587:45:0;;42626:4:::2;42587:45;::::0;::::2;598:51:1::0;-1:-1:-1;;;;;42587:30:0;::::2;::::0;::::2;::::0;571:18:1;;42587:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42580:52;;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;12161:20:::1;42393:247:::0;;;;;:::o;19931:108::-;5369:13;:11;:13::i;:::-;-1:-1:-1;;;;;20000:24:0::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;20000:31:0::1;20027:4;20000:31;::::0;;19931:108::o;37608:101::-;5369:13;:11;:13::i;:::-;37682:11:::1;:19:::0;;-1:-1:-1;;;;;;37682:19:0::1;-1:-1:-1::0;;;;;37682:19:0;;;::::1;::::0;;;::::1;::::0;;37608:101::o;37715:114::-;5369:13;:11;:13::i;:::-;37786:9:::1;:35:::0;;-1:-1:-1;;;;;;37786:35:0::1;-1:-1:-1::0;;;;;37786:35:0;;;::::1;::::0;;;::::1;::::0;;37715:114::o;37835:117::-;5369:13;:11;:13::i;:::-;37910::::1;:34:::0;;-1:-1:-1;;;;;;37910:34:0::1;-1:-1:-1::0;;;;;37910:34:0;;;::::1;::::0;;;::::1;::::0;;37835:117::o;5648:166::-;5529:7;5556:6;-1:-1:-1;;;;;5556:6:0;;;;;775:10;5708:23;5704:103;;5755:40;;-1:-1:-1;;;5755:40:0;;775:10;5755:40;;;598:51:1;571:18;;5755:40:0;427:228:1;12197:315:0;11495:1;12326:7;;:18;12322:88;;12368:30;;-1:-1:-1;;;12368:30:0;;;;;;;;;;;12322:88;11495:1;12487:17;;12197:315::o;2944:132::-;2832:4;2856:7;;;3006:63;;;3042:15;;-1:-1:-1;;;3042:15:0;;;;;;;;;;;14050:671;-1:-1:-1;;;;;14140:19:0;;14136:48;;14168:16;;-1:-1:-1;;;14168:16:0;;;;;;;;;;;14136:48;14212:25;;-1:-1:-1;;;14212:25:0;;;;14207:39;;14050:671;:::o;14207:39::-;-1:-1:-1;;;;;14272:19:0;;:10;:19;14268:32;;14050:671;:::o;14268:32::-;14334:15;;-1:-1:-1;;;;;14334:15:0;14322:98;;14388:20;;-1:-1:-1;;;14388:20:0;;;;;;;;;;;14322:98;14480:15;;:53;;-1:-1:-1;;;14480:53:0;;-1:-1:-1;;;;;43940:32:1;;;14480:53:0;;;43922:51:1;14522:10:0;43989:18:1;;;43982:60;14442:15:0;;14480;;:34;;43895:18:1;;14480:53:0;;;;;;;;;;;;;;;;;;-1:-1:-1;14480:53:0;;;;;;;;-1:-1:-1;;14480:53:0;;;;;;;;;;;;:::i;:::-;;;14476:147;;;14584:6;-1:-1:-1;14476:147:0;14648:10;14643:71;;14682:20;;-1:-1:-1;;;14682:20:0;;;;;;;;;;;14643:71;14125:596;14050:671;:::o;36712:787::-;36811:9;36824:1;36811:14;36807:685;;36908:10;36895:9;:23;;36887:57;;;;-1:-1:-1;;;36887:57:0;;47603:2:1;36887:57:0;;;47585:21:1;47642:2;47622:18;;;47615:30;-1:-1:-1;;;47661:18:1;;;47654:51;47722:18;;36887:57:0;47401:345:1;36887:57:0;36712:787;;;:::o;36807:685::-;36979:1;36966:9;:14;;:32;;;;;36997:1;36984:9;:14;;36966:32;36962:530;;;37053:16;37072:13;37084:1;37072:9;:13;:::i;:::-;37100:19;37122:23;;;:10;:23;;;;;;37053:32;;-1:-1:-1;;;;;;37122:23:0;;37160:54;;;;-1:-1:-1;;;37160:54:0;;47953:2:1;37160:54:0;;;47935:21:1;47992:2;47972:18;;;47965:30;-1:-1:-1;;;48011:18:1;;;48004:46;48067:18;;37160:54:0;47751:340:1;37160:54:0;37243:17;37263:37;37279:7;37288:11;37263:15;:37::i;:::-;37323:72;;-1:-1:-1;;;37323:72:0;;37355:10;37323:72;;;48298:51:1;37375:4:0;48365:18:1;;;48358:60;48434:18;;;48427:34;;;37243:57:0;;-1:-1:-1;;;;;;37323:31:0;;;;;48271:18:1;;37323:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37315:106;;;;-1:-1:-1;;;37315:106:0;;48674:2:1;37315:106:0;;;48656:21:1;48713:2;48693:18;;;48686:30;-1:-1:-1;;;48732:18:1;;;48725:51;48793:18;;37315:106:0;48472:345:1;36962:530:0;37454:26;;-1:-1:-1;;;37454:26:0;;47953:2:1;37454:26:0;;;47935:21:1;47992:2;47972:18;;;47965:30;-1:-1:-1;;;48011:18:1;;;48004:46;48067:18;;37454:26:0;47751:340:1;24890:388:0;24992:6;24987:284;25008:8;:15;25004:1;:19;24987:284;;;25041:12;25056:8;25065:1;25056:11;;;;;;;;:::i;:::-;;;;;;;25041:26;;25095:3;25085:7;:13;25082:146;;;25169:1;25126:25;;;:16;:25;;;;;;;;:31;;;;;;;;;-1:-1:-1;;;;;25126:31:0;:45;25118:94;;;;-1:-1:-1;;;25118:94:0;;49024:2:1;25118:94:0;;;49006:21:1;49063:2;49043:18;;;49036:30;49102:34;49082:18;;;49075:62;-1:-1:-1;;;49153:18:1;;;49146:34;49197:19;;25118:94:0;48822:400:1;25118:94:0;-1:-1:-1;25254:3:0;;24987:284;;25290:730;25402:18;25423:21;25431:6;25439:4;25423:7;:21::i;:::-;25483:32;;;;;;;;-1:-1:-1;;;;;25483:32:0;;;;;;;;;;;;;;;;25402:42;;-1:-1:-1;25455:25:0;25536:230;25557:8;:15;25553:1;:19;25536:230;;;25590:12;25605:8;25614:1;25605:11;;;;;;;;:::i;:::-;;;;;;;25590:26;;25644:3;25634:7;:13;25631:92;;;25667:25;;;;:16;:25;;;;;;;;:31;;;;;;;;:40;;-1:-1:-1;;;;;;25667:40:0;-1:-1:-1;;;;;25667:40:0;;;;;25631:92;-1:-1:-1;25749:3:0;;25536:230;;;-1:-1:-1;25786:22:0;;;;:16;:22;;;;;:33;;25812:7;;25786:22;:33;;25812:7;;25786:33;:::i;:::-;;;;-1:-1:-1;;25830:22:0;;;;:16;:22;;;;;:27;;25856:1;;25830:22;:27;;25856:1;;25830:27;:::i;:::-;;;;-1:-1:-1;;;;;;;25868:23:0;;;;;;:15;:23;;;;;;;;25897:28;;;;;;;;;;;;;;;;25868:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25937:24;;;:16;:24;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;25937:37:0;;;;;;;25985:16;26004:8;;25985:9;;:16;;25995:5;;25985:16;:::i;:::-;;;;;;;;;;;;;;;;:27;;;;-1:-1:-1;;;;;;25985:27:0;-1:-1:-1;;;;;25985:27:0;;;;;;;;;;-1:-1:-1;25985:27:0;;;;;;;;;;;;;-1:-1:-1;;;;;;25290:730:0:o;24533:345::-;24655:7;;-1:-1:-1;;;;;24655:7:0;24647:30;24644:227;;24717:13;;;24728:1;24717:13;;;;;;;;24693:21;;24717:13;;;;;;;;;;-1:-1:-1;24717:13:0;24693:37;;24758:4;24745:7;24753:1;24745:10;;;;;;;;:::i;:::-;;;;;;:17;;;;;24790:7;24777;24785:1;24777:10;;;;;;;;:::i;:::-;;;;;;;;;;:20;24812:7;;:47;;-1:-1:-1;;;24812:47:0;;-1:-1:-1;;;;;24812:7:0;;;;:17;;:47;;24830:6;;24812:7;;24841;;24850:8;;24812:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24678:193;24533:345;;;;:::o;14741:359::-;-1:-1:-1;;;;;14828:30:0;;14824:59;;14867:16;;-1:-1:-1;;;14867:16:0;;;;;;;;;;;14824:59;14934:15;;;-1:-1:-1;;;;;14961:52:0;;;-1:-1:-1;;;;;;14961:52:0;;;;;;;15039:53;;14934:15;;;14961:52;14934:15;;15039:53;;14904:19;;15039:53;14813:287;14741:359;:::o;3686:120::-;2649:16;:14;:16::i;:::-;3755:5:::1;3745:15:::0;;-1:-1:-1;;3745:15:0::1;::::0;;3776:22:::1;775:10:::0;3785:12:::1;3776:22;::::0;-1:-1:-1;;;;;616:32:1;;;598:51;;586:2;571:18;3776:22:0::1;;;;;;;3686:120::o:0;9045:156::-;9135:13;9128:20;;-1:-1:-1;;;;;;9128:20:0;;;9159:34;9184:8;9159:24;:34::i;3427:118::-;2390:19;:17;:19::i;:::-;3487:7:::1;:14:::0;;-1:-1:-1;;3487:14:0::1;3497:4;3487:14;::::0;;3517:20:::1;3524:12;775:10:::0;;695:98;15401:167;15475:25;:35;;;;;-1:-1:-1;;;15475:35:0;-1:-1:-1;;;;15475:35:0;;;;;;15526:34;;;;;;15503:7;1213:14:1;1206:22;1188:41;;1176:2;1161:18;;1048:187;15526:34:0;;;;;;;;15401:167;:::o;26026:436::-;26094:29;26137:32;26172:24;26189:6;26172:16;:24::i;:::-;26137:59;;26207:14;26224:26;26240:9;26224:15;:26::i;:::-;26207:43;;26272:12;26286:10;26300:23;26313:9;26300:12;:23::i;:::-;26271:52;;;;26334:45;26353:9;26364:7;26373:5;26334:18;:45::i;:::-;26407:47;26425:6;26433:9;26444;26407:17;:47::i;3153:130::-;2832:4;2856:7;;;3212:64;;3249:15;;-1:-1:-1;;;3249:15:0;;;;;;;;;;;6796:191;6870:16;6889:6;;-1:-1:-1;;;;;6906:17:0;;;6889:6;6906:17;;;-1:-1:-1;;;;;;6906:17:0;;;;;6939:40;;6889:6;;;;;;;6906:17;;6889:6;;6939:40;;;6859:128;6796:191;:::o;26474:492::-;26593:16;;26556:4;;;26635:17;:15;:17::i;:::-;26620:32;-1:-1:-1;26663:14:0;;26702:220;26723:12;26719:1;:16;:39;;;;;26751:7;26739:9;:19;26719:39;26702:220;;;26781:36;26799:9;26809:1;26799:12;;;;;;;;:::i;:::-;;;;;;;:17;;;26781;:36::i;:::-;26777:102;;;26850:11;;;;;26777:102;26905:3;;26702:220;;;-1:-1:-1;26949:9:0;26474:492;-1:-1:-1;;;;26474:492:0:o;26978:903::-;27089:29;27157:7;27131:23;27240:9;-1:-1:-1;;;;;27213:37:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;27213:37:0;;;;;;;;;;;;;;;-1:-1:-1;27352:16:0;;27175:75;;-1:-1:-1;27271:16:0;;;;;27389:336;27410:12;27406:1;:16;:42;;;;;27439:9;27426:10;:22;27406:42;27389:336;;;27471:36;27489:9;27499:1;27489:12;;;;;;;;:::i;27471:36::-;27467:215;;;27543:78;27563:6;27571:9;27581:1;27571:12;;;;;;;;:::i;:::-;;;;;;;27585:5;27592:10;27604:16;27543:19;:78::i;:::-;27528:93;;;;:::i;:::-;;;27652:12;;;;;27467:215;27708:3;;27389:336;;;;27745:47;27761:6;27769:9;27780:11;27745:15;:47::i;:::-;27808:42;;;-1:-1:-1;;;;;19246:32:1;;19228:51;;19310:2;19295:18;;19288:34;;;19338:18;;;19331:34;;;27808:42:0;;19216:2:1;19201:18;27808:42:0;;;;;;;-1:-1:-1;27868:5:0;;26978:903;-1:-1:-1;;;;;;;26978:903:0:o;27893:551::-;28101:16;;28161:14;;;;;28067:4;28144:32;;;:16;:32;;;;;;;28067:4;;28101:16;28067:4;28144:32;28220:28;;;;28101:16;28220:28;:::i;:::-;28219:41;;;;:::i;:::-;28197:64;;28292:43;;;;;;;;28313:5;28292:43;;;;;;28320:9;:14;;;28292:43;;;28272:5;28278:10;28272:17;;;;;;;;:::i;:::-;;;;;;:63;;;;28356:43;28376:6;28384:9;:14;;;28356:19;:43::i;:::-;-1:-1:-1;28427:9:0;;27893:551;-1:-1:-1;;;;;;;27893:551:0:o;28779:343::-;28885:7;;-1:-1:-1;;;;;28885:7:0;28877:30;28874:241;;28947:13;;;28958:1;28947:13;;;;;;;;28923:21;;28947:13;;;;;;;;;;-1:-1:-1;28947:13:0;28923:37;;28988:9;28975:7;28983:1;28975:10;;;;;;;;:::i;:::-;;;;;;:22;;;;;29025:11;29012:7;29020:1;29012:10;;;;;;;;:::i;:::-;;;;;;;;;;:24;29051:7;;-1:-1:-1;;;;;29051:7:0;:17;29069:6;29077:1;29080:7;29051;29089:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29089:13:0;;29051:52;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28908:207;28779:343;;;:::o;28456:311::-;-1:-1:-1;;;;;28536:18:0;;;;;;:10;:18;;;;;;;;:28;;;;;;;;:35;;-1:-1:-1;;28536:35:0;28567:4;28536:35;;;28603:25;28547:6;28555:8;28603:7;:25::i;:::-;28582:46;;28656:9;28666:5;28656:16;;;;;;:::i;:::-;;;;;;;;;;;;;28639:7;28647:5;28639:14;;;;;;:::i;:::-;;;;;;;;;;;;;;:33;;;;-1:-1:-1;;;;;;28639:33:0;-1:-1:-1;;;;;28639:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;28690:9;;:16;;28700:5;;28690:16;:::i;:::-;;;;;;;;;;;;;;28683:23;;-1:-1:-1;;;;;;28683:23:0;;;28690:16;28683:23;;;;;;;;;;;28717:42;28742:6;28750:8;-1:-1:-1;;;;;29753:23:0;;29715:35;29753:23;;;:15;:23;;;;;29798:18;;29753:23;;29798:18;;29854:108;29875:3;29871:1;:7;29854:108;;;29927:4;29904:11;29916:1;29904:14;;;;;;;;:::i;:::-;;;;;;;;;;;:19;;;:27;29900:51;;29942:1;29934:9;;29944:5;;29900:51;29880:3;;29854:108;;;;29985:3;29976:5;:12;29972:27;;29991:7;;;29635:486;;:::o;29972:27::-;30023:5;30009:77;30034:7;30040:1;30034:3;:7;:::i;:::-;30030:1;:11;30009:77;;;30066:11;30078:5;:1;30082;30078:5;:::i;:::-;30066:18;;;;;;;;:::i;:::-;;;;;;;;;;;30049:11;30061:1;30049:14;;;;;;;;:::i;:::-;;;;;;;;;:35;;:14;;;;;:35;;;;;;;;;;;;30043:3;30009:77;;;;30096:11;:17;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;30096:17:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29635:486:0:o;196:226:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;369:23:1;;196:226;-1:-1:-1;196:226:1:o;660:131::-;-1:-1:-1;;;;;735:31:1;;725:42;;715:70;;781:1;778;771:12;796:247;855:6;908:2;896:9;887:7;883:23;879:32;876:52;;;924:1;921;914:12;876:52;963:9;950:23;982:31;1007:5;982:31;:::i;1240:346::-;1308:6;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:52;;;1385:1;1382;1375:12;1337:52;-1:-1:-1;;1430:23:1;;;1550:2;1535:18;;;1522:32;;-1:-1:-1;1240:346:1:o;1591:815::-;1845:2;1857:21;;;1927:13;;1830:18;;;1949:22;;;1797:4;;2028:15;;;2002:2;1987:18;;;1797:4;2071:309;2085:6;2082:1;2079:13;2071:309;;;2150:6;2144:13;2188:2;2182:9;2177:3;2170:22;2240:2;2236;2232:11;2226:18;2221:2;2216:3;2212:12;2205:40;2293:2;2289;2285:11;2279:18;2274:2;2269:3;2265:12;2258:40;;2327:4;2322:3;2318:14;2311:21;;2367:2;2359:6;2355:15;2345:25;;2107:1;2104;2100:9;2095:14;;2071:309;;2411:367;2474:8;2484:6;2538:3;2531:4;2523:6;2519:17;2515:27;2505:55;;2556:1;2553;2546:12;2505:55;-1:-1:-1;2579:20:1;;-1:-1:-1;;;;;2611:30:1;;2608:50;;;2654:1;2651;2644:12;2608:50;2691:4;2683:6;2679:17;2667:29;;2751:3;2744:4;2734:6;2731:1;2727:14;2719:6;2715:27;2711:38;2708:47;2705:67;;;2768:1;2765;2758:12;2783:1477;2968:6;2976;2984;2992;3000;3008;3016;3024;3032;3085:3;3073:9;3064:7;3060:23;3056:33;3053:53;;;3102:1;3099;3092:12;3053:53;3147:23;;;-1:-1:-1;3246:2:1;3231:18;;3218:32;3259:33;3218:32;3259:33;:::i;:::-;3311:7;-1:-1:-1;3369:2:1;3354:18;;3341:32;-1:-1:-1;;;;;3385:30:1;;3382:50;;;3428:1;3425;3418:12;3382:50;3467:70;3529:7;3520:6;3509:9;3505:22;3467:70;:::i;:::-;3556:8;;-1:-1:-1;3441:96:1;-1:-1:-1;;3644:2:1;3629:18;;3616:32;-1:-1:-1;;;;;3660:32:1;;3657:52;;;3705:1;3702;3695:12;3657:52;3744:72;3808:7;3797:8;3786:9;3782:24;3744:72;:::i;:::-;3835:8;;-1:-1:-1;3718:98:1;-1:-1:-1;;3923:3:1;3908:19;;3895:33;-1:-1:-1;;;;;3940:32:1;;3937:52;;;3985:1;3982;3975:12;3937:52;4024:72;4088:7;4077:8;4066:9;4062:24;4024:72;:::i;:::-;2783:1477;;;;-1:-1:-1;2783:1477:1;;;;;;;;4115:8;4223:3;4208:19;4195:33;;2783:1477;-1:-1:-1;;;;2783:1477:1:o;4265:437::-;4351:6;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4468:9;4455:23;-1:-1:-1;;;;;4493:6:1;4490:30;4487:50;;;4533:1;4530;4523:12;4487:50;4572:70;4634:7;4625:6;4614:9;4610:22;4572:70;:::i;:::-;4661:8;;4546:96;;-1:-1:-1;4265:437:1;-1:-1:-1;;;;4265:437:1:o;4960:289::-;5002:3;5040:5;5034:12;5067:6;5062:3;5055:19;5123:6;5116:4;5109:5;5105:16;5098:4;5093:3;5089:14;5083:47;5175:1;5168:4;5159:6;5154:3;5150:16;5146:27;5139:38;5238:4;5231:2;5227:7;5222:2;5214:6;5210:15;5206:29;5201:3;5197:39;5193:50;5186:57;;;4960:289;;;;:::o;5254:1184::-;5466:4;5514:2;5503:9;5499:18;5544:2;5533:9;5526:21;5567:6;5602;5596:13;5633:6;5625;5618:22;5671:2;5660:9;5656:18;5649:25;;5733:2;5723:6;5720:1;5716:14;5705:9;5701:30;5697:39;5683:53;;5771:2;5763:6;5759:15;5792:1;5802:607;5816:6;5813:1;5810:13;5802:607;;;5881:22;;;-1:-1:-1;;5877:36:1;5865:49;;5937:13;;5982:9;;-1:-1:-1;;;;;5978:35:1;5963:51;;6061:2;6053:11;;;6047:18;6102:4;6085:15;;;6078:29;;;6047:18;6134:50;;6166:17;;6047:18;6134:50;:::i;:::-;6235:2;6227:11;;;6221:18;6204:15;;;6197:43;6293:4;6285:13;;;6279:20;6260:17;;;;6253:47;;;;-1:-1:-1;6364:2:1;6387:12;;;;6352:15;;;;;5838:1;5831:9;5802:607;;;-1:-1:-1;6426:6:1;;5254:1184;-1:-1:-1;;;;;;5254:1184:1:o;6443:367::-;6511:6;6519;6572:2;6560:9;6551:7;6547:23;6543:32;6540:52;;;6588:1;6585;6578:12;6540:52;6627:9;6614:23;6646:31;6671:5;6646:31;:::i;:::-;6696:5;6774:2;6759:18;;;;6746:32;;-1:-1:-1;;;6443:367:1:o;6815:127::-;6876:10;6871:3;6867:20;6864:1;6857:31;6907:4;6904:1;6897:15;6931:4;6928:1;6921:15;6947:253;7019:2;7013:9;7061:4;7049:17;;-1:-1:-1;;;;;7081:34:1;;7117:22;;;7078:62;7075:88;;;7143:18;;:::i;:::-;7179:2;7172:22;6947:253;:::o;7205:257::-;7277:4;7271:11;;;7309:17;;-1:-1:-1;;;;;7341:34:1;;7377:22;;;7338:62;7335:88;;;7403:18;;:::i;7467:275::-;7538:2;7532:9;7603:2;7584:13;;-1:-1:-1;;7580:27:1;7568:40;;-1:-1:-1;;;;;7623:34:1;;7659:22;;;7620:62;7617:88;;;7685:18;;:::i;:::-;7721:2;7714:22;7467:275;;-1:-1:-1;7467:275:1:o;7747:183::-;7807:4;-1:-1:-1;;;;;7832:6:1;7829:30;7826:56;;;7862:18;;:::i;:::-;-1:-1:-1;7907:1:1;7903:14;7919:4;7899:25;;7747:183::o;7935:1072::-;8028:6;8036;8089:2;8077:9;8068:7;8064:23;8060:32;8057:52;;;8105:1;8102;8095:12;8057:52;8145:9;8132:23;-1:-1:-1;;;;;8170:6:1;8167:30;8164:50;;;8210:1;8207;8200:12;8164:50;8233:22;;8286:4;8278:13;;8274:27;-1:-1:-1;8264:55:1;;8315:1;8312;8305:12;8264:55;8355:2;8342:16;8378:64;8394:47;8434:6;8394:47;:::i;:::-;8378:64;:::i;:::-;8464:3;8488:6;8483:3;8476:19;8520:4;8515:3;8511:14;8504:21;;8577:4;8567:6;8564:1;8560:14;8556:2;8552:23;8548:34;8534:48;;8605:7;8597:6;8594:19;8591:39;;;8626:1;8623;8616:12;8591:39;8658:4;8654:2;8650:13;8639:24;;8672:200;8688:6;8683:3;8680:15;8672:200;;;8780:17;;8810:18;;8857:4;8705:14;;;;8848;;;;8672:200;;;8891:5;8969:4;8954:20;;;;8941:34;;-1:-1:-1;;;;;;7935:1072:1:o;9012:420::-;9065:3;9103:5;9097:12;9130:6;9125:3;9118:19;9162:4;9157:3;9153:14;9146:21;;9201:4;9194:5;9190:16;9224:1;9234:173;9248:6;9245:1;9242:13;9234:173;;;9309:13;;9297:26;;9352:4;9343:14;;;;9380:17;;;;9270:1;9263:9;9234:173;;;-1:-1:-1;9423:3:1;;9012:420;-1:-1:-1;;;;9012:420:1:o;9437:261::-;9616:2;9605:9;9598:21;9579:4;9636:56;9688:2;9677:9;9673:18;9665:6;9636:56;:::i;9703:163::-;9770:20;;9830:10;9819:22;;9809:33;;9799:61;;9856:1;9853;9846:12;9799:61;9703:163;;;:::o;9871:319::-;9938:6;9946;9999:2;9987:9;9978:7;9974:23;9970:32;9967:52;;;10015:1;10012;10005:12;9967:52;10054:9;10041:23;10073:31;10098:5;10073:31;:::i;:::-;10123:5;-1:-1:-1;10147:37:1;10180:2;10165:18;;10147:37;:::i;:::-;10137:47;;9871:319;;;;;:::o;10796:1099::-;10954:6;10962;10970;10978;10986;10994;11047:2;11035:9;11026:7;11022:23;11018:32;11015:52;;;11063:1;11060;11053:12;11015:52;11103:9;11090:23;-1:-1:-1;;;;;11128:6:1;11125:30;11122:50;;;11168:1;11165;11158:12;11122:50;11207:70;11269:7;11260:6;11249:9;11245:22;11207:70;:::i;:::-;11296:8;;-1:-1:-1;11181:96:1;-1:-1:-1;;11384:2:1;11369:18;;11356:32;-1:-1:-1;;;;;11400:32:1;;11397:52;;;11445:1;11442;11435:12;11397:52;11484:72;11548:7;11537:8;11526:9;11522:24;11484:72;:::i;:::-;11575:8;;-1:-1:-1;11458:98:1;-1:-1:-1;;11663:2:1;11648:18;;11635:32;-1:-1:-1;;;;;11679:32:1;;11676:52;;;11724:1;11721;11714:12;11676:52;11763:72;11827:7;11816:8;11805:9;11801:24;11763:72;:::i;:::-;10796:1099;;;;-1:-1:-1;10796:1099:1;;-1:-1:-1;10796:1099:1;;11854:8;;10796:1099;-1:-1:-1;;;10796:1099:1:o;11900:367::-;11968:6;11976;12029:2;12017:9;12008:7;12004:23;12000:32;11997:52;;;12045:1;12042;12035:12;11997:52;12090:23;;;-1:-1:-1;12189:2:1;12174:18;;12161:32;12202:33;12161:32;12202:33;:::i;:::-;12254:7;12244:17;;;11900:367;;;;;:::o;12494:944::-;12681:2;12670:9;12663:21;12726:6;12720:13;12715:2;12704:9;12700:18;12693:41;12788:2;12780:6;12776:15;12770:22;12765:2;12754:9;12750:18;12743:50;12644:4;12840:2;12832:6;12828:15;12822:22;12880:4;12875:2;12864:9;12860:18;12853:32;12908:63;12966:3;12955:9;12951:19;12937:12;12908:63;:::i;:::-;12894:77;;13026:2;13018:6;13014:15;13008:22;13002:3;12991:9;12987:19;12980:51;13080:3;13072:6;13068:16;13062:23;13154:2;13150:7;13138:9;13130:6;13126:22;13122:36;13116:3;13105:9;13101:19;13094:65;13182:52;13227:6;13211:14;13182:52;:::i;:::-;13168:66;;;13283:3;13275:6;13271:16;13265:23;13358:2;13354:7;13342:9;13334:6;13330:22;13326:36;13319:4;13308:9;13304:20;13297:66;13380:52;13425:6;13409:14;13380:52;:::i;:::-;13372:60;12494:944;-1:-1:-1;;;;;12494:944:1:o;13443:186::-;13491:4;-1:-1:-1;;;;;13516:6:1;13513:30;13510:56;;;13546:18;;:::i;:::-;-1:-1:-1;13612:2:1;13591:15;-1:-1:-1;;13587:29:1;13618:4;13583:40;;13443:186::o;13634:695::-;13702:6;13755:2;13743:9;13734:7;13730:23;13726:32;13723:52;;;13771:1;13768;13761:12;13723:52;13811:9;13798:23;-1:-1:-1;;;;;13836:6:1;13833:30;13830:50;;;13876:1;13873;13866:12;13830:50;13899:22;;13952:4;13944:13;;13940:27;-1:-1:-1;13930:55:1;;13981:1;13978;13971:12;13930:55;14021:2;14008:16;14046:52;14062:35;14090:6;14062:35;:::i;14046:52::-;14121:6;14114:5;14107:21;14169:7;14164:2;14155:6;14151:2;14147:15;14143:24;14140:37;14137:57;;;14190:1;14187;14180:12;14137:57;14245:6;14240:2;14236;14232:11;14227:2;14220:5;14216:14;14203:49;14297:1;14272:18;;;14292:2;14268:27;14261:38;;;;14276:5;13634:695;-1:-1:-1;;;;13634:695:1:o;14746:218::-;14893:2;14882:9;14875:21;14856:4;14913:45;14954:2;14943:9;14939:18;14931:6;14913:45;:::i;14969:118::-;15055:5;15048:13;15041:21;15034:5;15031:32;15021:60;;15077:1;15074;15067:12;15092:241;15148:6;15201:2;15189:9;15180:7;15176:23;15172:32;15169:52;;;15217:1;15214;15207:12;15169:52;15256:9;15243:23;15275:28;15297:5;15275:28;:::i;15338:1356::-;15514:6;15522;15530;15538;15546;15554;15562;15570;15623:3;15611:9;15602:7;15598:23;15594:33;15591:53;;;15640:1;15637;15630:12;15591:53;15679:9;15666:23;15698:31;15723:5;15698:31;:::i;:::-;15748:5;-1:-1:-1;15826:2:1;15811:18;;15798:32;;-1:-1:-1;15907:2:1;15892:18;;15879:32;-1:-1:-1;;;;;15923:30:1;;15920:50;;;15966:1;15963;15956:12;15920:50;16005:70;16067:7;16058:6;16047:9;16043:22;16005:70;:::i;:::-;16094:8;;-1:-1:-1;15979:96:1;-1:-1:-1;;16182:2:1;16167:18;;16154:32;-1:-1:-1;;;;;16198:32:1;;16195:52;;;16243:1;16240;16233:12;16195:52;16282:72;16346:7;16335:8;16324:9;16320:24;16282:72;:::i;:::-;16373:8;;-1:-1:-1;16256:98:1;-1:-1:-1;;16461:3:1;16446:19;;16433:33;-1:-1:-1;;;;;16478:32:1;;16475:52;;;16523:1;16520;16513:12;16475:52;16562:72;16626:7;16615:8;16604:9;16600:24;16562:72;:::i;:::-;15338:1356;;;;-1:-1:-1;15338:1356:1;;-1:-1:-1;15338:1356:1;;;;;;16653:8;-1:-1:-1;;;15338:1356:1:o;16699:637::-;16889:2;16901:21;;;16971:13;;16874:18;;;16993:22;;;16841:4;;17072:15;;;17046:2;17031:18;;;16841:4;17115:195;17129:6;17126:1;17123:13;17115:195;;;17194:13;;-1:-1:-1;;;;;17190:39:1;17178:52;;17259:2;17285:15;;;;17250:12;;;;17226:1;17144:9;17115:195;;17341:756;17591:2;17603:21;;;17673:13;;17576:18;;;17695:22;;;17543:4;;17774:15;;;17748:2;17733:18;;;17543:4;17817:254;17831:6;17828:1;17825:13;17817:254;;;17890:13;;17928:9;;17916:22;;17986:2;17978:11;;;17972:18;17958:12;;;17951:40;18046:15;;;;18020:2;18011:12;;;;17853:1;17846:9;17817:254;;18330:388;18398:6;18406;18459:2;18447:9;18438:7;18434:23;18430:32;18427:52;;;18475:1;18472;18465:12;18427:52;18514:9;18501:23;18533:31;18558:5;18533:31;:::i;:::-;18583:5;-1:-1:-1;18640:2:1;18625:18;;18612:32;18653:33;18612:32;18653:33;:::i;18723:298::-;18790:6;18798;18851:2;18839:9;18830:7;18826:23;18822:32;18819:52;;;18867:1;18864;18857:12;18819:52;18890:28;18908:9;18890:28;:::i;19376:882::-;19507:6;19515;19523;19531;19539;19592:2;19580:9;19571:7;19567:23;19563:32;19560:52;;;19608:1;19605;19598:12;19560:52;19653:23;;;-1:-1:-1;19751:2:1;19736:18;;19723:32;-1:-1:-1;;;;;19767:30:1;;19764:50;;;19810:1;19807;19800:12;19764:50;19849:70;19911:7;19902:6;19891:9;19887:22;19849:70;:::i;:::-;19938:8;;-1:-1:-1;19823:96:1;-1:-1:-1;;20026:2:1;20011:18;;19998:32;-1:-1:-1;;;;;20042:32:1;;20039:52;;;20087:1;20084;20077:12;20039:52;20126:72;20190:7;20179:8;20168:9;20164:24;20126:72;:::i;:::-;19376:882;;;;-1:-1:-1;19376:882:1;;-1:-1:-1;20217:8:1;;20100:98;19376:882;-1:-1:-1;;;19376:882:1:o;22230:508::-;22307:6;22315;22323;22376:2;22364:9;22355:7;22351:23;22347:32;22344:52;;;22392:1;22389;22382:12;22344:52;22431:9;22418:23;22450:31;22475:5;22450:31;:::i;:::-;22500:5;-1:-1:-1;22557:2:1;22542:18;;22529:32;22570:33;22529:32;22570:33;:::i;:::-;22230:508;;22622:7;;-1:-1:-1;;;22702:2:1;22687:18;;;;22674:32;;22230:508::o;23870:127::-;23931:10;23926:3;23922:20;23919:1;23912:31;23962:4;23959:1;23952:15;23986:4;23983:1;23976:15;24002:128;24069:9;;;24090:11;;;24087:37;;;24104:18;;:::i;24135:127::-;24196:10;24191:3;24187:20;24184:1;24177:31;24227:4;24224:1;24217:15;24251:4;24248:1;24241:15;25661:343;25740:6;25748;25801:2;25789:9;25780:7;25776:23;25772:32;25769:52;;;25817:1;25814;25807:12;25769:52;-1:-1:-1;;25862:16:1;;25968:2;25953:18;;;25947:25;25862:16;;25947:25;;-1:-1:-1;25661:343:1:o;26009:301::-;26138:3;26176:6;26170:13;26222:6;26215:4;26207:6;26203:17;26198:3;26192:37;26284:1;26248:16;;26273:13;;;-1:-1:-1;26248:16:1;26009:301;-1:-1:-1;26009:301:1:o;26666:315::-;26758:19;;;26740:3;-1:-1:-1;;;;;26789:31:1;;26786:51;;;26833:1;26830;26823:12;26786:51;26869:6;26866:1;26862:14;26921:8;26914:5;26907:4;26902:3;26898:14;26885:45;26950:18;;;;26970:4;26946:29;;26666:315;-1:-1:-1;;;26666:315:1:o;26986:902::-;27426:1;27422;27417:3;27413:11;27409:19;27401:6;27397:32;27386:9;27379:51;27466:6;27461:2;27450:9;27446:18;27439:34;27509:3;27504:2;27493:9;27489:18;27482:31;27360:4;27536:57;27588:3;27577:9;27573:19;27565:6;27536:57;:::i;:::-;27641:9;27633:6;27629:22;27624:2;27613:9;27609:18;27602:50;27675:65;27733:6;27725;27717;27675:65;:::i;:::-;27661:79;;27789:9;27781:6;27777:22;27771:3;27760:9;27756:19;27749:51;27817:65;27875:6;27867;27859;27817:65;:::i;:::-;27809:73;26986:902;-1:-1:-1;;;;;;;;;;26986:902:1:o;27893:230::-;27963:6;28016:2;28004:9;27995:7;27991:23;27987:32;27984:52;;;28032:1;28029;28022:12;27984:52;-1:-1:-1;28077:16:1;;27893:230;-1:-1:-1;27893:230:1:o;28837:292::-;29026:2;29015:9;29008:21;28989:4;29046:77;29119:2;29108:9;29104:18;29096:6;29088;29046:77;:::i;29134:484::-;29188:5;29241:3;29234:4;29226:6;29222:17;29218:27;29208:55;;29259:1;29256;29249:12;29208:55;29292:6;29286:13;29323:52;29339:35;29367:6;29339:35;:::i;29323:52::-;29400:6;29391:7;29384:23;29454:3;29447:4;29438:6;29430;29426:19;29422:30;29419:39;29416:59;;;29471:1;29468;29461:12;29416:59;29529:6;29522:4;29514:6;29510:17;29503:4;29494:7;29490:18;29484:52;29585:1;29556:20;;;29578:4;29552:31;29545:42;;;;29560:7;29134:484;-1:-1:-1;;;29134:484:1:o;29623:1754::-;29753:6;29806:2;29794:9;29785:7;29781:23;29777:32;29774:52;;;29822:1;29819;29812:12;29774:52;29855:9;29849:16;-1:-1:-1;;;;;29880:6:1;29877:30;29874:50;;;29920:1;29917;29910:12;29874:50;29943:22;;29996:4;29988:13;;29984:27;-1:-1:-1;29974:55:1;;30025:1;30022;30015:12;29974:55;30058:2;30052:9;30081:64;30097:47;30137:6;30097:47;:::i;30081:64::-;30167:3;30191:6;30186:3;30179:19;30223:2;30218:3;30214:12;30207:19;;30278:2;30268:6;30265:1;30261:14;30257:2;30253:23;30249:32;30235:46;;30304:7;30296:6;30293:19;30290:39;;;30325:1;30322;30315:12;30290:39;30357:2;30353;30349:11;30369:978;30385:6;30380:3;30377:15;30369:978;;;30464:3;30458:10;-1:-1:-1;;;;;30487:11:1;30484:35;30481:55;;;30532:1;30529;30522:12;30481:55;30559:20;;30631:4;30603:16;;;-1:-1:-1;;30599:30:1;30595:41;30592:61;;;30649:1;30646;30639:12;30592:61;30679:22;;:::i;:::-;30743:2;30739;30735:11;30729:18;30760:33;30785:7;30760:33;:::i;:::-;30806:22;;30871:2;30863:11;;30857:18;-1:-1:-1;;;;;30891:32:1;;30888:52;;;30936:1;30933;30926:12;30888:52;30976:65;31033:7;31028:2;31017:8;31013:2;31009:17;31005:26;30976:65;:::i;:::-;30971:2;30960:14;;;30953:89;;;;31109:2;31101:11;;;31095:18;31144:2;31133:14;;31126:31;31224:4;31216:13;;;31210:20;31250:14;;;31243:31;;;;-1:-1:-1;31287:18:1;;31325:12;;;;30402;30369:978;;31382:135;31421:3;31442:17;;;31439:43;;31462:18;;:::i;:::-;-1:-1:-1;31509:1:1;31498:13;;31382:135::o;31816:789::-;31912:6;31972:2;31960:9;31951:7;31947:23;31943:32;31987:2;31984:22;;;32002:1;31999;31992:12;31984:22;-1:-1:-1;32071:2:1;32065:9;32113:2;32101:15;;-1:-1:-1;;;;;32131:34:1;;32167:22;;;32128:62;32125:88;;;32193:18;;:::i;:::-;32229:2;32222:22;32266:16;;32291:31;32266:16;32291:31;:::i;:::-;32331:21;;32418:2;32403:18;;;32397:25;32438:15;;;32431:32;32529:2;32514:18;;;32508:25;32549:15;;;32542:32;;;;-1:-1:-1;32338:6:1;31816:789;-1:-1:-1;31816:789:1:o;32610:762::-;32975:2;32964:9;32957:21;32938:4;33001:77;33074:2;33063:9;33059:18;33051:6;33043;33001:77;:::i;:::-;33126:9;33118:6;33114:22;33109:2;33098:9;33094:18;33087:50;33160:65;33218:6;33210;33202;33160:65;:::i;:::-;33146:79;;33273:9;33265:6;33261:22;33256:2;33245:9;33241:18;33234:50;33301:65;33359:6;33351;33343;33301:65;:::i;33377:217::-;33417:1;33443;33433:132;;33487:10;33482:3;33478:20;33475:1;33468:31;33522:4;33519:1;33512:15;33550:4;33547:1;33540:15;33433:132;-1:-1:-1;33579:9:1;;33377:217::o;33949:273::-;34017:6;34070:2;34058:9;34049:7;34045:23;34041:32;34038:52;;;34086:1;34083;34076:12;34038:52;34118:9;34112:16;34168:4;34161:5;34157:16;34150:5;34147:27;34137:55;;34188:1;34185;34178:12;34227:168;34300:9;;;34331;;34348:15;;;34342:22;;34328:37;34318:71;;34369:18;;:::i;34400:375::-;34488:1;34506:5;34520:249;34541:1;34531:8;34528:15;34520:249;;;34591:4;34586:3;34582:14;34576:4;34573:24;34570:50;;;34600:18;;:::i;:::-;34650:1;34640:8;34636:16;34633:49;;;34664:16;;;;34633:49;34747:1;34743:16;;;;;34703:15;;34520:249;;;34400:375;;;;;;:::o;34780:902::-;34829:5;34859:8;34849:80;;-1:-1:-1;34900:1:1;34914:5;;34849:80;34948:4;34938:76;;-1:-1:-1;34985:1:1;34999:5;;34938:76;35030:4;35048:1;35043:59;;;;35116:1;35111:174;;;;35023:262;;35043:59;35073:1;35064:10;;35087:5;;;35111:174;35148:3;35138:8;35135:17;35132:43;;;35155:18;;:::i;:::-;-1:-1:-1;;35211:1:1;35197:16;;35270:5;;35023:262;;35369:2;35359:8;35356:16;35350:3;35344:4;35341:13;35337:36;35331:2;35321:8;35318:16;35313:2;35307:4;35304:12;35300:35;35297:77;35294:203;;;-1:-1:-1;35406:19:1;;;35482:5;;35294:203;35529:42;-1:-1:-1;;35554:8:1;35548:4;35529:42;:::i;:::-;35607:6;35603:1;35599:6;35595:19;35586:7;35583:32;35580:58;;;35618:18;;:::i;:::-;35656:20;;34780:902;-1:-1:-1;;;34780:902:1:o;35687:131::-;35747:5;35776:36;35803:8;35797:4;35776:36;:::i;35823:720::-;35888:5;35941:3;35934:4;35926:6;35922:17;35918:27;35908:55;;35959:1;35956;35949:12;35908:55;35992:6;35986:13;36019:64;36035:47;36075:6;36035:47;:::i;36019:64::-;36107:3;36131:6;36126:3;36119:19;36163:4;36158:3;36154:14;36147:21;;36224:4;36214:6;36211:1;36207:14;36199:6;36195:27;36191:38;36177:52;;36252:3;36244:6;36241:15;36238:35;;;36269:1;36266;36259:12;36238:35;36305:4;36297:6;36293:17;36319:193;36335:6;36330:3;36327:15;36319:193;;;36427:10;;36450:18;;36497:4;36488:14;;;;36352;36319:193;;;-1:-1:-1;36530:7:1;35823:720;-1:-1:-1;;;;;35823:720:1:o;36548:727::-;36644:6;36697:2;36685:9;36676:7;36672:23;36668:32;36665:52;;;36713:1;36710;36703:12;36665:52;36746:9;36740:16;-1:-1:-1;;;;;36771:6:1;36768:30;36765:50;;;36811:1;36808;36801:12;36765:50;36834:22;;36890:4;36872:16;;;36868:27;36865:47;;;36908:1;36905;36898:12;36865:47;36934:22;;:::i;:::-;37001:9;;37019:22;;37080:2;37072:11;;37066:18;-1:-1:-1;;;;;37096:32:1;;37093:52;;;37141:1;37138;37131:12;37093:52;37177:67;37236:7;37225:8;37221:2;37217:17;37177:67;:::i;:::-;37172:2;37161:14;;37154:91;-1:-1:-1;37165:5:1;36548:727;-1:-1:-1;;;;36548:727:1:o;37280:363::-;37375:6;37428:2;37416:9;37407:7;37403:23;37399:32;37396:52;;;37444:1;37441;37434:12;37396:52;37477:9;37471:16;-1:-1:-1;;;;;37502:6:1;37499:30;37496:50;;;37542:1;37539;37532:12;37496:50;37565:72;37629:7;37620:6;37609:9;37605:22;37565:72;:::i;37648:237::-;37720:9;;;37687:7;37745:9;;-1:-1:-1;;;37756:18:1;;37741:34;37738:60;;;37778:18;;:::i;:::-;37851:1;37842:7;37837:16;37834:1;37831:23;37827:1;37820:9;37817:38;37807:72;;37859:18;;:::i;37890:216::-;37954:9;;;37982:11;;;37929:3;38012:9;;38040:10;;38036:19;;38065:10;;38057:19;;38033:44;38030:70;;;38080:18;;:::i;:::-;38030:70;;37890:216;;;;:::o;38749:245::-;38816:6;38869:2;38857:9;38848:7;38844:23;38840:32;38837:52;;;38885:1;38882;38875:12;38837:52;38917:9;38911:16;38936:28;38958:5;38936:28;:::i;39937:933::-;40387:1;40383;40378:3;40374:11;40370:19;40362:6;40358:32;40347:9;40340:51;40427:6;40422:2;40411:9;40407:18;40400:34;40470:3;40465:2;40454:9;40450:18;40443:31;40321:4;40497:78;40570:3;40559:9;40555:19;40547:6;40539;40497:78;:::i;:::-;40623:9;40615:6;40611:22;40606:2;40595:9;40591:18;40584:50;40657:65;40715:6;40707;40699;40657:65;:::i;:::-;40643:79;;40771:9;40763:6;40759:22;40753:3;40742:9;40738:19;40731:51;40799:65;40857:6;40849;40841;40799:65;:::i;:::-;40791:73;39937:933;-1:-1:-1;;;;;;;;;;;39937:933:1:o;41226:1156::-;41367:6;41375;41383;41391;41399;41407;41415;41468:3;41456:9;41447:7;41443:23;41439:33;41436:53;;;41485:1;41482;41475:12;41436:53;41517:9;41511:16;41536:31;41561:5;41536:31;:::i;:::-;41635:2;41620:18;;41614:25;41586:5;;-1:-1:-1;;;;;;41651:30:1;;41648:50;;;41694:1;41691;41684:12;41648:50;41717:61;41770:7;41761:6;41750:9;41746:22;41717:61;:::i;:::-;41707:71;;;41824:2;41813:9;41809:18;41803:25;-1:-1:-1;;;;;41843:8:1;41840:32;41837:52;;;41885:1;41882;41875:12;41837:52;41908:63;41963:7;41952:8;41941:9;41937:24;41908:63;:::i;:::-;42037:2;42022:18;;42016:25;42133:3;42118:19;;42112:26;42230:3;42215:19;;42209:26;42306:3;42291:19;;42285:26;41898:73;;-1:-1:-1;42016:25:1;;-1:-1:-1;42112:26:1;-1:-1:-1;42209:26:1;-1:-1:-1;42285:26:1;-1:-1:-1;42320:30:1;42285:26;42320:30;:::i;:::-;42369:7;42359:17;;;41226:1156;;;;;;;;;;:::o;42387:1226::-;42512:6;42565:2;42553:9;42544:7;42540:23;42536:32;42533:52;;;42581:1;42578;42571:12;42533:52;42614:9;42608:16;-1:-1:-1;;;;;42639:6:1;42636:30;42633:50;;;42679:1;42676;42669:12;42633:50;42702:22;;42755:4;42747:13;;42743:27;-1:-1:-1;42733:55:1;;42784:1;42781;42774:12;42733:55;42817:2;42811:9;42840:64;42856:47;42896:6;42856:47;:::i;42840:64::-;42926:3;42950:6;42945:3;42938:19;42982:2;42977:3;42973:12;42966:19;;43037:2;43027:6;43024:1;43020:14;43016:2;43012:23;43008:32;42994:46;;43063:7;43055:6;43052:19;43049:39;;;43084:1;43081;43074:12;43049:39;43116:2;43112;43108:11;43097:22;;43128:455;43144:6;43139:3;43136:15;43128:455;;;43226:4;43220:3;43211:7;43207:17;43203:28;43200:48;;;43244:1;43241;43234:12;43200:48;43274:22;;:::i;:::-;43349:10;;43372:22;;43462:2;43453:12;;;43447:19;43486:14;;;43479:31;43523:18;;;43170:4;43161:14;;;;43561:12;;;;;43128:455;;;43602:5;42387:1226;-1:-1:-1;;;;;;42387:1226:1:o;43618:125::-;43683:9;;;43704:10;;;43701:36;;;43717:18;;:::i;45445:200::-;45511:9;;;45484:4;45539:9;;45567:10;;45579:12;;;45563:29;45602:12;;;45594:21;;45560:56;45557:82;;;45619:18;;:::i;45650:136::-;45685:3;-1:-1:-1;;;45706:22:1;;45703:48;;45731:18;;:::i;:::-;-1:-1:-1;45771:1:1;45767:13;;45650:136::o;45791:261::-;45861:3;-1:-1:-1;;;;;45882:31:1;;45879:51;;;45926:1;45923;45916:12;45879:51;45962:6;45959:1;45955:14;46003:8;45996:5;45991:3;45978:34;46028:18;;;;;45791:261;-1:-1:-1;;;45791:261:1:o;46057:468::-;46374:6;46369:3;46362:19;46344:3;46397:122;46451:67;46514:2;46509:3;46505:12;46497:6;46489;46451:67;:::i;:::-;46443:6;46435;46397:122;:::i;46530:866::-;-1:-1:-1;;;;;46834:32:1;;46816:51;;46804:2;46898;46883:18;;;46876:30;;;46955:13;;46789:18;;;46977:22;;;46756:4;;47056:15;;;;47030:2;47015:18;;;46756:4;47099:271;47113:6;47110:1;47107:13;47099:271;;;47172:13;;47214:9;;47225:10;47210:26;47198:39;;47285:2;47277:11;;;47271:18;47257:12;;;47250:40;47345:15;;;;47319:2;47310:12;;;;47135:1;47128:9;47099:271;;;-1:-1:-1;47387:3:1;;46530:866;-1:-1:-1;;;;;;46530:866:1:o;49227:643::-;49577:1;49573;49568:3;49564:11;49560:19;49552:6;49548:32;49537:9;49530:51;49617:6;49612:2;49601:9;49597:18;49590:34;49660:3;49655:2;49644:9;49640:18;49633:31;49511:4;49687:57;49739:3;49728:9;49724:19;49716:6;49687:57;:::i;:::-;49792:9;49784:6;49780:22;49775:2;49764:9;49760:18;49753:50;49820:44;49857:6;49849;49820:44;:::i;50523:127::-;50584:10;50579:3;50575:20;50572:1;50565:31;50615:4;50612:1;50605:15;50639:4;50636:1;50629:15
Swarm Source
ipfs://412a6aad9b489fc3059470ff469d67fb7371573b44eaadaea22b2f37c70402a0
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.