Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MemberRoles
Compiler Version
v0.5.7+commit.6da8b019
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-29
*/
// File: contracts/external/openzeppelin-solidity/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
library SafeMath64 {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint64 a, uint64 b) internal pure returns (uint64) {
uint64 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint64 a, uint64 b) internal pure returns (uint64) {
require(b <= a, "SafeMath: subtraction overflow");
uint64 c = a - b;
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint64 a, uint64 b, string memory errorMessage) internal pure returns (uint64) {
require(b <= a, errorMessage);
uint64 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint64 a, uint64 b) internal pure returns (uint64) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint64 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint64 a, uint64 b) internal pure returns (uint64) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
uint64 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint64 a, uint64 b) internal pure returns (uint64) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
// File: contracts/external/govblocks-protocol/interfaces/IMemberRoles.sol
/* Copyright (C) 2017 GovBlocks.io
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/ */
pragma solidity 0.5.7;
contract IMemberRoles {
event MemberRole(uint256 indexed roleId, bytes32 roleName, string roleDescription);
enum Role {UnAssigned, AdvisoryBoard, TokenHolder, DisputeResolution}
function setInititorAddress(address _initiator) external;
/// @dev Adds new member role
/// @param _roleName New role name
/// @param _roleDescription New description hash
/// @param _authorized Authorized member against every role id
function addRole(bytes32 _roleName, string memory _roleDescription, address _authorized) public;
/// @dev Assign or Delete a member from specific role.
/// @param _memberAddress Address of Member
/// @param _roleId RoleId to update
/// @param _active active is set to be True if we want to assign this role to member, False otherwise!
function updateRole(address _memberAddress, uint _roleId, bool _active) public;
/// @dev Change Member Address who holds the authority to Add/Delete any member from specific role.
/// @param _roleId roleId to update its Authorized Address
/// @param _authorized New authorized address against role id
function changeAuthorized(uint _roleId, address _authorized) public;
/// @dev Return number of member roles
function totalRoles() public view returns(uint256);
/// @dev Gets the member addresses assigned by a specific role
/// @param _memberRoleId Member role id
/// @return roleId Role id
/// @return allMemberAddress Member addresses of specified role id
function members(uint _memberRoleId) public view returns(uint, address[] memory allMemberAddress);
/// @dev Gets all members' length
/// @param _memberRoleId Member role id
/// @return memberRoleData[_memberRoleId].memberAddress.length Member length
function numberOfMembers(uint _memberRoleId) public view returns(uint);
/// @dev Return member address who holds the right to add/remove any member from specific role.
function authorized(uint _memberRoleId) public view returns(address);
/// @dev Get All role ids array that has been assigned to a member so far.
function roles(address _memberAddress) public view returns(uint[] memory assignedRoles);
/// @dev Returns true if the given role id is assigned to a member.
/// @param _memberAddress Address of member
/// @param _roleId Checks member's authenticity with the roleId.
/// i.e. Returns true if this roleId is assigned to member
function checkRole(address _memberAddress, uint _roleId) public view returns(bool);
}
// File: contracts/external/govblocks-protocol/Governed.sol
/* Copyright (C) 2017 GovBlocks.io
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/ */
pragma solidity 0.5.7;
contract IMaster {
mapping(address => bool) public whitelistedSponsor;
function dAppToken() public view returns(address);
function isInternal(address _address) public view returns(bool);
function getLatestAddress(bytes2 _module) public view returns(address);
function isAuthorizedToGovern(address _toCheck) public view returns(bool);
}
contract Governed {
address public masterAddress; // Name of the dApp, needs to be set by contracts inheriting this contract
/// @dev modifier that allows only the authorized addresses to execute the function
modifier onlyAuthorizedToGovern() {
IMaster ms = IMaster(masterAddress);
require(ms.getLatestAddress("GV") == msg.sender, "Not authorized");
_;
}
/// @dev checks if an address is authorized to govern
function isAuthorizedToGovern(address _toCheck) public view returns(bool) {
IMaster ms = IMaster(masterAddress);
return (ms.getLatestAddress("GV") == _toCheck);
}
}
// File: contracts/external/proxy/Proxy.sol
pragma solidity 0.5.7;
/**
* @title Proxy
* @dev Gives the possibility to delegate any call to a foreign implementation.
*/
contract Proxy {
/**
* @dev Fallback function allowing to perform a delegatecall to the given implementation.
* This function will return whatever the implementation call returns
*/
function () external payable {
address _impl = implementation();
require(_impl != address(0));
assembly {
let ptr := mload(0x40)
calldatacopy(ptr, 0, calldatasize)
let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0)
let size := returndatasize
returndatacopy(ptr, 0, size)
switch result
case 0 { revert(ptr, size) }
default { return(ptr, size) }
}
}
/**
* @dev Tells the address of the implementation where every call will be delegated.
* @return address of the implementation to which it will be delegated
*/
function implementation() public view returns (address);
}
// File: contracts/external/proxy/UpgradeabilityProxy.sol
pragma solidity 0.5.7;
/**
* @title UpgradeabilityProxy
* @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded
*/
contract UpgradeabilityProxy is Proxy {
/**
* @dev This event will be emitted every time the implementation gets upgraded
* @param implementation representing the address of the upgraded implementation
*/
event Upgraded(address indexed implementation);
// Storage position of the address of the current implementation
bytes32 private constant IMPLEMENTATION_POSITION = keccak256("org.govblocks.proxy.implementation");
/**
* @dev Constructor function
*/
constructor() public {}
/**
* @dev Tells the address of the current implementation
* @return address of the current implementation
*/
function implementation() public view returns (address impl) {
bytes32 position = IMPLEMENTATION_POSITION;
assembly {
impl := sload(position)
}
}
/**
* @dev Sets the address of the current implementation
* @param _newImplementation address representing the new implementation to be set
*/
function _setImplementation(address _newImplementation) internal {
bytes32 position = IMPLEMENTATION_POSITION;
assembly {
sstore(position, _newImplementation)
}
}
/**
* @dev Upgrades the implementation address
* @param _newImplementation representing the address of the new implementation to be set
*/
function _upgradeTo(address _newImplementation) internal {
address currentImplementation = implementation();
require(currentImplementation != _newImplementation);
_setImplementation(_newImplementation);
emit Upgraded(_newImplementation);
}
}
// File: contracts/external/proxy/OwnedUpgradeabilityProxy.sol
pragma solidity 0.5.7;
/**
* @title OwnedUpgradeabilityProxy
* @dev This contract combines an upgradeability proxy with basic authorization control functionalities
*/
contract OwnedUpgradeabilityProxy is UpgradeabilityProxy {
/**
* @dev Event to show ownership has been transferred
* @param previousOwner representing the address of the previous owner
* @param newOwner representing the address of the new owner
*/
event ProxyOwnershipTransferred(address previousOwner, address newOwner);
// Storage position of the owner of the contract
bytes32 private constant PROXY_OWNER_POSITION = keccak256("org.govblocks.proxy.owner");
/**
* @dev the constructor sets the original owner of the contract to the sender account.
*/
constructor(address _implementation) public {
_setUpgradeabilityOwner(msg.sender);
_upgradeTo(_implementation);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyProxyOwner() {
require(msg.sender == proxyOwner());
_;
}
/**
* @dev Tells the address of the owner
* @return the address of the owner
*/
function proxyOwner() public view returns (address owner) {
bytes32 position = PROXY_OWNER_POSITION;
assembly {
owner := sload(position)
}
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param _newOwner The address to transfer ownership to.
*/
function transferProxyOwnership(address _newOwner) public onlyProxyOwner {
require(_newOwner != address(0));
_setUpgradeabilityOwner(_newOwner);
emit ProxyOwnershipTransferred(proxyOwner(), _newOwner);
}
/**
* @dev Allows the proxy owner to upgrade the current version of the proxy.
* @param _implementation representing the address of the new implementation to be set.
*/
function upgradeTo(address _implementation) public onlyProxyOwner {
_upgradeTo(_implementation);
}
/**
* @dev Sets the address of the owner
*/
function _setUpgradeabilityOwner(address _newProxyOwner) internal {
bytes32 position = PROXY_OWNER_POSITION;
assembly {
sstore(position, _newProxyOwner)
}
}
}
// File: contracts/interfaces/Iupgradable.sol
pragma solidity 0.5.7;
contract Iupgradable {
/**
* @dev change master address
*/
function setMasterAddress() public;
}
// File: contracts/interfaces/ITokenController.sol
pragma solidity 0.5.7;
contract ITokenController {
address public token;
address public bLOTToken;
/**
* @dev Swap BLOT token.
* account.
* @param amount The amount that will be swapped.
*/
function swapBLOT(address _of, address _to, uint256 amount) public;
function totalBalanceOf(address _of)
public
view
returns (uint256 amount);
function transferFrom(address _token, address _of, address _to, uint256 amount) public;
/**
* @dev Returns tokens locked for a specified address for a
* specified reason at a specific time
* @param _of The address whose tokens are locked
* @param _reason The reason to query the lock tokens for
* @param _time The timestamp to query the lock tokens for
*/
function tokensLockedAtTime(address _of, bytes32 _reason, uint256 _time)
public
view
returns (uint256 amount);
/**
* @dev burns an amount of the tokens of the message sender
* account.
* @param amount The amount that will be burnt.
*/
function burnCommissionTokens(uint256 amount) external returns(bool);
function initiateVesting(address _vesting) external;
function lockForGovernanceVote(address _of, uint _days) public;
function totalSupply() public view returns (uint256);
function mint(address _member, uint _amount) public;
}
// File: contracts/MemberRoles.sol
/* Copyright (C) 2020 PlotX.io
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/ */
pragma solidity 0.5.7;
contract MemberRoles is IMemberRoles, Governed, Iupgradable {
using SafeMath for uint256;
ITokenController internal tokenController;
struct MemberRoleDetails {
uint256 memberCounter;
mapping(address => uint256) memberIndex;
address[] memberAddress;
address authorized;
}
MemberRoleDetails[] internal memberRoleData;
bool internal constructorCheck;
address internal initiator;
uint256 internal minLockAmountForDR;
uint256 internal lockTimeForDR;
modifier checkRoleAuthority(uint256 _memberRoleId) {
if (memberRoleData[_memberRoleId].authorized != address(0))
require(
msg.sender == memberRoleData[_memberRoleId].authorized,
"Not authorized"
);
else require(isAuthorizedToGovern(msg.sender), "Not Authorized");
_;
}
/**
* @dev to swap advisory board member
* @param _newABAddress is address of new AB member
* @param _removeAB is advisory board member to be removed
*/
function swapABMember(address _newABAddress, address _removeAB)
external
checkRoleAuthority(uint256(Role.AdvisoryBoard))
{
_updateRole(_newABAddress, uint256(Role.AdvisoryBoard), true);
_updateRole(_removeAB, uint256(Role.AdvisoryBoard), false);
}
/**
* @dev to change the master address
*/
function setMasterAddress() public {
OwnedUpgradeabilityProxy proxy = OwnedUpgradeabilityProxy(
address(uint160(address(this)))
);
require(msg.sender == proxy.proxyOwner(), "Sender is not proxy owner.");
require(masterAddress == address(0), "Master address already set");
masterAddress = msg.sender;
IMaster masterInstance = IMaster(masterAddress);
tokenController = ITokenController(
masterInstance.getLatestAddress("TC")
);
minLockAmountForDR = 500 ether;
lockTimeForDR = 15 days;
}
/**
* @dev Set the authorized address to add the initial roles and members
* @param _initiator is address of the initiator
*/
function setInititorAddress(address _initiator) external {
OwnedUpgradeabilityProxy proxy = OwnedUpgradeabilityProxy(
address(uint160(address(this)))
);
require(msg.sender == proxy.proxyOwner(), "Sender is not proxy owner.");
require(initiator == address(0), "Already Set");
initiator = _initiator;
}
/**
* @dev to initiate the member roles and add initial AB, DR board members
* @param _abArray is array of addresses of the Initial AB members
*/
function memberRolesInitiate(
address[] calldata _abArray
) external {
require(msg.sender == initiator);
require(!constructorCheck, "Already constructed");
_addInitialMemberRoles();
for (uint256 i = 0; i < _abArray.length; i++) {
_updateRole(_abArray[i], uint256(Role.AdvisoryBoard), true);
}
constructorCheck = true;
}
/// @dev Adds new member role
/// @param _roleName New role name
/// @param _roleDescription New description hash
/// @param _authorized Authorized member against every role id
function addRole(
//solhint-disable-line
bytes32 _roleName,
string memory _roleDescription,
address _authorized
) public onlyAuthorizedToGovern {
_addRole(_roleName, _roleDescription, _authorized);
}
/// @dev Assign or Delete a member from specific role.
/// @param _memberAddress Address of Member
/// @param _roleId RoleId to update
/// @param _active active is set to be True if we want to assign this role to member, False otherwise!
function updateRole(
//solhint-disable-line
address _memberAddress,
uint256 _roleId,
bool _active
) public checkRoleAuthority(_roleId) {
_updateRole(_memberAddress, _roleId, _active);
}
/// @dev Return number of member roles
function totalRoles() public view returns (uint256) {
//solhint-disable-line
return memberRoleData.length;
}
/// @dev Change Member Address who holds the authority to Add/Delete any member from specific role.
/// @param _roleId roleId to update its Authorized Address
/// @param _newAuthorized New authorized address against role id
function changeAuthorized(uint256 _roleId, address _newAuthorized)
public
checkRoleAuthority(_roleId)
{
//solhint-disable-line
memberRoleData[_roleId].authorized = _newAuthorized;
}
/// @dev Gets the member addresses assigned by a specific role
/// @param _memberRoleId Member role id
/// @return roleId Role id
/// @return allMemberAddress Member addresses of specified role id
function members(uint256 _memberRoleId)
public
view
returns (uint256, address[] memory memberArray)
{
return (_memberRoleId, memberRoleData[_memberRoleId].memberAddress);
}
/// @dev Gets all members' length
/// @param _memberRoleId Member role id
/// @return memberRoleData[_memberRoleId].memberCounter Member length
function numberOfMembers(uint256 _memberRoleId)
public
view
returns (uint256)
{
//solhint-disable-line
return memberRoleData[_memberRoleId].memberCounter;
}
/// @dev Return member address who holds the right to add/remove any member from specific role.
function authorized(uint256 _memberRoleId) public view returns (address) {
//solhint-disable-line
return memberRoleData[_memberRoleId].authorized;
}
/// @dev Get All role ids array that has been assigned to a member so far.
function roles(address _memberAddress)
public
view
returns (uint256[] memory)
{
//solhint-disable-line
uint256 length = memberRoleData.length;
uint256[] memory assignedRoles = new uint256[](length);
uint256 counter = 0;
for (uint256 i = 1; i < length; i++) {
if (memberRoleData[i].memberIndex[_memberAddress] > 0) {
assignedRoles[counter] = i;
counter++;
}
}
if (tokenController.totalBalanceOf(_memberAddress) > 0) {
assignedRoles[counter] = uint256(Role.TokenHolder);
counter++;
}
if (tokenController.tokensLockedAtTime(_memberAddress, "DR", (lockTimeForDR).add(now)) >= minLockAmountForDR) {
assignedRoles[counter] = uint256(Role.DisputeResolution);
}
return assignedRoles;
}
/**
* @dev Updates Uint Parameters of a code
* @param code whose details we want to update
* @param val value to set
*/
function updateUintParameters(bytes8 code, uint val) public onlyAuthorizedToGovern {
if(code == "MNLOCKDR") { //Minimum lock amount to consider user as DR member
minLockAmountForDR = val;
} else if (code == "TLOCDR") { // Lock period required for DR
lockTimeForDR = val * (1 days);
}
}
function getUintParameters(bytes8 code) external view returns(bytes8 codeVal, uint val) {
codeVal = code;
if(code == "MNLOCKDR") {
val = minLockAmountForDR;
} else if (code == "TLOCDR") { // Lock period required for DR
val = lockTimeForDR / (1 days);
}
}
/// @dev Returns true if the given role id is assigned to a member.
/// @param _memberAddress Address of member
/// @param _roleId Checks member's authenticity with the roleId.
/// i.e. Returns true if this roleId is assigned to member
function checkRole(address _memberAddress, uint256 _roleId)
public
view
returns (bool)
{
//solhint-disable-line
if (_roleId == uint256(Role.UnAssigned)) {
return true;
} else if (_roleId == uint256(Role.TokenHolder)) {
if (tokenController.totalBalanceOf(_memberAddress) > 0) {
return true;
}
} else if (_roleId == uint256(Role.DisputeResolution)) {
if (tokenController.tokensLockedAtTime(_memberAddress, "DR", (lockTimeForDR).add(now)) >= minLockAmountForDR) {
return true;
}
} else if (memberRoleData[_roleId].memberIndex[_memberAddress] > 0) {
//solhint-disable-line
return true;
}
return false;
}
/// @dev Return total number of members assigned against each role id.
/// @return totalMembers Total members in particular role id
function getMemberLengthForAllRoles()
public
view
returns (uint256[] memory totalMembers)
{
//solhint-disable-line
totalMembers = new uint256[](memberRoleData.length);
for (uint256 i = 0; i < memberRoleData.length; i++) {
totalMembers[i] = numberOfMembers(i);
}
}
/**
* @dev to update the member roles
* @param _memberAddress in concern
* @param _roleId the id of role
* @param _active if active is true, add the member, else remove it
*/
function _updateRole(
address _memberAddress,
uint256 _roleId,
bool _active
) internal {
require(
_roleId != uint256(Role.TokenHolder) && _roleId != uint256(Role.DisputeResolution),
"Membership to this role is detected automatically"
);
if (_active) {
require(
memberRoleData[_roleId].memberIndex[_memberAddress] == 0,
"already active"
);
memberRoleData[_roleId].memberCounter = SafeMath.add(
memberRoleData[_roleId].memberCounter,
1
);
memberRoleData[_roleId]
.memberIndex[_memberAddress] = memberRoleData[_roleId]
.memberAddress
.length;
memberRoleData[_roleId].memberAddress.push(_memberAddress);
} else {
//Remove the selected member and swap its index with the member at last index
require(
memberRoleData[_roleId].memberIndex[_memberAddress] > 0,
"not active"
);
uint256 _memberIndex = memberRoleData[_roleId]
.memberIndex[_memberAddress];
address _topElement = memberRoleData[_roleId]
.memberAddress[memberRoleData[_roleId].memberCounter];
memberRoleData[_roleId].memberIndex[_topElement] = _memberIndex;
memberRoleData[_roleId].memberCounter = SafeMath.sub(
memberRoleData[_roleId].memberCounter,
1
);
memberRoleData[_roleId].memberAddress[_memberIndex] = _topElement;
memberRoleData[_roleId].memberAddress.length--;
delete memberRoleData[_roleId].memberIndex[_memberAddress];
}
}
/// @dev Adds new member role
/// @param _roleName New role name
/// @param _roleDescription New description hash
/// @param _authorized Authorized member against every role id
function _addRole(
bytes32 _roleName,
string memory _roleDescription,
address _authorized
) internal {
emit MemberRole(memberRoleData.length, _roleName, _roleDescription);
memberRoleData.push(
MemberRoleDetails(0, new address[](1), _authorized)
);
}
/**
* @dev to add initial member roles
*/
function _addInitialMemberRoles() internal {
_addRole("Unassigned", "Unassigned", address(0));
_addRole(
"Advisory Board",
"Selected few members that are deeply entrusted by the dApp. An ideal advisory board should be a mix of skills of domain, governance, research, technology, consulting etc to improve the performance of the dApp.", //solhint-disable-line
address(0)
);
_addRole(
"Token Holder",
"Represents all users who hold dApp tokens. This is the most general category and anyone holding token balance is a part of this category by default.", //solhint-disable-line
address(0)
);
_addRole(
"DisputeResolution",
"Represents members who are assigned to vote on resolving disputes", //solhint-disable-line
address(0)
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"_memberRoleId","type":"uint256"}],"name":"authorized","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_memberRoleId","type":"uint256"}],"name":"numberOfMembers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_toCheck","type":"address"}],"name":"isAuthorizedToGovern","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_roleName","type":"bytes32"},{"name":"_roleDescription","type":"string"},{"name":"_authorized","type":"address"}],"name":"addRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_memberAddress","type":"address"},{"name":"_roleId","type":"uint256"},{"name":"_active","type":"bool"}],"name":"updateRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_initiator","type":"address"}],"name":"setInititorAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setMasterAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_memberAddress","type":"address"},{"name":"_roleId","type":"uint256"}],"name":"checkRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_memberRoleId","type":"uint256"}],"name":"members","outputs":[{"name":"","type":"uint256"},{"name":"memberArray","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"code","type":"bytes8"}],"name":"getUintParameters","outputs":[{"name":"codeVal","type":"bytes8"},{"name":"val","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMemberLengthForAllRoles","outputs":[{"name":"totalMembers","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRoles","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_memberAddress","type":"address"}],"name":"roles","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"code","type":"bytes8"},{"name":"val","type":"uint256"}],"name":"updateUintParameters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_roleId","type":"uint256"},{"name":"_newAuthorized","type":"address"}],"name":"changeAuthorized","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newABAddress","type":"address"},{"name":"_removeAB","type":"address"}],"name":"swapABMember","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_abArray","type":"address[]"}],"name":"memberRolesInitiate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"masterAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"roleId","type":"uint256"},{"indexed":false,"name":"roleName","type":"bytes32"},{"indexed":false,"name":"roleDescription","type":"string"}],"name":"MemberRole","type":"event"}]Contract Creation Code
608060405234801561001057600080fd5b50611f6b806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80636122f840116100a25780639dd86e0f116100715780639dd86e0f1461044e578063aa561f9d1461047b578063c578f230146104a7578063cb41e01b146104d5578063d365a08e1461054557610116565b80636122f8401461037d5780636d1c31d2146103c8578063790e118c14610420578063993746421461042857610116565b80632f473021116100e95780632f4730211461027757806343b20ff6146102ab5780634b6199b0146102d1578063505ef22f146102d95780635daf08ca1461030557610116565b80630d48669a1461011b5780630dc6f8471461015457806322ce7254146101835780632dc4bdca146101bd575b600080fd5b6101386004803603602081101561013157600080fd5b503561054d565b604080516001600160a01b039092168252519081900360200190f35b6101716004803603602081101561016a57600080fd5b503561057f565b60408051918252519081900360200190f35b6101a96004803603602081101561019957600080fd5b50356001600160a01b03166105a7565b604080519115158252519081900360200190f35b610275600480360360608110156101d357600080fd5b813591908101906040810160208201356401000000008111156101f557600080fd5b82018360208201111561020757600080fd5b8035906020019184600183028401116401000000008311171561022957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b0316915061063f9050565b005b6102756004803603606081101561028d57600080fd5b506001600160a01b0381351690602081013590604001351515610727565b610275600480360360208110156102c157600080fd5b50356001600160a01b0316610837565b610275610980565b6101a9600480360360408110156102ef57600080fd5b506001600160a01b038135169060200135610b75565b6103226004803603602081101561031b57600080fd5b5035610d3c565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610368578181015183820152602001610350565b50505050905001935050505060405180910390f35b6103a46004803603602081101561039357600080fd5b50356001600160c01b031916610dc5565b604080516001600160c01b0319909316835260208301919091528051918290030190f35b6103d0610e25565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040c5781810151838201526020016103f4565b505050509050019250505060405180910390f35b610171610e8f565b6103d06004803603602081101561043e57600080fd5b50356001600160a01b0316610e96565b6102756004803603604081101561046457600080fd5b506001600160c01b031981351690602001356110bf565b6102756004803603604081101561049157600080fd5b50803590602001356001600160a01b03166111ed565b610275600480360360408110156104bd57600080fd5b506001600160a01b038135811691602001351661133a565b610275600480360360208110156104eb57600080fd5b81019060208101813564010000000081111561050657600080fd5b82018360208201111561051857600080fd5b8035906020019184602083028401116401000000008311171561053a57600080fd5b50909250905061145b565b61013861152b565b60006002828154811061055c57fe5b60009182526020909120600490910201600301546001600160a01b031692915050565b60006002828154811061058e57fe5b9060005260206000209060040201600001549050919050565b6000805460408051600160e31b6227050b028152600160f11b6123ab02600482015290516001600160a01b03928316928516918391630138285891602480820192602092909190829003018186803b15801561060257600080fd5b505afa158015610616573d6000803e3d6000fd5b505050506040513d602081101561062c57600080fd5b50516001600160a01b0316149392505050565b60005460408051600160e31b6227050b028152600160f11b6123ab02600482015290516001600160a01b039092169133918391630138285891602480820192602092909190829003018186803b15801561069857600080fd5b505afa1580156106ac573d6000803e3d6000fd5b505050506040513d60208110156106c257600080fd5b50516001600160a01b0316146107165760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b61072184848461153a565b50505050565b8160006001600160a01b03166002828154811061074057fe5b60009182526020909120600360049092020101546001600160a01b0316146107db576002818154811061076f57fe5b60009182526020909120600490910201600301546001600160a01b031633146107d65760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b61082c565b6107e4336105a7565b61082c5760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08105d5d1a1bdc9a5e995902604482015290519081900360640190fd5b61072184848461168d565b6000309050806001600160a01b031663025313a26040518163ffffffff1660e01b815260040160206040518083038186803b15801561087557600080fd5b505afa158015610889573d6000803e3d6000fd5b505050506040513d602081101561089f57600080fd5b50516001600160a01b031633146109005760408051600160e51b62461bcd02815260206004820152601a60248201527f53656e646572206973206e6f742070726f7879206f776e65722e000000000000604482015290519081900360640190fd5b60035461010090046001600160a01b0316156109575760408051600160e51b62461bcd02815260206004820152600b6024820152600160aa1b6a105b1c9958591e4814d95d02604482015290519081900360640190fd5b50600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000309050806001600160a01b031663025313a26040518163ffffffff1660e01b815260040160206040518083038186803b1580156109be57600080fd5b505afa1580156109d2573d6000803e3d6000fd5b505050506040513d60208110156109e857600080fd5b50516001600160a01b03163314610a495760408051600160e51b62461bcd02815260206004820152601a60248201527f53656e646572206973206e6f742070726f7879206f776e65722e000000000000604482015290519081900360640190fd5b6000546001600160a01b031615610aaa5760408051600160e51b62461bcd02815260206004820152601a60248201527f4d6173746572206164647265737320616c726561647920736574000000000000604482015290519081900360640190fd5b600080546001600160a01b03191633179081905560408051600160e31b6227050b028152600160f01b61544302600482015290516001600160a01b03929092169182916301382858916024808301926020929190829003018186803b158015610b1257600080fd5b505afa158015610b26573d6000803e3d6000fd5b505050506040513d6020811015610b3c57600080fd5b5051600180546001600160a01b0319166001600160a01b039092169190911790555050681b1ae4d6e2ef5000006004556213c680600555565b600081610b8457506001610d36565b6002821415610c205760015460408051600160e11b63258770150281526001600160a01b03868116600483015291516000939290921691634b0ee02a91602480820192602092909190829003018186803b158015610be157600080fd5b505afa158015610bf5573d6000803e3d6000fd5b505050506040513d6020811015610c0b57600080fd5b50511115610c1b57506001610d36565b610d32565b6003821415610cec576004546001546005546001600160a01b039091169063179e91f1908690610c56904263ffffffff611ad116565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180600160f11b612229028152506020018281526020019250505060206040518083038186803b158015610cb357600080fd5b505afa158015610cc7573d6000803e3d6000fd5b505050506040513d6020811015610cdd57600080fd5b505110610c1b57506001610d36565b600060028381548110610cfb57fe5b600091825260208083206001600160a01b0388168452600160049093020191909101905260409020541115610d3257506001610d36565b5060005b92915050565b600060608260028481548110610d4e57fe5b906000526020600020906004020160020180805480602002602001604051908101604052809291908181526020018280548015610db457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d96575b50505050509050915091505b915091565b806000600160c11b6726a72627a1a5a229026001600160c01b031983161415610df15750600454610dc0565b600160d11b652a2627a1a229026001600160c01b031984161415610dc0576201518060055481610e1d57fe5b049050915091565b6002546040805182815260208084028201019091526060918015610e53578160200160208202803883390190505b50905060005b600254811015610e8b57610e6c8161057f565b828281518110610e7857fe5b6020908102919091010152600101610e59565b5090565b6002545b90565b600254604080518281526020808402820101909152606091908290828015610ec8578160200160208202803883390190505b509050600060015b83811015610f3d57600060028281548110610ee757fe5b600091825260208083206001600160a01b038b168452600160049093020191909101905260409020541115610f355780838381518110610f2357fe5b60209081029190910101526001909101905b600101610ed0565b5060015460408051600160e11b63258770150281526001600160a01b03888116600483015291516000939290921691634b0ee02a91602480820192602092909190829003018186803b158015610f9257600080fd5b505afa158015610fa6573d6000803e3d6000fd5b505050506040513d6020811015610fbc57600080fd5b50511115610fe1576002828281518110610fd257fe5b60209081029190910101526001015b6004546001546005546001600160a01b039091169063179e91f190889061100e904263ffffffff611ad116565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180600160f11b612229028152506020018281526020019250505060206040518083038186803b15801561106b57600080fd5b505afa15801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b5051106110b75760038282815181106110aa57fe5b6020026020010181815250505b509392505050565b60005460408051600160e31b6227050b028152600160f11b6123ab02600482015290516001600160a01b039092169133918391630138285891602480820192602092909190829003018186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d602081101561114257600080fd5b50516001600160a01b0316146111965760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b600160c11b6726a72627a1a5a229026001600160c01b0319841614156111c05760048290556111e8565b600160d11b652a2627a1a229026001600160c01b0319841614156111e8576201518082026005555b505050565b8160006001600160a01b03166002828154811061120657fe5b60009182526020909120600360049092020101546001600160a01b0316146112a1576002818154811061123557fe5b60009182526020909120600490910201600301546001600160a01b0316331461129c5760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b6112f2565b6112aa336105a7565b6112f25760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08105d5d1a1bdc9a5e995902604482015290519081900360640190fd5b816002848154811061130057fe5b906000526020600020906004020160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b600160006001600160a01b03166002828154811061135457fe5b60009182526020909120600360049092020101546001600160a01b0316146113ef576002818154811061138357fe5b60009182526020909120600490910201600301546001600160a01b031633146113ea5760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b611440565b6113f8336105a7565b6114405760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08105d5d1a1bdc9a5e995902604482015290519081900360640190fd5b61144e8360015b600161168d565b6111e8826001600061168d565b60035461010090046001600160a01b0316331461147757600080fd5b60035460ff16156114d25760408051600160e51b62461bcd02815260206004820152601360248201527f416c726561647920636f6e737472756374656400000000000000000000000000604482015290519081900360640190fd5b6114da611b35565b60005b81811015611519576115118383838181106114f457fe5b905060200201356001600160a01b03166001600381111561144757fe5b6001016114dd565b50506003805460ff1916600117905550565b6000546001600160a01b031681565b6002805490507fe2981862bbf692aa30ba39d4eca9c69e5dcebf3eae5fb93332940c23c1c4c3c584846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156115a657818101518382015260200161158e565b50505050905090810190601f1680156115d35780820380516001836020036101000a031916815260200191505b50935050505060405180910390a260408051606081018252600081528151600180825281840190935260029260208301919081602001602082028038833950505081526001600160a01b0384166020918201528254600181018085556000948552938290208351600490920201908155828201518051919261165d92600285019290910190611ca5565b5060409190910151600390910180546001600160a01b0319166001600160a01b0390921691909117905550505050565b6002821415801561169f575060038214155b6116dd57604051600160e51b62461bcd028152600401808060200182810382526031815260200180611daa6031913960400191505060405180910390fd5b801561185e57600282815481106116f057fe5b600091825260208083206001600160a01b0387168452600160049093020191909101905260409020541561176e5760408051600160e51b62461bcd02815260206004820152600e60248201527f616c726561647920616374697665000000000000000000000000000000000000604482015290519081900360640190fd5b6117976002838154811061177e57fe5b9060005260206000209060040201600001546001611ad1565b600283815481106117a457fe5b600091825260209091206004909102015560028054839081106117c357fe5b906000526020600020906004020160020180549050600283815481106117e557fe5b600091825260208083206001600160a01b038816845260016004909302019190910190526040902055600280548390811061181c57fe5b60009182526020808320600492909202909101600201805460018101825590835291200180546001600160a01b0319166001600160a01b0385161790556111e8565b60006002838154811061186d57fe5b600091825260208083206001600160a01b038816845260016004909302019190910190526040902054116118db5760408051600160e51b62461bcd02815260206004820152600a6024820152600160b01b696e6f742061637469766502604482015290519081900360640190fd5b6000600283815481106118ea57fe5b90600052602060002090600402016001016000856001600160a01b03166001600160a01b0316815260200190815260200160002054905060006002848154811061193057fe5b90600052602060002090600402016002016002858154811061194e57fe5b9060005260206000209060040201600001548154811061196a57fe5b600091825260209091200154600280546001600160a01b03909216925083918690811061199357fe5b600091825260208083206001600160a01b038616845260016004909302019190910190526040902055600280546119e89190869081106119cf57fe5b9060005260206000209060040201600001546001611c45565b600285815481106119f557fe5b9060005260206000209060040201600001819055508060028581548110611a1857fe5b90600052602060002090600402016002018381548110611a3457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060028481548110611a6f57fe5b9060005260206000209060040201600201805480919060019003611a939190611d06565b5060028481548110611aa157fe5b600091825260208083206001600160a01b0389168452600160049093020191909101905260408120555050505050565b600082820183811015611b2e5760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b611b76600160b21b69155b985cdcda59db9959026040518060400160405280600a8152602001600160b21b69155b985cdcda59db995902815250600061153a565b611bbb7f41647669736f727920426f61726400000000000000000000000000000000000060405180610100016040528060d18152602001611ddb60d19139600061153a565b611bff7f546f6b656e20486f6c64657200000000000000000000000000000000000000006040518060c0016040528060948152602001611eac60949139600061153a565b611c437f446973707574655265736f6c7574696f6e000000000000000000000000000000604051806080016040528060418152602001611d6960419139600061153a565b565b600082821115611c9f5760408051600160e51b62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054828255906000526020600020908101928215611cfa579160200282015b82811115611cfa57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611cc5565b50610e8b929150611d2a565b8154818355818111156111e8576000838152602090206111e8918101908301611d4e565b610e9391905b80821115610e8b5780546001600160a01b0319168155600101611d30565b610e9391905b80821115610e8b5760008155600101611d5456fe526570726573656e7473206d656d626572732077686f206172652061737369676e656420746f20766f7465206f6e207265736f6c76696e672064697370757465734d656d6265727368697020746f207468697320726f6c65206973206465746563746564206175746f6d61746963616c6c7953656c656374656420666577206d656d6265727320746861742061726520646565706c7920656e747275737465642062792074686520644170702e20416e20696465616c2061647669736f727920626f6172642073686f756c642062652061206d6978206f6620736b696c6c73206f6620646f6d61696e2c20676f7665726e616e63652c2072657365617263682c20746563686e6f6c6f67792c20636f6e73756c74696e672065746320746f20696d70726f76652074686520706572666f726d616e6365206f662074686520644170702e526570726573656e747320616c6c2075736572732077686f20686f6c64206441707020746f6b656e732e205468697320697320746865206d6f73742067656e6572616c2063617465676f727920616e6420616e796f6e6520686f6c64696e6720746f6b656e2062616c616e636520697320612070617274206f6620746869732063617465676f72792062792064656661756c742ea165627a7a72305820c29d9f4776775a349ed0e866fd284b245101a96a5a51919a9c5133d78f2ad7740029
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80636122f840116100a25780639dd86e0f116100715780639dd86e0f1461044e578063aa561f9d1461047b578063c578f230146104a7578063cb41e01b146104d5578063d365a08e1461054557610116565b80636122f8401461037d5780636d1c31d2146103c8578063790e118c14610420578063993746421461042857610116565b80632f473021116100e95780632f4730211461027757806343b20ff6146102ab5780634b6199b0146102d1578063505ef22f146102d95780635daf08ca1461030557610116565b80630d48669a1461011b5780630dc6f8471461015457806322ce7254146101835780632dc4bdca146101bd575b600080fd5b6101386004803603602081101561013157600080fd5b503561054d565b604080516001600160a01b039092168252519081900360200190f35b6101716004803603602081101561016a57600080fd5b503561057f565b60408051918252519081900360200190f35b6101a96004803603602081101561019957600080fd5b50356001600160a01b03166105a7565b604080519115158252519081900360200190f35b610275600480360360608110156101d357600080fd5b813591908101906040810160208201356401000000008111156101f557600080fd5b82018360208201111561020757600080fd5b8035906020019184600183028401116401000000008311171561022957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b0316915061063f9050565b005b6102756004803603606081101561028d57600080fd5b506001600160a01b0381351690602081013590604001351515610727565b610275600480360360208110156102c157600080fd5b50356001600160a01b0316610837565b610275610980565b6101a9600480360360408110156102ef57600080fd5b506001600160a01b038135169060200135610b75565b6103226004803603602081101561031b57600080fd5b5035610d3c565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610368578181015183820152602001610350565b50505050905001935050505060405180910390f35b6103a46004803603602081101561039357600080fd5b50356001600160c01b031916610dc5565b604080516001600160c01b0319909316835260208301919091528051918290030190f35b6103d0610e25565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040c5781810151838201526020016103f4565b505050509050019250505060405180910390f35b610171610e8f565b6103d06004803603602081101561043e57600080fd5b50356001600160a01b0316610e96565b6102756004803603604081101561046457600080fd5b506001600160c01b031981351690602001356110bf565b6102756004803603604081101561049157600080fd5b50803590602001356001600160a01b03166111ed565b610275600480360360408110156104bd57600080fd5b506001600160a01b038135811691602001351661133a565b610275600480360360208110156104eb57600080fd5b81019060208101813564010000000081111561050657600080fd5b82018360208201111561051857600080fd5b8035906020019184602083028401116401000000008311171561053a57600080fd5b50909250905061145b565b61013861152b565b60006002828154811061055c57fe5b60009182526020909120600490910201600301546001600160a01b031692915050565b60006002828154811061058e57fe5b9060005260206000209060040201600001549050919050565b6000805460408051600160e31b6227050b028152600160f11b6123ab02600482015290516001600160a01b03928316928516918391630138285891602480820192602092909190829003018186803b15801561060257600080fd5b505afa158015610616573d6000803e3d6000fd5b505050506040513d602081101561062c57600080fd5b50516001600160a01b0316149392505050565b60005460408051600160e31b6227050b028152600160f11b6123ab02600482015290516001600160a01b039092169133918391630138285891602480820192602092909190829003018186803b15801561069857600080fd5b505afa1580156106ac573d6000803e3d6000fd5b505050506040513d60208110156106c257600080fd5b50516001600160a01b0316146107165760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b61072184848461153a565b50505050565b8160006001600160a01b03166002828154811061074057fe5b60009182526020909120600360049092020101546001600160a01b0316146107db576002818154811061076f57fe5b60009182526020909120600490910201600301546001600160a01b031633146107d65760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b61082c565b6107e4336105a7565b61082c5760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08105d5d1a1bdc9a5e995902604482015290519081900360640190fd5b61072184848461168d565b6000309050806001600160a01b031663025313a26040518163ffffffff1660e01b815260040160206040518083038186803b15801561087557600080fd5b505afa158015610889573d6000803e3d6000fd5b505050506040513d602081101561089f57600080fd5b50516001600160a01b031633146109005760408051600160e51b62461bcd02815260206004820152601a60248201527f53656e646572206973206e6f742070726f7879206f776e65722e000000000000604482015290519081900360640190fd5b60035461010090046001600160a01b0316156109575760408051600160e51b62461bcd02815260206004820152600b6024820152600160aa1b6a105b1c9958591e4814d95d02604482015290519081900360640190fd5b50600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000309050806001600160a01b031663025313a26040518163ffffffff1660e01b815260040160206040518083038186803b1580156109be57600080fd5b505afa1580156109d2573d6000803e3d6000fd5b505050506040513d60208110156109e857600080fd5b50516001600160a01b03163314610a495760408051600160e51b62461bcd02815260206004820152601a60248201527f53656e646572206973206e6f742070726f7879206f776e65722e000000000000604482015290519081900360640190fd5b6000546001600160a01b031615610aaa5760408051600160e51b62461bcd02815260206004820152601a60248201527f4d6173746572206164647265737320616c726561647920736574000000000000604482015290519081900360640190fd5b600080546001600160a01b03191633179081905560408051600160e31b6227050b028152600160f01b61544302600482015290516001600160a01b03929092169182916301382858916024808301926020929190829003018186803b158015610b1257600080fd5b505afa158015610b26573d6000803e3d6000fd5b505050506040513d6020811015610b3c57600080fd5b5051600180546001600160a01b0319166001600160a01b039092169190911790555050681b1ae4d6e2ef5000006004556213c680600555565b600081610b8457506001610d36565b6002821415610c205760015460408051600160e11b63258770150281526001600160a01b03868116600483015291516000939290921691634b0ee02a91602480820192602092909190829003018186803b158015610be157600080fd5b505afa158015610bf5573d6000803e3d6000fd5b505050506040513d6020811015610c0b57600080fd5b50511115610c1b57506001610d36565b610d32565b6003821415610cec576004546001546005546001600160a01b039091169063179e91f1908690610c56904263ffffffff611ad116565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180600160f11b612229028152506020018281526020019250505060206040518083038186803b158015610cb357600080fd5b505afa158015610cc7573d6000803e3d6000fd5b505050506040513d6020811015610cdd57600080fd5b505110610c1b57506001610d36565b600060028381548110610cfb57fe5b600091825260208083206001600160a01b0388168452600160049093020191909101905260409020541115610d3257506001610d36565b5060005b92915050565b600060608260028481548110610d4e57fe5b906000526020600020906004020160020180805480602002602001604051908101604052809291908181526020018280548015610db457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d96575b50505050509050915091505b915091565b806000600160c11b6726a72627a1a5a229026001600160c01b031983161415610df15750600454610dc0565b600160d11b652a2627a1a229026001600160c01b031984161415610dc0576201518060055481610e1d57fe5b049050915091565b6002546040805182815260208084028201019091526060918015610e53578160200160208202803883390190505b50905060005b600254811015610e8b57610e6c8161057f565b828281518110610e7857fe5b6020908102919091010152600101610e59565b5090565b6002545b90565b600254604080518281526020808402820101909152606091908290828015610ec8578160200160208202803883390190505b509050600060015b83811015610f3d57600060028281548110610ee757fe5b600091825260208083206001600160a01b038b168452600160049093020191909101905260409020541115610f355780838381518110610f2357fe5b60209081029190910101526001909101905b600101610ed0565b5060015460408051600160e11b63258770150281526001600160a01b03888116600483015291516000939290921691634b0ee02a91602480820192602092909190829003018186803b158015610f9257600080fd5b505afa158015610fa6573d6000803e3d6000fd5b505050506040513d6020811015610fbc57600080fd5b50511115610fe1576002828281518110610fd257fe5b60209081029190910101526001015b6004546001546005546001600160a01b039091169063179e91f190889061100e904263ffffffff611ad116565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180600160f11b612229028152506020018281526020019250505060206040518083038186803b15801561106b57600080fd5b505afa15801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b5051106110b75760038282815181106110aa57fe5b6020026020010181815250505b509392505050565b60005460408051600160e31b6227050b028152600160f11b6123ab02600482015290516001600160a01b039092169133918391630138285891602480820192602092909190829003018186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d602081101561114257600080fd5b50516001600160a01b0316146111965760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b600160c11b6726a72627a1a5a229026001600160c01b0319841614156111c05760048290556111e8565b600160d11b652a2627a1a229026001600160c01b0319841614156111e8576201518082026005555b505050565b8160006001600160a01b03166002828154811061120657fe5b60009182526020909120600360049092020101546001600160a01b0316146112a1576002818154811061123557fe5b60009182526020909120600490910201600301546001600160a01b0316331461129c5760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b6112f2565b6112aa336105a7565b6112f25760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08105d5d1a1bdc9a5e995902604482015290519081900360640190fd5b816002848154811061130057fe5b906000526020600020906004020160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b600160006001600160a01b03166002828154811061135457fe5b60009182526020909120600360049092020101546001600160a01b0316146113ef576002818154811061138357fe5b60009182526020909120600490910201600301546001600160a01b031633146113ea5760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08185d5d1a1bdc9a5e995902604482015290519081900360640190fd5b611440565b6113f8336105a7565b6114405760408051600160e51b62461bcd02815260206004820152600e6024820152600160921b6d139bdd08105d5d1a1bdc9a5e995902604482015290519081900360640190fd5b61144e8360015b600161168d565b6111e8826001600061168d565b60035461010090046001600160a01b0316331461147757600080fd5b60035460ff16156114d25760408051600160e51b62461bcd02815260206004820152601360248201527f416c726561647920636f6e737472756374656400000000000000000000000000604482015290519081900360640190fd5b6114da611b35565b60005b81811015611519576115118383838181106114f457fe5b905060200201356001600160a01b03166001600381111561144757fe5b6001016114dd565b50506003805460ff1916600117905550565b6000546001600160a01b031681565b6002805490507fe2981862bbf692aa30ba39d4eca9c69e5dcebf3eae5fb93332940c23c1c4c3c584846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156115a657818101518382015260200161158e565b50505050905090810190601f1680156115d35780820380516001836020036101000a031916815260200191505b50935050505060405180910390a260408051606081018252600081528151600180825281840190935260029260208301919081602001602082028038833950505081526001600160a01b0384166020918201528254600181018085556000948552938290208351600490920201908155828201518051919261165d92600285019290910190611ca5565b5060409190910151600390910180546001600160a01b0319166001600160a01b0390921691909117905550505050565b6002821415801561169f575060038214155b6116dd57604051600160e51b62461bcd028152600401808060200182810382526031815260200180611daa6031913960400191505060405180910390fd5b801561185e57600282815481106116f057fe5b600091825260208083206001600160a01b0387168452600160049093020191909101905260409020541561176e5760408051600160e51b62461bcd02815260206004820152600e60248201527f616c726561647920616374697665000000000000000000000000000000000000604482015290519081900360640190fd5b6117976002838154811061177e57fe5b9060005260206000209060040201600001546001611ad1565b600283815481106117a457fe5b600091825260209091206004909102015560028054839081106117c357fe5b906000526020600020906004020160020180549050600283815481106117e557fe5b600091825260208083206001600160a01b038816845260016004909302019190910190526040902055600280548390811061181c57fe5b60009182526020808320600492909202909101600201805460018101825590835291200180546001600160a01b0319166001600160a01b0385161790556111e8565b60006002838154811061186d57fe5b600091825260208083206001600160a01b038816845260016004909302019190910190526040902054116118db5760408051600160e51b62461bcd02815260206004820152600a6024820152600160b01b696e6f742061637469766502604482015290519081900360640190fd5b6000600283815481106118ea57fe5b90600052602060002090600402016001016000856001600160a01b03166001600160a01b0316815260200190815260200160002054905060006002848154811061193057fe5b90600052602060002090600402016002016002858154811061194e57fe5b9060005260206000209060040201600001548154811061196a57fe5b600091825260209091200154600280546001600160a01b03909216925083918690811061199357fe5b600091825260208083206001600160a01b038616845260016004909302019190910190526040902055600280546119e89190869081106119cf57fe5b9060005260206000209060040201600001546001611c45565b600285815481106119f557fe5b9060005260206000209060040201600001819055508060028581548110611a1857fe5b90600052602060002090600402016002018381548110611a3457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060028481548110611a6f57fe5b9060005260206000209060040201600201805480919060019003611a939190611d06565b5060028481548110611aa157fe5b600091825260208083206001600160a01b0389168452600160049093020191909101905260408120555050505050565b600082820183811015611b2e5760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b611b76600160b21b69155b985cdcda59db9959026040518060400160405280600a8152602001600160b21b69155b985cdcda59db995902815250600061153a565b611bbb7f41647669736f727920426f61726400000000000000000000000000000000000060405180610100016040528060d18152602001611ddb60d19139600061153a565b611bff7f546f6b656e20486f6c64657200000000000000000000000000000000000000006040518060c0016040528060948152602001611eac60949139600061153a565b611c437f446973707574655265736f6c7574696f6e000000000000000000000000000000604051806080016040528060418152602001611d6960419139600061153a565b565b600082821115611c9f5760408051600160e51b62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054828255906000526020600020908101928215611cfa579160200282015b82811115611cfa57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611cc5565b50610e8b929150611d2a565b8154818355818111156111e8576000838152602090206111e8918101908301611d4e565b610e9391905b80821115610e8b5780546001600160a01b0319168155600101611d30565b610e9391905b80821115610e8b5760008155600101611d5456fe526570726573656e7473206d656d626572732077686f206172652061737369676e656420746f20766f7465206f6e207265736f6c76696e672064697370757465734d656d6265727368697020746f207468697320726f6c65206973206465746563746564206175746f6d61746963616c6c7953656c656374656420666577206d656d6265727320746861742061726520646565706c7920656e747275737465642062792074686520644170702e20416e20696465616c2061647669736f727920626f6172642073686f756c642062652061206d6978206f6620736b696c6c73206f6620646f6d61696e2c20676f7665726e616e63652c2072657365617263682c20746563686e6f6c6f67792c20636f6e73756c74696e672065746320746f20696d70726f76652074686520706572666f726d616e6365206f662074686520644170702e526570726573656e747320616c6c2075736572732077686f20686f6c64206441707020746f6b656e732e205468697320697320746865206d6f73742067656e6572616c2063617465676f727920616e6420616e796f6e6520686f6c64696e6720746f6b656e2062616c616e636520697320612070617274206f6620746869732063617465676f72792062792064656661756c742ea165627a7a72305820c29d9f4776775a349ed0e866fd284b245101a96a5a51919a9c5133d78f2ad7740029
Deployed Bytecode Sourcemap
21037:12872:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21037:12872:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26748:171;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26748:171:0;;:::i;:::-;;;;-1:-1:-1;;;;;26748:171:0;;;;;;;;;;;;;;26428:211;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26428:211:0;;:::i;:::-;;;;;;;;;;;;;;;;12804:185;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12804:185:0;-1:-1:-1;;;;;12804:185:0;;:::i;:::-;;;;;;;;;;;;;;;;;;24401:254;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24401:254:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;24401:254:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24401:254:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;24401:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;24401:254:0;;-1:-1:-1;;;24401:254:0;;-1:-1:-1;;;;;24401:254:0;;-1:-1:-1;24401:254:0;;-1:-1:-1;24401:254:0:i;:::-;;24921:240;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24921:240:0;;;;;;;;;;;;;;;:::i;23251:363::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23251:363:0;-1:-1:-1;;;;;23251:363:0;;:::i;22487:607::-;;;:::i;29016:824::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;29016:824:0;;;;;;;;:::i;26043:218::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26043:218:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26043:218:0;;;;;;;;;;;;;;;;;;28428:322;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28428:322:0;-1:-1:-1;;;;;;28428:322:0;;:::i;:::-;;;;-1:-1:-1;;;;;;28428:322:0;;;;;;;;;;;;;;;;;;;;;29990:349;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29990:349:0;;;;;;;;;;;;;;;;;25213:131;;;:::i;27007:912::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27007:912:0;-1:-1:-1;;;;;27007:912:0;;:::i;28076:344::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;;28076:344:0;;;;;;;;:::i;25591:227::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25591:227:0;;;;;;-1:-1:-1;;;;;25591:227:0;;:::i;22126:293::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22126:293:0;;;;;;;;;;:::i;23791:405::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23791:405:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;23791:405:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23791:405:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;23791:405:0;;-1:-1:-1;23791:405:0;-1:-1:-1;23791:405:0;:::i;12359:28::-;;;:::i;26748:171::-;26812:7;26871:14;26886:13;26871:29;;;;;;;;;;;;;;;;;;;;;:40;;;-1:-1:-1;;;;;26871:40:0;;26748:171;-1:-1:-1;;26748:171:0:o;26428:211::-;26524:7;26588:14;26603:13;26588:29;;;;;;;;;;;;;;;;;;:43;;;26581:50;;26428:211;;;:::o;12804:185::-;12872:4;12910:13;;12943:25;;;-1:-1:-1;;;;;12943:25:0;;-1:-1:-1;;;;;12943:25:0;;;;;;-1:-1:-1;;;;;12910:13:0;;;;12943:37;;;12910:13;;12943:19;;:25;;;;;;;;;;;;;;;12910:13;12943:25;;;5:2:-1;;;;30:1;27;20:12;5:2;12943:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12943:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12943:25:0;-1:-1:-1;;;;;12943:37:0;;;12804:185;-1:-1:-1;;;12804:185:0:o;24401:254::-;12605:10;12626:13;12659:25;;;-1:-1:-1;;;;;12659:25:0;;-1:-1:-1;;;;;12659:25:0;;;;;;-1:-1:-1;;;;;12626:13:0;;;;12688:10;;12626:13;;12659:19;;:25;;;;;;;;;;;;;;;12626:13;12659:25;;;5:2:-1;;;;30:1;27;20:12;5:2;12659:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12659:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12659:25:0;-1:-1:-1;;;;;12659:39:0;;12651:66;;;;;-1:-1:-1;;;;;12651:66:0;;;;;;;;;;;;-1:-1:-1;;;;;12651:66:0;;;;;;;;;;;;;;;24597:50;24606:9;24617:16;24635:11;24597:8;:50::i;:::-;24401:254;;;;:::o;24921:240::-;25088:7;21694:1;-1:-1:-1;;;;;21642:54:0;:14;21657:13;21642:29;;;;;;;;;;;;;;;;:40;:29;;;;;:40;;-1:-1:-1;;;;;21642:40:0;:54;21638:278;;21751:14;21766:13;21751:29;;;;;;;;;;;;;;;;;;;;;:40;;;-1:-1:-1;;;;;21751:40:0;21737:10;:54;21711:130;;;;;-1:-1:-1;;;;;21711:130:0;;;;;;;;;;;;-1:-1:-1;;;;;21711:130:0;;;;;;;;;;;;;;;21638:278;;;21865:32;21886:10;21865:20;:32::i;:::-;21857:59;;;;;-1:-1:-1;;;;;21857:59:0;;;;;;;;;;;;-1:-1:-1;;;;;21857:59:0;;;;;;;;;;;;;;;25108:45;25120:14;25136:7;25145;25108:11;:45::i;23251:363::-;23319:30;23415:4;23319:114;;23466:5;-1:-1:-1;;;;;23466:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23466:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23466:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23466:18:0;-1:-1:-1;;;;;23452:32:0;:10;:32;23444:71;;;;;-1:-1:-1;;;;;23444:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23534:9;;;;;-1:-1:-1;;;;;23534:9:0;:23;23526:47;;;;;-1:-1:-1;;;;;23526:47:0;;;;;;;;;;;;-1:-1:-1;;;;;23526:47:0;;;;;;;;;;;;;;;-1:-1:-1;23584:9:0;:22;;-1:-1:-1;;;;;23584:22:0;;;;;-1:-1:-1;;;;;;23584:22:0;;;;;;;;;23251:363::o;22487:607::-;22533:30;22629:4;22533:114;;22680:5;-1:-1:-1;;;;;22680:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22680:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22680:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22680:18:0;-1:-1:-1;;;;;22666:32:0;:10;:32;22658:71;;;;;-1:-1:-1;;;;;22658:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22775:1;22750:13;-1:-1:-1;;;;;22750:13:0;:27;22742:66;;;;;-1:-1:-1;;;;;22742:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22819:13;:26;;-1:-1:-1;;;;;;22819:26:0;22835:10;22819:26;;;;;22963:37;;;-1:-1:-1;;;;;22963:37:0;;-1:-1:-1;;;;;22963:37:0;;;;;;-1:-1:-1;;;;;22889:13:0;;;;;;;22963:31;;:37;;;;;;;;;;;;;;22889:13;22963:37;;;5:2:-1;;;;30:1;27;20:12;5:2;22963:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22963:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22963:37:0;22914:15;:97;;-1:-1:-1;;;;;;22914:97:0;-1:-1:-1;;;;;22914:97:0;;;;;;;;;-1:-1:-1;;23043:9:0;23022:18;:30;23079:7;23063:13;:23;22487:607::o;29016:824::-;29124:4;29182:35;29178:632;;-1:-1:-1;29241:4:0;29234:11;;29178:632;29286:16;29267:7;:36;29263:547;;;29324:15;;:46;;;-1:-1:-1;;;;;29324:46:0;;-1:-1:-1;;;;;29324:46:0;;;;;;;;;29373:1;;29324:15;;;;;:30;;:46;;;;;;;;;;;;;;;:15;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;29324:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29324:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29324:46:0;:50;29320:102;;;-1:-1:-1;29402:4:0;29395:11;;29320:102;29263:547;;;29462:22;29443:7;:42;29439:371;;;29592:18;;29506:15;;29564:13;;-1:-1:-1;;;;;29506:15:0;;;;:34;;29541:14;;29563:24;;29583:3;29563:24;:19;:24;:::i;:::-;29506:82;;;;;;;;;;;;;-1:-1:-1;;;;;29506:82:0;-1:-1:-1;;;;;29506:82:0;;;;;;-1:-1:-1;;;;;29506:82:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29506:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29506:82:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29506:82:0;:104;29502:156;;-1:-1:-1;29638:4:0;29631:11;;29439:371;29733:1;29679:14;29694:7;29679:23;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29679:51:0;;;;:35;:23;;;;;:35;;;;:51;;;;;;:55;29675:135;;;-1:-1:-1;29794:4:0;29787:11;;29675:135;-1:-1:-1;29827:5:0;29016:824;;;;;:::o;26043:218::-;26131:7;26140:28;26194:13;26209:14;26224:13;26209:29;;;;;;;;;;;;;;;;;;:43;;26186:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26186:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26043:218;;;;:::o;28428:322::-;28537:4;28490:14;-1:-1:-1;;;;;;;;;;;28555:18:0;;;28552:190;;;-1:-1:-1;28596:18:0;;28552:190;;;-1:-1:-1;;;;;;;;;;;28636:16:0;;;28632:110;;;28723:6;28706:13;;:24;;;;;;28700:30;;28428:322;;;:::o;29990:349::-;30184:14;:21;30170:36;;;;;;;;;;;;;;;;30076:29;;30170:36;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;30170:36:0;-1:-1:-1;30155:51:0;-1:-1:-1;30222:9:0;30217:115;30241:14;:21;30237:25;;30217:115;;;30302:18;30318:1;30302:15;:18::i;:::-;30284:12;30297:1;30284:15;;;;;;;;;;;;;;;;;:36;30264:3;;30217:115;;;;29990:349;:::o;25213:131::-;25315:14;:21;25213:131;;:::o;27007:912::-;27177:14;:21;27242;;;;;;;;;;;;;;;;27094:16;;27177:21;27094:16;;27177:21;27242;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;27242:21:0;-1:-1:-1;27209:54:0;-1:-1:-1;27274:15:0;27321:1;27304:207;27328:6;27324:1;:10;27304:207;;;27408:1;27360:14;27375:1;27360:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27360:45:0;;;;:29;:17;;;;;:29;;;;:45;;;;;;:49;27356:144;;;27455:1;27430:13;27444:7;27430:22;;;;;;;;;;;;;;;;;:26;27475:9;;;;;27356:144;27336:3;;27304:207;;;-1:-1:-1;27525:15:0;;:46;;;-1:-1:-1;;;;;27525:46:0;;-1:-1:-1;;;;;27525:46:0;;;;;;;;;27574:1;;27525:15;;;;;:30;;:46;;;;;;;;;;;;;;;:15;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;27525:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27525:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27525:46:0;:50;27521:157;;;27625:16;27592:13;27606:7;27592:22;;;;;;;;;;;;;;;;;:50;27657:9;;27521:157;27778:18;;27692:15;;27750:13;;-1:-1:-1;;;;;27692:15:0;;;;:34;;27727:14;;27749:24;;27769:3;27749:24;:19;:24;:::i;:::-;27692:82;;;;;;;;;;;;;-1:-1:-1;;;;;27692:82:0;-1:-1:-1;;;;;27692:82:0;;;;;;-1:-1:-1;;;;;27692:82:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27692:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27692:82:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27692:82:0;:104;27688:193;;27846:22;27813:13;27827:7;27813:22;;;;;;;;;;;;;:56;;;;;27688:193;-1:-1:-1;27898:13:0;27007:912;-1:-1:-1;;;27007:912:0:o;28076:344::-;12605:10;12626:13;12659:25;;;-1:-1:-1;;;;;12659:25:0;;-1:-1:-1;;;;;12659:25:0;;;;;;-1:-1:-1;;;;;12626:13:0;;;;12688:10;;12626:13;;12659:19;;:25;;;;;;;;;;;;;;;12626:13;12659:25;;;5:2:-1;;;;30:1;27;20:12;5:2;12659:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12659:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12659:25:0;-1:-1:-1;;;;;12659:39:0;;12651:66;;;;;-1:-1:-1;;;;;12651:66:0;;;;;;;;;;;;-1:-1:-1;;;;;12651:66:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28173:18:0;;;28170:242;;;28260:18;:24;;;28170:242;;;-1:-1:-1;;;;;;;;;;;28306:16:0;;;28302:110;;;28393:6;28386:14;;28370:13;:30;28302:110;28076:344;;;:::o;25591:227::-;25702:7;21694:1;-1:-1:-1;;;;;21642:54:0;:14;21657:13;21642:29;;;;;;;;;;;;;;;;:40;:29;;;;;:40;;-1:-1:-1;;;;;21642:40:0;:54;21638:278;;21751:14;21766:13;21751:29;;;;;;;;;;;;;;;;;;;;;:40;;;-1:-1:-1;;;;;21751:40:0;21737:10;:54;21711:130;;;;;-1:-1:-1;;;;;21711:130:0;;;;;;;;;;;;-1:-1:-1;;;;;21711:130:0;;;;;;;;;;;;;;;21638:278;;;21865:32;21886:10;21865:20;:32::i;:::-;21857:59;;;;;-1:-1:-1;;;;;21857:59:0;;;;;;;;;;;;-1:-1:-1;;;;;21857:59:0;;;;;;;;;;;;;;;25796:14;25759;25774:7;25759:23;;;;;;;;;;;;;;;;;;:34;;;:51;;;;;-1:-1:-1;;;;;25759:51:0;;;;;-1:-1:-1;;;;;25759:51:0;;;;;;25591:227;;;:::o;22126:293::-;22244:18;21694:1;-1:-1:-1;;;;;21642:54:0;:14;21657:13;21642:29;;;;;;;;;;;;;;;;:40;:29;;;;;:40;;-1:-1:-1;;;;;21642:40:0;:54;21638:278;;21751:14;21766:13;21751:29;;;;;;;;;;;;;;;;;;;;;:40;;;-1:-1:-1;;;;;21751:40:0;21737:10;:54;21711:130;;;;;-1:-1:-1;;;;;21711:130:0;;;;;;;;;;;;-1:-1:-1;;;;;21711:130:0;;;;;;;;;;;;;;;21638:278;;;21865:32;21886:10;21865:20;:32::i;:::-;21857:59;;;;;-1:-1:-1;;;;;21857:59:0;;;;;;;;;;;;-1:-1:-1;;;;;21857:59:0;;;;;;;;;;;;;;;22281:61;22293:13;22316:18;22308:27;22337:4;22281:11;:61::i;:::-;22353:58;22365:9;22384:18;22405:5;22353:11;:58::i;23791:405::-;23907:9;;;;;-1:-1:-1;;;;;23907:9:0;23893:10;:23;23885:32;;;;;;23937:16;;;;23936:17;23928:49;;;;;-1:-1:-1;;;;;23928:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23988:24;:22;:24::i;:::-;24028:9;24023:132;24043:19;;;24023:132;;;24084:59;24096:8;;24105:1;24096:11;;;;;;;;;;;;;-1:-1:-1;;;;;24096:11:0;24117:18;24109:27;;;;;;;24084:59;24064:3;;24023:132;;;-1:-1:-1;;24165:16:0;:23;;-1:-1:-1;;24165:23:0;24184:4;24165:23;;;-1:-1:-1;23791:405:0:o;12359:28::-;;;-1:-1:-1;;;;;12359:28:0;;:::o;32602:326::-;32762:14;:21;;;;32751:62;32785:9;32796:16;32751:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32751:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32858:51;;;;;;;;-1:-1:-1;32858:51:0;;32879:16;;32893:1;32879:16;;;;;;;;;32824:14;;32858:51;;;;32879:16;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;;;32858:51:0;;-1:-1:-1;;;;;32858:51:0;;;;;;;27:10:-1;;39:1;23:18;;45:23;;;-1:-1;32824:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32824:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;32824:96:0;-1:-1:-1;;;;;32824:96:0;;;;;;;;;-1:-1:-1;;;;32602:326:0:o;30557:1840::-;30728:16;30709:7;:36;;:82;;;;-1:-1:-1;30768:22:0;30749:7;:42;;30709:82;30687:181;;;;-1:-1:-1;;;;;30687:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30883:7;30879:1511;;;30933:14;30948:7;30933:23;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30933:51:0;;;;:35;:23;;;;;:35;;;;:51;;;;;;:56;30907:132;;;;;-1:-1:-1;;;;;30907:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31096:103;31127:14;31142:7;31127:23;;;;;;;;;;;;;;;;;;:37;;;31183:1;31096:12;:103::i;:::-;31056:14;31071:7;31056:23;;;;;;;;;;;;;;;;;;;;;:143;31286:14;:23;;31301:7;;31286:23;;;;;;;;;;;;;;;;:55;;:80;;;;31214:14;31229:7;31214:23;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31214:69:0;;;;:53;:23;;;;;:53;;;;:69;;;;;:152;31381:14;:23;;31396:7;;31381:23;;;;;;;;;;;;;;;;;;;;;;:37;;27:10:-1;;39:1;23:18;;45:23;;31381:58:0;;;;;;;;-1:-1:-1;;;;;;31381:58:0;-1:-1:-1;;;;;31381:58:0;;;;;30879:1511;;;31643:1;31589:14;31604:7;31589:23;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31589:51:0;;;;:35;:23;;;;;:35;;;;:51;;;;;;:55;31563:127;;;;;-1:-1:-1;;;;;31563:127:0;;;;;;;;;;;;-1:-1:-1;;;;;31563:127:0;;;;;;;;;;;;;;;31705:20;31728:14;31743:7;31728:23;;;;;;;;;;;;;;;;;;:53;;:69;31782:14;-1:-1:-1;;;;;31728:69:0;-1:-1:-1;;;;;31728:69:0;;;;;;;;;;;;;31705:92;;31812:19;31834:14;31849:7;31834:23;;;;;;;;;;;;;;;;;;:55;;31890:14;31905:7;31890:23;;;;;;;;;;;;;;;;;;:37;;;31834:94;;;;;;;;;;;;;;;;;;31943:14;:23;;-1:-1:-1;;;;;31834:94:0;;;;-1:-1:-1;31994:12:0;;31958:7;;31943:23;;;;;;;;;;;;;;-1:-1:-1;;;;;31943:48:0;;;;:35;:23;;;;;:35;;;;:48;;;;;:63;32092:14;:23;;32061:103;;32092:14;32107:7;;32092:23;;;;;;;;;;;;;;;;:37;;;32148:1;32061:12;:103::i;:::-;32021:14;32036:7;32021:23;;;;;;;;;;;;;;;;;;:37;;:143;;;;32233:11;32179:14;32194:7;32179:23;;;;;;;;;;;;;;;;;;:37;;32217:12;32179:51;;;;;;;;;;;;;;;;:65;;;;;-1:-1:-1;;;;;32179:65:0;;;;;-1:-1:-1;;;;;32179:65:0;;;;;;32259:14;32274:7;32259:23;;;;;;;;;;;;;;;;;;:37;;:46;;;;;;;;;;;;:::i;:::-;;32327:14;32342:7;32327:23;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32327:51:0;;;;:35;:23;;;;;:35;;;;:51;;;;;32320:58;-1:-1:-1;;30557:1840:0;;;:::o;930:181::-;988:7;1020:5;;;1044:6;;;;1036:46;;;;;-1:-1:-1;;;;;1036:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1102:1;930:181;-1:-1:-1;;;930:181:0:o;32995:911::-;33049:48;-1:-1:-1;;;;;33049:48:0;;;;;;;;;;;;;-1:-1:-1;;;;;33049:48:0;;;33094:1;33049:8;:48::i;:::-;33108:324;;;;;;;;;;;;;;;;;;;33419:1;33108:8;:324::i;:::-;33443:261;;;;;;;;;;;;;;;;;;;33691:1;33443:8;:261::i;:::-;33715:183;;;;;;;;;;;;;;;;;;;33885:1;33715:8;:183::i;:::-;32995:911::o;1386:184::-;1444:7;1477:1;1472;:6;;1464:49;;;;;-1:-1:-1;;;;;1464:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1536:5:0;;;1386:184::o;21037:12872::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21037:12872:0;-1:-1:-1;;;;;21037:12872:0;;;;;;;;;;;-1:-1:-1;21037:12872:0;;;;;;;-1:-1:-1;21037:12872:0;;;-1:-1:-1;21037:12872:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;21037:12872:0;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://c29d9f4776775a349ed0e866fd284b245101a96a5a51919a9c5133d78f2ad774
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.