Overview
ADF Balance
0 ADF
Token Holdings
More Info
ContractCreator:
Latest 25 from a total of 549 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
stake | 2454882 | 8 hours ago | IN | 1465 ADF | 0.001158833333113155 | ||||
stake | 2452654 | 10 hours ago | IN | 728.48 ADF | 0.001230261904528155 | ||||
stake | 2446650 | 15 hours ago | IN | 764 ADF | 0.001230261904528155 | ||||
stake | 2445145 | 16 hours ago | IN | 835 ADF | 0.001230261904528155 | ||||
stake | 2444794 | 17 hours ago | IN | 2287 ADF | 0.001230261904528155 | ||||
stake | 2424511 | 1 day ago | IN | 2750 ADF | 0.001230261904528155 | ||||
stake | 2423697 | 1 day ago | IN | 2750 ADF | 0.001230261904528155 | ||||
stake | 2423228 | 1 day ago | IN | 702 ADF | 0.001158833333113155 | ||||
stake | 2422874 | 1 day ago | IN | 700.7 ADF | 0.001230261904528155 | ||||
stake | 2421008 | 1 day ago | IN | 700.7 ADF | 0.001230261904528155 | ||||
stake | 2419163 | 1 day ago | IN | 1391 ADF | 0.001230261904528155 | ||||
withdrawStake | 2414545 | 1 day ago | IN | 0 ADF | 0.000559995237988839 | ||||
stake | 2414516 | 1 day ago | IN | 750 ADF | 0.000975919047433623 | ||||
stake | 2396441 | 2 days ago | IN | 701 ADF | 0.001230261904528155 | ||||
stake | 2396347 | 2 days ago | IN | 1384 ADF | 0.001230261904528155 | ||||
stake | 2396230 | 2 days ago | IN | 1384 ADF | 0.001230261904528155 | ||||
stake | 2391536 | 2 days ago | IN | 717 ADF | 0.001230261904528155 | ||||
stake | 2389163 | 2 days ago | IN | 714.9 ADF | 0.001230261904528155 | ||||
stake | 2389053 | 2 days ago | IN | 783 ADF | 0.001230261904528155 | ||||
stake | 2388776 | 2 days ago | IN | 714.9 ADF | 0.001230261904528155 | ||||
stake | 2367299 | 3 days ago | IN | 702 ADF | 0.001230261904528155 | ||||
stake | 2361653 | 3 days ago | IN | 1754 ADF | 0.001230261904528155 | ||||
stake | 2360984 | 3 days ago | IN | 703.9 ADF | 0.001230261904528155 | ||||
stake | 2359185 | 3 days ago | IN | 2480 ADF | 0.001158833333113155 | ||||
stake | 2357208 | 3 days ago | IN | 2275 ADF | 0.001158833333113155 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ADFStaking
Compiler Version
v0.8.27+commit.7893614a
Contract Source Code (Solidity)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055/***Submitted for verification at testnet.bscscan.com on 2024-11-07*/// SPDX-License-Identifier: MITpragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with 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;}}pragma solidity ^0.8.0;/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. 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;event OwnershipTransferred(address indexed previousOwner,address indexed newOwner);/*** @dev Initializes the contract setting the deployer as the initial owner.*/constructor() {_transferOwnership(_msgSender());}/*** @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 {require(owner() == _msgSender(), "Ownable: caller is not the owner");}/*** @dev Leaves the contract without owner. It will not be possible to call* `onlyOwner` functions anymore. Can only be called by the current owner.** NOTE: Renouncing ownership will leave the contract without an owner,* thereby removing any functionality that is only available to the owner.*/function renounceOwnership() public virtual onlyOwner {_transferOwnership(address(0));}/*** @dev Transfers ownership of the contract to a new account (`newOwner`).* Can only be called by the current owner.*/function transferOwnership(address newOwner) public virtual onlyOwner {require(newOwner != address(0),"Ownable: new owner is the zero address");_transferOwnership(newOwner);}/*** @dev Transfers ownership of the contract to a new account (`newOwner`).* Internal function without access restriction.*/function _transferOwnership(address newOwner) internal virtual {address oldOwner = _owner;_owner = newOwner;emit OwnershipTransferred(oldOwner, newOwner);}}pragma solidity ^0.8.0;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed** Furthermore, `isContract` will also return true if the target contract within* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,* which only has an effect at the end of a transaction.* ====** [IMPORTANT]* ====* You shouldn't rely on `isContract` to protect against flash loan attacks!** Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract* constructor.* ====*/function isContract(address account) internal view returns (bool) {// This method relies on extcodesize/address.code.length, which returns 0// for contracts in construction, since the code is only stored at the end// of the constructor execution.return account.code.length > 0;}/*** @dev Replacement for Solidity's `transfer`: sends `amount` wei to* `recipient`, forwarding all available gas and reverting on errors.** https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost* of certain opcodes, possibly making contracts go over the 2300 gas limit* imposed by `transfer`, making them unable to receive funds via* `transfer`. {sendValue} removes this limitation.** https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].** IMPORTANT: because control is transferred to `recipient`, care must be* taken to not create reentrancy vulnerabilities. Consider using* {ReentrancyGuard} or the* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactionspattern].*/function sendValue(address payable recipient, uint256 amount) internal {require(address(this).balance >= amount,"Address: insufficient balance");(bool success, ) = recipient.call{value: amount}("");require(success,"Address: unable to send value, recipient may have reverted");}/*** @dev Performs a Solidity function call using a low level `call`. A* plain `call` is an unsafe replacement for a function call: use this* function instead.** If `target` reverts with a revert reason, it is bubbled up by this* function (like regular Solidity function calls).** Returns the raw returned data. To convert to the expected return value,* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].** Requirements:** - `target` must be a contract.* - calling `target` with `data` must not revert.** _Available since v3.1._*/function functionCall(address target,bytes memory data) internal returns (bytes memory) {returnfunctionCallWithValue(target,data,0,"Address: low-level call failed");}/*** @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with* `errorMessage` as a fallback revert reason when `target` reverts.** _Available since v3.1._*/function functionCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {return functionCallWithValue(target, data, 0, errorMessage);}/*** @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],* but also transferring `value` wei to `target`.** Requirements:** - the calling contract must have an ETH balance of at least `value`.* - the called Solidity function must be `payable`.** _Available since v3.1._*/function functionCallWithValue(address target,bytes memory data,uint256 value) internal returns (bytes memory) {returnfunctionCallWithValue(target,data,value,"Address: low-level call with value failed");}/*** @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but* with `errorMessage` as a fallback revert reason when `target` reverts.** _Available since v3.1._*/function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) {require(address(this).balance >= value,"Address: insufficient balance for call");(bool success, bytes memory returndata) = target.call{value: value}(data);returnverifyCallResultFromTarget(target,success,returndata,errorMessage);}/*** @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],* but performing a static call.** _Available since v3.3._*/function functionStaticCall(address target,bytes memory data) internal view returns (bytes memory) {returnfunctionStaticCall(target,data,"Address: low-level static call failed");}/*** @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],* but performing a static call.** _Available since v3.3._*/function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) {(bool success, bytes memory returndata) = target.staticcall(data);returnverifyCallResultFromTarget(target,success,returndata,errorMessage);}/*** @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],* but performing a delegate call.** _Available since v3.4._*/function functionDelegateCall(address target,bytes memory data) internal returns (bytes memory) {returnfunctionDelegateCall(target,data,"Address: low-level delegate call failed");}/*** @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],* but performing a delegate call.** _Available since v3.4._*/function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {(bool success, bytes memory returndata) = target.delegatecall(data);returnverifyCallResultFromTarget(target,success,returndata,errorMessage);}/*** @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.** _Available since v4.8._*/function verifyCallResultFromTarget(address target,bool success,bytes memory returndata,string memory errorMessage) internal view returns (bytes memory) {if (success) {if (returndata.length == 0) {// only check isContract if the call was successful and the return data is empty// otherwise we already know that it was a contractrequire(isContract(target), "Address: call to non-contract");}return returndata;} else {_revert(returndata, errorMessage);}}/*** @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the* revert reason or using the provided one.** _Available since v4.3._*/function verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) internal pure returns (bytes memory) {if (success) {return returndata;} else {_revert(returndata, errorMessage);}}function _revert(bytes memory returndata,string memory errorMessage) private pure {// Look for revert reason and bubble it up if presentif (returndata.length > 0) {// The easiest way to bubble the revert reason is using memory via assembly/// @solidity memory-safe-assemblyassembly {let returndata_size := mload(returndata)revert(add(32, returndata), returndata_size)}} else {revert(errorMessage);}}}pragma solidity ^0.8.0;/*** @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 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;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_ENTEREDrequire(_status != _ENTERED, "ReentrancyGuard: reentrant call");// 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;}}abstract contract Pausable is Context {/*** @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);bool private _paused;/*** @dev Initializes the contract in unpaused state.*/constructor() {_paused = false;}/*** @dev Returns true if the contract is paused, and false otherwise.*/function paused() public view virtual returns (bool) {return _paused;}/*** @dev Modifier to make a function callable only when the contract is not paused.** Requirements:** - The contract must not be paused.*/modifier whenNotPaused() {require(!paused(), "Pausable: paused");_;}/*** @dev Modifier to make a function callable only when the contract is paused.** Requirements:** - The contract must be paused.*/modifier whenPaused() {require(paused(), "Pausable: not paused");_;}/*** @dev Triggers stopped state.** Requirements:** - The contract must not be paused.*/function _pause() internal virtual whenNotPaused {_paused = true;}/*** @dev Returns to normal state.** Requirements:** - The contract must be paused.*/function _unpause() internal virtual whenPaused {_paused = false;emit Unpaused(_msgSender());}}interface IWADF {function deposit() external payable;function transfer(address to, uint256 value) external returns (bool);function transferFrom(address from,address to,uint256 value) external returns (bool);function withdraw(uint256) external;}interface IPriceAggregator {function getPrice() external view returns (uint256);}contract ADFStaking is ReentrancyGuard, Ownable, Pausable {address public WADF;address public priceAggregator;address public adminIn;address public adminOut;uint256 private oneDay = 86400;uint256 private oneMonth = 30 * oneDay;uint256 private oneYear = 30 * 12;uint256 public marginHour;uint256 public withdrawLimit;uint256 public minimumStakeAmount;uint256 public stakeCount;uint256 public activeStakeCount;// uint256 public ADFTokenPrice; // 1 = 0.00001,900000 = 9 INR , 101200 = 1.01200 INR , 1120005 = 11.20005 INRstruct Stake {uint256 depositADF;uint256 depositUSD;uint256 startTime;uint256 minLockPeriod;uint256 lockMonth;uint256 profitRateAPR; // 6000 = 60%annual (5%monthly) , 12000 = 120% annual (10% monthly)bool active;uint256 unstakeDate;uint256 profitDebitUSD;uint256 profitWithdrawTime;}struct lockingType {uint256 month;uint256 profitRateAPR;bool status;}mapping(address => Stake[]) public stakeData;mapping(uint256 => lockingType) public LockingType;mapping(address => bool) public Operators;event stakeEvent(address _user,uint256 _depositADF,uint256 _depositUSD,uint256 _startTime,uint256 _lockMonth,uint256 _index);event withdrawStakeWithProfit(address _user,uint256 _amountADF,uint256 _index);event withdrawProfit(address _user, uint256 _amountADF, uint256 _index);event locktypeAdd(uint256 month, uint256 profitRateAPR, bool status);event changeWithdrawLimit(uint256 withdrawLimit);event changeMinimumStake(uint256 minimumStakeAmount);modifier onlyOperators() {require(Operators[msg.sender] == true, "Not a community member");_;}constructor(address _WADF,address _priceAggregator,address _adminIn,address _adminOut) Pausable() {WADF = _WADF;adminIn = _adminIn;adminOut = _adminOut;withdrawLimit = type(uint256).max;minimumStakeAmount = 0;priceAggregator = _priceAggregator;}receive() external payable {}// stake functions for userfunction stake(uint256 _lockingMonth) public payable whenNotPaused nonReentrant {require(msg.value > 0, "Amount must be greater the 0");uint256 _amountADF = msg.value;uint256 _ADFTokenPrice = IPriceAggregator(priceAggregator).getPrice();uint256 _amtUSD = msg.value * _ADFTokenPrice;require(LockingType[_lockingMonth].status == true,"This type of Locking is not available");require(_amountADF >= minimumStakeAmount, "Less than min stake amt");// Get the tokens in the contractIWADF(WADF).deposit{value: msg.value}();IWADF(WADF).transfer(adminIn, _amountADF);// Create new entry of deposituint256 _lockingPeriod = (LockingType[_lockingMonth].month) * oneMonth;Stake memory _stake;_stake.depositADF = _amountADF;_stake.depositUSD = _amtUSD;_stake.startTime = block.timestamp;_stake.minLockPeriod = _lockingPeriod;_stake.lockMonth = LockingType[_lockingMonth].month;_stake.active = true;_stake.profitRateAPR = LockingType[_lockingMonth].profitRateAPR;_stake.unstakeDate = 0;_stake.profitDebitUSD = 0;_stake.profitWithdrawTime = block.timestamp;stakeData[msg.sender].push(_stake);stakeCount = stakeCount + 1;activeStakeCount = activeStakeCount + 1;uint256 _index = stakeData[msg.sender].length - 1;emit stakeEvent(msg.sender,_amountADF,_amtUSD,block.timestamp,_lockingMonth,_index);}// Function to Stake by Owner on behalf of user// only creates Entry doesn't take any tokens from userfunction stakeOwner(address _user,uint256 _amountADF,uint256 _startTime,uint256 _lockingMonth) public nonReentrant onlyOperators {require(LockingType[_lockingMonth].status == true,"This type of Locking is not available");uint256 _ADFTokenPrice = IPriceAggregator(priceAggregator).getPrice();uint256 _amountUSD = _amountADF * _ADFTokenPrice;require(_amountADF >= minimumStakeAmount, "Less than min stake amt");// Create new entry of deposituint256 _lockingPeriod = (LockingType[_lockingMonth].month) * oneMonth;Stake memory _stake;_stake.depositADF = _amountADF;_stake.depositUSD = _amountUSD;_stake.startTime = _startTime;_stake.minLockPeriod = _lockingPeriod;_stake.lockMonth = LockingType[_lockingMonth].month;_stake.profitRateAPR = LockingType[_lockingMonth].profitRateAPR;_stake.active = true;_stake.unstakeDate = 0;_stake.profitDebitUSD = 0;_stake.profitWithdrawTime = _startTime;stakeData[_user].push(_stake);stakeCount = stakeCount + 1;activeStakeCount = activeStakeCount + 1;uint256 _index = stakeData[_user].length - 1;emit stakeEvent(_user,_amountADF,_amountUSD,_startTime,_lockingMonth,_index);}// stake Amount or profit withdraw by Admin on behalf of userfunction withdrawProfitAndStakeByOwner(uint256 _index,address _user) public nonReentrant onlyOperators {Stake memory s = stakeData[_user][_index];require(s.active == true, "Your stake is already withdrawn");if ((s.startTime + s.minLockPeriod) < block.timestamp && s.lockMonth > 0) {withdrawStakeInternal(_user, _index);} else {uint256 daysPassed = (block.timestamp - s.profitWithdrawTime) /oneDay;if (s.profitDebitUSD == 0) {require(daysPassed >= 30,"You can only withdraw profit after 30 days");uint256 USDEarned = getSimpleProfit(_user, _index);stakeData[_user][_index].profitWithdrawTime = (block.timestamp - marginHour );uint256 profitToken;if (USDEarned > 0) {stakeData[_user][_index].profitDebitUSD += USDEarned;uint256 _ADFTokenPrice = IPriceAggregator(priceAggregator).getPrice();profitToken = USDEarned / _ADFTokenPrice;IWADF(WADF).transferFrom(adminOut,address(this),profitToken);IWADF(WADF).withdraw(profitToken);payable(_user).transfer(profitToken);}emit withdrawProfit(_user, profitToken, _index);} else {uint256 USDEarned = getSimpleProfit(_user, _index);stakeData[_user][_index].profitWithdrawTime = (block.timestamp - marginHour );uint256 profitToken;if (USDEarned > 0) {stakeData[_user][_index].profitDebitUSD += USDEarned;uint256 _ADFTokenPrice = IPriceAggregator(priceAggregator).getPrice();profitToken = USDEarned / _ADFTokenPrice;IWADF(WADF).transferFrom(adminOut,address(this),profitToken);IWADF(WADF).withdraw(profitToken);payable(_user).transfer(profitToken);}emit withdrawProfit(_user, profitToken, _index);}}}function withdrawStake(uint256 _index) public whenNotPaused nonReentrant {withdrawStakeInternal(msg.sender, _index);}function withdrawStakeInternal(address _user, uint256 _index) internal {// stake lock expiresStake memory s = stakeData[_user][_index];require(s.active == true, "Your stake is already withdrawn");require((s.startTime + s.minLockPeriod) < block.timestamp,"not expire");uint256 daysPassed = (block.timestamp - s.profitWithdrawTime) / oneDay;uint256 USDEarned = getSimpleProfit(_user, _index);stakeData[_user][_index].profitWithdrawTime = block.timestamp;uint256 profitToken;if (s.lockMonth == 0 && daysPassed < 30) {profitToken = 0;} else {if (USDEarned > 0) {stakeData[_user][_index].profitDebitUSD += USDEarned;uint256 _ADFTokenPrice = IPriceAggregator(priceAggregator).getPrice();profitToken = USDEarned / _ADFTokenPrice;}}uint256 totalWithdrawable = profitToken + s.depositADF;require(totalWithdrawable < withdrawLimit,"Withdraw Limit cross, please connect to help and support");stakeData[_user][_index].active = false;stakeData[_user][_index].unstakeDate = block.timestamp;IWADF(WADF).transferFrom(adminOut, address(this), totalWithdrawable);IWADF(WADF).withdraw(totalWithdrawable);payable(_user).transfer(totalWithdrawable);activeStakeCount = activeStakeCount - 1;emit withdrawStakeWithProfit(_user, totalWithdrawable, _index);}// function for emergency withdrawfunction emergencyWithdraw(address _user,uint256 _index) public nonReentrant onlyOwner {Stake memory s = stakeData[_user][_index];require(s.active == true, "Your stake is already withdrawn");uint256 USDEarned = getSimpleProfit(_user, _index);uint256 profitToken;if (USDEarned > 0) {stakeData[_user][_index].profitDebitUSD += USDEarned;uint256 _ADFTokenPrice = IPriceAggregator(priceAggregator).getPrice();profitToken = USDEarned / _ADFTokenPrice;}uint256 totalWithdrawable = profitToken + s.depositADF;stakeData[_user][_index].active = false;stakeData[_user][_index].unstakeDate = block.timestamp;stakeData[_user][_index].profitWithdrawTime = block.timestamp;IWADF(WADF).transferFrom(adminOut, address(this), totalWithdrawable);IWADF(WADF).withdraw(totalWithdrawable);payable(_user).transfer(totalWithdrawable);activeStakeCount = activeStakeCount - 1;emit withdrawStakeWithProfit(_user, totalWithdrawable, _index);}function getSimpleProfit(address _user,uint256 _index) public view returns (uint256) {Stake memory s = stakeData[_user][_index];uint256 _deposit = s.depositUSD;// duration in secuint256 durationStaked = block.timestamp - s.profitWithdrawTime;// duration in daydurationStaked = durationStaked / oneDay;uint256 _profitRate = s.profitRateAPR;//oneYearuint256 _profitForYear = (_deposit * _profitRate) / 10000;//oneDayuint256 _profitForDay = _profitForYear / oneYear;uint256 profitEarned = _profitForDay * durationStaked;return profitEarned;}// Details getter functionsfunction getStakeData(address _user,uint256 _index) public view returns (Stake memory, uint256, bool) {Stake memory s = stakeData[_user][_index];uint256 profitEarnedUSD;bool canWithdraw;if (s.active) {profitEarnedUSD = getSimpleProfit(_user, _index);if (block.timestamp < (s.startTime + s.minLockPeriod)) {canWithdraw = false;} else {canWithdraw = true;}}return (s, profitEarnedUSD, canWithdraw);}function getAdfpriceUSD() public view returns(uint256){uint256 _ADFTokenPrice = IPriceAggregator(priceAggregator).getPrice();return _ADFTokenPrice;}function getStakeLength(address _user) public view returns (uint256) {uint256 totalStake = stakeData[_user].length;return totalStake;}// Admin functionsfunction setAdmin(address _adminIn, address _adminOut) public onlyOwner {adminIn = _adminIn;adminOut = _adminOut;}function setMarginTime(uint256 _marginHour) public onlyOwner {marginHour = _marginHour * 3600;}function PauseStaking() public onlyOwner {_pause();}function unpauseStaking() public onlyOwner {_unpause();}function setWithdrawLimit(uint256 _withdrawLimit) public onlyOwner {withdrawLimit = _withdrawLimit;emit changeWithdrawLimit(_withdrawLimit);}function setMinimumStaking(uint256 _minimumStakeAmount) public onlyOwner {minimumStakeAmount = _minimumStakeAmount;emit changeMinimumStake(_minimumStakeAmount);}function addOperator(address _operator, bool _status) external onlyOwner {Operators[_operator] = _status;}function setStakeStatus(address _user,uint256 _index,bool _status) public onlyOwner {stakeData[_user][_index].active = _status;}function setWADFToken(address _WADF) public onlyOwner {WADF = _WADF;}function setPriceAggregator(address _priceAggregator) public onlyOwner {priceAggregator = _priceAggregator;}function closeMultiStakes(address _user,uint256[] memory _index) public onlyOwner {for (uint256 i = 0; i < _index.length; i++) {uint256 USDEarned = getSimpleProfit(_user, _index[i]);stakeData[_user][_index[i]].profitDebitUSD += USDEarned;stakeData[_user][_index[i]].active = false;stakeData[_user][_index[i]].unstakeDate = block.timestamp;}activeStakeCount = activeStakeCount - _index.length;}function changeStakeDate(address _user,uint256 _index,uint256 _startTime) public onlyOwner {stakeData[_user][_index].startTime = _startTime;}function addLockType(uint256 _month,uint256 _profitRateAPR,bool _status) public onlyOwner {LockingType[_month].month = _month;LockingType[_month].profitRateAPR = _profitRateAPR;LockingType[_month].status = _status;emit locktypeAdd(_month, _profitRateAPR, _status);}}
[{"inputs":[{"internalType":"address","name":"_WADF","type":"address"},{"internalType":"address","name":"_priceAggregator","type":"address"},{"internalType":"address","name":"_adminIn","type":"address"},{"internalType":"address","name":"_adminOut","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"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":false,"internalType":"uint256","name":"minimumStakeAmount","type":"uint256"}],"name":"changeMinimumStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"withdrawLimit","type":"uint256"}],"name":"changeWithdrawLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"month","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"profitRateAPR","type":"uint256"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"locktypeAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_depositADF","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_depositUSD","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_lockMonth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"stakeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountADF","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"withdrawProfit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountADF","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"withdrawStakeWithProfit","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"LockingType","outputs":[{"internalType":"uint256","name":"month","type":"uint256"},{"internalType":"uint256","name":"profitRateAPR","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Operators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PauseStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WADF","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeStakeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_month","type":"uint256"},{"internalType":"uint256","name":"_profitRateAPR","type":"uint256"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"addLockType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"addOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminIn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminOut","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"changeStakeDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256[]","name":"_index","type":"uint256[]"}],"name":"closeMultiStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdfpriceUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getSimpleProfit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getStakeData","outputs":[{"components":[{"internalType":"uint256","name":"depositADF","type":"uint256"},{"internalType":"uint256","name":"depositUSD","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"minLockPeriod","type":"uint256"},{"internalType":"uint256","name":"lockMonth","type":"uint256"},{"internalType":"uint256","name":"profitRateAPR","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"unstakeDate","type":"uint256"},{"internalType":"uint256","name":"profitDebitUSD","type":"uint256"},{"internalType":"uint256","name":"profitWithdrawTime","type":"uint256"}],"internalType":"struct ADFStaking.Stake","name":"","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getStakeLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marginHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceAggregator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adminIn","type":"address"},{"internalType":"address","name":"_adminOut","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marginHour","type":"uint256"}],"name":"setMarginTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumStakeAmount","type":"uint256"}],"name":"setMinimumStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_priceAggregator","type":"address"}],"name":"setPriceAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStakeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WADF","type":"address"}],"name":"setWADFToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawLimit","type":"uint256"}],"name":"setWithdrawLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockingMonth","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"stakeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeData","outputs":[{"internalType":"uint256","name":"depositADF","type":"uint256"},{"internalType":"uint256","name":"depositUSD","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"minLockPeriod","type":"uint256"},{"internalType":"uint256","name":"lockMonth","type":"uint256"},{"internalType":"uint256","name":"profitRateAPR","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"unstakeDate","type":"uint256"},{"internalType":"uint256","name":"profitDebitUSD","type":"uint256"},{"internalType":"uint256","name":"profitWithdrawTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amountADF","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_lockingMonth","type":"uint256"}],"name":"stakeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"withdrawProfitAndStakeByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405262015180600681905561001890601e610110565b60075561016860085534801561002c575f5ffd5b50604051612fbb380380612fbb83398101604081905261004b91610154565b60015f55610058336100bf565b6001805460ff60a01b19169055600280546001600160a01b03199081166001600160a01b0396871617909155600480548216938616939093179092556005805483169185169190911790555f19600a555f600b5560038054909116919092161790556101a5565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b808202811582820484141761013357634e487b7160e01b5f52601160045260245ffd5b92915050565b80516001600160a01b038116811461014f575f5ffd5b919050565b5f5f5f5f60808587031215610167575f5ffd5b61017085610139565b935061017e60208601610139565b925061018c60408601610139565b915061019a60608601610139565b905092959194509250565b612e09806101b25f395ff3fe608060405260043610610220575f3560e01c80637c56d4031161011e578063a694fc3a116100a8578063cabe429c1161006d578063cabe429c146106ab578063f2fde38b146106ca578063f75a876d146106e9578063f848d54114610717578063ff05b1fd1461072c575f5ffd5b8063a694fc3a14610626578063abd17d7f14610639578063b0061e2114610658578063c4a9e11614610677578063c55b6bb71461068c575f5ffd5b806393f4bcde116100ee57806393f4bcde1461055657806394234e421461056a578063950189721461059857806395ccea67146105f2578063a208084e14610611575f5ffd5b80637c56d403146104dc578063869d8519146104fb5780638a3a56481461051a5780638da5cb5b14610539575f5ffd5b80634a0f9020116101aa5780635e11665d1161016f5780635e11665d1461044c5780636b036f451461046b5780636b51800d14610480578063715018a6146104b457806373f64499146104c8575f5ffd5b80634a0f9020146103a65780634abdf2e0146103c55780635070e837146103e4578063583daf6e146104035780635c975abb14610422575f5ffd5b806325d5971f116101f057806325d5971f146102b15780632d9517ce146102d05780632fdf64d7146102ef5780633078fff51461030457806343cca2941461033b575f5ffd5b8063024759c61461022b5780631d7e6cb91461024c578063238799b71461027357806325b6086614610292575f5ffd5b3661022757005b5f5ffd5b348015610236575f5ffd5b5061024a6102453660046128fd565b61074b565b005b348015610257575f5ffd5b5061026061077d565b6040519081526020015b60405180910390f35b34801561027e575f5ffd5b5061024a61028d366004612932565b6107f9565b34801561029d575f5ffd5b5061024a6102ac36600461295c565b610eeb565b3480156102bc575f5ffd5b5061024a6102cb36600461297c565b610f15565b3480156102db575f5ffd5b5061024a6102ea3660046129a7565b610f5d565b3480156102fa575f5ffd5b50610260600d5481565b34801561030f575f5ffd5b50600354610323906001600160a01b031681565b6040516001600160a01b03909116815260200161026a565b348015610346575f5ffd5b5061035a610355366004612a82565b6110e7565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a0860152151560c085015260e08401526101008301526101208201526101400161026a565b3480156103b1575f5ffd5b5061024a6103c0366004612aaa565b611156565b3480156103d0575f5ffd5b5061024a6103df36600461297c565b6114f0565b3480156103ef575f5ffd5b5061024a6103fe36600461295c565b611534565b34801561040e575f5ffd5b5061024a61041d36600461297c565b61155e565b34801561042d575f5ffd5b50600154600160a01b900460ff165b604051901515815260200161026a565b348015610457575f5ffd5b50600254610323906001600160a01b031681565b348015610476575f5ffd5b50610260600b5481565b34801561048b575f5ffd5b5061026061049a36600461295c565b6001600160a01b03165f908152600e602052604090205490565b3480156104bf575f5ffd5b5061024a61159b565b3480156104d3575f5ffd5b5061024a6115ae565b3480156104e7575f5ffd5b5061024a6104f6366004612ae0565b6115be565b348015610506575f5ffd5b5061024a610515366004612b16565b611634565b348015610525575f5ffd5b50600454610323906001600160a01b031681565b348015610544575f5ffd5b506001546001600160a01b0316610323565b348015610561575f5ffd5b5061024a611680565b348015610575575f5ffd5b5061043c61058436600461295c565b60106020525f908152604090205460ff1681565b3480156105a3575f5ffd5b506105d56105b236600461297c565b600f6020525f908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161026a565b3480156105fd575f5ffd5b5061024a61060c366004612a82565b611690565b34801561061c575f5ffd5b5061026060095481565b61024a61063436600461297c565b611a8d565b348015610644575f5ffd5b50610260610653366004612a82565b611e81565b348015610663575f5ffd5b5061024a610672366004612b46565b611f9d565b348015610682575f5ffd5b50610260600c5481565b348015610697575f5ffd5b5061024a6106a6366004612b78565b611ff7565b3480156106b6575f5ffd5b5061024a6106c536600461297c565b61202d565b3480156106d5575f5ffd5b5061024a6106e436600461295c565b612047565b3480156106f4575f5ffd5b50610708610703366004612a82565b6120bd565b60405161026a93929190612ba0565b348015610722575f5ffd5b50610260600a5481565b348015610737575f5ffd5b50600554610323906001600160a01b031681565b6107536121bf565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b5f5f60035f9054906101000a90046001600160a01b03166001600160a01b03166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f39190612c32565b92915050565b610801612219565b335f9081526010602052604090205460ff1615156001146108625760405162461bcd60e51b81526020600482015260166024820152752737ba10309031b7b6b6bab734ba3c9036b2b6b132b960511b60448201526064015b60405180910390fd5b6001600160a01b0381165f908152600e6020526040812080548490811061088b5761088b612c49565b5f9182526020918290206040805161014081018252600a90930290910180548352600180820154948401949094526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460ff16151560c08301819052600782015460e08401526008820154610100840152600990910154610120830152909250146109355760405162461bcd60e51b815260040161085990612c5d565b428160600151826040015161094a9190612ca8565b10801561095a57505f8160800151115b1561096e576109698284612270565b610edd565b5f600654826101200151426109839190612cbb565b61098d9190612cce565b90508161010001515f03610c6f57601e8110156109ff5760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e206f6e6c792077697468647261772070726f666974206166746044820152696572203330206461797360b01b6064820152608401610859565b5f610a0a8486611e81565b905060095442610a1a9190612cbb565b6001600160a01b0385165f908152600e60205260409020805487908110610a4357610a43612c49565b5f918252602082206009600a9092020101919091558115610c2d576001600160a01b0385165f908152600e60205260409020805483919088908110610a8a57610a8a612c49565b905f5260205f2090600a02016008015f828254610aa79190612ca8565b909155505060035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa158015610af3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b179190612c32565b9050610b238184612cce565b6002546005546040516323b872dd60e01b81529294506001600160a01b03918216926323b872dd92610b5d92169030908790600401612ced565b6020604051808303815f875af1158015610b79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9d9190612d11565b50600254604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b158015610be1575f5ffd5b505af1158015610bf3573d5f5f3e3d5ffd5b50506040516001600160a01b038916925084156108fc02915084905f818181858888f19350505050158015610c2a573d5f5f3e3d5ffd5b50505b7ff73daea325d178eecbfcc5124846ebe03950ec3ab8b435415ec31069f79309d8858288604051610c6093929190612d2c565b60405180910390a15050610edb565b5f610c7a8486611e81565b905060095442610c8a9190612cbb565b6001600160a01b0385165f908152600e60205260409020805487908110610cb357610cb3612c49565b5f918252602082206009600a9092020101919091558115610e9d576001600160a01b0385165f908152600e60205260409020805483919088908110610cfa57610cfa612c49565b905f5260205f2090600a02016008015f828254610d179190612ca8565b909155505060035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa158015610d63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d879190612c32565b9050610d938184612cce565b6002546005546040516323b872dd60e01b81529294506001600160a01b03918216926323b872dd92610dcd92169030908790600401612ced565b6020604051808303815f875af1158015610de9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0d9190612d11565b50600254604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b158015610e51575f5ffd5b505af1158015610e63573d5f5f3e3d5ffd5b50506040516001600160a01b038916925084156108fc02915084905f818181858888f19350505050158015610e9a573d5f5f3e3d5ffd5b50505b7ff73daea325d178eecbfcc5124846ebe03950ec3ab8b435415ec31069f79309d8858288604051610ed093929190612d2c565b60405180910390a150505b505b50610ee760015f55565b5050565b610ef36121bf565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff1615610f3f5760405162461bcd60e51b815260040161085990612d4d565b610f47612219565b610f513382612270565b610f5a60015f55565b50565b610f656121bf565b5f5b81518110156110d0575f610f9484848481518110610f8757610f87612c49565b6020026020010151611e81565b6001600160a01b0385165f908152600e6020526040902084519192508291859085908110610fc457610fc4612c49565b602002602001015181548110610fdc57610fdc612c49565b905f5260205f2090600a02016008015f828254610ff99190612ca8565b90915550506001600160a01b0384165f908152600e60205260408120845185908590811061102957611029612c49565b60200260200101518154811061104157611041612c49565b905f5260205f2090600a02016006015f6101000a81548160ff02191690831515021790555042600e5f866001600160a01b03166001600160a01b031681526020019081526020015f2084848151811061109c5761109c612c49565b6020026020010151815481106110b4576110b4612c49565b5f91825260209091206007600a90920201015550600101610f67565b508051600d546110e09190612cbb565b600d555050565b600e602052815f5260405f208181548110611100575f80fd5b5f9182526020909120600a90910201805460018201546002830154600384015460048501546005860154600687015460078801546008890154600990990154979a50959850939692959194909360ff169290918a565b61115e612219565b335f9081526010602052604090205460ff1615156001146111ba5760405162461bcd60e51b81526020600482015260166024820152752737ba10309031b7b6b6bab734ba3c9036b2b6b132b960511b6044820152606401610859565b5f818152600f602052604090206002015460ff1615156001146111ef5760405162461bcd60e51b815260040161085990612d77565b60035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa158015611236573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125a9190612c32565b90505f6112678286612dbc565b9050600b548510156112b55760405162461bcd60e51b815260206004820152601760248201527613195cdcc81d1a185b881b5a5b881cdd185ad948185b5d604a1b6044820152606401610859565b6007545f848152600f602052604081205490916112d191612dbc565b90506112db61288a565b86815f018181525050828160200181815250508581604001818152505081816060018181525050600f5f8681526020019081526020015f205f0154816080018181525050600f5f8681526020019081526020015f20600101548160a001818152505060018160c00190151590811515815250505f8160e00181815250505f816101000181815250508581610120018181525050600e5f896001600160a01b03166001600160a01b031681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600a02015f909190919091505f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548160ff02191690831515021790555060e08201518160070155610100820151816008015561012082015181600901555050600c5460016114429190612ca8565b600c55600d54611453906001612ca8565b600d556001600160a01b0388165f908152600e602052604081205461147a90600190612cbb565b604080516001600160a01b038c168152602081018b9052908101869052606081018990526080810188905260a081018290529091507f555e3b11590be24c2845b859c29cd0892deaef290a1e5423c794fd9d8298193b9060c00160405180910390a150505050506114ea60015f55565b50505050565b6114f86121bf565b600a8190556040518181527f8dba085cc4b8da9b11a47e2a28535086a34ceb6a968e767ece2cd53a27a1034c906020015b60405180910390a150565b61153c6121bf565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6115666121bf565b600b8190556040518181527f43398cd223587761303ed6d34d0cd15a8d8d44114c7a7f3b8110e221cfb8929090602001611529565b6115a36121bf565b6115ac5f612768565b565b6115b66121bf565b6115ac6127b9565b6115c66121bf565b5f838152600f602090815260409182902085815560018101859055600201805484151560ff19909116811790915582518681529182018590528183015290517fc8fd614e4dfbd0c17ddc5bfe72fa320eadb469251466c3aea236a7fdecc2a13a9181900360600190a1505050565b61163c6121bf565b6001600160a01b0383165f908152600e6020526040902080548291908490811061166857611668612c49565b905f5260205f2090600a020160020181905550505050565b6116886121bf565b6115ac6127f8565b611698612219565b6116a06121bf565b6001600160a01b0382165f908152600e602052604081208054839081106116c9576116c9612c49565b5f9182526020918290206040805161014081018252600a90930290910180548352600180820154948401949094526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460ff16151560c08301819052600782015460e08401526008820154610100840152600990910154610120830152909250146117735760405162461bcd60e51b815260040161085990612c5d565b5f61177e8484611e81565b90505f8115611850576001600160a01b0385165f908152600e602052604090208054839190869081106117b3576117b3612c49565b905f5260205f2090600a02016008015f8282546117d09190612ca8565b909155505060035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa15801561181c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118409190612c32565b905061184c8184612cce565b9150505b82515f9061185e9083612ca8565b6001600160a01b0387165f908152600e60205260408120805492935090918790811061188c5761188c612c49565b905f5260205f2090600a02016006015f6101000a81548160ff02191690831515021790555042600e5f886001600160a01b03166001600160a01b031681526020019081526020015f2086815481106118e6576118e6612c49565b905f5260205f2090600a02016007018190555042600e5f886001600160a01b03166001600160a01b031681526020019081526020015f20868154811061192e5761192e612c49565b5f91825260209091206009600a9092020101556002546005546040516323b872dd60e01b81526001600160a01b03928316926323b872dd926119799291169030908690600401612ced565b6020604051808303815f875af1158015611995573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b99190612d11565b50600254604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b1580156119fd575f5ffd5b505af1158015611a0f573d5f5f3e3d5ffd5b50506040516001600160a01b038916925083156108fc02915083905f818181858888f19350505050158015611a46573d5f5f3e3d5ffd5b506001600d54611a569190612cbb565b600d556040517f2d608bfa5435b57232fa2a1e672e1812f34ffea8feedb55e1a2a2e6ead0e48fa90610ed090889084908990612d2c565b600154600160a01b900460ff1615611ab75760405162461bcd60e51b815260040161085990612d4d565b611abf612219565b5f3411611b0e5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206d7573742062652067726561746572207468652030000000006044820152606401610859565b60035460408051634c6afee560e11b8152905134925f926001600160a01b03909116916398d5fdca916004808201926020929091908290030181865afa158015611b5a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b7e9190612c32565b90505f611b8b8234612dbc565b5f858152600f602052604090206002015490915060ff161515600114611bc35760405162461bcd60e51b815260040161085990612d77565b600b54831015611c0f5760405162461bcd60e51b815260206004820152601760248201527613195cdcc81d1a185b881b5a5b881cdd185ad948185b5d604a1b6044820152606401610859565b60025f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015611c5c575f5ffd5b505af1158015611c6e573d5f5f3e3d5ffd5b50506002546004805460405163a9059cbb60e01b81526001600160a01b039182169281019290925260248201899052909116935063a9059cbb925060440190506020604051808303815f875af1158015611cca573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cee9190612d11565b506007545f858152600f60205260408120549091611d0b91612dbc565b9050611d1561288a565b8481526020808201848152426040808501828152606086018781525f8c8152600f8752838120805460808a01908152600160c08b018181529281015460a08c0190815260e08c018581526101008d018681526101208e019a8b52338752600e8d52988620805480850182559087529b9095208c51600a909c02019a8b5598518a820155945160028a01559251600389015591516004880155945160058701555160068601805460ff19169115159190911790559251600785015551600884015551600990920191909155600c54611deb91612ca8565b600c55600d54611dfc906001612ca8565b600d55335f908152600e6020526040812054611e1a90600190612cbb565b60408051338152602081018990529081018690524260608201526080810189905260a081018290529091507f555e3b11590be24c2845b859c29cd0892deaef290a1e5423c794fd9d8298193b9060c00160405180910390a1505050505050610f5a60015f55565b6001600160a01b0382165f908152600e60205260408120805482919084908110611ead57611ead612c49565b5f91825260208083206040805161014081018252600a9094029091018054845260018101549284018390526002810154918401919091526003810154606084015260048101546080840152600581015460a0840152600681015460ff16151560c0840152600781015460e084015260088101546101008401526009015461012083018190529193509190611f419042612cbb565b905060065481611f519190612cce565b60a08401519091505f612710611f678386612dbc565b611f719190612cce565b90505f60085482611f829190612cce565b90505f611f8f8583612dbc565b9a9950505050505050505050565b611fa56121bf565b6001600160a01b0383165f908152600e60205260409020805482919084908110611fd157611fd1612c49565b5f9182526020909120600a90910201600601805460ff1916911515919091179055505050565b611fff6121bf565b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6120356121bf565b61204181610e10612dbc565b60095550565b61204f6121bf565b6001600160a01b0381166120b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610859565b610f5a81612768565b6120c561288a565b6001600160a01b0383165f908152600e60205260408120805482918291869081106120f2576120f2612c49565b5f91825260208083206040805161014081018252600a909402909101805484526001810154928401929092526002820154908301526003810154606083015260048101546080830152600581015460a0830152600681015460ff1615801560c0840152600782015460e0840152600882015461010084015260099091015461012083015290925081906121b1576121898888611e81565b91508260600151836040015161219f9190612ca8565b4210156121ad57505f6121b1565b5060015b919450925090509250925092565b6001546001600160a01b031633146115ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610859565b60025f540361226a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610859565b60025f55565b6001600160a01b0382165f908152600e6020526040812080548390811061229957612299612c49565b5f9182526020918290206040805161014081018252600a90930290910180548352600180820154948401949094526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460ff16151560c08301819052600782015460e08401526008820154610100840152600990910154610120830152909250146123435760405162461bcd60e51b815260040161085990612c5d565b42816060015182604001516123589190612ca8565b106123925760405162461bcd60e51b815260206004820152600a6024820152696e6f742065787069726560b01b6044820152606401610859565b5f600654826101200151426123a79190612cbb565b6123b19190612cce565b90505f6123be8585611e81565b6001600160a01b0386165f908152600e6020526040902080549192504291869081106123ec576123ec612c49565b905f5260205f2090600a0201600901819055505f83608001515f1480156124135750601e83105b1561241f57505f6124ee565b81156124ee576001600160a01b0386165f908152600e6020526040902080548391908790811061245157612451612c49565b905f5260205f2090600a02016008015f82825461246e9190612ca8565b909155505060035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa1580156124ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124de9190612c32565b90506124ea8184612cce565b9150505b83515f906124fc9083612ca8565b9050600a5481106125755760405162461bcd60e51b815260206004820152603860248201527f5769746864726177204c696d69742063726f73732c20706c6561736520636f6e60448201527f6e65637420746f2068656c7020616e6420737570706f727400000000000000006064820152608401610859565b6001600160a01b0387165f908152600e6020526040812080548890811061259e5761259e612c49565b905f5260205f2090600a02016006015f6101000a81548160ff02191690831515021790555042600e5f896001600160a01b03166001600160a01b031681526020019081526020015f2087815481106125f8576125f8612c49565b5f91825260209091206007600a9092020101556002546005546040516323b872dd60e01b81526001600160a01b03928316926323b872dd926126439291169030908690600401612ced565b6020604051808303815f875af115801561265f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126839190612d11565b50600254604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b1580156126c7575f5ffd5b505af11580156126d9573d5f5f3e3d5ffd5b50506040516001600160a01b038a16925083156108fc02915083905f818181858888f19350505050158015612710573d5f5f3e3d5ffd5b506001600d546127209190612cbb565b600d556040517f2d608bfa5435b57232fa2a1e672e1812f34ffea8feedb55e1a2a2e6ead0e48fa9061275790899084908a90612d2c565b60405180910390a150505050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600154600160a01b900460ff16156127e35760405162461bcd60e51b815260040161085990612d4d565b6001805460ff60a01b1916600160a01b179055565b600154600160a01b900460ff166128485760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610859565b6001805460ff60a01b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6040518061014001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581526020015f81526020015f81526020015f81525090565b80356001600160a01b03811681146128eb575f5ffd5b919050565b8015158114610f5a575f5ffd5b5f5f6040838503121561290e575f5ffd5b612917836128d5565b91506020830135612927816128f0565b809150509250929050565b5f5f60408385031215612943575f5ffd5b82359150612953602084016128d5565b90509250929050565b5f6020828403121561296c575f5ffd5b612975826128d5565b9392505050565b5f6020828403121561298c575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156129b8575f5ffd5b6129c1836128d5565b9150602083013567ffffffffffffffff8111156129dc575f5ffd5b8301601f810185136129ec575f5ffd5b803567ffffffffffffffff811115612a0657612a06612993565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612a3357612a33612993565b604052918252602081840181019290810188841115612a50575f5ffd5b6020850194505b83851015612a7357843580825260209586019590935001612a57565b50809450505050509250929050565b5f5f60408385031215612a93575f5ffd5b612a9c836128d5565b946020939093013593505050565b5f5f5f5f60808587031215612abd575f5ffd5b612ac6856128d5565b966020860135965060408601359560600135945092505050565b5f5f5f60608486031215612af2575f5ffd5b83359250602084013591506040840135612b0b816128f0565b809150509250925092565b5f5f5f60608486031215612b28575f5ffd5b612b31846128d5565b95602085013595506040909401359392505050565b5f5f5f60608486031215612b58575f5ffd5b612b61846128d5565b9250602084013591506040840135612b0b816128f0565b5f5f60408385031215612b89575f5ffd5b612b92836128d5565b9150612953602084016128d5565b5f61018082019050845182526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c0850151612bf160c084018215159052565b5060e085015160e083015261010085015161010083015261012085015161012083015283610140830152612c2a61016083018415159052565b949350505050565b5f60208284031215612c42575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b6020808252601f908201527f596f7572207374616b6520697320616c72656164792077697468647261776e00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156107f3576107f3612c94565b818103818111156107f3576107f3612c94565b5f82612ce857634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215612d21575f5ffd5b8151612975816128f0565b6001600160a01b039390931683526020830191909152604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526025908201527f546869732074797065206f66204c6f636b696e67206973206e6f7420617661696040820152646c61626c6560d81b606082015260800190565b80820281158282048414176107f3576107f3612c9456fea26469706673582212201fd20a7f7ce5582a62fafc824f26af9fdaf6c5d3d318d7d69c219760a9ca92bb64736f6c634300081c0033000000000000000000000000674117e2571f5db55bfb204af2f67753ee4fae6f000000000000000000000000674117e2571f5db55bfb204af2f67753ee4fae6f000000000000000000000000674117e2571f5db55bfb204af2f67753ee4fae6f000000000000000000000000674117e2571f5db55bfb204af2f67753ee4fae6f
Deployed Bytecode
0x608060405260043610610220575f3560e01c80637c56d4031161011e578063a694fc3a116100a8578063cabe429c1161006d578063cabe429c146106ab578063f2fde38b146106ca578063f75a876d146106e9578063f848d54114610717578063ff05b1fd1461072c575f5ffd5b8063a694fc3a14610626578063abd17d7f14610639578063b0061e2114610658578063c4a9e11614610677578063c55b6bb71461068c575f5ffd5b806393f4bcde116100ee57806393f4bcde1461055657806394234e421461056a578063950189721461059857806395ccea67146105f2578063a208084e14610611575f5ffd5b80637c56d403146104dc578063869d8519146104fb5780638a3a56481461051a5780638da5cb5b14610539575f5ffd5b80634a0f9020116101aa5780635e11665d1161016f5780635e11665d1461044c5780636b036f451461046b5780636b51800d14610480578063715018a6146104b457806373f64499146104c8575f5ffd5b80634a0f9020146103a65780634abdf2e0146103c55780635070e837146103e4578063583daf6e146104035780635c975abb14610422575f5ffd5b806325d5971f116101f057806325d5971f146102b15780632d9517ce146102d05780632fdf64d7146102ef5780633078fff51461030457806343cca2941461033b575f5ffd5b8063024759c61461022b5780631d7e6cb91461024c578063238799b71461027357806325b6086614610292575f5ffd5b3661022757005b5f5ffd5b348015610236575f5ffd5b5061024a6102453660046128fd565b61074b565b005b348015610257575f5ffd5b5061026061077d565b6040519081526020015b60405180910390f35b34801561027e575f5ffd5b5061024a61028d366004612932565b6107f9565b34801561029d575f5ffd5b5061024a6102ac36600461295c565b610eeb565b3480156102bc575f5ffd5b5061024a6102cb36600461297c565b610f15565b3480156102db575f5ffd5b5061024a6102ea3660046129a7565b610f5d565b3480156102fa575f5ffd5b50610260600d5481565b34801561030f575f5ffd5b50600354610323906001600160a01b031681565b6040516001600160a01b03909116815260200161026a565b348015610346575f5ffd5b5061035a610355366004612a82565b6110e7565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a0860152151560c085015260e08401526101008301526101208201526101400161026a565b3480156103b1575f5ffd5b5061024a6103c0366004612aaa565b611156565b3480156103d0575f5ffd5b5061024a6103df36600461297c565b6114f0565b3480156103ef575f5ffd5b5061024a6103fe36600461295c565b611534565b34801561040e575f5ffd5b5061024a61041d36600461297c565b61155e565b34801561042d575f5ffd5b50600154600160a01b900460ff165b604051901515815260200161026a565b348015610457575f5ffd5b50600254610323906001600160a01b031681565b348015610476575f5ffd5b50610260600b5481565b34801561048b575f5ffd5b5061026061049a36600461295c565b6001600160a01b03165f908152600e602052604090205490565b3480156104bf575f5ffd5b5061024a61159b565b3480156104d3575f5ffd5b5061024a6115ae565b3480156104e7575f5ffd5b5061024a6104f6366004612ae0565b6115be565b348015610506575f5ffd5b5061024a610515366004612b16565b611634565b348015610525575f5ffd5b50600454610323906001600160a01b031681565b348015610544575f5ffd5b506001546001600160a01b0316610323565b348015610561575f5ffd5b5061024a611680565b348015610575575f5ffd5b5061043c61058436600461295c565b60106020525f908152604090205460ff1681565b3480156105a3575f5ffd5b506105d56105b236600461297c565b600f6020525f908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161026a565b3480156105fd575f5ffd5b5061024a61060c366004612a82565b611690565b34801561061c575f5ffd5b5061026060095481565b61024a61063436600461297c565b611a8d565b348015610644575f5ffd5b50610260610653366004612a82565b611e81565b348015610663575f5ffd5b5061024a610672366004612b46565b611f9d565b348015610682575f5ffd5b50610260600c5481565b348015610697575f5ffd5b5061024a6106a6366004612b78565b611ff7565b3480156106b6575f5ffd5b5061024a6106c536600461297c565b61202d565b3480156106d5575f5ffd5b5061024a6106e436600461295c565b612047565b3480156106f4575f5ffd5b50610708610703366004612a82565b6120bd565b60405161026a93929190612ba0565b348015610722575f5ffd5b50610260600a5481565b348015610737575f5ffd5b50600554610323906001600160a01b031681565b6107536121bf565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b5f5f60035f9054906101000a90046001600160a01b03166001600160a01b03166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f39190612c32565b92915050565b610801612219565b335f9081526010602052604090205460ff1615156001146108625760405162461bcd60e51b81526020600482015260166024820152752737ba10309031b7b6b6bab734ba3c9036b2b6b132b960511b60448201526064015b60405180910390fd5b6001600160a01b0381165f908152600e6020526040812080548490811061088b5761088b612c49565b5f9182526020918290206040805161014081018252600a90930290910180548352600180820154948401949094526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460ff16151560c08301819052600782015460e08401526008820154610100840152600990910154610120830152909250146109355760405162461bcd60e51b815260040161085990612c5d565b428160600151826040015161094a9190612ca8565b10801561095a57505f8160800151115b1561096e576109698284612270565b610edd565b5f600654826101200151426109839190612cbb565b61098d9190612cce565b90508161010001515f03610c6f57601e8110156109ff5760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e206f6e6c792077697468647261772070726f666974206166746044820152696572203330206461797360b01b6064820152608401610859565b5f610a0a8486611e81565b905060095442610a1a9190612cbb565b6001600160a01b0385165f908152600e60205260409020805487908110610a4357610a43612c49565b5f918252602082206009600a9092020101919091558115610c2d576001600160a01b0385165f908152600e60205260409020805483919088908110610a8a57610a8a612c49565b905f5260205f2090600a02016008015f828254610aa79190612ca8565b909155505060035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa158015610af3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b179190612c32565b9050610b238184612cce565b6002546005546040516323b872dd60e01b81529294506001600160a01b03918216926323b872dd92610b5d92169030908790600401612ced565b6020604051808303815f875af1158015610b79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9d9190612d11565b50600254604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b158015610be1575f5ffd5b505af1158015610bf3573d5f5f3e3d5ffd5b50506040516001600160a01b038916925084156108fc02915084905f818181858888f19350505050158015610c2a573d5f5f3e3d5ffd5b50505b7ff73daea325d178eecbfcc5124846ebe03950ec3ab8b435415ec31069f79309d8858288604051610c6093929190612d2c565b60405180910390a15050610edb565b5f610c7a8486611e81565b905060095442610c8a9190612cbb565b6001600160a01b0385165f908152600e60205260409020805487908110610cb357610cb3612c49565b5f918252602082206009600a9092020101919091558115610e9d576001600160a01b0385165f908152600e60205260409020805483919088908110610cfa57610cfa612c49565b905f5260205f2090600a02016008015f828254610d179190612ca8565b909155505060035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa158015610d63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d879190612c32565b9050610d938184612cce565b6002546005546040516323b872dd60e01b81529294506001600160a01b03918216926323b872dd92610dcd92169030908790600401612ced565b6020604051808303815f875af1158015610de9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0d9190612d11565b50600254604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b158015610e51575f5ffd5b505af1158015610e63573d5f5f3e3d5ffd5b50506040516001600160a01b038916925084156108fc02915084905f818181858888f19350505050158015610e9a573d5f5f3e3d5ffd5b50505b7ff73daea325d178eecbfcc5124846ebe03950ec3ab8b435415ec31069f79309d8858288604051610ed093929190612d2c565b60405180910390a150505b505b50610ee760015f55565b5050565b610ef36121bf565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff1615610f3f5760405162461bcd60e51b815260040161085990612d4d565b610f47612219565b610f513382612270565b610f5a60015f55565b50565b610f656121bf565b5f5b81518110156110d0575f610f9484848481518110610f8757610f87612c49565b6020026020010151611e81565b6001600160a01b0385165f908152600e6020526040902084519192508291859085908110610fc457610fc4612c49565b602002602001015181548110610fdc57610fdc612c49565b905f5260205f2090600a02016008015f828254610ff99190612ca8565b90915550506001600160a01b0384165f908152600e60205260408120845185908590811061102957611029612c49565b60200260200101518154811061104157611041612c49565b905f5260205f2090600a02016006015f6101000a81548160ff02191690831515021790555042600e5f866001600160a01b03166001600160a01b031681526020019081526020015f2084848151811061109c5761109c612c49565b6020026020010151815481106110b4576110b4612c49565b5f91825260209091206007600a90920201015550600101610f67565b508051600d546110e09190612cbb565b600d555050565b600e602052815f5260405f208181548110611100575f80fd5b5f9182526020909120600a90910201805460018201546002830154600384015460048501546005860154600687015460078801546008890154600990990154979a50959850939692959194909360ff169290918a565b61115e612219565b335f9081526010602052604090205460ff1615156001146111ba5760405162461bcd60e51b81526020600482015260166024820152752737ba10309031b7b6b6bab734ba3c9036b2b6b132b960511b6044820152606401610859565b5f818152600f602052604090206002015460ff1615156001146111ef5760405162461bcd60e51b815260040161085990612d77565b60035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa158015611236573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125a9190612c32565b90505f6112678286612dbc565b9050600b548510156112b55760405162461bcd60e51b815260206004820152601760248201527613195cdcc81d1a185b881b5a5b881cdd185ad948185b5d604a1b6044820152606401610859565b6007545f848152600f602052604081205490916112d191612dbc565b90506112db61288a565b86815f018181525050828160200181815250508581604001818152505081816060018181525050600f5f8681526020019081526020015f205f0154816080018181525050600f5f8681526020019081526020015f20600101548160a001818152505060018160c00190151590811515815250505f8160e00181815250505f816101000181815250508581610120018181525050600e5f896001600160a01b03166001600160a01b031681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600a02015f909190919091505f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548160ff02191690831515021790555060e08201518160070155610100820151816008015561012082015181600901555050600c5460016114429190612ca8565b600c55600d54611453906001612ca8565b600d556001600160a01b0388165f908152600e602052604081205461147a90600190612cbb565b604080516001600160a01b038c168152602081018b9052908101869052606081018990526080810188905260a081018290529091507f555e3b11590be24c2845b859c29cd0892deaef290a1e5423c794fd9d8298193b9060c00160405180910390a150505050506114ea60015f55565b50505050565b6114f86121bf565b600a8190556040518181527f8dba085cc4b8da9b11a47e2a28535086a34ceb6a968e767ece2cd53a27a1034c906020015b60405180910390a150565b61153c6121bf565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6115666121bf565b600b8190556040518181527f43398cd223587761303ed6d34d0cd15a8d8d44114c7a7f3b8110e221cfb8929090602001611529565b6115a36121bf565b6115ac5f612768565b565b6115b66121bf565b6115ac6127b9565b6115c66121bf565b5f838152600f602090815260409182902085815560018101859055600201805484151560ff19909116811790915582518681529182018590528183015290517fc8fd614e4dfbd0c17ddc5bfe72fa320eadb469251466c3aea236a7fdecc2a13a9181900360600190a1505050565b61163c6121bf565b6001600160a01b0383165f908152600e6020526040902080548291908490811061166857611668612c49565b905f5260205f2090600a020160020181905550505050565b6116886121bf565b6115ac6127f8565b611698612219565b6116a06121bf565b6001600160a01b0382165f908152600e602052604081208054839081106116c9576116c9612c49565b5f9182526020918290206040805161014081018252600a90930290910180548352600180820154948401949094526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460ff16151560c08301819052600782015460e08401526008820154610100840152600990910154610120830152909250146117735760405162461bcd60e51b815260040161085990612c5d565b5f61177e8484611e81565b90505f8115611850576001600160a01b0385165f908152600e602052604090208054839190869081106117b3576117b3612c49565b905f5260205f2090600a02016008015f8282546117d09190612ca8565b909155505060035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa15801561181c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118409190612c32565b905061184c8184612cce565b9150505b82515f9061185e9083612ca8565b6001600160a01b0387165f908152600e60205260408120805492935090918790811061188c5761188c612c49565b905f5260205f2090600a02016006015f6101000a81548160ff02191690831515021790555042600e5f886001600160a01b03166001600160a01b031681526020019081526020015f2086815481106118e6576118e6612c49565b905f5260205f2090600a02016007018190555042600e5f886001600160a01b03166001600160a01b031681526020019081526020015f20868154811061192e5761192e612c49565b5f91825260209091206009600a9092020101556002546005546040516323b872dd60e01b81526001600160a01b03928316926323b872dd926119799291169030908690600401612ced565b6020604051808303815f875af1158015611995573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b99190612d11565b50600254604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b1580156119fd575f5ffd5b505af1158015611a0f573d5f5f3e3d5ffd5b50506040516001600160a01b038916925083156108fc02915083905f818181858888f19350505050158015611a46573d5f5f3e3d5ffd5b506001600d54611a569190612cbb565b600d556040517f2d608bfa5435b57232fa2a1e672e1812f34ffea8feedb55e1a2a2e6ead0e48fa90610ed090889084908990612d2c565b600154600160a01b900460ff1615611ab75760405162461bcd60e51b815260040161085990612d4d565b611abf612219565b5f3411611b0e5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206d7573742062652067726561746572207468652030000000006044820152606401610859565b60035460408051634c6afee560e11b8152905134925f926001600160a01b03909116916398d5fdca916004808201926020929091908290030181865afa158015611b5a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b7e9190612c32565b90505f611b8b8234612dbc565b5f858152600f602052604090206002015490915060ff161515600114611bc35760405162461bcd60e51b815260040161085990612d77565b600b54831015611c0f5760405162461bcd60e51b815260206004820152601760248201527613195cdcc81d1a185b881b5a5b881cdd185ad948185b5d604a1b6044820152606401610859565b60025f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015611c5c575f5ffd5b505af1158015611c6e573d5f5f3e3d5ffd5b50506002546004805460405163a9059cbb60e01b81526001600160a01b039182169281019290925260248201899052909116935063a9059cbb925060440190506020604051808303815f875af1158015611cca573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cee9190612d11565b506007545f858152600f60205260408120549091611d0b91612dbc565b9050611d1561288a565b8481526020808201848152426040808501828152606086018781525f8c8152600f8752838120805460808a01908152600160c08b018181529281015460a08c0190815260e08c018581526101008d018681526101208e019a8b52338752600e8d52988620805480850182559087529b9095208c51600a909c02019a8b5598518a820155945160028a01559251600389015591516004880155945160058701555160068601805460ff19169115159190911790559251600785015551600884015551600990920191909155600c54611deb91612ca8565b600c55600d54611dfc906001612ca8565b600d55335f908152600e6020526040812054611e1a90600190612cbb565b60408051338152602081018990529081018690524260608201526080810189905260a081018290529091507f555e3b11590be24c2845b859c29cd0892deaef290a1e5423c794fd9d8298193b9060c00160405180910390a1505050505050610f5a60015f55565b6001600160a01b0382165f908152600e60205260408120805482919084908110611ead57611ead612c49565b5f91825260208083206040805161014081018252600a9094029091018054845260018101549284018390526002810154918401919091526003810154606084015260048101546080840152600581015460a0840152600681015460ff16151560c0840152600781015460e084015260088101546101008401526009015461012083018190529193509190611f419042612cbb565b905060065481611f519190612cce565b60a08401519091505f612710611f678386612dbc565b611f719190612cce565b90505f60085482611f829190612cce565b90505f611f8f8583612dbc565b9a9950505050505050505050565b611fa56121bf565b6001600160a01b0383165f908152600e60205260409020805482919084908110611fd157611fd1612c49565b5f9182526020909120600a90910201600601805460ff1916911515919091179055505050565b611fff6121bf565b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6120356121bf565b61204181610e10612dbc565b60095550565b61204f6121bf565b6001600160a01b0381166120b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610859565b610f5a81612768565b6120c561288a565b6001600160a01b0383165f908152600e60205260408120805482918291869081106120f2576120f2612c49565b5f91825260208083206040805161014081018252600a909402909101805484526001810154928401929092526002820154908301526003810154606083015260048101546080830152600581015460a0830152600681015460ff1615801560c0840152600782015460e0840152600882015461010084015260099091015461012083015290925081906121b1576121898888611e81565b91508260600151836040015161219f9190612ca8565b4210156121ad57505f6121b1565b5060015b919450925090509250925092565b6001546001600160a01b031633146115ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610859565b60025f540361226a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610859565b60025f55565b6001600160a01b0382165f908152600e6020526040812080548390811061229957612299612c49565b5f9182526020918290206040805161014081018252600a90930290910180548352600180820154948401949094526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460ff16151560c08301819052600782015460e08401526008820154610100840152600990910154610120830152909250146123435760405162461bcd60e51b815260040161085990612c5d565b42816060015182604001516123589190612ca8565b106123925760405162461bcd60e51b815260206004820152600a6024820152696e6f742065787069726560b01b6044820152606401610859565b5f600654826101200151426123a79190612cbb565b6123b19190612cce565b90505f6123be8585611e81565b6001600160a01b0386165f908152600e6020526040902080549192504291869081106123ec576123ec612c49565b905f5260205f2090600a0201600901819055505f83608001515f1480156124135750601e83105b1561241f57505f6124ee565b81156124ee576001600160a01b0386165f908152600e6020526040902080548391908790811061245157612451612c49565b905f5260205f2090600a02016008015f82825461246e9190612ca8565b909155505060035460408051634c6afee560e11b815290515f926001600160a01b0316916398d5fdca9160048083019260209291908290030181865afa1580156124ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124de9190612c32565b90506124ea8184612cce565b9150505b83515f906124fc9083612ca8565b9050600a5481106125755760405162461bcd60e51b815260206004820152603860248201527f5769746864726177204c696d69742063726f73732c20706c6561736520636f6e60448201527f6e65637420746f2068656c7020616e6420737570706f727400000000000000006064820152608401610859565b6001600160a01b0387165f908152600e6020526040812080548890811061259e5761259e612c49565b905f5260205f2090600a02016006015f6101000a81548160ff02191690831515021790555042600e5f896001600160a01b03166001600160a01b031681526020019081526020015f2087815481106125f8576125f8612c49565b5f91825260209091206007600a9092020101556002546005546040516323b872dd60e01b81526001600160a01b03928316926323b872dd926126439291169030908690600401612ced565b6020604051808303815f875af115801561265f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126839190612d11565b50600254604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b1580156126c7575f5ffd5b505af11580156126d9573d5f5f3e3d5ffd5b50506040516001600160a01b038a16925083156108fc02915083905f818181858888f19350505050158015612710573d5f5f3e3d5ffd5b506001600d546127209190612cbb565b600d556040517f2d608bfa5435b57232fa2a1e672e1812f34ffea8feedb55e1a2a2e6ead0e48fa9061275790899084908a90612d2c565b60405180910390a150505050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600154600160a01b900460ff16156127e35760405162461bcd60e51b815260040161085990612d4d565b6001805460ff60a01b1916600160a01b179055565b600154600160a01b900460ff166128485760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610859565b6001805460ff60a01b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6040518061014001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581526020015f81526020015f81526020015f81525090565b80356001600160a01b03811681146128eb575f5ffd5b919050565b8015158114610f5a575f5ffd5b5f5f6040838503121561290e575f5ffd5b612917836128d5565b91506020830135612927816128f0565b809150509250929050565b5f5f60408385031215612943575f5ffd5b82359150612953602084016128d5565b90509250929050565b5f6020828403121561296c575f5ffd5b612975826128d5565b9392505050565b5f6020828403121561298c575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156129b8575f5ffd5b6129c1836128d5565b9150602083013567ffffffffffffffff8111156129dc575f5ffd5b8301601f810185136129ec575f5ffd5b803567ffffffffffffffff811115612a0657612a06612993565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612a3357612a33612993565b604052918252602081840181019290810188841115612a50575f5ffd5b6020850194505b83851015612a7357843580825260209586019590935001612a57565b50809450505050509250929050565b5f5f60408385031215612a93575f5ffd5b612a9c836128d5565b946020939093013593505050565b5f5f5f5f60808587031215612abd575f5ffd5b612ac6856128d5565b966020860135965060408601359560600135945092505050565b5f5f5f60608486031215612af2575f5ffd5b83359250602084013591506040840135612b0b816128f0565b809150509250925092565b5f5f5f60608486031215612b28575f5ffd5b612b31846128d5565b95602085013595506040909401359392505050565b5f5f5f60608486031215612b58575f5ffd5b612b61846128d5565b9250602084013591506040840135612b0b816128f0565b5f5f60408385031215612b89575f5ffd5b612b92836128d5565b9150612953602084016128d5565b5f61018082019050845182526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c0850151612bf160c084018215159052565b5060e085015160e083015261010085015161010083015261012085015161012083015283610140830152612c2a61016083018415159052565b949350505050565b5f60208284031215612c42575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b6020808252601f908201527f596f7572207374616b6520697320616c72656164792077697468647261776e00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156107f3576107f3612c94565b818103818111156107f3576107f3612c94565b5f82612ce857634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215612d21575f5ffd5b8151612975816128f0565b6001600160a01b039390931683526020830191909152604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526025908201527f546869732074797065206f66204c6f636b696e67206973206e6f7420617661696040820152646c61626c6560d81b606082015260800190565b80820281158282048414176107f3576107f3612c9456fea26469706673582212201fd20a7f7ce5582a62fafc824f26af9fdaf6c5d3d318d7d69c219760a9ca92bb64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007B449f5eEbf5F493C570b3Bad10347d090Da3C9000000000000000000000000068dBA1A424f57CCD63Abc97E90d4db331E35FbB2000000000000000000000000D98e3c2CD628B919B22618F182698B0095027a200000000000000000000000014CF69368d31EAa682Cd140204653A1A06c34986
-----Decoded View---------------
Arg [0] : _WADF (address): 0x7B449f5eEbf5F493C570b3Bad10347d090Da3C90
Arg [1] : _priceAggregator (address): 0x68dBA1A424f57CCD63Abc97E90d4db331E35FbB2
Arg [2] : _adminIn (address): 0xeD98e3c2CD628B919B22618F182698B0095027a2
Arg [3] : _adminOut (address): 0x14CF69368d31EAa682Cd140204653A1A06c34986
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007B449f5eEbf5F493C570b3Bad10347d090Da3C90
Arg [1] : 00000000000000000000000068dBA1A424f57CCD63Abc97E90d4db331E35FbB2
Arg [2] : 000000000000000000000000eD98e3c2CD628B919B22618F182698B0095027a2
Arg [3] : 00000000000000000000000014CF69368d31EAa682Cd140204653A1A06c34986
Deployed Bytecode Sourcemap
19043:15605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33029:122;;;;;;;;;;-1:-1:-1;33029:122:0;;;;;:::i;:::-;;:::i;:::-;;31835:182;;;;;;;;;;;;;:::i;:::-;;;781:25:1;;;769:2;754:18;31835:182:0;;;;;;;;24904:2561;;;;;;;;;;-1:-1:-1;24904:2561:0;;;;;:::i;:::-;;:::i;33347:85::-;;;;;;;;;;-1:-1:-1;33347:85:0;;;;;:::i;:::-;;:::i;27473:133::-;;;;;;;;;;-1:-1:-1;27473:133:0;;;;;:::i;:::-;;:::i;33572:515::-;;;;;;;;;;-1:-1:-1;33572:515:0;;;;;:::i;:::-;;:::i;19491:31::-;;;;;;;;;;;;;;;;19134:30;;;;;;;;;;-1:-1:-1;19134:30:0;;;;-1:-1:-1;;;;;19134:30:0;;;;;;-1:-1:-1;;;;;3094:32:1;;;3076:51;;3064:2;3049:18;19134:30:0;2930:203:1;20157:44:0;;;;;;;;;;-1:-1:-1;20157:44:0;;;;;:::i;:::-;;:::i;:::-;;;;3932:25:1;;;3988:2;3973:18;;3966:34;;;;4016:18;;;4009:34;;;;4074:2;4059:18;;4052:34;;;;4117:3;4102:19;;4095:35;;;;4161:3;4146:19;;4139:35;4218:14;4211:22;4205:3;4190:19;;4183:51;4265:3;4250:19;;4243:35;4309:3;4294:19;;4287:35;4353:3;4338:19;;4331:35;3919:3;3904:19;20157:44:0;3539:833:1;23309:1520:0;;;;;;;;;;-1:-1:-1;23309:1520:0;;;;;:::i;:::-;;:::i;32659:167::-;;;;;;;;;;-1:-1:-1;32659:167:0;;;;;:::i;:::-;;:::i;33440:124::-;;;;;;;;;;-1:-1:-1;33440:124:0;;;;;:::i;:::-;;:::i;32834:187::-;;;;;;;;;;-1:-1:-1;32834:187:0;;;;;:::i;:::-;;:::i;17484:86::-;;;;;;;;;;-1:-1:-1;17555:7:0;;-1:-1:-1;;;17555:7:0;;;;17484:86;;;5088:14:1;;5081:22;5063:41;;5051:2;5036:18;17484:86:0;4923:187:1;19108:19:0;;;;;;;;;;-1:-1:-1;19108:19:0;;;;-1:-1:-1;;;;;19108:19:0;;;19419:33;;;;;;;;;;;;;;;;32026:160;;;;;;;;;;-1:-1:-1;32026:160:0;;;;;:::i;:::-;-1:-1:-1;;;;;32127:16:0;32086:7;32127:16;;;:9;:16;;;;;:23;;32026:160;2591:103;;;;;;;;;;;;;:::i;32503:68::-;;;;;;;;;;;;;:::i;34296:349::-;;;;;;;;;;-1:-1:-1;34296:349:0;;;;;:::i;:::-;;:::i;34095:193::-;;;;;;;;;;-1:-1:-1;34095:193:0;;;;;:::i;:::-;;:::i;19171:22::-;;;;;;;;;;-1:-1:-1;19171:22:0;;;;-1:-1:-1;;;;;19171:22:0;;;1943:87;;;;;;;;;;-1:-1:-1;2016:6:0;;-1:-1:-1;;;;;2016:6:0;1943:87;;32579:72;;;;;;;;;;;;;:::i;20267:41::-;;;;;;;;;;-1:-1:-1;20267:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20208:50;;;;;;;;;;-1:-1:-1;20208:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6222:25:1;;;6278:2;6263:18;;6256:34;;;;6333:14;6326:22;6306:18;;;6299:50;6210:2;6195:18;20208:50:0;6026:329:1;29316:1167:0;;;;;;;;;;-1:-1:-1;29316:1167:0;;;;;:::i;:::-;;:::i;19352:25::-;;;;;;;;;;;;;;;;21469:1716;;;;;;:::i;:::-;;:::i;30491:712::-;;;;;;;;;;-1:-1:-1;30491:712:0;;;;;:::i;:::-;;:::i;33159:180::-;;;;;;;;;;-1:-1:-1;33159:180:0;;;;;:::i;:::-;;:::i;19459:25::-;;;;;;;;;;;;;;;;32220:140;;;;;;;;;;-1:-1:-1;32220:140:0;;;;;:::i;:::-;;:::i;32368:127::-;;;;;;;;;;-1:-1:-1;32368:127:0;;;;;:::i;:::-;;:::i;2849:238::-;;;;;;;;;;-1:-1:-1;2849:238:0;;;;;:::i;:::-;;:::i;31246:581::-;;;;;;;;;;-1:-1:-1;31246:581:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;19384:28::-;;;;;;;;;;;;;;;;19200:23;;;;;;;;;;-1:-1:-1;19200:23:0;;;;-1:-1:-1;;;;;19200:23:0;;;33029:122;1829:13;:11;:13::i;:::-;-1:-1:-1;;;;;33113:20:0;;;::::1;;::::0;;;:9:::1;:20;::::0;;;;:30;;-1:-1:-1;;33113:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33029:122::o;31835:182::-;31881:7;31900:22;31942:15;;;;;;;;;-1:-1:-1;;;;;31942:15:0;-1:-1:-1;;;;;31925:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31900:69;31835:182;-1:-1:-1;;31835:182:0:o;24904:2561::-;16055:21;:19;:21::i;:::-;20960:10:::1;20950:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;:29;;:21:::0;:29:::1;20942:64;;;::::0;-1:-1:-1;;;20942:64:0;;8462:2:1;20942:64:0::1;::::0;::::1;8444:21:1::0;8501:2;8481:18;;;8474:30;-1:-1:-1;;;8520:18:1;;;8513:52;8582:18;;20942:64:0::1;;;;;;;;;-1:-1:-1::0;;;;;25061:16:0;::::2;25044:14;25061:16:::0;;;:9:::2;:16;::::0;;;;:24;;25078:6;;25061:24;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;25044:41:::2;::::0;;::::2;::::0;::::2;::::0;;25061:24:::2;::::0;;::::2;::::0;;::::2;25044:41:::0;;;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;;;;::::0;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;;;::::2;::::0;;::::2;::::0;;;;;;;-1:-1:-1;25104:16:0::2;25096:60;;;;-1:-1:-1::0;;;25096:60:0::2;;;;;;;:::i;:::-;25221:15;25202:1;:15;;;25188:1;:11;;;:29;;;;:::i;:::-;25187:49;:68;;;;;25254:1;25240;:11;;;:15;25187:68;25169:2289;;;25282:36;25304:5;25311:6;25282:21;:36::i;:::-;25169:2289;;;25351:18;25432:6;;25391:1;:20;;;25373:15;:38;;;;:::i;:::-;25372:66;;;;:::i;:::-;25351:87;;25457:1;:16;;;25477:1;25457:21:::0;25453:1994:::2;;25543:2;25529:10;:16;;25499:132;;;::::0;-1:-1:-1;;;25499:132:0;;9922:2:1;25499:132:0::2;::::0;::::2;9904:21:1::0;9961:2;9941:18;;;9934:30;10000:34;9980:18;;;9973:62;-1:-1:-1;;;10051:18:1;;;10044:40;10101:19;;25499:132:0::2;9720:406:1::0;25499:132:0::2;25652:17;25672:30;25688:5;25695:6;25672:15;:30::i;:::-;25652:50;;25788:10;;25770:15;:28;;;;:::i;:::-;-1:-1:-1::0;;;;;25723:16:0;::::2;;::::0;;;:9:::2;:16;::::0;;;;:24;;25740:6;;25723:24;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;:43:::2;:24;::::0;;::::2;;:43;:77:::0;;;;25863:13;;25859:595:::2;;-1:-1:-1::0;;;;;25901:16:0;::::2;;::::0;;;:9:::2;:16;::::0;;;;:24;;25944:9;;25901:16;25918:6;;25901:24;::::2;;;;;:::i;:::-;;;;;;;;;;;:39;;;:52;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26020:15:0::2;::::0;26003:70:::2;::::0;;-1:-1:-1;;;26003:70:0;;;;25978:22:::2;::::0;-1:-1:-1;;;;;26020:15:0::2;::::0;26003:68:::2;::::0;:70:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;26020:15;26003:70:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25978:95:::0;-1:-1:-1;26110:26:0::2;25978:95:::0;26110:9;:26:::2;:::i;:::-;26165:4;::::0;26210:8:::2;::::0;26159:160:::2;::::0;-1:-1:-1;;;26159:160:0;;26096:40;;-1:-1:-1;;;;;;26165:4:0;;::::2;::::0;26159:24:::2;::::0;:160:::2;::::0;26210:8:::2;::::0;26253:4:::2;::::0;26096:40;;26159:160:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26348:4:0::2;::::0;26342:33:::2;::::0;-1:-1:-1;;;26342:33:0;;::::2;::::0;::::2;781:25:1::0;;;-1:-1:-1;;;;;26348:4:0;;::::2;::::0;26342:20:::2;::::0;754:18:1;;26342:33:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;26398:36:0::2;::::0;-1:-1:-1;;;;;26398:23:0;::::2;::::0;-1:-1:-1;26398:36:0;::::2;;;::::0;-1:-1:-1;26422:11:0;;26398:36:::2;::::0;;;26422:11;26398:23;:36;::::2;;;;;;;;;;;;;;;;;;;;25878:576;25859:595;26479:42;26494:5;26501:11;26514:6;26479:42;;;;;;;;:::i;:::-;;;;;;;;25480:1057;;25453:1994;;;26562:17;26582:30;26598:5;26605:6;26582:15;:30::i;:::-;26562:50;;26698:10;;26680:15;:28;;;;:::i;:::-;-1:-1:-1::0;;;;;26633:16:0;::::2;;::::0;;;:9:::2;:16;::::0;;;;:24;;26650:6;;26633:24;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;:43:::2;:24;::::0;;::::2;;:43;:77:::0;;;;26773:13;;26769:595:::2;;-1:-1:-1::0;;;;;26811:16:0;::::2;;::::0;;;:9:::2;:16;::::0;;;;:24;;26854:9;;26811:16;26828:6;;26811:24;::::2;;;;;:::i;:::-;;;;;;;;;;;:39;;;:52;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26930:15:0::2;::::0;26913:70:::2;::::0;;-1:-1:-1;;;26913:70:0;;;;26888:22:::2;::::0;-1:-1:-1;;;;;26930:15:0::2;::::0;26913:68:::2;::::0;:70:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;26930:15;26913:70:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26888:95:::0;-1:-1:-1;27020:26:0::2;26888:95:::0;27020:9;:26:::2;:::i;:::-;27075:4;::::0;27120:8:::2;::::0;27069:160:::2;::::0;-1:-1:-1;;;27069:160:0;;27006:40;;-1:-1:-1;;;;;;27075:4:0;;::::2;::::0;27069:24:::2;::::0;:160:::2;::::0;27120:8:::2;::::0;27163:4:::2;::::0;27006:40;;27069:160:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27258:4:0::2;::::0;27252:33:::2;::::0;-1:-1:-1;;;27252:33:0;;::::2;::::0;::::2;781:25:1::0;;;-1:-1:-1;;;;;27258:4:0;;::::2;::::0;27252:20:::2;::::0;754:18:1;;27252:33:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27308:36:0::2;::::0;-1:-1:-1;;;;;27308:23:0;::::2;::::0;-1:-1:-1;27308:36:0;::::2;;;::::0;-1:-1:-1;27332:11:0;;27308:36:::2;::::0;;;27332:11;27308:23;:36;::::2;;;;;;;;;;;;;;;;;;;;26788:576;26769:595;27389:42;27404:5;27411:11;27424:6;27389:42;;;;;;;;:::i;:::-;;;;;;;;26543:904;;25453:1994;25336:2122;25169:2289;25033:2432;16099:20:::0;15493:1;16619:7;:22;16436:213;16099:20;24904:2561;;:::o;33347:85::-;1829:13;:11;:13::i;:::-;33412:4:::1;:12:::0;;-1:-1:-1;;;;;;33412:12:0::1;-1:-1:-1::0;;;;;33412:12:0;;;::::1;::::0;;;::::1;::::0;;33347:85::o;27473:133::-;17555:7;;-1:-1:-1;;;17555:7:0;;;;17809:9;17801:38;;;;-1:-1:-1;;;17801:38:0;;;;;;;:::i;:::-;16055:21:::1;:19;:21::i;:::-;27557:41:::2;27579:10;27591:6;27557:21;:41::i;:::-;16099:20:::1;15493:1:::0;16619:7;:22;16436:213;16099:20:::1;27473:133:::0;:::o;33572:515::-;1829:13;:11;:13::i;:::-;33696:9:::1;33691:327;33715:6;:13;33711:1;:17;33691:327;;;33750:17;33770:33;33786:5;33793:6;33800:1;33793:9;;;;;;;;:::i;:::-;;;;;;;33770:15;:33::i;:::-;-1:-1:-1::0;;;;;33820:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;33837:9;;33750:53;;-1:-1:-1;33750:53:0;;33837:6;;33844:1;;33837:9;::::1;;;;;:::i;:::-;;;;;;;33820:27;;;;;;;;:::i;:::-;;;;;;;;;;;:42;;;:55;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;33892:16:0;::::1;33929:5;33892:16:::0;;;:9:::1;:16;::::0;;;;33909:9;;:6;;33916:1;;33909:9;::::1;;;;;:::i;:::-;;;;;;;33892:27;;;;;;;;:::i;:::-;;;;;;;;;;;:34;;;:42;;;;;;;;;;;;;;;;;;33991:15;33949:9;:16;33959:5;-1:-1:-1::0;;;;;33949:16:0::1;-1:-1:-1::0;;;;;33949:16:0::1;;;;;;;;;;;;33966:6;33973:1;33966:9;;;;;;;;:::i;:::-;;;;;;;33949:27;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:39:::1;:27;::::0;;::::1;;:39;:57:::0;-1:-1:-1;33730:3:0::1;;33691:327;;;;34066:6;:13;34047:16;;:32;;;;:::i;:::-;34028:16;:51:::0;-1:-1:-1;;33572:515:0:o;20157:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20157:44:0;;-1:-1:-1;20157:44:0;;;;;;;;;;;;;;:::o;23309:1520::-;16055:21;:19;:21::i;:::-;20960:10:::1;20950:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;:29;;:21:::0;:29:::1;20942:64;;;::::0;-1:-1:-1;;;20942:64:0;;8462:2:1;20942:64:0::1;::::0;::::1;8444:21:1::0;8501:2;8481:18;;;8474:30;-1:-1:-1;;;8520:18:1;;;8513:52;8582:18;;20942:64:0::1;8260:346:1::0;20942:64:0::1;23517:26:::2;::::0;;;:11:::2;:26;::::0;;;;:33:::2;;::::0;::::2;;:41;;:33:::0;:41:::2;23495:128;;;;-1:-1:-1::0;;;23495:128:0::2;;;;;;;:::i;:::-;23676:15;::::0;23659:44:::2;::::0;;-1:-1:-1;;;23659:44:0;;;;23634:22:::2;::::0;-1:-1:-1;;;;;23676:15:0::2;::::0;23659:42:::2;::::0;:44:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;23676:15;23659:44:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23634:69:::0;-1:-1:-1;23716:18:0::2;23737:27;23634:69:::0;23737:10;:27:::2;:::i;:::-;23716:48;;23797:18;;23783:10;:32;;23775:68;;;::::0;-1:-1:-1;;;23775:68:0;;12233:2:1;23775:68:0::2;::::0;::::2;12215:21:1::0;12272:2;12252:18;;;12245:30;-1:-1:-1;;;12291:18:1;;;12284:53;12354:18;;23775:68:0::2;12031:347:1::0;23775:68:0::2;23958:8;::::0;23896:22:::2;23922:26:::0;;;:11:::2;:26;::::0;;;;:32;23896:22;;23921:45:::2;::::0;::::2;:::i;:::-;23896:70;;23979:19;;:::i;:::-;24029:10;24009:6;:17;;:30;;;::::0;::::2;24070:10;24050:6;:17;;:30;;;::::0;::::2;24110:10;24091:6;:16;;:29;;;::::0;::::2;24154:14;24131:6;:20;;:37;;;::::0;::::2;24198:11;:26;24210:13;24198:26;;;;;;;;;;;:32;;;24179:6;:16;;:51;;;::::0;::::2;24264:11;:26;24276:13;24264:26;;;;;;;;;;;:40;;;24241:6;:20;;:63;;;::::0;::::2;24331:4;24315:6;:13;;:20;;;;;;;;;::::0;::::2;24367:1;24346:6;:18;;:22;;;::::0;::::2;24403:1;24379:6;:21;;:25;;;::::0;::::2;24443:10;24415:6;:25;;:38;;;::::0;::::2;24466:9;:16;24476:5;-1:-1:-1::0;;;;;24466:16:0::2;-1:-1:-1::0;;;;;24466:16:0::2;;;;;;;;;;;;24488:6;24466:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24519:10;;24532:1;24519:14;;;;:::i;:::-;24506:10;:27:::0;24563:16:::2;::::0;:20:::2;::::0;24582:1:::2;24563:20;:::i;:::-;24544:16;:39:::0;-1:-1:-1;;;;;24611:16:0;::::2;24594:14;24611:16:::0;;;:9:::2;:16;::::0;;;;:23;:27:::2;::::0;24637:1:::2;::::0;24611:27:::2;:::i;:::-;24656:165;::::0;;-1:-1:-1;;;;;12688:32:1;;12670:51;;12752:2;12737:18;;12730:34;;;12780:18;;;12773:34;;;12838:2;12823:18;;12816:34;;;12881:3;12866:19;;12859:35;;;12708:3;12910:19;;12903:35;;;24594:44:0;;-1:-1:-1;24656:165:0::2;::::0;12657:3:1;12642:19;24656:165:0::2;;;;;;;23484:1345;;;;;16099:20:::0;15493:1;16619:7;:22;16436:213;16099:20;23309:1520;;;;:::o;32659:167::-;1829:13;:11;:13::i;:::-;32737::::1;:30:::0;;;32783:35:::1;::::0;781:25:1;;;32783:35:0::1;::::0;769:2:1;754:18;32783:35:0::1;;;;;;;;32659:167:::0;:::o;33440:124::-;1829:13;:11;:13::i;:::-;33522:15:::1;:34:::0;;-1:-1:-1;;;;;;33522:34:0::1;-1:-1:-1::0;;;;;33522:34:0;;;::::1;::::0;;;::::1;::::0;;33440:124::o;32834:187::-;1829:13;:11;:13::i;:::-;32918:18:::1;:40:::0;;;32974:39:::1;::::0;781:25:1;;;32974:39:0::1;::::0;769:2:1;754:18;32974:39:0::1;635:177:1::0;2591:103:0;1829:13;:11;:13::i;:::-;2656:30:::1;2683:1;2656:18;:30::i;:::-;2591:103::o:0;32503:68::-;1829:13;:11;:13::i;:::-;32555:8:::1;:6;:8::i;34296:349::-:0;1829:13;:11;:13::i;:::-;34433:19:::1;::::0;;;:11:::1;:19;::::0;;;;;;;;:34;;;34478:33:::1;::::0;::::1;:50:::0;;;34539:26:::1;;:36:::0;;;::::1;;-1:-1:-1::0;;34539:36:0;;::::1;::::0;::::1;::::0;;;34593:44;;6222:25:1;;;6263:18;;;6256:34;;;6306:18;;;6299:50;34593:44:0;;::::1;::::0;;;;6210:2:1;34593:44:0;;::::1;34296:349:::0;;;:::o;34095:193::-;1829:13;:11;:13::i;:::-;-1:-1:-1;;;;;34233:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:24;;34270:10;;34233:16;34250:6;;34233:24;::::1;;;;;:::i;:::-;;;;;;;;;;;:34;;:47;;;;34095:193:::0;;;:::o;32579:72::-;1829:13;:11;:13::i;:::-;32633:10:::1;:8;:10::i;29316:1167::-:0;16055:21;:19;:21::i;:::-;1829:13:::1;:11;:13::i;:::-;-1:-1:-1::0;;;;;29457:16:0;::::2;29440:14;29457:16:::0;;;:9:::2;:16;::::0;;;;:24;;29474:6;;29457:24;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;29440:41:::2;::::0;;::::2;::::0;::::2;::::0;;29457:24:::2;::::0;;::::2;::::0;;::::2;29440:41:::0;;;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;;;;::::0;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;;;::::2;::::0;;::::2;::::0;;;;;;;-1:-1:-1;29500:16:0::2;29492:60;;;;-1:-1:-1::0;;;29492:60:0::2;;;;;;;:::i;:::-;29563:17;29583:30;29599:5;29606:6;29583:15;:30::i;:::-;29563:50:::0;-1:-1:-1;29626:19:0::2;29660:13:::0;;29656:255:::2;;-1:-1:-1::0;;;;;29690:16:0;::::2;;::::0;;;:9:::2;:16;::::0;;;;:24;;29733:9;;29690:16;29707:6;;29690:24;::::2;;;;;:::i;:::-;;;;;;;;;;;:39;;;:52;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;29799:15:0::2;::::0;29782:62:::2;::::0;;-1:-1:-1;;;29782:62:0;;;;29757:22:::2;::::0;-1:-1:-1;;;;;29799:15:0::2;::::0;29782:60:::2;::::0;:62:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;29799:15;29782:62:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29757:87:::0;-1:-1:-1;29873:26:0::2;29757:87:::0;29873:9;:26:::2;:::i;:::-;29859:40;;29675:236;29656:255;29965:12:::0;;29923:25:::2;::::0;29951:26:::2;::::0;:11;:26:::2;:::i;:::-;-1:-1:-1::0;;;;;29990:16:0;::::2;30024:5;29990:16:::0;;;:9:::2;:16;::::0;;;;:24;;29923:54;;-1:-1:-1;30024:5:0;;30007:6;;29990:24;::::2;;;;;:::i;:::-;;;;;;;;;;;:31;;;:39;;;;;;;;;;;;;;;;;;30079:15;30040:9;:16;30050:5;-1:-1:-1::0;;;;;30040:16:0::2;-1:-1:-1::0;;;;;30040:16:0::2;;;;;;;;;;;;30057:6;30040:24;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;:54;;;;30151:15;30105:9;:16;30115:5;-1:-1:-1::0;;;;;30105:16:0::2;-1:-1:-1::0;;;;;30105:16:0::2;;;;;;;;;;;;30122:6;30105:24;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;:43:::2;:24;::::0;;::::2;;:43;:61:::0;30185:4:::2;::::0;30204:8:::2;::::0;30179:68:::2;::::0;-1:-1:-1;;;30179:68:0;;-1:-1:-1;;;;;30185:4:0;;::::2;::::0;30179:24:::2;::::0;:68:::2;::::0;30204:8;::::2;::::0;30222:4:::2;::::0;30229:17;;30179:68:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;30264:4:0::2;::::0;30258:39:::2;::::0;-1:-1:-1;;;30258:39:0;;::::2;::::0;::::2;781:25:1::0;;;-1:-1:-1;;;;;30264:4:0;;::::2;::::0;30258:20:::2;::::0;754:18:1;;30258:39:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30308:42:0::2;::::0;-1:-1:-1;;;;;30308:23:0;::::2;::::0;-1:-1:-1;30308:42:0;::::2;;;::::0;-1:-1:-1;30332:17:0;;30308:42:::2;::::0;;;30332:17;30308:23;:42;::::2;;;;;;;;;;;;;;;;;;;;30401:1;30382:16;;:20;;;;:::i;:::-;30363:16;:39:::0;30418:57:::2;::::0;::::2;::::0;::::2;::::0;30442:5;;30449:17;;30468:6;;30418:57:::2;:::i;21469:1716::-:0;17555:7;;-1:-1:-1;;;17555:7:0;;;;17809:9;17801:38;;;;-1:-1:-1;;;17801:38:0;;;;;;;:::i;:::-;16055:21:::1;:19;:21::i;:::-;21596:1:::2;21584:9;:13;21576:54;;;::::0;-1:-1:-1;;;21576:54:0;;13151:2:1;21576:54:0::2;::::0;::::2;13133:21:1::0;13190:2;13170:18;;;13163:30;13229;13209:18;;;13202:58;13277:18;;21576:54:0::2;12949:352:1::0;21576:54:0::2;21724:15;::::0;21707:44:::2;::::0;;-1:-1:-1;;;21707:44:0;;;;21662:9:::2;::::0;21641:18:::2;::::0;-1:-1:-1;;;;;21724:15:0;;::::2;::::0;21707:42:::2;::::0;:44:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;;21724:15;21707:44:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21682:69:::0;-1:-1:-1;21762:15:0::2;21780:26;21682:69:::0;21780:9:::2;:26;:::i;:::-;21841;::::0;;;:11:::2;:26;::::0;;;;:33:::2;;::::0;21762:44;;-1:-1:-1;21841:33:0::2;;:41;;:33:::0;:41:::2;21819:128;;;;-1:-1:-1::0;;;21819:128:0::2;;;;;;;:::i;:::-;21982:18;;21968:10;:32;;21960:68;;;::::0;-1:-1:-1;;;21960:68:0;;12233:2:1;21960:68:0::2;::::0;::::2;12215:21:1::0;12272:2;12252:18;;;12245:30;-1:-1:-1;;;12291:18:1;;;12284:53;12354:18;;21960:68:0::2;12031:347:1::0;21960:68:0::2;22090:4;;;;;;;;;-1:-1:-1::0;;;;;22090:4:0::2;-1:-1:-1::0;;;;;22084:19:0::2;;22111:9;22084:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22140:4:0::2;::::0;22155:7:::2;::::0;;22134:41:::2;::::0;-1:-1:-1;;;22134:41:0;;-1:-1:-1;;;;;22155:7:0;;::::2;22134:41:::0;;::::2;13480:51:1::0;;;;13547:18;;;13540:34;;;22140:4:0;;::::2;::::0;-1:-1:-1;22134:20:0::2;::::0;-1:-1:-1;13453:18:1;;;-1:-1:-1;22134:41:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22290:8:0::2;::::0;22228:22:::2;22254:26:::0;;;:11:::2;:26;::::0;;;;:32;22228:22;;22253:45:::2;::::0;::::2;:::i;:::-;22228:70;;22311:19;;:::i;:::-;22341:30:::0;;;22382:17:::2;::::0;;::::2;:27:::0;;;22439:15:::2;22420:16;::::0;;::::2;:34:::0;;;22465:20:::2;::::0;::::2;:37:::0;;;-1:-1:-1;22532:26:0;;;:11:::2;:26:::0;;;;;:32;;22513:16:::2;::::0;::::2;:51:::0;;;22591:4:::2;22575:13;::::0;::::2;:20:::0;;;22629:40;;::::2;::::0;22606:20:::2;::::0;::::2;:63:::0;;;22680:18:::2;::::0;::::2;:22:::0;;;22713:21:::2;::::0;::::2;:25:::0;;;22749::::2;::::0;::::2;:43:::0;;;22815:10:::2;22805:21:::0;;:9:::2;:21:::0;;;;;:34;;;;::::2;::::0;;;;;;;;;;;::::2;::::0;;::::2;;::::0;;;;;;;::::2;::::0;;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;;22805:34:0::2;::::0;::::2;;::::0;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;22863:10:::2;::::0;:14:::2;::::0;::::2;:::i;:::-;22850:10;:27:::0;22907:16:::2;::::0;:20:::2;::::0;22926:1:::2;22907:20;:::i;:::-;22888:16;:39:::0;22965:10:::2;22938:14;22955:21:::0;;;:9:::2;:21;::::0;;;;:28;:32:::2;::::0;22986:1:::2;::::0;22955:32:::2;:::i;:::-;23005:172;::::0;;23030:10:::2;12670:51:1::0;;12752:2;12737:18;;12730:34;;;12780:18;;;12773:34;;;23102:15:0::2;12838:2:1::0;12823:18;;12816:34;12881:3;12866:19;;12859:35;;;12708:3;12910:19;;12903:35;;;22938:49:0;;-1:-1:-1;23005:172:0::2;::::0;12657:3:1;12642:19;23005:172:0::2;;;;;;;21565:1620;;;;;;16099:20:::1;15493:1:::0;16619:7;:22;16436:213;30491:712;-1:-1:-1;;;;;30630:16:0;;30593:7;30630:16;;;:9;:16;;;;;:24;;30593:7;;30630:16;30647:6;;30630:24;;;;;;:::i;:::-;;;;;;;;;30613:41;;;;;;;;30630:24;;;;;;;30613:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30613:41:0;30630:24;30760:38;;:15;:38;:::i;:::-;30735:63;;30877:6;;30860:14;:23;;;;:::i;:::-;30918:15;;;;30843:40;;-1:-1:-1;30896:19:0;31017:5;30991:22;30918:15;30991:8;:22;:::i;:::-;30990:32;;;;:::i;:::-;30965:57;;31051:21;31092:7;;31075:14;:24;;;;:::i;:::-;31051:48;-1:-1:-1;31112:20:0;31135:30;31151:14;31051:48;31135:30;:::i;:::-;31112:53;30491:712;-1:-1:-1;;;;;;;;;;30491:712:0:o;33159:180::-;1829:13;:11;:13::i;:::-;-1:-1:-1;;;;;33290:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:24;;33324:7;;33290:16;33307:6;;33290:24;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:31;;:41:::0;;-1:-1:-1;;33290:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;;33159:180:0:o;32220:140::-;1829:13;:11;:13::i;:::-;32303:7:::1;:18:::0;;-1:-1:-1;;;;;32303:18:0;;::::1;-1:-1:-1::0;;;;;;32303:18:0;;::::1;;::::0;;;32332:8:::1;:20:::0;;;;;::::1;::::0;::::1;;::::0;;32220:140::o;32368:127::-;1829:13;:11;:13::i;:::-;32469:18:::1;:11:::0;32483:4:::1;32469:18;:::i;:::-;32456:10;:31:::0;-1:-1:-1;32368:127:0:o;2849:238::-;1829:13;:11;:13::i;:::-;-1:-1:-1;;;;;2952:22:0;::::1;2930:110;;;::::0;-1:-1:-1;;;2930:110:0;;13787:2:1;2930:110:0::1;::::0;::::1;13769:21:1::0;13826:2;13806:18;;;13799:30;13865:34;13845:18;;;13838:62;-1:-1:-1;;;13916:18:1;;;13909:36;13962:19;;2930:110:0::1;13585:402:1::0;2930:110:0::1;3051:28;3070:8;3051:18;:28::i;31246:581::-:0;31345:12;;:::i;:::-;-1:-1:-1;;;;;31402:16:0;;31359:7;31402:16;;;:9;:16;;;;;:24;;31359:7;;;;31419:6;;31402:24;;;;;;:::i;:::-;;;;;;;;;31385:41;;;;;;;;31402:24;;;;;;;31385:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31402:24:0;;31498:271;;31545:30;31561:5;31568:6;31545:15;:30::i;:::-;31527:48;;31627:1;:15;;;31613:1;:11;;;:29;;;;:::i;:::-;31594:15;:49;31590:168;;;-1:-1:-1;31678:5:0;31590:168;;;-1:-1:-1;31738:4:0;31590:168;31787:1;;-1:-1:-1;31790:15:0;-1:-1:-1;31807:11:0;-1:-1:-1;31246:581:0;;;;;:::o;2108:132::-;2016:6;;-1:-1:-1;;;;;2016:6:0;680:10;2172:23;2164:68;;;;-1:-1:-1;;;2164:68:0;;14194:2:1;2164:68:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;2164:68:0;13992:356:1;16135:293:0;15537:1;16269:7;;:19;16261:63;;;;-1:-1:-1;;;16261:63:0;;14555:2:1;16261:63:0;;;14537:21:1;14594:2;14574:18;;;14567:30;14633:33;14613:18;;;14606:61;14684:18;;16261:63:0;14353:355:1;16261:63:0;15537:1;16402:7;:18;16135:293::o;27614:1654::-;-1:-1:-1;;;;;27744:16:0;;27727:14;27744:16;;;:9;:16;;;;;:24;;27761:6;;27744:24;;;;;;:::i;:::-;;;;;;;;;;27727:41;;;;;;;;27744:24;;;;;;;27727:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27787:16:0;27779:60;;;;-1:-1:-1;;;27779:60:0;;;;;;;:::i;:::-;27906:15;27887:1;:15;;;27873:1;:11;;;:29;;;;:::i;:::-;27872:49;27850:109;;;;-1:-1:-1;;;27850:109:0;;14915:2:1;27850:109:0;;;14897:21:1;14954:2;14934:18;;;14927:30;-1:-1:-1;;;14973:18:1;;;14966:40;15023:18;;27850:109:0;14713:334:1;27850:109:0;27972:18;28036:6;;28012:1;:20;;;27994:15;:38;;;;:::i;:::-;27993:49;;;;:::i;:::-;27972:70;;28055:17;28075:30;28091:5;28098:6;28075:15;:30::i;:::-;-1:-1:-1;;;;;28118:16:0;;;;;;:9;:16;;;;;:24;;28055:50;;-1:-1:-1;28164:15:0;;28135:6;;28118:24;;;;;;:::i;:::-;;;;;;;;;;;:43;;:61;;;;28192:19;28228:1;:11;;;28243:1;28228:16;:35;;;;;28261:2;28248:10;:15;28228:35;28224:390;;;-1:-1:-1;28294:1:0;28224:390;;;28332:13;;28328:275;;-1:-1:-1;;;;;28366:16:0;;;;;;:9;:16;;;;;:24;;28409:9;;28366:16;28383:6;;28366:24;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;28479:15:0;;28462:66;;;-1:-1:-1;;;28462:66:0;;;;28437:22;;-1:-1:-1;;;;;28479:15:0;;28462:64;;:66;;;;;;;;;;;;;;28479:15;28462:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28437:91;-1:-1:-1;28561:26:0;28437:91;28561:9;:26;:::i;:::-;28547:40;;28347:256;28328:275;28668:12;;28626:25;;28654:26;;:11;:26;:::i;:::-;28626:54;;28733:13;;28713:17;:33;28691:139;;;;-1:-1:-1;;;28691:139:0;;15254:2:1;28691:139:0;;;15236:21:1;15293:2;15273:18;;;15266:30;15332:34;15312:18;;;15305:62;15403:26;15383:18;;;15376:54;15447:19;;28691:139:0;15052:420:1;28691:139:0;-1:-1:-1;;;;;28843:16:0;;28877:5;28843:16;;;:9;:16;;;;;:24;;28860:6;;28843:24;;;;;;:::i;:::-;;;;;;;;;;;:31;;;:39;;;;;;;;;;;;;;;;;;28932:15;28893:9;:16;28903:5;-1:-1:-1;;;;;28893:16:0;-1:-1:-1;;;;;28893:16:0;;;;;;;;;;;;28910:6;28893:24;;;;;;;;:::i;:::-;;;;;;;;;:36;:24;;;;;:36;:54;28966:4;;28985:8;;28960:68;;-1:-1:-1;;;28960:68:0;;-1:-1:-1;;;;;28966:4:0;;;;28960:24;;:68;;28985:8;;;29003:4;;29010:17;;28960:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29047:4:0;;29041:39;;-1:-1:-1;;;29041:39:0;;;;;781:25:1;;;-1:-1:-1;;;;;29047:4:0;;;;29041:20;;754:18:1;;29041:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29091:42:0;;-1:-1:-1;;;;;29091:23:0;;;-1:-1:-1;29091:42:0;;;;;-1:-1:-1;29115:17:0;;29091:42;;;;29115:17;29091:23;:42;;;;;;;;;;;;;;;;;;;;;29184:1;29165:16;;:20;;;;:::i;:::-;29146:16;:39;29203:57;;;;;;29227:5;;29234:17;;29253:6;;29203:57;:::i;:::-;;;;;;;;27685:1583;;;;;27614:1654;;:::o;3247:191::-;3340:6;;;-1:-1:-1;;;;;3357:17:0;;;-1:-1:-1;;;;;;3357:17:0;;;;;;;3390:40;;3340:6;;;3357:17;3340:6;;3390:40;;3321:16;;3390:40;3310:128;3247:191;:::o;18284:82::-;17555:7;;-1:-1:-1;;;17555:7:0;;;;17809:9;17801:38;;;;-1:-1:-1;;;17801:38:0;;;;;;;:::i;:::-;18354:4:::1;18344:14:::0;;-1:-1:-1;;;;18344:14:0::1;-1:-1:-1::0;;;18344:14:0::1;::::0;;18284:82::o;18507:120::-;17555:7;;-1:-1:-1;;;17555:7:0;;;;18079:41;;;;-1:-1:-1;;;18079:41:0;;15679:2:1;18079:41:0;;;15661:21:1;15718:2;15698:18;;;15691:30;-1:-1:-1;;;15737:18:1;;;15730:50;15797:18;;18079:41:0;15477:344:1;18079:41:0;18566:7:::1;:15:::0;;-1:-1:-1;;;;18566:15:0::1;::::0;;18597:22:::1;::::0;;680:10;3076:51:1;;18597:22:0;;::::1;::::0;;;;3064:2:1;18597:22:0;;::::1;18507:120::o:0;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:118::-;278:5;271:13;264:21;257:5;254:32;244:60;;300:1;297;290:12;315:315;380:6;388;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;480:29;499:9;480:29;:::i;:::-;470:39;;559:2;548:9;544:18;531:32;572:28;594:5;572:28;:::i;:::-;619:5;609:15;;;315:315;;;;;:::o;817:300::-;885:6;893;946:2;934:9;925:7;921:23;917:32;914:52;;;962:1;959;952:12;914:52;1007:23;;;-1:-1:-1;1073:38:1;1107:2;1092:18;;1073:38;:::i;:::-;1063:48;;817:300;;;;;:::o;1122:186::-;1181:6;1234:2;1222:9;1213:7;1209:23;1205:32;1202:52;;;1250:1;1247;1240:12;1202:52;1273:29;1292:9;1273:29;:::i;:::-;1263:39;1122:186;-1:-1:-1;;;1122:186:1:o;1313:226::-;1372:6;1425:2;1413:9;1404:7;1400:23;1396:32;1393:52;;;1441:1;1438;1431:12;1393:52;-1:-1:-1;1486:23:1;;1313:226;-1:-1:-1;1313:226:1:o;1544:127::-;1605:10;1600:3;1596:20;1593:1;1586:31;1636:4;1633:1;1626:15;1660:4;1657:1;1650:15;1676:1249;1769:6;1777;1830:2;1818:9;1809:7;1805:23;1801:32;1798:52;;;1846:1;1843;1836:12;1798:52;1869:29;1888:9;1869:29;:::i;:::-;1859:39;;1949:2;1938:9;1934:18;1921:32;1976:18;1968:6;1965:30;1962:50;;;2008:1;2005;1998:12;1962:50;2031:22;;2084:4;2076:13;;2072:27;-1:-1:-1;2062:55:1;;2113:1;2110;2103:12;2062:55;2153:2;2140:16;2179:18;2171:6;2168:30;2165:56;;;2201:18;;:::i;:::-;2247:6;2244:1;2240:14;2283:2;2277:9;2346:2;2342:7;2337:2;2333;2329:11;2325:25;2317:6;2313:38;2417:6;2405:10;2402:22;2381:18;2369:10;2366:34;2363:62;2360:88;;;2428:18;;:::i;:::-;2464:2;2457:22;2514;;;2564:2;2594:11;;;2590:20;;;2514:22;2552:15;;2622:19;;;2619:39;;;2654:1;2651;2644:12;2619:39;2686:2;2682;2678:11;2667:22;;2698:196;2714:6;2709:3;2706:15;2698:196;;;2804:17;;2834:18;;;2881:2;2731:12;;;;2804:17;;-1:-1:-1;2872:12:1;2698:196;;;2702:3;2913:6;2903:16;;;;;;1676:1249;;;;;:::o;3138:300::-;3206:6;3214;3267:2;3255:9;3246:7;3242:23;3238:32;3235:52;;;3283:1;3280;3273:12;3235:52;3306:29;3325:9;3306:29;:::i;:::-;3296:39;3404:2;3389:18;;;;3376:32;;-1:-1:-1;;;3138:300:1:o;4377:541::-;4463:6;4471;4479;4487;4540:3;4528:9;4519:7;4515:23;4511:33;4508:53;;;4557:1;4554;4547:12;4508:53;4580:29;4599:9;4580:29;:::i;:::-;4570:39;4678:2;4663:18;;4650:32;;-1:-1:-1;4779:2:1;4764:18;;4751:32;;4882:2;4867:18;4854:32;;-1:-1:-1;4377:541:1;-1:-1:-1;;;4377:541:1:o;5115:481::-;5189:6;5197;5205;5258:2;5246:9;5237:7;5233:23;5229:32;5226:52;;;5274:1;5271;5264:12;5226:52;5319:23;;;-1:-1:-1;5439:2:1;5424:18;;5411:32;;-1:-1:-1;5521:2:1;5506:18;;5493:32;5534:30;5493:32;5534:30;:::i;:::-;5583:7;5573:17;;;5115:481;;;;;:::o;5601:420::-;5678:6;5686;5694;5747:2;5735:9;5726:7;5722:23;5718:32;5715:52;;;5763:1;5760;5753:12;5715:52;5786:29;5805:9;5786:29;:::i;:::-;5776:39;5884:2;5869:18;;5856:32;;-1:-1:-1;5985:2:1;5970:18;;;5957:32;;5601:420;-1:-1:-1;;;5601:420:1:o;6360:435::-;6434:6;6442;6450;6503:2;6491:9;6482:7;6478:23;6474:32;6471:52;;;6519:1;6516;6509:12;6471:52;6542:29;6561:9;6542:29;:::i;:::-;6532:39;-1:-1:-1;6640:2:1;6625:18;;6612:32;;-1:-1:-1;6720:2:1;6705:18;;6692:32;6733:30;6692:32;6733:30;:::i;6800:260::-;6868:6;6876;6929:2;6917:9;6908:7;6904:23;6900:32;6897:52;;;6945:1;6942;6935:12;6897:52;6968:29;6987:9;6968:29;:::i;:::-;6958:39;;7016:38;7050:2;7039:9;7035:18;7016:38;:::i;7065:1001::-;7251:4;7293:3;7282:9;7278:19;7270:27;;7330:6;7324:13;7313:9;7306:32;7394:4;7386:6;7382:17;7376:24;7369:4;7358:9;7354:20;7347:54;7457:4;7449:6;7445:17;7439:24;7432:4;7421:9;7417:20;7410:54;7520:4;7512:6;7508:17;7502:24;7495:4;7484:9;7480:20;7473:54;7583:4;7575:6;7571:17;7565:24;7558:4;7547:9;7543:20;7536:54;7646:4;7638:6;7634:17;7628:24;7621:4;7610:9;7606:20;7599:54;7700:4;7692:6;7688:17;7682:24;7715:51;7760:4;7749:9;7745:20;7731:12;3513:13;3506:21;3494:34;;3443:91;7715:51;;7822:4;7814:6;7810:17;7804:24;7797:4;7786:9;7782:20;7775:54;7887:6;7879;7875:19;7869:26;7860:6;7849:9;7845:22;7838:58;7954:6;7946;7942:19;7936:26;7927:6;7916:9;7912:22;7905:58;8000:6;7994:3;7983:9;7979:19;7972:35;8016:44;8055:3;8044:9;8040:19;8032:6;3513:13;3506:21;3494:34;;3443:91;8016:44;7065:1001;;;;;;:::o;8071:184::-;8141:6;8194:2;8182:9;8173:7;8169:23;8165:32;8162:52;;;8210:1;8207;8200:12;8162:52;-1:-1:-1;8233:16:1;;8071:184;-1:-1:-1;8071:184:1:o;8611:127::-;8672:10;8667:3;8663:20;8660:1;8653:31;8703:4;8700:1;8693:15;8727:4;8724:1;8717:15;8743:355;8945:2;8927:21;;;8984:2;8964:18;;;8957:30;9023:33;9018:2;9003:18;;8996:61;9089:2;9074:18;;8743:355::o;9103:127::-;9164:10;9159:3;9155:20;9152:1;9145:31;9195:4;9192:1;9185:15;9219:4;9216:1;9209:15;9235:125;9300:9;;;9321:10;;;9318:36;;;9334:18;;:::i;9365:128::-;9432:9;;;9453:11;;;9450:37;;;9467:18;;:::i;9498:217::-;9538:1;9564;9554:132;;9608:10;9603:3;9599:20;9596:1;9589:31;9643:4;9640:1;9633:15;9671:4;9668:1;9661:15;9554:132;-1:-1:-1;9700:9:1;;9498:217::o;10131:371::-;-1:-1:-1;;;;;10351:32:1;;;10333:51;;10420:32;;;;10415:2;10400:18;;10393:60;10484:2;10469:18;;10462:34;;;;10321:2;10306:18;;10131:371::o;10507:245::-;10574:6;10627:2;10615:9;10606:7;10602:23;10598:32;10595:52;;;10643:1;10640;10633:12;10595:52;10675:9;10669:16;10694:28;10716:5;10694:28;:::i;10757:345::-;-1:-1:-1;;;;;10977:32:1;;;;10959:51;;11041:2;11026:18;;11019:34;;;;11084:2;11069:18;;11062:34;10947:2;10932:18;;10757:345::o;11107:340::-;11309:2;11291:21;;;11348:2;11328:18;;;11321:30;-1:-1:-1;;;11382:2:1;11367:18;;11360:46;11438:2;11423:18;;11107:340::o;11452:401::-;11654:2;11636:21;;;11693:2;11673:18;;;11666:30;11732:34;11727:2;11712:18;;11705:62;-1:-1:-1;;;11798:2:1;11783:18;;11776:35;11843:3;11828:19;;11452:401::o;11858:168::-;11931:9;;;11962;;11979:15;;;11973:22;;11959:37;11949:71;;12000:18;;:::i
Swarm Source
ipfs://1fd20a7f7ce5582a62fafc824f26af9fdaf6c5d3d318d7d69c219760a9ca92bb
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 .