ETH Price: $1,971.59 (-5.06%)

Contract

0x6f38e0f1a73c96cB3f42598613EA3474F09cB200
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve245200612026-02-23 14:03:1111 days ago1771855391IN
Aktionariat: DAKS Token
0 ETH0.000097152.08426512
Approve244845612026-02-18 15:17:1116 days ago1771427831IN
Aktionariat: DAKS Token
0 ETH0.000100552.15717104
Approve244841752026-02-18 13:59:2316 days ago1771423163IN
Aktionariat: DAKS Token
0 ETH0.000056182.10298397
Approve244841742026-02-18 13:59:1116 days ago1771423151IN
Aktionariat: DAKS Token
0 ETH0.00009772.09590964
Approve244415862026-02-12 15:27:1122 days ago1770910031IN
Aktionariat: DAKS Token
0 ETH0.000109382.34655712
Transfer243770352026-02-03 14:49:5931 days ago1770130199IN
Aktionariat: DAKS Token
0 ETH0.000052551.98056136
Transfer243770262026-02-03 14:48:1131 days ago1770130091IN
Aktionariat: DAKS Token
0 ETH0.000019410.3793855
Transfer243649882026-02-01 22:26:4732 days ago1769984807IN
Aktionariat: DAKS Token
0 ETH0.000072332.1199271
Transfer243649882026-02-01 22:26:4732 days ago1769984807IN
Aktionariat: DAKS Token
0 ETH0.000072332.1199271
Transfer From243397582026-01-29 9:57:4736 days ago1769680667IN
Aktionariat: DAKS Token
0 ETH0.000002520.06384759
Transfer From242353922026-01-14 20:40:1150 days ago1768423211IN
Aktionariat: DAKS Token
0 ETH0.000007030.11438352
Transfer242353872026-01-14 20:39:1150 days ago1768423151IN
Aktionariat: DAKS Token
0 ETH0.000091631.78934998
Transfer242063232026-01-10 19:15:1154 days ago1768072511IN
Aktionariat: DAKS Token
0 ETH0.000001040.03051099
Transfer241963482026-01-09 9:52:3556 days ago1767952355IN
Aktionariat: DAKS Token
0 ETH0.000079112.03325679
Approve241840882026-01-07 16:46:1158 days ago1767804371IN
Aktionariat: DAKS Token
0 ETH0.000098412.11113906
Approve241796642026-01-07 1:57:3558 days ago1767751055IN
Aktionariat: DAKS Token
0 ETH0.000053792.04039785
Approve241796522026-01-07 1:55:1158 days ago1767750911IN
Aktionariat: DAKS Token
0 ETH0.000094262.0374257
Transfer237398552025-11-06 11:10:11120 days ago1762427411IN
Aktionariat: DAKS Token
0 ETH0.000060681.9388687
Transfer235719332025-10-13 23:01:11143 days ago1760396471IN
Aktionariat: DAKS Token
0 ETH0.000088041.71961938
Transfer234182482025-09-22 11:24:11165 days ago1758540251IN
Aktionariat: DAKS Token
0 ETH0.000062381.82946594
Transfer234181952025-09-22 11:13:35165 days ago1758539615IN
Aktionariat: DAKS Token
0 ETH0.000095981.87472099
Transfer234108122025-09-21 10:25:11166 days ago1758450311IN
Aktionariat: DAKS Token
0 ETH0.00006652.12485516
Transfer From233464832025-09-12 10:47:59175 days ago1757674079IN
Aktionariat: DAKS Token
0 ETH0.000016280.28710264
Approve233190832025-09-08 14:50:35179 days ago1757343035IN
Aktionariat: DAKS Token
0 ETH0.000111372.40839426
Approve233186462025-09-08 13:22:47179 days ago1757337767IN
Aktionariat: DAKS Token
0 ETH0.000071711.55
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DraggableShares

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 6: DraggableShares.sol
/**
* SPDX-License-Identifier: LicenseRef-Aktionariat
*
* MIT License with Automated License Fee Payments
*
* Copyright (c) 2020 Aktionariat AG (aktionariat.com)
*
* Permission is hereby granted to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* - The above copyright notice and this permission notice shall be included in
*   all copies or substantial portions of the Software.
* - All automated license fee payments integrated into this and related Software
*   are preserved.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
pragma solidity >=0.8;

import "./ERC20Recoverable.sol";
import "./ERC20Draggable.sol";

/**
 * @title Draggable CompanyName AG Shares
 * @author Luzius Meisser, [email protected]
 *
 * This is an ERC-20 token representing shares of CompanyName AG that are bound to
 * a shareholder agreement that can be found at the URL defined in the constant 'terms'.
 * The shareholder agreement is partially enforced through this smart contract. The agreement
 * is designed to facilitate a complete acquisition of the firm even if a minority of shareholders
 * disagree with the acquisition, to protect the interest of the minority shareholders by requiring
 * the acquirer to offer the same conditions to everyone when acquiring the company, and to
 * facilitate an update of the shareholder agreement even if a minority of the shareholders that
 * are bound to this agreement disagree. The name "draggable" stems from the convention of calling
 * the right to drag a minority along with a sale of the company "drag-along" rights. The name is
 * chosen to ensure that token holders are aware that they are bound to such an agreement.
 *
 * The percentage of token holders that must agree with an update of the terms is defined by the
 * constant UPDATE_QUORUM. The percentage of yes-votes that is needed to successfully complete an
 * acquisition is defined in the constant ACQUISITION_QUORUM. Note that the update quorum is based
 * on the total number of tokens in circulation. In contrast, the acquisition quorum is based on the
 * number of votes cast during the voting period, not taking into account those who did not bother
 * to vote.
 */

contract DraggableShares is ERC20Recoverable, ERC20Draggable {

    string public terms;

    /**
     * Designed to be used with the Crypto Franc as currency token. See also parent constructor.
     */
    constructor(string memory _terms, address offerFactory, address wrappedToken, uint256 quorum, uint256 votePeriod)
        ERC20Draggable(offerFactory, wrappedToken, quorum, votePeriod) {
        IRecoverable(wrappedToken).setRecoverable(false);
        terms = _terms; // to update the terms, migrate to a new contract. That way it is ensured that the terms can only be updated when the quorom agrees.
    }

    function transfer(address to, uint256 value) override(ERC20Recoverable, ERC20) public returns (bool) {
        return super.transfer(to, value);
    }

    function getClaimDeleter() public view override returns (address) {
        return IRecoverable(address(wrapped)).getClaimDeleter();
    }

    function getCollateralRate(address collateralType) public view override returns (uint256) {
        uint256 rate = super.getCollateralRate(collateralType);
        if (rate > 0) {
            return rate;
        } else if (collateralType == address(wrapped)) {
            return unwrapConversionFactor;
        } else {
            // If the wrapped contract allows for a specific collateral, we should too.
            // If the wrapped contract is not IRecoverable, we will fail here, but would fail anyway.
            return IRecoverable(address(wrapped)).getCollateralRate(collateralType) * unwrapConversionFactor;
        }
    }

}

abstract contract IRecoverable {
    function setRecoverable(bool) public virtual;
    function getCollateralRate(address) public virtual view returns (uint256);
    function getClaimDeleter() public virtual view returns (address);
}

File 2 of 6: ERC20.sol
// SPDX-License-Identifier: MIT
// Copied and adjusted from OpenZeppelin
// Adjustments:
// - modifications to support ERC-677
// - removed require messages to save space
// - removed unnecessary require statements
// - removed GSN Context
// - upgraded to 0.8 to drop SafeMath
// - let name() and symbol() be implemented by subclass

pragma solidity >=0.8;

import "./IERC20.sol";
import "./IERC677Receiver.sol";

/**
 * @dev Implementation of the `IERC20` interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using `_mint`.
 * For a generic mechanism see `ERC20Mintable`.
 *
 * *For a detailed writeup see our guide [How to implement supply
 * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See `IERC20.approve`.
 */

abstract contract ERC20 is IERC20 {

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    uint8 public override decimals;

    constructor(uint8 _decimals) {
        decimals = _decimals;
    }

    /**
     * @dev See `IERC20.totalSupply`.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See `IERC20.balanceOf`.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See `IERC20.transfer`.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See `IERC20.allowance`.
     */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public override returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue);
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to `transfer`, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a `Transfer` event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(recipient != address(0));

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

    // ERC-677 functionality, can be useful for swapping and wrapping tokens
    function transferAndCall(address recipient, uint amount, bytes calldata data) public returns (bool) {
        bool success = transfer(recipient, amount);
        if (success){
            IERC677Receiver(recipient).onTokenTransfer(msg.sender, amount, data);
        }
        return success;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a `Transfer` event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address recipient, uint256 amount) internal virtual {
        require(recipient != address(0));

        _beforeTokenTransfer(address(0), recipient, amount);

        _totalSupply += amount;
        _balances[recipient] += amount;
        emit Transfer(address(0), recipient, amount);
    }

     /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a `Transfer` event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        _beforeTokenTransfer(account, address(0), amount);

        _totalSupply -= amount;
        _balances[account] -= amount;
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) virtual internal;
}

File 3 of 6: ERC20Draggable.sol
/**
* SPDX-License-Identifier: LicenseRef-Aktionariat
*
* MIT License with Automated License Fee Payments
*
* Copyright (c) 2020 Aktionariat AG (aktionariat.com)
*
* Permission is hereby granted to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* - The above copyright notice and this permission notice shall be included in
*   all copies or substantial portions of the Software.
* - All automated license fee payments integrated into this and related Software
*   are preserved.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
pragma solidity >=0.8;

/**
 * @title CompanyName Shareholder Agreement
 * @author Luzius Meisser, [email protected]
 * @dev These tokens are based on the ERC20 standard and the open-zeppelin library.
 *
 * This is an ERC-20 token representing shares of CompanyName AG that are bound to
 * a shareholder agreement that can be found at the URL defined in the constant 'terms'
 * of the 'DraggableCompanyNameShares' contract. The agreement is partially enforced
 * through the Swiss legal system, and partially enforced through this smart contract.
 * In particular, this smart contract implements a drag-along clause which allows the
 * majority of token holders to force the minority sell their shares along with them in
 * case of an acquisition. That's why the tokens are called "Draggable CompanyName AG Shares."
 */

import "./ERC20.sol";
import "./IERC20.sol";
import "./IERC677Receiver.sol";

contract ERC20Draggable is ERC20, IERC677Receiver {

    IERC20 public wrapped;                              // The wrapped contract
    IOfferFactory public factory;

    // If the wrapped tokens got replaced in an acquisition, unwrapping might yield many currency tokens
    uint256 public unwrapConversionFactor = 0;

    // The current acquisition attempt, if any. See initiateAcquisition to see the requirements to make a public offer.
    IOffer public offer;

    uint256 public quorum;
    uint256 public votePeriod;

    event MigrationSucceeded(address newContractAddress);

    constructor(
        address offerFactory,
        address wrappedToken,
        uint256 quorum_,
        uint256 votePeriod_
    ) ERC20(0) {
        factory = IOfferFactory(offerFactory);
        wrapped = IERC20(wrappedToken);
        quorum = quorum_;
        votePeriod = votePeriod_;
    }

    function name() public override view returns (string memory){
        if (isBinding()){
            return string(abi.encodePacked("Draggable ", wrapped.name()));
        } else {
            return string(abi.encodePacked("Wrapped ", wrapped.name()));
        }
    }

    function symbol() public override view returns (string memory){
        if (isBinding()){
            return string(abi.encodePacked("D", wrapped.symbol()));
        } else {
            return string(abi.encodePacked("W", wrapped.symbol()));
        }
    }

    function onTokenTransfer(address from, uint256 amount, bytes calldata) override public {
        require(msg.sender == address(wrapped));
        _mint(from, amount);
    }

    /** Increases the number of drag-along tokens. Requires minter to deposit an equal amount of share tokens */
    function wrap(address shareholder, uint256 amount) public {
        require(wrapped.transferFrom(msg.sender, address(this), amount));
        _mint(shareholder, amount);
    }

    /**
     * Indicates that the token holders are bound to the token terms and that:
     * - Conversions back to the wrapped token (unwrap) are not allowed
     * - The drag-along can be performed by making an according offer
     * - They can be migrated to a new version of this contract in accordance with the terms
     */
    function isBinding() public view returns (bool) {
        return unwrapConversionFactor == 0;
    }

    /**
     * Deactivates the drag-along mechanism and enables the unwrap function.
     */
    function deactivate(uint256 factor) internal {
        require(factor >= 1);
        unwrapConversionFactor = factor;
    }

    /** Decrease the number of drag-along tokens. The user gets back their shares in return */
    function unwrap(uint256 amount) public {
        require(!isBinding());
        unwrap(msg.sender, amount, unwrapConversionFactor);
    }
    
    function unwrap(address owner, uint256 amount, uint256 factor) internal {
        _burn(owner, amount);
        require(wrapped.transfer(owner, amount * factor));
    }

    /**
     * Burns both the token itself as well as the wrapped token!
     * If you want to get out of the shareholder agreement, use unwrap after it has been
     * deactivated by a majority vote or acquisition.
     *
     * Burning only works if wrapped token supports burning. Also, the exact meaning of this
     * operation might depend on the circumstances. Burning and reussing the wrapped token
     * does not free the sender from the legal obligations of the shareholder agreement.
     */
    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
        uint256 factor = isBinding() ? 1 : unwrapConversionFactor;
        IBurnable(address(wrapped)).burn(amount * factor);
    }

    function makeAcquisitionOffer(bytes32 salt, uint256 pricePerShare, address currency) public payable {
        require(isBinding());
        address newOffer = factory.create{value: msg.value}(salt, msg.sender, pricePerShare, currency, quorum, votePeriod);
        if (offerExists()) {
            require(IOffer(newOffer).isWellFunded());
            offer.contest(newOffer);
        }
        offer = IOffer(newOffer);
    }

    function drag(address buyer, address currency) public {
        require(msg.sender == address(offer));
        unwrap(buyer, balanceOf(buyer), 1);
        replaceWrapped(currency, buyer);
    }

    function notifyOfferEnded() public {
        if (msg.sender == address(offer)){
            offer = IOffer(address(0));
        }
    }

    function replaceWrapped(address newWrapped, address oldWrappedDestination) internal {
        require(isBinding());
        // Free all old wrapped tokens we have
        require(wrapped.transfer(oldWrappedDestination, wrapped.balanceOf(address(this))));
        // Count the new wrapped tokens
        wrapped = IERC20(newWrapped);
        deactivate(wrapped.balanceOf(address(this)) / totalSupply());
    }

    function migrate() public {
        address successor = msg.sender;
        require(!offerExists()); // if you have 80%, you can easily cancel the offer first if necessary
        require(balanceOf(successor) * 10000 >= totalSupply() * 8000, "Quorum not reached");
        replaceWrapped(successor, successor);
        emit MigrationSucceeded(successor);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) override internal {
        if (offerExists()) {
            offer.notifyMoved(from, to, amount);
        }
    }

    function offerExists() internal view returns (bool) {
        return address(offer) != address(0);
    }

}

abstract contract IBurnable {
    function burn(uint256) virtual public;
}

abstract contract IOffer {
    function isWellFunded() virtual public returns (bool);
    function contest(address newOffer) virtual public;
    function notifyMoved(address from, address to, uint256 value) virtual public;
}

abstract contract IOfferFactory {
    function create(bytes32 salt, address buyer, uint256 pricePerShare, address currency, uint256 quorum, uint256 votePeriod) virtual public payable returns (address);
}

File 4 of 6: ERC20Recoverable.sol
/**
* SPDX-License-Identifier: LicenseRef-Aktionariat
*
* MIT License with Automated License Fee Payments
*
* Copyright (c) 2020 Aktionariat AG (aktionariat.com)
*
* Permission is hereby granted to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* - The above copyright notice and this permission notice shall be included in
*   all copies or substantial portions of the Software.
* - All automated license fee payments integrated into this and related Software
*   are preserved.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
pragma solidity >=0.8;

import "./ERC20.sol";
import "./IERC20.sol";

/**
 * @title Recoverable
 * In case of tokens that represent real-world assets such as shares of a company, one needs a way
 * to handle lost private keys. With physical certificates, courts can declare share certificates as
 * invalid so the company can issue replacements. Here, we want a solution that does not depend on
 * third parties to resolve such cases. Instead, when someone has lost a private key, he can use the
 * declareLost function to post a deposit and claim that the shares assigned to a specific address are
 * lost. To prevent front running, a commit reveal scheme is used. If he actually is the owner of the shares,
 * he needs to wait for a certain period and can then reclaim the lost shares as well as the deposit.
 * If he is an attacker trying to claim shares belonging to someone else, he risks losing the deposit
 * as it can be claimed at anytime by the rightful owner.
 * Furthermore, if "getClaimDeleter" is defined in the subclass, the returned address is allowed to
 * delete claims, returning the collateral. This can help to prevent obvious cases of abuse of the claim
 * function.
 */

abstract contract ERC20Recoverable is ERC20 {

    // A struct that represents a claim made
    struct Claim {
        address claimant; // the person who created the claim
        uint256 collateral; // the amount of collateral deposited
        uint256 timestamp;  // the timestamp of the block in which the claim was made
        address currencyUsed; // The currency (XCHF) can be updated, we record the currency used for every request
    }

    uint256 public claimPeriod = 180 days; // Default of 180 days;

    mapping(address => Claim) public claims; // there can be at most one claim per address, here address is claimed address
    mapping(address => bool) public recoveryDisabled; // disable claimability (e.g. for long term storage)

    // ERC-20 token that can be used as collateral or 0x0 if disabled
    address public customCollateralAddress;
    uint256 public customCollateralRate;

    /**
     * Returns the collateral rate for the given collateral type and 0 if that type
     * of collateral is not accepted. By default, only the token itself is accepted at
     * a rate of 1:1.
     *
     * Subclasses should override this method if they want to add additional types of
     * collateral.
     */
    function getCollateralRate(address collateralType) public virtual view returns (uint256) {
        if (collateralType == address(this)) {
            return 1;
        } else if (collateralType == customCollateralAddress) {
            return customCollateralRate;
        } else {
            return 0;
        }
    }

    /**
     * Allows subclasses to set a custom collateral besides the token itself.
     * The collateral must be an ERC-20 token that returns true on successful transfers and
     * throws an exception or returns false on failure.
     * Also, do not forget to multiply the rate in accordance with the number of decimals of the collateral.
     * For example, rate should be 7*10**18 for 7 units of a collateral with 18 decimals.
     */
    function _setCustomClaimCollateral(address collateral, uint256 rate) internal {
        customCollateralAddress = collateral;
        if (customCollateralAddress == address(0)) {
            customCollateralRate = 0; // disabled
        } else {
            require(rate > 0, "Collateral rate can't be zero");
            customCollateralRate = rate;
        }
        emit CustomClaimCollateralChanged(collateral, rate);
    }

    function getClaimDeleter() virtual public view returns (address);

    /**
     * Allows subclasses to change the claim period, but not to fewer than 90 days.
     */
    function _setClaimPeriod(uint256 claimPeriodInDays) internal {
        require(claimPeriodInDays > 90, "Claim period must be at least 90 days"); // must be at least 90 days
        uint256 claimPeriodInSeconds = claimPeriodInDays * (1 days);
        claimPeriod = claimPeriodInSeconds;
        emit ClaimPeriodChanged(claimPeriod);
    }

    function setRecoverable(bool enabled) public {
        recoveryDisabled[msg.sender] = !enabled;
    }

    /**
     * Some users might want to disable claims for their address completely.
     * For example if they use a deep cold storage solution or paper wallet.
     */
    function isRecoveryEnabled(address target) public view returns (bool) {
        return !recoveryDisabled[target];
    }

    event ClaimMade(address indexed lostAddress, address indexed claimant, uint256 balance);
    event ClaimCleared(address indexed lostAddress, uint256 collateral);
    event ClaimDeleted(address indexed lostAddress, address indexed claimant, uint256 collateral);
    event ClaimResolved(address indexed lostAddress, address indexed claimant, uint256 collateral);
    event ClaimPeriodChanged(uint256 newClaimPeriodInDays);
    event CustomClaimCollateralChanged(address newCustomCollateralAddress, uint256 newCustomCollareralRate);

  /** Anyone can declare that the private key to a certain address was lost by calling declareLost
    * providing a deposit/collateral. There are three possibilities of what can happen with the claim:
    * 1) The claim period expires and the claimant can get the deposit and the shares back by calling recover
    * 2) The "lost" private key is used at any time to call clearClaim. In that case, the claim is deleted and
    *    the deposit sent to the shareholder (the owner of the private key). It is recommended to call recover
    *    whenever someone transfers funds to let claims be resolved automatically when the "lost" private key is
    *    used again.
    * 3) The owner deletes the claim and assigns the deposit to the claimant. This is intended to be used to resolve
    *    disputes. Generally, using this function implies that you have to trust the issuer of the tokens to handle
    *    the situation well. As a rule of thumb, the contract owner should assume the owner of the lost address to be the
    *    rightful owner of the deposit.
    * It is highly recommended that the owner observes the claims made and informs the owners of the claimed addresses
    * whenever a claim is made for their address (this of course is only possible if they are known to the owner, e.g.
    * through a shareholder register).
    */
    function declareLost(address collateralType, address lostAddress) public {
        require(isRecoveryEnabled(lostAddress), "Claims disabled for this address");
        uint256 collateralRate = getCollateralRate(collateralType);
        require(collateralRate > 0, "Unsupported collateral");
        address claimant = msg.sender;
        uint256 balance = balanceOf(lostAddress);
        uint256 collateral = balance * collateralRate;
        IERC20 currency = IERC20(collateralType);
        require(balance > 0, "Claimed address holds no shares");
        require(claims[lostAddress].collateral == 0, "Address already claimed");
        require(currency.transferFrom(claimant, address(this), collateral), "Collateral transfer failed");

        claims[lostAddress] = Claim({
            claimant: claimant,
            collateral: collateral,
            timestamp: block.timestamp,
            currencyUsed: collateralType
        });

        emit ClaimMade(lostAddress, claimant, balance);
    }

    function getClaimant(address lostAddress) public view returns (address) {
        return claims[lostAddress].claimant;
    }

    function getCollateral(address lostAddress) public view returns (uint256) {
        return claims[lostAddress].collateral;
    }

    function getCollateralType(address lostAddress) public view returns (address) {
        return claims[lostAddress].currencyUsed;
    }

    function getTimeStamp(address lostAddress) public view returns (uint256) {
        return claims[lostAddress].timestamp;
    }

    function transfer(address recipient, uint256 amount) override virtual public returns (bool) {
        require(super.transfer(recipient, amount), "Transfer failed");
        clearClaim();
        return true;
    }

    /**
     * Clears a claim after the key has been found again and assigns the collateral to the "lost" address.
     * This is the price an adverse claimer pays for filing a false claim and makes it risky to do so.
     */
    function clearClaim() public {
        if (claims[msg.sender].collateral != 0) {
            uint256 collateral = claims[msg.sender].collateral;
            IERC20 currency = IERC20(claims[msg.sender].currencyUsed);
            delete claims[msg.sender];
            require(currency.transfer(msg.sender, collateral), "Collateral transfer failed");
            emit ClaimCleared(msg.sender, collateral);
        }
    }

   /**
    * After the claim period has passed, the claimant can call this function to send the
    * tokens on the lost address as well as the collateral to himself.
    */
    function recover(address lostAddress) public {
        Claim memory claim = claims[lostAddress];
        uint256 collateral = claim.collateral;
        IERC20 currency = IERC20(claim.currencyUsed);
        require(collateral != 0, "No claim found");
        require(claim.claimant == msg.sender, "Only claimant can resolve claim");
        require(claim.timestamp + claimPeriod <= block.timestamp, "Claim period not over yet");
        address claimant = claim.claimant;
        delete claims[lostAddress];
        require(currency.transfer(claimant, collateral), "Collateral transfer failed");
        _transfer(lostAddress, claimant, balanceOf(lostAddress));
        emit ClaimResolved(lostAddress, claimant, collateral);
    }

    /**
     * This function is to be executed by the claim deleter only in case a dispute needs to be resolved manually.
     */
    function deleteClaim(address lostAddress) public {
        require(msg.sender == getClaimDeleter(), "You cannot delete claims");
        Claim memory claim = claims[lostAddress];
        IERC20 currency = IERC20(claim.currencyUsed);
        require(claim.collateral != 0, "No claim found");
        delete claims[lostAddress];
        require(currency.transfer(claim.claimant, claim.collateral), "Collateral transfer failed");
        emit ClaimDeleted(lostAddress, claim.claimant, claim.collateral);
    }

}

File 5 of 6: IERC20.sol
/**
* SPDX-License-Identifier: MIT
*
* Copyright (c) 2016-2019 zOS Global Limited
*
*/
pragma solidity >=0.8;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */

interface IERC20 {

    // Optional functions
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value changes when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 6 of 6: IERC677Receiver.sol
// SPDX-License-Identifier: MIT
// Copied from https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/UniswapV2Router02.sol
pragma solidity >=0.8;

interface IERC677Receiver {

    function onTokenTransfer(address from, uint256 amount, bytes calldata data) external;

}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_terms","type":"string"},{"internalType":"address","name":"offerFactory","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"quorum","type":"uint256"},{"internalType":"uint256","name":"votePeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lostAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"collateral","type":"uint256"}],"name":"ClaimCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lostAddress","type":"address"},{"indexed":true,"internalType":"address","name":"claimant","type":"address"},{"indexed":false,"internalType":"uint256","name":"collateral","type":"uint256"}],"name":"ClaimDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lostAddress","type":"address"},{"indexed":true,"internalType":"address","name":"claimant","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"ClaimMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newClaimPeriodInDays","type":"uint256"}],"name":"ClaimPeriodChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lostAddress","type":"address"},{"indexed":true,"internalType":"address","name":"claimant","type":"address"},{"indexed":false,"internalType":"uint256","name":"collateral","type":"uint256"}],"name":"ClaimResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCustomCollateralAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"newCustomCollareralRate","type":"uint256"}],"name":"CustomClaimCollateralChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newContractAddress","type":"address"}],"name":"MigrationSucceeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claims","outputs":[{"internalType":"address","name":"claimant","type":"address"},{"internalType":"uint256","name":"collateral","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"address","name":"currencyUsed","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"customCollateralAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"customCollateralRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collateralType","type":"address"},{"internalType":"address","name":"lostAddress","type":"address"}],"name":"declareLost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"deleteClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"currency","type":"address"}],"name":"drag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IOfferFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimDeleter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"getClaimant","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"getCollateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collateralType","type":"address"}],"name":"getCollateralRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"getCollateralType","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"getTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBinding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isRecoveryEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"pricePerShare","type":"uint256"},{"internalType":"address","name":"currency","type":"address"}],"name":"makeAcquisitionOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notifyOfferEnded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"offer","outputs":[{"internalType":"contract IOffer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lostAddress","type":"address"}],"name":"recover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"recoveryDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRecoverable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"terms","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unwrapConversionFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrapped","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405262ed4e006004556000600b553480156200001d57600080fd5b5060405162002bdf38038062002bdf8339810160408190526200004091620001be565b6003805460ff19169055600a80546001600160a01b038087166001600160a01b031992831617909255600980549286169290911682179055600d839055600e829055604051636427ed9760e01b8152636427ed9790620000a690600090600401620002ce565b600060405180830381600087803b158015620000c157600080fd5b505af1158015620000d6573d6000803e3d6000fd5b50508651620000ef9250600f91506020880190620000fb565b5050505050506200032c565b8280546200010990620002d9565b90600052602060002090601f0160209004810192826200012d576000855562000178565b82601f106200014857805160ff191683800117855562000178565b8280016001018555821562000178579182015b82811115620001785782518255916020019190600101906200015b565b50620001869291506200018a565b5090565b5b808211156200018657600081556001016200018b565b80516001600160a01b0381168114620001b957600080fd5b919050565b600080600080600060a08688031215620001d6578081fd5b85516001600160401b0380821115620001ed578283fd5b818801915088601f83011262000201578283fd5b81518181111562000216576200021662000316565b604051601f8201601f19908116603f0116810190838211818310171562000241576200024162000316565b81604052828152602093508b848487010111156200025d578586fd5b8591505b8282101562000280578482018401518183018501529083019062000261565b828211156200029157858484830101525b9850620002a3915050888201620001a1565b95505050620002b560408701620001a1565b6060870151608090970151959894975095949392505050565b901515815260200190565b600281046001821680620002ee57607f821691505b602082108114156200031057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6128a3806200033c6000396000f3fe6080604052600436106102725760003560e01c806370a082311161014f578063a9059cbb116100c1578063d50256251161007a578063d5025625146106ed578063dcc7d4ad14610702578063dd62ed3e14610715578063de0e9a3e14610735578063eb470ebf14610755578063fcb79a7e1461077557610272565b8063a9059cbb14610633578063b40e80d114610653578063bf376c7a14610673578063c028df0614610693578063c45a0155146106a8578063c6788bdd146106bd57610272565b80639b56d6c9116101135780639b56d6c9146105895780639e4b5745146105a9578063a3ec1883146105be578063a457c2d7146105de578063a4c0ed36146105fe578063a78135871461061e57610272565b806370a082311461050a57806377e071ad1461052a5780637dc2cd981461054a5780638fd3ab801461055f57806395d89b411461057457610272565b8063313ce567116101e85780634000aea0116101ac5780634000aea01461046b57806342966c681461048b57806350e70d48146104ab57806360918117146104c05780636427ed97146104d55780636b03ed5f146104f557610272565b8063313ce567146103d457806332a7ae95146103f657806332bc320b14610416578063395093511461042b5780633bcc45ba1461044b57610272565b80631703a0181161023a5780631703a0181461033557806318160ddd1461034a5780631e3b9de51461035f57806323b872dd1461037f57806326773ddd1461039f5780632a0a4ed5146103bf57610272565b806306fdde03146102775780630832e470146102a2578063095ea7b3146102c45780630c6f0e5d146102f15780630cd865ec14610313575b600080fd5b34801561028357600080fd5b5061028c610795565b60405161029991906124d9565b60405180910390f35b3480156102ae57600080fd5b506102b76108f1565b6040516102999190612738565b3480156102d057600080fd5b506102e46102df366004612136565b6108f7565b6040516102999190612499565b3480156102fd57600080fd5b5061030661090d565b60405161029991906123d5565b34801561031f57600080fd5b5061033361032e366004612086565b61091c565b005b34801561034157600080fd5b506102b7610b2d565b34801561035657600080fd5b506102b7610b33565b34801561036b57600080fd5b5061030661037a366004612086565b610b39565b34801561038b57600080fd5b506102e461039a3660046120f6565b610b5a565b3480156103ab57600080fd5b506103336103ba3660046120be565b610bac565b3480156103cb57600080fd5b50610306610dca565b3480156103e057600080fd5b506103e9610e4c565b6040516102999190612741565b34801561040257600080fd5b50610333610411366004612086565b610e55565b34801561042257600080fd5b50610333611030565b34801561043757600080fd5b506102e4610446366004612136565b611056565b34801561045757600080fd5b50610306610466366004612086565b61108d565b34801561047757600080fd5b506102e4610486366004612161565b6110ae565b34801561049757600080fd5b506103336104a63660046122fe565b611131565b3480156104b757600080fd5b506103066111c4565b3480156104cc57600080fd5b506102b76111d3565b3480156104e157600080fd5b506103336104f03660046121e5565b6111d9565b34801561050157600080fd5b506103336111f8565b34801561051657600080fd5b506102b7610525366004612086565b611333565b34801561053657600080fd5b506102b7610545366004612086565b61134e565b34801561055657600080fd5b506102b7611424565b34801561056b57600080fd5b5061033361142a565b34801561058057600080fd5b5061028c6114c8565b34801561059557600080fd5b506102b76105a4366004612086565b61160b565b3480156105b557600080fd5b506102e4611629565b3480156105ca57600080fd5b506102e46105d9366004612086565b611630565b3480156105ea57600080fd5b506102e46105f9366004612136565b61164f565b34801561060a57600080fd5b50610333610619366004612161565b611686565b34801561062a57600080fd5b506102b76116ad565b34801561063f57600080fd5b506102e461064e366004612136565b6116b3565b34801561065f57600080fd5b506102e461066e366004612086565b6116c6565b34801561067f57600080fd5b5061033361068e366004612136565b6116db565b34801561069f57600080fd5b50610306611778565b3480156106b457600080fd5b50610306611787565b3480156106c957600080fd5b506106dd6106d8366004612086565b611796565b604051610299949392919061246e565b3480156106f957600080fd5b5061028c6117c8565b61033361071036600461221d565b611856565b34801561072157600080fd5b506102b76107303660046120be565b611a0d565b34801561074157600080fd5b506103336107503660046122fe565b611a38565b34801561076157600080fd5b506102b7610770366004612086565b611a5a565b34801561078157600080fd5b506103336107903660046120be565b611a78565b606061079f611629565b1561085457600960009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082e9190810190612255565b60405160200161083e9190612373565b60405160208183030381529060405290506108ee565b600960009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156108a257600080fd5b505afa1580156108b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108de9190810190612255565b60405160200161083e91906123a5565b90565b600b5481565b6000610904338484611aad565b50600192915050565b6007546001600160a01b031681565b6001600160a01b03808216600090815260056020908152604091829020825160808101845281548516815260018201549281018390526002820154938101939093526003015490921660608201819052909190816109955760405162461bcd60e51b815260040161098c906125d3565b60405180910390fd5b82516001600160a01b031633146109be5760405162461bcd60e51b815260040161098c9061250c565b4260045484604001516109d1919061274f565b11156109ef5760405162461bcd60e51b815260040161098c90612543565b82516001600160a01b0380861660009081526005602052604080822080546001600160a01b0319908116825560018201849055600282019390935560030180549092169091555163a9059cbb60e01b81529083169063a9059cbb90610a5a908490879060040161240d565b602060405180830381600087803b158015610a7457600080fd5b505af1158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac9190612201565b610ac85760405162461bcd60e51b815260040161098c906125fb565b610adb8582610ad688611333565b611b08565b806001600160a01b0316856001600160a01b03167f52a5c2b28bc6eb9712d0ced43463103b486b13ccc9cda499fd3b2d7b6a74a8ee85604051610b1e9190612738565b60405180910390a35050505050565b600d5481565b60025490565b6001600160a01b03808216600090815260056020526040902054165b919050565b6000610b67848484611b08565b6001600160a01b038416600090815260016020908152604080832033808552925290912054610ba2918691610b9d9086906127a6565b611aad565b5060019392505050565b610bb581611630565b610bd15760405162461bcd60e51b815260040161098c90612632565b6000610bdc8361134e565b905060008111610bfe5760405162461bcd60e51b815260040161098c906125a3565b336000610c0a84611333565b90506000610c188483612787565b90508582610c385760405162461bcd60e51b815260040161098c906126ca565b6001600160a01b03861660009081526005602052604090206001015415610c715760405162461bcd60e51b815260040161098c90612667565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90610ca1908790309087906004016123e9565b602060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf39190612201565b610d0f5760405162461bcd60e51b815260040161098c906125fb565b604080516080810182526001600160a01b038087168083526020808401878152428587019081528d8516606087019081528d86166000818152600590955293889020965187549087166001600160a01b0319918216178855925160018801559051600287015551600390950180549590941694169390931790915591517f1982ca8958fc8a8176cb52be509260f4bc5af7ce04e1533711793f1c56dd535990610db9908790612738565b60405180910390a350505050505050565b60095460408051632a0a4ed560e01b815290516000926001600160a01b031691632a0a4ed5916004808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4791906120a2565b905090565b60035460ff1681565b610e5d610dca565b6001600160a01b0316336001600160a01b031614610e8d5760405162461bcd60e51b815260040161098c90612701565b6001600160a01b038082166000908152600560209081526040918290208251608081018452815485168152600182015492810183905260028201549381019390935260030154909216606082018190529091610efb5760405162461bcd60e51b815260040161098c906125d3565b6001600160a01b03808416600090815260056020908152604080832080546001600160a01b031990811682556001820185905560028201949094556003018054909316909255845190850151915163a9059cbb60e01b81529284169263a9059cbb92610f6a929160040161240d565b602060405180830381600087803b158015610f8457600080fd5b505af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190612201565b610fd85760405162461bcd60e51b815260040161098c906125fb565b81600001516001600160a01b0316836001600160a01b03167fbb036e629a9f4c0897ee5d48440dfdb36f7e772117723a2ed603a6514244c2d584602001516040516110239190612738565b60405180910390a3505050565b600c546001600160a01b031633141561105457600c80546001600160a01b03191690555b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610904918590610b9d90869061274f565b6001600160a01b039081166000908152600560205260409020600301541690565b6000806110bb86866116b3565b9050801561112857604051635260769b60e11b81526001600160a01b0387169063a4c0ed36906110f5903390899089908990600401612426565b600060405180830381600087803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050505b95945050505050565b61113b3382611bc5565b6000611145611629565b61115157600b54611154565b60015b6009549091506001600160a01b03166342966c686111728385612787565b6040518263ffffffff1660e01b815260040161118e9190612738565b600060405180830381600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b505050505050565b6009546001600160a01b031681565b60085481565b336000908152600660205260409020805460ff19169115919091179055565b3360009081526005602052604090206001015415611054573360008181526005602052604080822060018101805460038301805484546001600160a01b0319908116865593879055600290940195909555908216909355905163a9059cbb60e01b815291926001600160a01b0390911691829163a9059cbb916112809190869060040161240d565b602060405180830381600087803b15801561129a57600080fd5b505af11580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d29190612201565b6112ee5760405162461bcd60e51b815260040161098c906125fb565b336001600160a01b03167f203627483d943880619f4b7e0cca21dbefd6204b4d85b124eb99540e17ba86dd836040516113279190612738565b60405180910390a25050565b6001600160a01b031660009081526020819052604090205490565b60008061135a83611c5f565b90508015611369579050610b55565b6009546001600160a01b0384811691161415611389575050600b54610b55565b600b546009546040516377e071ad60e01b81526001600160a01b03909116906377e071ad906113bc9087906004016123d5565b60206040518083038186803b1580156113d457600080fd5b505afa1580156113e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140c9190612316565b6114169190612787565b915050610b55565b50919050565b60045481565b33611433611ca1565b1561143d57600080fd5b611445610b33565b61145190611f40612787565b61145a82611333565b61146690612710612787565b10156114845760405162461bcd60e51b815260040161098c9061269e565b61148e8182611cb2565b7f3b6b79a09e9fd230e8591b65c97236bf7df7a604edf733db0658e66b0e6eb2a9816040516114bd91906123d5565b60405180910390a150565b60606114d2611629565b1561157157600960009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561152557600080fd5b505afa158015611539573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115619190810190612255565b60405160200161083e919061232e565b600960009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156115bf57600080fd5b505afa1580156115d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115fb9190810190612255565b60405160200161083e9190612357565b6001600160a01b031660009081526005602052604090206001015490565b600b541590565b6001600160a01b031660009081526006602052604090205460ff161590565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610904918590610b9d9086906127a6565b6009546001600160a01b0316331461169d57600080fd5b6116a78484611e7a565b50505050565b600e5481565b60006116bf8383611f1b565b9392505050565b60066020526000908152604090205460ff1681565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061170f903390309086906004016123e9565b602060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117619190612201565b61176a57600080fd5b6117748282611e7a565b5050565b600c546001600160a01b031681565b600a546001600160a01b031681565b60056020526000908152604090208054600182015460028301546003909301546001600160a01b039283169391921684565b600f80546117d5906127e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611801906127e9565b801561184e5780601f106118235761010080835404028352916020019161184e565b820191906000526020600020905b81548152906001019060200180831161183157829003601f168201915b505050505081565b61185e611629565b61186757600080fd5b600a54600d54600e54604051634dc5e43160e01b81526000936001600160a01b031692634dc5e4319234926118a8928a9233928b928b9290916004016124a4565b6020604051808303818588803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118fa91906120a2565b9050611904611ca1565b156119e857806001600160a01b0316633f5e3e7f6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c9190612201565b61198557600080fd5b600c546040516306a169ed60e01b81526001600160a01b03909116906306a169ed906119b59084906004016123d5565b600060405180830381600087803b1580156119cf57600080fd5b505af11580156119e3573d6000803e3d6000fd5b505050505b600c80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611a40611629565b15611a4a57600080fd5b611a573382600b54611f4b565b50565b6001600160a01b031660009081526005602052604090206002015490565b600c546001600160a01b03163314611a8f57600080fd5b611aa382611a9c84611333565b6001611f4b565b6117748183611cb2565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611023908590612738565b6001600160a01b038216611b1b57600080fd5b611b26838383611fee565b6001600160a01b03831660009081526020819052604081208054839290611b4e9084906127a6565b90915550506001600160a01b03821660009081526020819052604081208054839290611b7b90849061274f565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110239190612738565b611bd182600083611fee565b8060026000828254611be391906127a6565b90915550506001600160a01b03821660009081526020819052604081208054839290611c109084906127a6565b90915550506040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c53908590612738565b60405180910390a35050565b60006001600160a01b038216301415611c7a57506001610b55565b6007546001600160a01b0383811691161415611c995750600854610b55565b506000610b55565b600c546001600160a01b0316151590565b611cba611629565b611cc357600080fd5b6009546040516370a0823160e01b81526001600160a01b039091169063a9059cbb90839083906370a0823190611cfd9030906004016123d5565b60206040518083038186803b158015611d1557600080fd5b505afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190612316565b6040518363ffffffff1660e01b8152600401611d6a92919061240d565b602060405180830381600087803b158015611d8457600080fd5b505af1158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc9190612201565b611dc557600080fd5b600980546001600160a01b0319166001600160a01b038416179055611774611deb610b33565b6009546040516370a0823160e01b81526001600160a01b03909116906370a0823190611e1b9030906004016123d5565b60206040518083038186803b158015611e3357600080fd5b505afa158015611e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6b9190612316565b611e759190612767565b612066565b6001600160a01b038216611e8d57600080fd5b611e9960008383611fee565b8060026000828254611eab919061274f565b90915550506001600160a01b03821660009081526020819052604081208054839290611ed890849061274f565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c53908590612738565b6000611f278383612079565b611f435760405162461bcd60e51b815260040161098c9061257a565b6109046111f8565b611f558383611bc5565b6009546001600160a01b031663a9059cbb84611f718486612787565b6040518363ffffffff1660e01b8152600401611f8e92919061240d565b602060405180830381600087803b158015611fa857600080fd5b505af1158015611fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe09190612201565b611fe957600080fd5b505050565b611ff6611ca1565b15611fe957600c5460405163e1a1810f60e01b81526001600160a01b039091169063e1a1810f9061202f908690869086906004016123e9565b600060405180830381600087803b15801561204957600080fd5b505af115801561205d573d6000803e3d6000fd5b50505050505050565b600181101561207457600080fd5b600b55565b6000610904338484611b08565b600060208284031215612097578081fd5b81356116bf8161284a565b6000602082840312156120b3578081fd5b81516116bf8161284a565b600080604083850312156120d0578081fd5b82356120db8161284a565b915060208301356120eb8161284a565b809150509250929050565b60008060006060848603121561210a578081fd5b83356121158161284a565b925060208401356121258161284a565b929592945050506040919091013590565b60008060408385031215612148578182fd5b82356121538161284a565b946020939093013593505050565b60008060008060608587031215612176578081fd5b84356121818161284a565b935060208501359250604085013567ffffffffffffffff808211156121a4578283fd5b818701915087601f8301126121b7578283fd5b8135818111156121c5578384fd5b8860208285010111156121d6578384fd5b95989497505060200194505050565b6000602082840312156121f6578081fd5b81356116bf8161285f565b600060208284031215612212578081fd5b81516116bf8161285f565b600080600060608486031215612231578283fd5b8335925060208401359150604084013561224a8161284a565b809150509250925092565b600060208284031215612266578081fd5b815167ffffffffffffffff8082111561227d578283fd5b818401915084601f830112612290578283fd5b8151818111156122a2576122a2612834565b604051601f8201601f19908116603f011681019083821181831017156122ca576122ca612834565b816040528281528760208487010111156122e2578586fd5b6122f38360208301602088016127bd565b979650505050505050565b60006020828403121561230f578081fd5b5035919050565b600060208284031215612327578081fd5b5051919050565b6000601160fa1b8252825161234a8160018501602087016127bd565b9190910160010192915050565b6000605760f81b8252825161234a8160018501602087016127bd565b6000690223930b3b3b0b13632960b51b8252825161239881600a8501602087016127bd565b91909101600a0192915050565b60006702bb930b83832b2160c51b825282516123c88160088501602087016127bd565b9190910160080192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b901515815260200190565b9586526001600160a01b039485166020870152604086019390935292166060840152608083019190915260a082015260c00190565b60006020825282518060208401526124f88160408501602087016127bd565b601f01601f19169190910160400192915050565b6020808252601f908201527f4f6e6c7920636c61696d616e742063616e207265736f6c766520636c61696d00604082015260600190565b60208082526019908201527f436c61696d20706572696f64206e6f74206f7665722079657400000000000000604082015260600190565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b602080825260169082015275155b9cdd5c1c1bdc9d19590818dbdb1b185d195c985b60521b604082015260600190565b6020808252600e908201526d139bc818db185a5b48199bdd5b9960921b604082015260600190565b6020808252601a908201527f436f6c6c61746572616c207472616e73666572206661696c6564000000000000604082015260600190565b6020808252818101527f436c61696d732064697361626c656420666f7220746869732061646472657373604082015260600190565b60208082526017908201527f4164647265737320616c726561647920636c61696d6564000000000000000000604082015260600190565b602080825260129082015271145d5bdc9d5b481b9bdd081c995858da195960721b604082015260600190565b6020808252601f908201527f436c61696d6564206164647265737320686f6c6473206e6f2073686172657300604082015260600190565b60208082526018908201527f596f752063616e6e6f742064656c65746520636c61696d730000000000000000604082015260600190565b90815260200190565b60ff91909116815260200190565b600082198211156127625761276261281e565b500190565b60008261278257634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156127a1576127a161281e565b500290565b6000828210156127b8576127b861281e565b500390565b60005b838110156127d85781810151838201526020016127c0565b838111156116a75750506000910152565b6002810460018216806127fd57607f821691505b6020821081141561141e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611a5757600080fd5b8015158114611a5757600080fdfea2646970667358221220d0f14521c293fe962159c01fb4a60e9f1b718f0e199f1b629f370472c2098d9664736f6c6343000801003300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f9f92751f272f0872e2edb6a280b0990f3e2b8a3000000000000000000000000cb58ec733ab0d96216b048bf7c3209d6c184d7c30000000000000000000000000000000000000000000000000000000000001d4c00000000000000000000000000000000000000000000000000000000004f1a00000000000000000000000000000000000000000000000000000000000000005c647261672e616b74696f6e61726961742e636f6d3f7368613235363d3363323535326364333231623964666632623731376264303264383235303631306639313439613461336561653735633465343463356361643035323332623800000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c806370a082311161014f578063a9059cbb116100c1578063d50256251161007a578063d5025625146106ed578063dcc7d4ad14610702578063dd62ed3e14610715578063de0e9a3e14610735578063eb470ebf14610755578063fcb79a7e1461077557610272565b8063a9059cbb14610633578063b40e80d114610653578063bf376c7a14610673578063c028df0614610693578063c45a0155146106a8578063c6788bdd146106bd57610272565b80639b56d6c9116101135780639b56d6c9146105895780639e4b5745146105a9578063a3ec1883146105be578063a457c2d7146105de578063a4c0ed36146105fe578063a78135871461061e57610272565b806370a082311461050a57806377e071ad1461052a5780637dc2cd981461054a5780638fd3ab801461055f57806395d89b411461057457610272565b8063313ce567116101e85780634000aea0116101ac5780634000aea01461046b57806342966c681461048b57806350e70d48146104ab57806360918117146104c05780636427ed97146104d55780636b03ed5f146104f557610272565b8063313ce567146103d457806332a7ae95146103f657806332bc320b14610416578063395093511461042b5780633bcc45ba1461044b57610272565b80631703a0181161023a5780631703a0181461033557806318160ddd1461034a5780631e3b9de51461035f57806323b872dd1461037f57806326773ddd1461039f5780632a0a4ed5146103bf57610272565b806306fdde03146102775780630832e470146102a2578063095ea7b3146102c45780630c6f0e5d146102f15780630cd865ec14610313575b600080fd5b34801561028357600080fd5b5061028c610795565b60405161029991906124d9565b60405180910390f35b3480156102ae57600080fd5b506102b76108f1565b6040516102999190612738565b3480156102d057600080fd5b506102e46102df366004612136565b6108f7565b6040516102999190612499565b3480156102fd57600080fd5b5061030661090d565b60405161029991906123d5565b34801561031f57600080fd5b5061033361032e366004612086565b61091c565b005b34801561034157600080fd5b506102b7610b2d565b34801561035657600080fd5b506102b7610b33565b34801561036b57600080fd5b5061030661037a366004612086565b610b39565b34801561038b57600080fd5b506102e461039a3660046120f6565b610b5a565b3480156103ab57600080fd5b506103336103ba3660046120be565b610bac565b3480156103cb57600080fd5b50610306610dca565b3480156103e057600080fd5b506103e9610e4c565b6040516102999190612741565b34801561040257600080fd5b50610333610411366004612086565b610e55565b34801561042257600080fd5b50610333611030565b34801561043757600080fd5b506102e4610446366004612136565b611056565b34801561045757600080fd5b50610306610466366004612086565b61108d565b34801561047757600080fd5b506102e4610486366004612161565b6110ae565b34801561049757600080fd5b506103336104a63660046122fe565b611131565b3480156104b757600080fd5b506103066111c4565b3480156104cc57600080fd5b506102b76111d3565b3480156104e157600080fd5b506103336104f03660046121e5565b6111d9565b34801561050157600080fd5b506103336111f8565b34801561051657600080fd5b506102b7610525366004612086565b611333565b34801561053657600080fd5b506102b7610545366004612086565b61134e565b34801561055657600080fd5b506102b7611424565b34801561056b57600080fd5b5061033361142a565b34801561058057600080fd5b5061028c6114c8565b34801561059557600080fd5b506102b76105a4366004612086565b61160b565b3480156105b557600080fd5b506102e4611629565b3480156105ca57600080fd5b506102e46105d9366004612086565b611630565b3480156105ea57600080fd5b506102e46105f9366004612136565b61164f565b34801561060a57600080fd5b50610333610619366004612161565b611686565b34801561062a57600080fd5b506102b76116ad565b34801561063f57600080fd5b506102e461064e366004612136565b6116b3565b34801561065f57600080fd5b506102e461066e366004612086565b6116c6565b34801561067f57600080fd5b5061033361068e366004612136565b6116db565b34801561069f57600080fd5b50610306611778565b3480156106b457600080fd5b50610306611787565b3480156106c957600080fd5b506106dd6106d8366004612086565b611796565b604051610299949392919061246e565b3480156106f957600080fd5b5061028c6117c8565b61033361071036600461221d565b611856565b34801561072157600080fd5b506102b76107303660046120be565b611a0d565b34801561074157600080fd5b506103336107503660046122fe565b611a38565b34801561076157600080fd5b506102b7610770366004612086565b611a5a565b34801561078157600080fd5b506103336107903660046120be565b611a78565b606061079f611629565b1561085457600960009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082e9190810190612255565b60405160200161083e9190612373565b60405160208183030381529060405290506108ee565b600960009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156108a257600080fd5b505afa1580156108b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108de9190810190612255565b60405160200161083e91906123a5565b90565b600b5481565b6000610904338484611aad565b50600192915050565b6007546001600160a01b031681565b6001600160a01b03808216600090815260056020908152604091829020825160808101845281548516815260018201549281018390526002820154938101939093526003015490921660608201819052909190816109955760405162461bcd60e51b815260040161098c906125d3565b60405180910390fd5b82516001600160a01b031633146109be5760405162461bcd60e51b815260040161098c9061250c565b4260045484604001516109d1919061274f565b11156109ef5760405162461bcd60e51b815260040161098c90612543565b82516001600160a01b0380861660009081526005602052604080822080546001600160a01b0319908116825560018201849055600282019390935560030180549092169091555163a9059cbb60e01b81529083169063a9059cbb90610a5a908490879060040161240d565b602060405180830381600087803b158015610a7457600080fd5b505af1158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac9190612201565b610ac85760405162461bcd60e51b815260040161098c906125fb565b610adb8582610ad688611333565b611b08565b806001600160a01b0316856001600160a01b03167f52a5c2b28bc6eb9712d0ced43463103b486b13ccc9cda499fd3b2d7b6a74a8ee85604051610b1e9190612738565b60405180910390a35050505050565b600d5481565b60025490565b6001600160a01b03808216600090815260056020526040902054165b919050565b6000610b67848484611b08565b6001600160a01b038416600090815260016020908152604080832033808552925290912054610ba2918691610b9d9086906127a6565b611aad565b5060019392505050565b610bb581611630565b610bd15760405162461bcd60e51b815260040161098c90612632565b6000610bdc8361134e565b905060008111610bfe5760405162461bcd60e51b815260040161098c906125a3565b336000610c0a84611333565b90506000610c188483612787565b90508582610c385760405162461bcd60e51b815260040161098c906126ca565b6001600160a01b03861660009081526005602052604090206001015415610c715760405162461bcd60e51b815260040161098c90612667565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90610ca1908790309087906004016123e9565b602060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf39190612201565b610d0f5760405162461bcd60e51b815260040161098c906125fb565b604080516080810182526001600160a01b038087168083526020808401878152428587019081528d8516606087019081528d86166000818152600590955293889020965187549087166001600160a01b0319918216178855925160018801559051600287015551600390950180549590941694169390931790915591517f1982ca8958fc8a8176cb52be509260f4bc5af7ce04e1533711793f1c56dd535990610db9908790612738565b60405180910390a350505050505050565b60095460408051632a0a4ed560e01b815290516000926001600160a01b031691632a0a4ed5916004808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4791906120a2565b905090565b60035460ff1681565b610e5d610dca565b6001600160a01b0316336001600160a01b031614610e8d5760405162461bcd60e51b815260040161098c90612701565b6001600160a01b038082166000908152600560209081526040918290208251608081018452815485168152600182015492810183905260028201549381019390935260030154909216606082018190529091610efb5760405162461bcd60e51b815260040161098c906125d3565b6001600160a01b03808416600090815260056020908152604080832080546001600160a01b031990811682556001820185905560028201949094556003018054909316909255845190850151915163a9059cbb60e01b81529284169263a9059cbb92610f6a929160040161240d565b602060405180830381600087803b158015610f8457600080fd5b505af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190612201565b610fd85760405162461bcd60e51b815260040161098c906125fb565b81600001516001600160a01b0316836001600160a01b03167fbb036e629a9f4c0897ee5d48440dfdb36f7e772117723a2ed603a6514244c2d584602001516040516110239190612738565b60405180910390a3505050565b600c546001600160a01b031633141561105457600c80546001600160a01b03191690555b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610904918590610b9d90869061274f565b6001600160a01b039081166000908152600560205260409020600301541690565b6000806110bb86866116b3565b9050801561112857604051635260769b60e11b81526001600160a01b0387169063a4c0ed36906110f5903390899089908990600401612426565b600060405180830381600087803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050505b95945050505050565b61113b3382611bc5565b6000611145611629565b61115157600b54611154565b60015b6009549091506001600160a01b03166342966c686111728385612787565b6040518263ffffffff1660e01b815260040161118e9190612738565b600060405180830381600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b505050505050565b6009546001600160a01b031681565b60085481565b336000908152600660205260409020805460ff19169115919091179055565b3360009081526005602052604090206001015415611054573360008181526005602052604080822060018101805460038301805484546001600160a01b0319908116865593879055600290940195909555908216909355905163a9059cbb60e01b815291926001600160a01b0390911691829163a9059cbb916112809190869060040161240d565b602060405180830381600087803b15801561129a57600080fd5b505af11580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d29190612201565b6112ee5760405162461bcd60e51b815260040161098c906125fb565b336001600160a01b03167f203627483d943880619f4b7e0cca21dbefd6204b4d85b124eb99540e17ba86dd836040516113279190612738565b60405180910390a25050565b6001600160a01b031660009081526020819052604090205490565b60008061135a83611c5f565b90508015611369579050610b55565b6009546001600160a01b0384811691161415611389575050600b54610b55565b600b546009546040516377e071ad60e01b81526001600160a01b03909116906377e071ad906113bc9087906004016123d5565b60206040518083038186803b1580156113d457600080fd5b505afa1580156113e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140c9190612316565b6114169190612787565b915050610b55565b50919050565b60045481565b33611433611ca1565b1561143d57600080fd5b611445610b33565b61145190611f40612787565b61145a82611333565b61146690612710612787565b10156114845760405162461bcd60e51b815260040161098c9061269e565b61148e8182611cb2565b7f3b6b79a09e9fd230e8591b65c97236bf7df7a604edf733db0658e66b0e6eb2a9816040516114bd91906123d5565b60405180910390a150565b60606114d2611629565b1561157157600960009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561152557600080fd5b505afa158015611539573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115619190810190612255565b60405160200161083e919061232e565b600960009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156115bf57600080fd5b505afa1580156115d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115fb9190810190612255565b60405160200161083e9190612357565b6001600160a01b031660009081526005602052604090206001015490565b600b541590565b6001600160a01b031660009081526006602052604090205460ff161590565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610904918590610b9d9086906127a6565b6009546001600160a01b0316331461169d57600080fd5b6116a78484611e7a565b50505050565b600e5481565b60006116bf8383611f1b565b9392505050565b60066020526000908152604090205460ff1681565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061170f903390309086906004016123e9565b602060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117619190612201565b61176a57600080fd5b6117748282611e7a565b5050565b600c546001600160a01b031681565b600a546001600160a01b031681565b60056020526000908152604090208054600182015460028301546003909301546001600160a01b039283169391921684565b600f80546117d5906127e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611801906127e9565b801561184e5780601f106118235761010080835404028352916020019161184e565b820191906000526020600020905b81548152906001019060200180831161183157829003601f168201915b505050505081565b61185e611629565b61186757600080fd5b600a54600d54600e54604051634dc5e43160e01b81526000936001600160a01b031692634dc5e4319234926118a8928a9233928b928b9290916004016124a4565b6020604051808303818588803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118fa91906120a2565b9050611904611ca1565b156119e857806001600160a01b0316633f5e3e7f6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c9190612201565b61198557600080fd5b600c546040516306a169ed60e01b81526001600160a01b03909116906306a169ed906119b59084906004016123d5565b600060405180830381600087803b1580156119cf57600080fd5b505af11580156119e3573d6000803e3d6000fd5b505050505b600c80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611a40611629565b15611a4a57600080fd5b611a573382600b54611f4b565b50565b6001600160a01b031660009081526005602052604090206002015490565b600c546001600160a01b03163314611a8f57600080fd5b611aa382611a9c84611333565b6001611f4b565b6117748183611cb2565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611023908590612738565b6001600160a01b038216611b1b57600080fd5b611b26838383611fee565b6001600160a01b03831660009081526020819052604081208054839290611b4e9084906127a6565b90915550506001600160a01b03821660009081526020819052604081208054839290611b7b90849061274f565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110239190612738565b611bd182600083611fee565b8060026000828254611be391906127a6565b90915550506001600160a01b03821660009081526020819052604081208054839290611c109084906127a6565b90915550506040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c53908590612738565b60405180910390a35050565b60006001600160a01b038216301415611c7a57506001610b55565b6007546001600160a01b0383811691161415611c995750600854610b55565b506000610b55565b600c546001600160a01b0316151590565b611cba611629565b611cc357600080fd5b6009546040516370a0823160e01b81526001600160a01b039091169063a9059cbb90839083906370a0823190611cfd9030906004016123d5565b60206040518083038186803b158015611d1557600080fd5b505afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190612316565b6040518363ffffffff1660e01b8152600401611d6a92919061240d565b602060405180830381600087803b158015611d8457600080fd5b505af1158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc9190612201565b611dc557600080fd5b600980546001600160a01b0319166001600160a01b038416179055611774611deb610b33565b6009546040516370a0823160e01b81526001600160a01b03909116906370a0823190611e1b9030906004016123d5565b60206040518083038186803b158015611e3357600080fd5b505afa158015611e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6b9190612316565b611e759190612767565b612066565b6001600160a01b038216611e8d57600080fd5b611e9960008383611fee565b8060026000828254611eab919061274f565b90915550506001600160a01b03821660009081526020819052604081208054839290611ed890849061274f565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c53908590612738565b6000611f278383612079565b611f435760405162461bcd60e51b815260040161098c9061257a565b6109046111f8565b611f558383611bc5565b6009546001600160a01b031663a9059cbb84611f718486612787565b6040518363ffffffff1660e01b8152600401611f8e92919061240d565b602060405180830381600087803b158015611fa857600080fd5b505af1158015611fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe09190612201565b611fe957600080fd5b505050565b611ff6611ca1565b15611fe957600c5460405163e1a1810f60e01b81526001600160a01b039091169063e1a1810f9061202f908690869086906004016123e9565b600060405180830381600087803b15801561204957600080fd5b505af115801561205d573d6000803e3d6000fd5b50505050505050565b600181101561207457600080fd5b600b55565b6000610904338484611b08565b600060208284031215612097578081fd5b81356116bf8161284a565b6000602082840312156120b3578081fd5b81516116bf8161284a565b600080604083850312156120d0578081fd5b82356120db8161284a565b915060208301356120eb8161284a565b809150509250929050565b60008060006060848603121561210a578081fd5b83356121158161284a565b925060208401356121258161284a565b929592945050506040919091013590565b60008060408385031215612148578182fd5b82356121538161284a565b946020939093013593505050565b60008060008060608587031215612176578081fd5b84356121818161284a565b935060208501359250604085013567ffffffffffffffff808211156121a4578283fd5b818701915087601f8301126121b7578283fd5b8135818111156121c5578384fd5b8860208285010111156121d6578384fd5b95989497505060200194505050565b6000602082840312156121f6578081fd5b81356116bf8161285f565b600060208284031215612212578081fd5b81516116bf8161285f565b600080600060608486031215612231578283fd5b8335925060208401359150604084013561224a8161284a565b809150509250925092565b600060208284031215612266578081fd5b815167ffffffffffffffff8082111561227d578283fd5b818401915084601f830112612290578283fd5b8151818111156122a2576122a2612834565b604051601f8201601f19908116603f011681019083821181831017156122ca576122ca612834565b816040528281528760208487010111156122e2578586fd5b6122f38360208301602088016127bd565b979650505050505050565b60006020828403121561230f578081fd5b5035919050565b600060208284031215612327578081fd5b5051919050565b6000601160fa1b8252825161234a8160018501602087016127bd565b9190910160010192915050565b6000605760f81b8252825161234a8160018501602087016127bd565b6000690223930b3b3b0b13632960b51b8252825161239881600a8501602087016127bd565b91909101600a0192915050565b60006702bb930b83832b2160c51b825282516123c88160088501602087016127bd565b9190910160080192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b901515815260200190565b9586526001600160a01b039485166020870152604086019390935292166060840152608083019190915260a082015260c00190565b60006020825282518060208401526124f88160408501602087016127bd565b601f01601f19169190910160400192915050565b6020808252601f908201527f4f6e6c7920636c61696d616e742063616e207265736f6c766520636c61696d00604082015260600190565b60208082526019908201527f436c61696d20706572696f64206e6f74206f7665722079657400000000000000604082015260600190565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b602080825260169082015275155b9cdd5c1c1bdc9d19590818dbdb1b185d195c985b60521b604082015260600190565b6020808252600e908201526d139bc818db185a5b48199bdd5b9960921b604082015260600190565b6020808252601a908201527f436f6c6c61746572616c207472616e73666572206661696c6564000000000000604082015260600190565b6020808252818101527f436c61696d732064697361626c656420666f7220746869732061646472657373604082015260600190565b60208082526017908201527f4164647265737320616c726561647920636c61696d6564000000000000000000604082015260600190565b602080825260129082015271145d5bdc9d5b481b9bdd081c995858da195960721b604082015260600190565b6020808252601f908201527f436c61696d6564206164647265737320686f6c6473206e6f2073686172657300604082015260600190565b60208082526018908201527f596f752063616e6e6f742064656c65746520636c61696d730000000000000000604082015260600190565b90815260200190565b60ff91909116815260200190565b600082198211156127625761276261281e565b500190565b60008261278257634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156127a1576127a161281e565b500290565b6000828210156127b8576127b861281e565b500390565b60005b838110156127d85781810151838201526020016127c0565b838111156116a75750506000910152565b6002810460018216806127fd57607f821691505b6020821081141561141e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611a5757600080fd5b8015158114611a5757600080fdfea2646970667358221220d0f14521c293fe962159c01fb4a60e9f1b718f0e199f1b629f370472c2098d9664736f6c63430008010033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f9f92751f272f0872e2edb6a280b0990f3e2b8a3000000000000000000000000cb58ec733ab0d96216b048bf7c3209d6c184d7c30000000000000000000000000000000000000000000000000000000000001d4c00000000000000000000000000000000000000000000000000000000004f1a00000000000000000000000000000000000000000000000000000000000000005c647261672e616b74696f6e61726961742e636f6d3f7368613235363d3363323535326364333231623964666632623731376264303264383235303631306639313439613461336561653735633465343463356361643035323332623800000000

-----Decoded View---------------
Arg [0] : _terms (string): drag.aktionariat.com?sha256=3c2552cd321b9dff2b717bd02d8250610f9149a4a3eae75c4e44c5cad05232b8
Arg [1] : offerFactory (address): 0xf9f92751F272f0872e2EDb6a280b0990F3e2b8A3
Arg [2] : wrappedToken (address): 0xcB58EC733Ab0d96216B048bf7C3209d6c184D7c3
Arg [3] : quorum (uint256): 7500
Arg [4] : votePeriod (uint256): 5184000

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 000000000000000000000000f9f92751f272f0872e2edb6a280b0990f3e2b8a3
Arg [2] : 000000000000000000000000cb58ec733ab0d96216b048bf7c3209d6c184d7c3
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001d4c
Arg [4] : 00000000000000000000000000000000000000000000000000000000004f1a00
Arg [5] : 000000000000000000000000000000000000000000000000000000000000005c
Arg [6] : 647261672e616b74696f6e61726961742e636f6d3f7368613235363d33633235
Arg [7] : 3532636433323162396466663262373137626430326438323530363130663931
Arg [8] : 3439613461336561653735633465343463356361643035323332623800000000


Deployed Bytecode Sourcemap

3008:1594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3178:274:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2543:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3010:157:1:-;;;;;;;;;;-1:-1:-1;3010:157:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3388:38:3:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10525:741::-;;;;;;;;;;-1:-1:-1;10525:741:3;;;;;:::i;:::-;;:::i;:::-;;2742:21:2;;;;;;;;;;;;;:::i;1989:100:1:-;;;;;;;;;;;;;:::i;8905:126:3:-;;;;;;;;;;-1:-1:-1;8905:126:3;;;;;:::i;:::-;;:::i;3638:262:1:-;;;;;;;;;;-1:-1:-1;3638:262:1;;;;;:::i;:::-;;:::i;7877:1020:3:-;;;;;;;;;;-1:-1:-1;7877:1020:3;;;;;:::i;:::-;;:::i;3801:140:0:-;;;;;;;;;;;;;:::i;1817:30:1:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11407:514:3:-;;;;;;;;;;-1:-1:-1;11407:514:3;;;;;:::i;:::-;;:::i;6693:139:2:-;;;;;;;;;;;;;:::i;4309:203:1:-;;;;;;;;;;-1:-1:-1;4309:203:1;;;;;:::i;:::-;;:::i;9177:136:3:-;;;;;;;;;;-1:-1:-1;9177:136:3;;;;;:::i;:::-;;:::i;6134:303:1:-;;;;;;;;;;-1:-1:-1;6134:303:1;;;;;:::i;:::-;;:::i;5830:209:2:-;;;;;;;;;;-1:-1:-1;5830:209:2;;;;;:::i;:::-;;:::i;2319:21::-;;;;;;;;;;;;;:::i;3433:35:3:-;;;;;;;;;;;;;:::i;5559:103::-;;;;;;;;;;-1:-1:-1;5559:103:3;;;;;:::i;:::-;;:::i;9912:427::-;;;;;;;;;;;;;:::i;2152:119:1:-;;;;;;;;;;-1:-1:-1;2152:119:1;;;;;:::i;:::-;;:::i;3949:648:0:-;;;;;;;;;;-1:-1:-1;3949:648:0;;;;;:::i;:::-;;:::i;3012:37:3:-;;;;;;;;;;;;;:::i;7263:366:2:-;;;;;;;;;;;;;:::i;3460:264::-;;;;;;;;;;;;;:::i;9039:130:3:-;;;;;;;;;;-1:-1:-1;9039:130:3;;;;;:::i;:::-;;:::i;4551:101:2:-;;;;;;;;;;;;;:::i;5844:121:3:-;;;;;;;;;;-1:-1:-1;5844:121:3;;;;;:::i;:::-;;:::i;5015:213:1:-;;;;;;;;;;-1:-1:-1;5015:213:1;;;;;:::i;:::-;;:::i;3732:175:2:-;;;;;;;;;;-1:-1:-1;3732:175:2;;;;;:::i;:::-;;:::i;2770:25::-;;;;;;;;;;;;;:::i;3641:152:0:-;;;;;;;;;;-1:-1:-1;3641:152:0;;;;;:::i;:::-;;:::i;3207:48:3:-;;;;;;;;;;-1:-1:-1;3207:48:3;;;;;:::i;:::-;;:::i;4029:178:2:-;;;;;;;;;;-1:-1:-1;4029:178:2;;;;;:::i;:::-;;:::i;2714:19::-;;;;;;;;;;;;;:::i;2400:28::-;;;;;;;;;;;;;:::i;3082:39:3:-;;;;;;;;;;-1:-1:-1;3082:39:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;3078:19:0:-;;;;;;;;;;;;;:::i;6047:433:2:-;;;;;;:::i;:::-;;:::i;2720:143:1:-;;;;;;;;;;-1:-1:-1;2720:143:1;;;;;:::i;:::-;;:::i;4986:140:2:-;;;;;;;;;;-1:-1:-1;4986:140:2;;;;;:::i;:::-;;:::i;9321:128:3:-;;;;;;;;;;-1:-1:-1;9321:128:3;;;;;:::i;:::-;;:::i;6488:197:2:-;;;;;;;;;;-1:-1:-1;6488:197:2;;;;;:::i;:::-;;:::i;3178:274::-;3224:13;3253:11;:9;:11::i;:::-;3249:196;;;3325:7;;;;;;;;;-1:-1:-1;;;;;3325:7:2;-1:-1:-1;;;;;3325:12:2;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3325:14:2;;;;;;;;;;;;:::i;:::-;3294:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;3280:61;;;;3249:196;3417:7;;;;;;;;;-1:-1:-1;;;;;3417:7:2;-1:-1:-1;;;;;3417:12:2;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3417:14:2;;;;;;;;;;;;:::i;:::-;3388:44;;;;;;;;:::i;3249:196::-;3178:274;:::o;2543:41::-;;;;:::o;3010:157:1:-;3084:4;3101:36;3110:10;3122:7;3131:5;3101:8;:36::i;:::-;-1:-1:-1;3155:4:1;3010:157;;;;:::o;3388:38:3:-;;;-1:-1:-1;;;;;3388:38:3;;:::o;10525:741::-;-1:-1:-1;;;;;10602:19:3;;;10581:18;10602:19;;;:6;:19;;;;;;;;;10581:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10743:15;10735:42;;;;-1:-1:-1;;;10735:42:3;;;;;;;:::i;:::-;;;;;;;;;10796:14;;-1:-1:-1;;;;;10796:28:3;10814:10;10796:28;10788:72;;;;-1:-1:-1;;;10788:72:3;;;;;;;:::i;:::-;10912:15;10897:11;;10879:5;:15;;;:29;;;;:::i;:::-;:48;;10871:86;;;;-1:-1:-1;;;10871:86:3;;;;;;;:::i;:::-;10987:14;;-1:-1:-1;;;;;11019:19:3;;;10968:16;11019:19;;;:6;:19;;;;;;11012:26;;-1:-1:-1;;;;;;11012:26:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;11057:39;-1:-1:-1;;;11057:39:3;;:17;;;;;;:39;;10987:14;;11085:10;;11057:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11049:78;;;;-1:-1:-1;;;11049:78:3;;;;;;;:::i;:::-;11138:56;11148:11;11161:8;11171:22;11181:11;11171:9;:22::i;:::-;11138:9;:56::i;:::-;11237:8;-1:-1:-1;;;;;11210:48:3;11224:11;-1:-1:-1;;;;;11210:48:3;;11247:10;11210:48;;;;;;:::i;:::-;;;;;;;;10525:741;;;;;:::o;2742:21:2:-;;;;:::o;1989:100:1:-;2069:12;;1989:100;:::o;8905:126:3:-;-1:-1:-1;;;;;8995:19:3;;;8968:7;8995:19;;;:6;:19;;;;;:28;;8905:126;;;;:::o;3638:262:1:-;3736:4;3753:36;3763:6;3771:9;3782:6;3753:9;:36::i;:::-;-1:-1:-1;;;;;3829:19:1;;;;;;:11;:19;;;;;;;;3817:10;3829:31;;;;;;;;;3800:70;;3809:6;;3829:40;;3863:6;;3829:40;:::i;:::-;3800:8;:70::i;:::-;-1:-1:-1;3888:4:1;3638:262;;;;;:::o;7877:1020:3:-;7969:30;7987:11;7969:17;:30::i;:::-;7961:75;;;;-1:-1:-1;;;7961:75:3;;;;;;;:::i;:::-;8047:22;8072:33;8090:14;8072:17;:33::i;:::-;8047:58;;8141:1;8124:14;:18;8116:53;;;;-1:-1:-1;;;8116:53:3;;;;;;;:::i;:::-;8199:10;8180:16;8238:22;8248:11;8238:9;:22::i;:::-;8220:40;-1:-1:-1;8271:18:3;8292:24;8302:14;8220:40;8292:24;:::i;:::-;8271:45;-1:-1:-1;8352:14:3;8386:11;8378:55;;;;-1:-1:-1;;;8378:55:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;8452:19:3;;;;;;:6;:19;;;;;:30;;;:35;8444:71;;;;-1:-1:-1;;;8444:71:3;;;;;;;:::i;:::-;8534:58;;-1:-1:-1;;;8534:58:3;;-1:-1:-1;;;;;8534:21:3;;;;;:58;;8556:8;;8574:4;;8581:10;;8534:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8526:97;;;;-1:-1:-1;;;8526:97:3;;;;;;;:::i;:::-;8658:172;;;;;;;;-1:-1:-1;;;;;8658:172:3;;;;;;;;;;;;;8760:15;8658:172;;;;;;;;;;;;;;;8636:19;;;-1:-1:-1;8636:19:3;;;:6;:19;;;;;;;:194;;;;;;;-1:-1:-1;;;;;;8636:194:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8848:41;;;;;;8881:7;;8848:41;:::i;:::-;;;;;;;;7877:1020;;;;;;;:::o;3801:140:0:-;3906:7;;3885:48;;;-1:-1:-1;;;3885:48:0;;;;3858:7;;-1:-1:-1;;;;;3906:7:0;;3885:46;;:48;;;;;;;;;;;;;;3906:7;3885:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3878:55;;3801:140;:::o;1817:30:1:-;;;;;;:::o;11407:514:3:-;11489:17;:15;:17::i;:::-;-1:-1:-1;;;;;11475:31:3;:10;-1:-1:-1;;;;;11475:31:3;;11467:68;;;;-1:-1:-1;;;11467:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;11567:19:3;;;11546:18;11567:19;;;:6;:19;;;;;;;;;11546:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11652:48;;;;-1:-1:-1;;;11652:48:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;11718:19:3;;;;;;;:6;:19;;;;;;;;11711:26;;-1:-1:-1;;;;;;11711:26:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;11774:14;;11790:16;;;;11756:51;;-1:-1:-1;;;11756:51:3;;:17;;;;;;:51;;11774:14;11756:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11748:90;;;;-1:-1:-1;;;11748:90:3;;;;;;;:::i;:::-;11880:5;:14;;;-1:-1:-1;;;;;11854:59:3;11867:11;-1:-1:-1;;;;;11854:59:3;;11896:5;:16;;;11854:59;;;;;;:::i;:::-;;;;;;;;11407:514;;;:::o;6693:139:2:-;6765:5;;-1:-1:-1;;;;;6765:5:2;6743:10;:28;6739:86;;;6787:5;:26;;-1:-1:-1;;;;;;6787:26:2;;;6739:86;6693:139::o;4309:203:1:-;4415:10;4389:4;4436:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;4436:32:1;;;;;;;;;;4389:4;;4406:76;;4427:7;;4436:45;;4471:10;;4436:45;:::i;9177:136:3:-;-1:-1:-1;;;;;9273:19:3;;;9246:7;9273:19;;;:6;:19;;;;;:32;;;;;9177:136::o;6134:303:1:-;6228:4;6245:12;6260:27;6269:9;6280:6;6260:8;:27::i;:::-;6245:42;;6302:7;6298:107;;;6325:68;;-1:-1:-1;;;6325:68:1;;-1:-1:-1;;;;;6325:42:1;;;;;:68;;6368:10;;6380:6;;6388:4;;;;6325:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6298:107;6422:7;6134:303;-1:-1:-1;;;;;6134:303:1:o;5830:209:2:-;5878:25;5884:10;5896:6;5878:5;:25::i;:::-;5914:14;5931:11;:9;:11::i;:::-;:40;;5949:22;;5931:40;;;5945:1;5931:40;6000:7;;5914:57;;-1:-1:-1;;;;;;6000:7:2;5982:32;6015:15;5914:57;6015:6;:15;:::i;:::-;5982:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5830:209;;:::o;2319:21::-;;;-1:-1:-1;;;;;2319:21:2;;:::o;3433:35:3:-;;;;:::o;5559:103::-;5632:10;5615:28;;;;:16;:28;;;;;:39;;-1:-1:-1;;5615:39:3;5646:8;;5615:39;;;;;;5559:103::o;9912:427::-;9963:10;9956:18;;;;:6;:18;;;;;:29;;;:34;9952:380;;10035:10;10007:18;10028;;;:6;:18;;;;;;:29;;;;;10097:31;;;;;10144:25;;-1:-1:-1;;;;;;10144:25:3;;;;;;;;;-1:-1:-1;10144:25:3;;;;;;;;;;;;;10192:41;;-1:-1:-1;;;10192:41:3;;10028:29;;-1:-1:-1;;;;;10097:31:3;;;;;;10192:17;;:41;;10035:10;10028:29;;10192:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10184:80;;;;-1:-1:-1;;;10184:80:3;;;;;;;:::i;:::-;10297:10;-1:-1:-1;;;;;10284:36:3;;10309:10;10284:36;;;;;;:::i;:::-;;;;;;;;9952:380;;9912:427::o;2152:119:1:-;-1:-1:-1;;;;;2245:18:1;2218:7;2245:18;;;;;;;;;;;;2152:119::o;3949:648:0:-;4030:7;4050:12;4065:39;4089:14;4065:23;:39::i;:::-;4050:54;-1:-1:-1;4119:8:0;;4115:475;;4151:4;-1:-1:-1;4144:11:0;;4115:475;4203:7;;-1:-1:-1;;;;;4177:34:0;;;4203:7;;4177:34;4173:417;;;-1:-1:-1;;4235:22:0;;4228:29;;4173:417;4556:22;;4510:7;;4489:64;;-1:-1:-1;;;4489:64:0;;-1:-1:-1;;;;;4510:7:0;;;;4489:48;;:64;;4538:14;;4489:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:89;;;;:::i;:::-;4482:96;;;;;4173:417;3949:648;;;;:::o;3012:37:3:-;;;;:::o;7263:366:2:-;7320:10;7350:13;:11;:13::i;:::-;7349:14;7341:23;;;;;;7486:13;:11;:13::i;:::-;:20;;7502:4;7486:20;:::i;:::-;7454;7464:9;7454;:20::i;:::-;:28;;7477:5;7454:28;:::i;:::-;:52;;7446:83;;;;-1:-1:-1;;;7446:83:2;;;;;;;:::i;:::-;7540:36;7555:9;7566;7540:14;:36::i;:::-;7592:29;7611:9;7592:29;;;;;;:::i;:::-;;;;;;;;7263:366;:::o;3460:264::-;3508:13;3537:11;:9;:11::i;:::-;3533:184;;;3600:7;;;;;;;;;-1:-1:-1;;;;;3600:7:2;-1:-1:-1;;;;;3600:14:2;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3600:16:2;;;;;;;;;;;;:::i;:::-;3578:39;;;;;;;;:::i;3533:184::-;3687:7;;;;;;;;;-1:-1:-1;;;;;3687:7:2;-1:-1:-1;;;;;3687:14:2;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3687:16:2;;;;;;;;;;;;:::i;:::-;3665:39;;;;;;;;:::i;9039:130:3:-;-1:-1:-1;;;;;9131:19:3;9104:7;9131:19;;;:6;:19;;;;;:30;;;;9039:130::o;4551:101:2:-;4617:22;;:27;4551:101;:::o;5844:121:3:-;-1:-1:-1;;;;;5933:24:3;5908:4;5933:24;;;:16;:24;;;;;;;;5932:25;;5844:121::o;5015:213:1:-;5126:10;5100:4;5147:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;5147:32:1;;;;;;;;;;5100:4;;5117:81;;5138:7;;5147:50;;5182:15;;5147:50;:::i;3732:175:2:-;3860:7;;-1:-1:-1;;;;;3860:7:2;3838:10;:30;3830:39;;;;;;3880:19;3886:4;3892:6;3880:5;:19::i;:::-;3732:175;;;;:::o;2770:25::-;;;;:::o;3641:152:0:-;3736:4;3760:25;3775:2;3779:5;3760:14;:25::i;:::-;3753:32;3641:152;-1:-1:-1;;;3641:152:0:o;3207:48:3:-;;;;;;;;;;;;;;;:::o;4029:178:2:-;4106:7;;:55;;-1:-1:-1;;;4106:55:2;;-1:-1:-1;;;;;4106:7:2;;;;:20;;:55;;4127:10;;4147:4;;4154:6;;4106:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4098:64;;;;;;4173:26;4179:11;4192:6;4173:5;:26::i;:::-;4029:178;;:::o;2714:19::-;;;-1:-1:-1;;;;;2714:19:2;;:::o;2400:28::-;;;-1:-1:-1;;;;;2400:28:2;;:::o;3082:39:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3082:39:3;;;;;;;;:::o;3078:19:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6047:433:2:-;6166:11;:9;:11::i;:::-;6158:20;;;;;;6208:7;;6284:6;;6292:10;;6208:95;;-1:-1:-1;;;6208:95:2;;6189:16;;-1:-1:-1;;;;;6208:7:2;;:14;;6230:9;;6208:95;;6241:4;;6247:10;;6259:13;;6274:8;;6284:6;;6208:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6189:114;;6318:13;:11;:13::i;:::-;6314:124;;;6363:8;-1:-1:-1;;;;;6356:29:2;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6348:40;;;;;;6403:5;;:23;;-1:-1:-1;;;6403:23:2;;-1:-1:-1;;;;;6403:5:2;;;;:13;;:23;;6417:8;;6403:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6314:124;6448:5;:24;;-1:-1:-1;;;;;;6448:24:2;-1:-1:-1;;;;;6448:24:2;;;;;;;;;;-1:-1:-1;;;6047:433:2:o;2720:143:1:-;-1:-1:-1;;;;;2828:18:1;;;2801:7;2828:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2720:143::o;4986:140:2:-;5045:11;:9;:11::i;:::-;5044:12;5036:21;;;;;;5068:50;5075:10;5087:6;5095:22;;5068:6;:50::i;:::-;4986:140;:::o;9321:128:3:-;-1:-1:-1;;;;;9412:19:3;9385:7;9412:19;;;:6;:19;;;;;:29;;;;9321:128::o;6488:197:2:-;6583:5;;-1:-1:-1;;;;;6583:5:2;6561:10;:28;6553:37;;;;;;6601:34;6608:5;6615:16;6625:5;6615:9;:16::i;:::-;6633:1;6601:6;:34::i;:::-;6646:31;6661:8;6671:5;6646:14;:31::i;8064:175:1:-;-1:-1:-1;;;;;8149:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:35;;;8200:31;;;;;8179:5;;8200:31;:::i;5718:330::-;-1:-1:-1;;;;;5824:23:1;;5816:32;;;;;;5861:47;5882:6;5890:9;5901:6;5861:20;:47::i;:::-;-1:-1:-1;;;;;5921:17:1;;:9;:17;;;;;;;;;;:27;;5942:6;;5921:9;:27;;5942:6;;5921:27;:::i;:::-;;;;-1:-1:-1;;;;;;;5959:20:1;;:9;:20;;;;;;;;;;:30;;5983:6;;5959:9;:30;;5983:6;;5959:30;:::i;:::-;;;;;;;;6022:9;-1:-1:-1;;;;;6005:35:1;6014:6;-1:-1:-1;;;;;6005:35:1;;6033:6;6005:35;;;;;;:::i;7364:260::-;7440:49;7461:7;7478:1;7482:6;7440:20;:49::i;:::-;7518:6;7502:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;7535:18:1;;:9;:18;;;;;;;;;;:28;;7557:6;;7535:9;:28;;7557:6;;7535:28;:::i;:::-;;;;-1:-1:-1;;7579:37:1;;7605:1;;-1:-1:-1;;;;;7579:37:1;;;;;;;7609:6;;7579:37;:::i;:::-;;;;;;;;7364:260;;:::o;3806:327:3:-;3886:7;-1:-1:-1;;;;;3910:31:3;;3936:4;3910:31;3906:220;;;-1:-1:-1;3965:1:3;3958:8;;3906:220;4006:23;;-1:-1:-1;;;;;3988:41:3;;;4006:23;;3988:41;3984:142;;;-1:-1:-1;4053:20:3;;4046:27;;3984:142;-1:-1:-1;4113:1:3;4106:8;;7834:106:2;7912:5;;-1:-1:-1;;;;;7912:5:2;7904:28;;7834:106;:::o;6840:415::-;6943:11;:9;:11::i;:::-;6935:20;;;;;;7022:7;;7062:32;;-1:-1:-1;;;7062:32:2;;-1:-1:-1;;;;;7022:7:2;;;;:16;;7039:21;;7022:7;;7062:17;;:32;;7088:4;;7062:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7022:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7014:82;;;;;;7148:7;:28;;-1:-1:-1;;;;;;7148:28:2;-1:-1:-1;;;;;7148:28:2;;;;;7187:60;7233:13;:11;:13::i;:::-;7198:7;;:32;;-1:-1:-1;;;7198:32:2;;-1:-1:-1;;;;;7198:7:2;;;;:17;;:32;;7224:4;;7198:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;7187:10;:60::i;6718:313:1:-;-1:-1:-1;;;;;6804:23:1;;6796:32;;;;;;6841:51;6870:1;6874:9;6885:6;6841:20;:51::i;:::-;6921:6;6905:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;6938:20:1;;:9;:20;;;;;;;;;;:30;;6962:6;;6938:9;:30;;6962:6;;6938:30;:::i;:::-;;;;-1:-1:-1;;6984:39:1;;-1:-1:-1;;;;;6984:39:1;;;7001:1;;6984:39;;;;7016:6;;6984:39;:::i;9457:217:3:-;9543:4;9568:33;9583:9;9594:6;9568:14;:33::i;:::-;9560:61;;;;-1:-1:-1;;;9560:61:3;;;;;;;:::i;:::-;9632:12;:10;:12::i;5138:171:2:-;5221:20;5227:5;5234:6;5221:5;:20::i;:::-;5260:7;;-1:-1:-1;;;;;5260:7:2;:16;5277:5;5284:15;5293:6;5284;:15;:::i;:::-;5260:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5252:49;;;;;;5138:171;;;:::o;7637:189::-;7742:13;:11;:13::i;:::-;7738:81;;;7772:5;;:35;;-1:-1:-1;;;7772:35:2;;-1:-1:-1;;;;;7772:5:2;;;;:17;;:35;;7790:4;;7796:2;;7800:6;;7772:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7637:189;;;:::o;4756:126::-;4830:1;4820:6;:11;;4812:20;;;;;;4843:22;:31;4756:126::o;2484:173:1:-;2570:4;2587:40;2597:10;2609:9;2620:6;2587:9;:40::i;14:259:6:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:6;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:6;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:6;1398:18;;;;1385:32;;1057:366::o;1428:327::-;;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1578:6;1570;1563:22;1525:2;1622:9;1609:23;1641:33;1668:5;1641:33;:::i;:::-;1693:5;1745:2;1730:18;;;;1717:32;;-1:-1:-1;;;1515:240:6:o;1760:846::-;;;;;1925:2;1913:9;1904:7;1900:23;1896:32;1893:2;;;1946:6;1938;1931:22;1893:2;1990:9;1977:23;2009:33;2036:5;2009:33;:::i;:::-;2061:5;-1:-1:-1;2113:2:6;2098:18;;2085:32;;-1:-1:-1;2168:2:6;2153:18;;2140:32;2191:18;2221:14;;;2218:2;;;2253:6;2245;2238:22;2218:2;2296:6;2285:9;2281:22;2271:32;;2341:7;2334:4;2330:2;2326:13;2322:27;2312:2;;2368:6;2360;2353:22;2312:2;2413;2400:16;2439:2;2431:6;2428:14;2425:2;;;2460:6;2452;2445:22;2425:2;2510:7;2505:2;2496:6;2492:2;2488:15;2484:24;2481:37;2478:2;;;2536:6;2528;2521:22;2478:2;1883:723;;;;-1:-1:-1;;2572:2:6;2564:11;;-1:-1:-1;;;1883:723:6:o;2611:253::-;;2720:2;2708:9;2699:7;2695:23;2691:32;2688:2;;;2741:6;2733;2726:22;2688:2;2785:9;2772:23;2804:30;2828:5;2804:30;:::i;2869:257::-;;2989:2;2977:9;2968:7;2964:23;2960:32;2957:2;;;3010:6;3002;2995:22;2957:2;3047:9;3041:16;3066:30;3090:5;3066:30;:::i;3131:395::-;;;;3277:2;3265:9;3256:7;3252:23;3248:32;3245:2;;;3298:6;3290;3283:22;3245:2;3339:9;3326:23;3316:33;;3396:2;3385:9;3381:18;3368:32;3358:42;;3450:2;3439:9;3435:18;3422:32;3463:33;3490:5;3463:33;:::i;:::-;3515:5;3505:15;;;3235:291;;;;;:::o;3531:924::-;;3664:2;3652:9;3643:7;3639:23;3635:32;3632:2;;;3685:6;3677;3670:22;3632:2;3723:9;3717:16;3752:18;3793:2;3785:6;3782:14;3779:2;;;3814:6;3806;3799:22;3779:2;3857:6;3846:9;3842:22;3832:32;;3902:7;3895:4;3891:2;3887:13;3883:27;3873:2;;3929:6;3921;3914:22;3873:2;3963;3957:9;3985:2;3981;3978:10;3975:2;;;3991:18;;:::i;:::-;4066:2;4060:9;4034:2;4120:13;;-1:-1:-1;;4116:22:6;;;4140:2;4112:31;4108:40;4096:53;;;4164:18;;;4184:22;;;4161:46;4158:2;;;4210:18;;:::i;:::-;4250:10;4246:2;4239:22;4285:2;4277:6;4270:18;4325:7;4320:2;4315;4311;4307:11;4303:20;4300:33;4297:2;;;4351:6;4343;4336:22;4297:2;4369:55;4421:2;4416;4408:6;4404:15;4399:2;4395;4391:11;4369:55;:::i;:::-;4443:6;3622:833;-1:-1:-1;;;;;;;3622:833:6:o;4460:190::-;;4572:2;4560:9;4551:7;4547:23;4543:32;4540:2;;;4593:6;4585;4578:22;4540:2;-1:-1:-1;4621:23:6;;4530:120;-1:-1:-1;4530:120:6:o;4655:194::-;;4778:2;4766:9;4757:7;4753:23;4749:32;4746:2;;;4799:6;4791;4784:22;4746:2;-1:-1:-1;4827:16:6;;4736:113;-1:-1:-1;4736:113:6:o;4854:418::-;;-1:-1:-1;;;5111:3:6;5104:16;5149:6;5143:13;5165:61;5219:6;5215:1;5210:3;5206:11;5199:4;5191:6;5187:17;5165:61;:::i;:::-;5246:16;;;;5264:1;5242:24;;5094:178;-1:-1:-1;;5094:178:6:o;5277:418::-;;-1:-1:-1;;;5534:3:6;5527:16;5572:6;5566:13;5588:61;5642:6;5638:1;5633:3;5629:11;5622:4;5614:6;5610:17;5588:61;:::i;5700:429::-;;-1:-1:-1;;;5957:3:6;5950:25;6004:6;5998:13;6020:62;6075:6;6070:2;6065:3;6061:12;6054:4;6046:6;6042:17;6020:62;:::i;:::-;6102:16;;;;6120:2;6098:25;;5940:189;-1:-1:-1;;5940:189:6:o;6134:425::-;;-1:-1:-1;;;6391:3:6;6384:23;6436:6;6430:13;6452:61;6506:6;6502:1;6497:3;6493:11;6486:4;6478:6;6474:17;6452:61;:::i;:::-;6533:16;;;;6551:1;6529:24;;6374:185;-1:-1:-1;;6374:185:6:o;6564:203::-;-1:-1:-1;;;;;6728:32:6;;;;6710:51;;6698:2;6683:18;;6665:102::o;6772:375::-;-1:-1:-1;;;;;7030:15:6;;;7012:34;;7082:15;;;;7077:2;7062:18;;7055:43;7129:2;7114:18;;7107:34;;;;6962:2;6947:18;;6929:218::o;7152:274::-;-1:-1:-1;;;;;7344:32:6;;;;7326:51;;7408:2;7393:18;;7386:34;7314:2;7299:18;;7281:145::o;7431:562::-;-1:-1:-1;;;;;7644:32:6;;7626:51;;7708:2;7693:18;;7686:34;;;7756:2;7751;7736:18;;7729:30;;;7775:18;;7768:34;;;7431:562;7795:6;7845;7839:3;7824:19;;7811:49;7880:22;;;7904:3;7876:32;;;7869:46;;;;7976:2;7955:15;;;-1:-1:-1;;7951:29:6;7936:45;7932:55;;7616:377;-1:-1:-1;;;7616:377:6:o;7998:447::-;-1:-1:-1;;;;;8285:15:6;;;8267:34;;8332:2;8317:18;;8310:34;;;;8375:2;8360:18;;8353:34;;;;8423:15;;;8418:2;8403:18;;8396:43;8216:3;8201:19;;8183:262::o;8450:187::-;8615:14;;8608:22;8590:41;;8578:2;8563:18;;8545:92::o;8642:591::-;8929:25;;;-1:-1:-1;;;;;9028:15:6;;;9023:2;9008:18;;9001:43;9075:2;9060:18;;9053:34;;;;9123:15;;9118:2;9103:18;;9096:43;9170:3;9155:19;;9148:35;;;;8981:3;9199:19;;9192:35;8916:3;8901:19;;8883:350::o;9914:383::-;;10063:2;10052:9;10045:21;10095:6;10089:13;10138:6;10133:2;10122:9;10118:18;10111:34;10154:66;10213:6;10208:2;10197:9;10193:18;10188:2;10180:6;10176:15;10154:66;:::i;:::-;10281:2;10260:15;-1:-1:-1;;10256:29:6;10241:45;;;;10288:2;10237:54;;10035:262;-1:-1:-1;;10035:262:6:o;10302:355::-;10504:2;10486:21;;;10543:2;10523:18;;;10516:30;10582:33;10577:2;10562:18;;10555:61;10648:2;10633:18;;10476:181::o;10662:349::-;10864:2;10846:21;;;10903:2;10883:18;;;10876:30;10942:27;10937:2;10922:18;;10915:55;11002:2;10987:18;;10836:175::o;11016:339::-;11218:2;11200:21;;;11257:2;11237:18;;;11230:30;-1:-1:-1;;;11291:2:6;11276:18;;11269:45;11346:2;11331:18;;11190:165::o;11360:346::-;11562:2;11544:21;;;11601:2;11581:18;;;11574:30;-1:-1:-1;;;11635:2:6;11620:18;;11613:52;11697:2;11682:18;;11534:172::o;11711:338::-;11913:2;11895:21;;;11952:2;11932:18;;;11925:30;-1:-1:-1;;;11986:2:6;11971:18;;11964:44;12040:2;12025:18;;11885:164::o;12054:350::-;12256:2;12238:21;;;12295:2;12275:18;;;12268:30;12334:28;12329:2;12314:18;;12307:56;12395:2;12380:18;;12228:176::o;12409:356::-;12611:2;12593:21;;;12630:18;;;12623:30;12689:34;12684:2;12669:18;;12662:62;12756:2;12741:18;;12583:182::o;12770:347::-;12972:2;12954:21;;;13011:2;12991:18;;;12984:30;13050:25;13045:2;13030:18;;13023:53;13108:2;13093:18;;12944:173::o;13122:342::-;13324:2;13306:21;;;13363:2;13343:18;;;13336:30;-1:-1:-1;;;13397:2:6;13382:18;;13375:48;13455:2;13440:18;;13296:168::o;13469:355::-;13671:2;13653:21;;;13710:2;13690:18;;;13683:30;13749:33;13744:2;13729:18;;13722:61;13815:2;13800:18;;13643:181::o;13829:348::-;14031:2;14013:21;;;14070:2;14050:18;;;14043:30;14109:26;14104:2;14089:18;;14082:54;14168:2;14153:18;;14003:174::o;14182:177::-;14328:25;;;14316:2;14301:18;;14283:76::o;14364:184::-;14536:4;14524:17;;;;14506:36;;14494:2;14479:18;;14461:87::o;14553:128::-;;14624:1;14620:6;14617:1;14614:13;14611:2;;;14630:18;;:::i;:::-;-1:-1:-1;14666:9:6;;14601:80::o;14686:217::-;;14752:1;14742:2;;-1:-1:-1;;;14777:31:6;;14831:4;14828:1;14821:15;14859:4;14784:1;14849:15;14742:2;-1:-1:-1;14888:9:6;;14732:171::o;14908:168::-;;15014:1;15010;15006:6;15002:14;14999:1;14996:21;14991:1;14984:9;14977:17;14973:45;14970:2;;;15021:18;;:::i;:::-;-1:-1:-1;15061:9:6;;14960:116::o;15081:125::-;;15149:1;15146;15143:8;15140:2;;;15154:18;;:::i;:::-;-1:-1:-1;15191:9:6;;15130:76::o;15211:258::-;15283:1;15293:113;15307:6;15304:1;15301:13;15293:113;;;15383:11;;;15377:18;15364:11;;;15357:39;15329:2;15322:10;15293:113;;;15424:6;15421:1;15418:13;15415:2;;;-1:-1:-1;;15459:1:6;15441:16;;15434:27;15264:205::o;15474:380::-;15559:1;15549:12;;15606:1;15596:12;;;15617:2;;15671:4;15663:6;15659:17;15649:27;;15617:2;15724;15716:6;15713:14;15693:18;15690:38;15687:2;;;15770:10;15765:3;15761:20;15758:1;15751:31;15805:4;15802:1;15795:15;15833:4;15830:1;15823:15;15859:127;15920:10;15915:3;15911:20;15908:1;15901:31;15951:4;15948:1;15941:15;15975:4;15972:1;15965:15;15991:127;16052:10;16047:3;16043:20;16040:1;16033:31;16083:4;16080:1;16073:15;16107:4;16104:1;16097:15;16123:133;-1:-1:-1;;;;;16200:31:6;;16190:42;;16180:2;;16246:1;16243;16236:12;16261:120;16349:5;16342:13;16335:21;16328:5;16325:32;16315:2;;16371:1;16368;16361:12

Swarm Source

ipfs://d0f14521c293fe962159c01fb4a60e9f1b718f0e199f1b629f370472c2098d96

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Aktionariat offers technical services to create, manage and trade security tokens in accordance with Swiss law.

Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.