成功为方法"example"发送 example 内部交易 交易 代币转让 nft 转移 令牌详细转让 按 ID 进行令牌详细转移 代币持有者 原木 执行死刑
false
false
合同
0x81e27A06c92C380d780df4B82C358124c78DaE54
概述
TXENE 平衡
0 TXENE
TXENE 价值
$--- (@ $---/TXENE)
更多信息
合同创建者
My Happy SVG 最近 25 项内部交易(查看全部)
"%>
父 Txn 哈希值
方法
街区 年龄 来自 价值
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
交易哈希值
方法
街区 年龄 来自 价值 Txn 仙女
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
Transaction Hash
Method
街区 年龄 来自 类型 项目
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
Contract Source Code Verified (Exact Match)
ContractName:
DepositContract
Optimization Enabled:
Yes with 5000000 runs
Compiler Version:
v0.6.11+commit.5ef660b1
Other Settings:
default evmVersion, Unlicense license
Contract Source Code (Solidity)
Contract Security Audit
- Submit Audit Here
Contract ABI
Contract Creation Code
Deployed ByteCode Sourcemap
Swarm Source
ipfs://dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b61
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
Txn 哈希值 街区 年龄 方法 My Happy SVG 日志
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
My Happy SVG Latest 15 blocks produced
Block Age Transaction Difficulty Gas Used Reward
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
警告!合约字节码已更改,与已验证的字节码不符。因此,与此智能合约的交互可能存在风险。
合同名称:
SignalRegistry
已启用优化:
编译器版本:
v0.8.20+commit.a1b79de6
优化运行:
200
EVM 版本:
paris
已验证:
2026-04-24T20:41:36.965373Z

构造函数参数

0x000000000000000000000000dd06e4fac3df7ec18b552d7cd26036bc27e23ce6

Arg [0] (address) : 0xdd06e4fac3df7ec18b552d7cd26036bc27e23ce6

                              

文件 1 的 1: contracts/SignalRegistry.sol

Sol2uml
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// =============================================================
//  NEXUS Protocol — SignalRegistry.sol (FLATTENED)
//  Xenea Ubusuna Testnet · Chain ID 1096
//  Deploy THIRD — wire to PerformanceLedger + AgentPayment after
// =============================================================

// ------------------------------------------------------------
// OpenZeppelin: Context
// ------------------------------------------------------------
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// ------------------------------------------------------------
// OpenZeppelin: Ownable
// ------------------------------------------------------------
abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) revert OwnableInvalidOwner(address(0));
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) revert OwnableUnauthorizedAccount(_msgSender());
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) revert OwnableInvalidOwner(address(0));
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// ------------------------------------------------------------
// OpenZeppelin: Ownable2Step
// ------------------------------------------------------------
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) revert OwnableUnauthorizedAccount(sender);
        _transferOwnership(sender);
    }
}

// ------------------------------------------------------------
// OpenZeppelin: ReentrancyGuard
// ------------------------------------------------------------
abstract contract ReentrancyGuard {
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;
    uint256 private _status;

    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        if (_status == ENTERED) revert ReentrancyGuardReentrantCall();
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = NOT_ENTERED;
    }
}

// ------------------------------------------------------------
// IAgentPayment (minimal — for settlement call)
// ------------------------------------------------------------
interface IAgentPayment {
    function settleHandoffChain(
        string  calldata signalId,
        int256           R_scaled,
        bool             win,
        uint256          qualityScore,
        int256           evEst_scaled,
        uint8            confTier
    ) external;
}

// ------------------------------------------------------------
// IPerformanceLedger (minimal — for outcome recording)
// ------------------------------------------------------------
interface IPerformanceLedger {
    function recordOutcome(
        uint8           confTier,
        string calldata regime,
        string calldata session,
        bool            win,
        int256          pnlUsd,
        int256          R_scaled,
        uint256         binanceClosePrice,
        uint256         pythClosePrice
    ) external;
}

// ------------------------------------------------------------
// SignalRegistry — Main Contract
// ------------------------------------------------------------

/// @title  SignalRegistry
/// @notice Immutable on-chain record of NEXUS signal commitments and outcomes.
///
///         Commit-reveal scheme:
///           1. Before trade: commitSignal(hash, direction, confTier, regime, session)
///              Hash = keccak256(signalId ‖ nonce ‖ direction ‖ evEst_scaled)
///              Nonce is secret — kept off-chain until reveal.
///              Regime committed here — immutable from this point forward.
///
///           2. After trade executes: revealSignal(signalId, reveal_struct)
///              Contract recomputes hash from plaintext.
///              Rejects if mismatch — prevents front-running and retroactive edits.
///              Reveal must occur within 1 hour of commit (REVEAL_DEADLINE).
///
///           3. When MT5 closes position: reportOutcome(signalId, win, pnlUsd, R_scaled)
///              Triggers automatic settlement cascade:
///                → AgentPayment.settleHandoffChain()  (machine economy)
///                → PerformanceLedger.recordOutcome()  (public track record)
///
///         Heartbeat:
///           Owner fires heartbeat() every ~60 minutes.
///           Proves system was running even in quiet markets with no signals.
///           HeartbeatPulse event is the continuous operation proof.
///
/// @dev    Deploy THIRD. Call linkContracts() after all three are deployed.
///         History lives in events only — mappings hold current state.
///         Never iterate on-chain mappings — no gas explosion risk.
contract SignalRegistry is Ownable2Step, ReentrancyGuard {

    // ── Constants ────────────────────────────────────────────────────────

    /// @notice Maximum time between commit and reveal before commit expires.
    uint256 public constant REVEAL_DEADLINE = 1 hours;

    // ── Custom errors ────────────────────────────────────────────────────

    error AlreadyCommitted(string signalId);
    error NotCommitted(string signalId);
    error AlreadyRevealed(string signalId);
    error AlreadyOutcomeReported(string signalId);
    error CommitExpired(string signalId);
    error RevealDeadlineNotPassed(string signalId);
    error HashMismatch(bytes32 expected, bytes32 provided);
    error OutcomeBeforeReveal(string signalId);
    error ZeroAddress();
    error InvalidConfTier(uint8 tier);

    // ── Structs ──────────────────────────────────────────────────────────

    struct SignalCommit {
        bytes32 hash;
        uint8   direction;        // 0=flat 1=up 2=down
        uint8   confTier;         // 0=none 1=low 2=med 3=high
        string  regime;           // committed at signal time — immutable
        string  session;          // trading session
        uint256 commitTimestamp;
        uint256 entryPrice;       // entry price × 10^8 (e.g. 7625000000000 = $76,250)
        bool    revealed;
        bool    outcomeReported;
        bool    expired;
    }

    struct SignalReveal {
        string  signalId;
        bytes32 nonce;            // secret nonce from commit hash preimage
        int256  evEst_scaled;     // EV × 10000
        string  zoneId;
        uint256 qualityScore;     // quality × 100
    }

    struct Outcome {
        bool    win;
        int256  pnlUsd_scaled;        // PnL × 100
        int256  R_scaled;             // R × 10000
        uint256 closeTimestamp;
        uint256 binanceClosePrice;    // Binance spot at close (8 decimals, e.g. 7625000000000 = $76,250)
        uint256 pythClosePrice;       // Pyth BTC/USD at close (8 decimals)
    }

    // ── State ────────────────────────────────────────────────────────────

    mapping(string => SignalCommit) private _commits;
    mapping(string => SignalReveal) private _reveals;
    mapping(string => Outcome)      private _outcomes;

    IAgentPayment      public agentPayment;
    IPerformanceLedger public performanceLedger;

    uint256 public lastHeartbeat;
    uint256 public totalCommits;
    uint256 public totalOutcomes;

    // ── Events ───────────────────────────────────────────────────────────

    event SignalCommitted(
        string  indexed signalId,
        bytes32         hash,
        uint8           direction,
        uint8           confTier,
        string          regime,
        string          session,
        uint256         entryPrice,
        uint256         timestamp
    );
    event SignalRevealed(
        string  indexed signalId,
        string          regime,
        int256          evEst_scaled,
        uint256         qualityScore,
        uint256         timestamp
    );
    event OutcomeReported(
        string  indexed signalId,
        bool            win,
        int256          pnlUsd_scaled,
        int256          R_scaled,
        uint256         binanceClosePrice,
        uint256         pythClosePrice,
        uint256         timestamp
    );
    event SignalExpired(string indexed signalId, uint256 timestamp);
    event HeartbeatPulse(uint256 timestamp, uint256 totalCommits, uint256 totalOutcomes);
    event ContractsLinked(address agentPayment, address performanceLedger);

    // ── Constructor ──────────────────────────────────────────────────────

    constructor(address initialOwner) Ownable(initialOwner) {}

    // ── Admin ────────────────────────────────────────────────────────────

    /// @notice Link AgentPayment and PerformanceLedger after all contracts deployed.
    ///         Owner-only. Can be updated if contracts are redeployed.
    function linkContracts(
        address _agentPayment,
        address _performanceLedger
    ) external onlyOwner {
        if (_agentPayment      == address(0)) revert ZeroAddress();
        if (_performanceLedger == address(0)) revert ZeroAddress();
        agentPayment      = IAgentPayment(_agentPayment);
        performanceLedger = IPerformanceLedger(_performanceLedger);
        emit ContractsLinked(_agentPayment, _performanceLedger);
    }

    // ── Core functions ───────────────────────────────────────────────────

    /// @notice Commit a signal before trade execution.
    /// @param  signalId  Unique signal identifier (e.g. "sig_a3f9b2c1").
    /// @param  hash      keccak256(signalId ‖ nonce ‖ direction ‖ evEst_scaled).
    ///                   Nonce must remain secret until revealSignal() is called.
    /// @param  direction 0=flat 1=up 2=down.
    /// @param  confTier  0=none 1=low 2=med 3=high.
    /// @param  regime    Current market regime — immutable from this point.
    /// @param  session   Current trading session.
    function commitSignal(
        string  calldata signalId,
        bytes32          hash,
        uint8            direction,
        uint8            confTier,
        string  calldata regime,
        string  calldata session,
        uint256          entryPrice
    ) external onlyOwner {
        if (_commits[signalId].commitTimestamp != 0) revert AlreadyCommitted(signalId);
        if (confTier > 3)                            revert InvalidConfTier(confTier);

        _commits[signalId] = SignalCommit({
            hash:            hash,
            direction:       direction,
            confTier:        confTier,
            regime:          regime,
            session:         session,
            commitTimestamp: block.timestamp,
            entryPrice:      entryPrice,
            revealed:        false,
            outcomeReported: false,
            expired:         false
        });

        unchecked { ++totalCommits; }

        emit SignalCommitted(
            signalId, hash, direction, confTier, regime, session, entryPrice, block.timestamp
        );
    }

    /// @notice Reveal plaintext signal data after trade execution.
    ///         Contract recomputes hash — reverts on mismatch.
    ///         Must be called within REVEAL_DEADLINE (1 hour) of commit.
    function revealSignal(
        string       calldata signalId,
        SignalReveal calldata reveal
    ) external onlyOwner {
        SignalCommit storage commit = _commits[signalId];
        if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
        if (commit.revealed)             revert AlreadyRevealed(signalId);
        if (commit.expired)              revert CommitExpired(signalId);

        if (block.timestamp > commit.commitTimestamp + REVEAL_DEADLINE) {
            commit.expired = true;
            emit SignalExpired(signalId, block.timestamp);
            revert CommitExpired(signalId);
        }

        // Recompute hash — reject any plaintext that doesn't match the commit
        bytes32 recomputed = keccak256(abi.encodePacked(
            signalId,
            reveal.nonce,
            commit.direction,
            reveal.evEst_scaled
        ));
        if (recomputed != commit.hash) revert HashMismatch(commit.hash, recomputed);

        _reveals[signalId] = reveal;
        commit.revealed    = true;

        emit SignalRevealed(
            signalId,
            commit.regime,
            reveal.evEst_scaled,
            reveal.qualityScore,
            block.timestamp
        );
    }

    /// @notice Report trade outcome using oracle prices only.
    ///         win/pnlUsd/R_scaled are computed on-chain from price data.
    ///         No self-reporting from MT5 — outcome is derived from Binance
    ///         and Pyth close prices vs the committed entry price.
    /// @param  signalId          Signal identifier.
    /// @param  binanceClosePrice Binance spot close price × 10^8.
    /// @param  pythClosePrice    Pyth BTC/USD close price × 10^8.
    function reportOutcome(
        string  calldata signalId,
        uint256          binanceClosePrice,
        uint256          pythClosePrice
    ) external onlyOwner nonReentrant {
        SignalCommit storage commit = _commits[signalId];
        if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
        if (!commit.revealed)            revert OutcomeBeforeReveal(signalId);
        if (commit.outcomeReported)      revert AlreadyOutcomeReported(signalId);

        // ── Compute outcome from oracle prices vs committed entry price ──
        // Use Binance as primary source; Pyth as corroborating reference.
        uint256 closePrice = binanceClosePrice;
        uint256 entry      = commit.entryPrice;

        // direction: 1 = up (long), 2 = down (short)
        bool win;
        if (commit.direction == 1) {
            win = closePrice > entry;
        } else if (commit.direction == 2) {
            win = closePrice < entry;
        } else {
            win = false; // flat — no directional prediction
        }

        // pnlUsd_scaled = price move in USD × 100 (signed)
        // Assumes 1 unit of base asset; consumer scales by position size
        int256 priceDelta;
        if (closePrice >= entry) {
            priceDelta = int256((closePrice - entry) / 1e6); // scale to cents
        } else {
            priceDelta = -int256((entry - closePrice) / 1e6);
        }
        int256 pnlUsd = commit.direction == 2 ? -priceDelta : priceDelta;

        // R_scaled = price move as % of entry × 10000
        // e.g. 1% move = R_scaled 100
        int256 R_scaled;
        if (entry > 0) {
            if (closePrice >= entry) {
                R_scaled = int256(((closePrice - entry) * 10000) / entry);
            } else {
                R_scaled = -int256(((entry - closePrice) * 10000) / entry);
            }
            if (commit.direction == 2) R_scaled = -R_scaled;
        }

        // Checks-Effects-Interactions pattern
        commit.outcomeReported = true;
        _outcomes[signalId] = Outcome({
            win:                win,
            pnlUsd_scaled:      pnlUsd,
            R_scaled:           R_scaled,
            closeTimestamp:     block.timestamp,
            binanceClosePrice:  binanceClosePrice,
            pythClosePrice:     pythClosePrice
        });

        unchecked { ++totalOutcomes; }

        SignalReveal storage reveal = _reveals[signalId];

        // Interactions — external calls last
        if (address(agentPayment) != address(0)) {
            agentPayment.settleHandoffChain(
                signalId,
                R_scaled,
                win,
                reveal.qualityScore,
                reveal.evEst_scaled,
                commit.confTier
            );
        }

        if (address(performanceLedger) != address(0)) {
            performanceLedger.recordOutcome(
                commit.confTier,
                commit.regime,
                commit.session,
                win,
                pnlUsd,
                R_scaled,
                binanceClosePrice,
                pythClosePrice
            );
        }

        emit OutcomeReported(signalId, win, pnlUsd, R_scaled, binanceClosePrice, pythClosePrice, block.timestamp);
    }

    /// @notice Mark an orphaned commit as expired.
    ///         Callable by anyone after REVEAL_DEADLINE has passed.
    ///         Prevents stale commits accumulating indefinitely.
    function expireSignal(string calldata signalId) external {
        SignalCommit storage commit = _commits[signalId];
        if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
        if (commit.revealed)             revert AlreadyRevealed(signalId);
        if (commit.expired)              return; // idempotent

        if (block.timestamp <= commit.commitTimestamp + REVEAL_DEADLINE)
            revert RevealDeadlineNotPassed(signalId);

        commit.expired = true;
        emit SignalExpired(signalId, block.timestamp);
    }

    /// @notice On-chain proof of operation. Owner fires every ~60 minutes.
    ///         Proves system was running even during quiet markets.
    function heartbeat() external onlyOwner {
        lastHeartbeat = block.timestamp;
        emit HeartbeatPulse(block.timestamp, totalCommits, totalOutcomes);
    }

    // ── Views ────────────────────────────────────────────────────────────

    function getCommit(string calldata signalId)
        external view returns (SignalCommit memory)
    {
        return _commits[signalId];
    }

    function getReveal(string calldata signalId)
        external view returns (SignalReveal memory)
    {
        return _reveals[signalId];
    }

    function getOutcome(string calldata signalId)
        external view returns (Outcome memory)
    {
        return _outcomes[signalId];
    }

    function isActive() external view returns (bool) {
        return lastHeartbeat > 0 &&
               block.timestamp - lastHeartbeat < 2 hours;
    }
}
        

编译器设置

{"viaIR":true,"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"paris"}
              

合同 ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"initialOwner","internalType":"address"}]},{"type":"error","name":"AlreadyCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"AlreadyOutcomeReported","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"AlreadyRevealed","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"CommitExpired","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"HashMismatch","inputs":[{"type":"bytes32","name":"expected","internalType":"bytes32"},{"type":"bytes32","name":"provided","internalType":"bytes32"}]},{"type":"error","name":"InvalidConfTier","inputs":[{"type":"uint8","name":"tier","internalType":"uint8"}]},{"type":"error","name":"NotCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"OutcomeBeforeReveal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"RevealDeadlineNotPassed","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"event","name":"ContractsLinked","inputs":[{"type":"address","name":"agentPayment","internalType":"address","indexed":false},{"type":"address","name":"performanceLedger","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"HeartbeatPulse","inputs":[{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false},{"type":"uint256","name":"totalCommits","internalType":"uint256","indexed":false},{"type":"uint256","name":"totalOutcomes","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OutcomeReported","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"bool","name":"win","internalType":"bool","indexed":false},{"type":"int256","name":"pnlUsd_scaled","internalType":"int256","indexed":false},{"type":"int256","name":"R_scaled","internalType":"int256","indexed":false},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"pythClosePrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferStarted","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SignalCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"bytes32","name":"hash","internalType":"bytes32","indexed":false},{"type":"uint8","name":"direction","internalType":"uint8","indexed":false},{"type":"uint8","name":"confTier","internalType":"uint8","indexed":false},{"type":"string","name":"regime","internalType":"string","indexed":false},{"type":"string","name":"session","internalType":"string","indexed":false},{"type":"uint256","name":"entryPrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SignalExpired","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SignalRevealed","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"string","name":"regime","internalType":"string","indexed":false},{"type":"int256","name":"evEst_scaled","internalType":"int256","indexed":false},{"type":"uint256","name":"qualityScore","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"REVEAL_DEADLINE","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"acceptOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IAgentPayment"}],"name":"agentPayment","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"commitSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"uint8","name":"direction","internalType":"uint8"},{"type":"uint8","name":"confTier","internalType":"uint8"},{"type":"string","name":"regime","internalType":"string"},{"type":"string","name":"session","internalType":"string"},{"type":"uint256","name":"entryPrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"expireSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.SignalCommit","components":[{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"uint8","name":"direction","internalType":"uint8"},{"type":"uint8","name":"confTier","internalType":"uint8"},{"type":"string","name":"regime","internalType":"string"},{"type":"string","name":"session","internalType":"string"},{"type":"uint256","name":"commitTimestamp","internalType":"uint256"},{"type":"uint256","name":"entryPrice","internalType":"uint256"},{"type":"bool","name":"revealed","internalType":"bool"},{"type":"bool","name":"outcomeReported","internalType":"bool"},{"type":"bool","name":"expired","internalType":"bool"}]}],"name":"getCommit","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.Outcome","components":[{"type":"bool","name":"win","internalType":"bool"},{"type":"int256","name":"pnlUsd_scaled","internalType":"int256"},{"type":"int256","name":"R_scaled","internalType":"int256"},{"type":"uint256","name":"closeTimestamp","internalType":"uint256"},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256"},{"type":"uint256","name":"pythClosePrice","internalType":"uint256"}]}],"name":"getOutcome","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.SignalReveal","components":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"nonce","internalType":"bytes32"},{"type":"int256","name":"evEst_scaled","internalType":"int256"},{"type":"string","name":"zoneId","internalType":"string"},{"type":"uint256","name":"qualityScore","internalType":"uint256"}]}],"name":"getReveal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"heartbeat","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isActive","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastHeartbeat","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"linkContracts","inputs":[{"type":"address","name":"_agentPayment","internalType":"address"},{"type":"address","name":"_performanceLedger","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pendingOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IPerformanceLedger"}],"name":"performanceLedger","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reportOutcome","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256"},{"type":"uint256","name":"pythClosePrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revealSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"tuple","name":"reveal","internalType":"struct SignalRegistry.SignalReveal","components":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"nonce","internalType":"bytes32"},{"type":"int256","name":"evEst_scaled","internalType":"int256"},{"type":"string","name":"zoneId","internalType":"string"},{"type":"uint256","name":"qualityScore","internalType":"uint256"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalCommits","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalOutcomes","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

合同创建代码

0x6080346100c957601f611ca638819003918201601f19168301916001600160401b038311848410176100ce578084926020946040528339810103126100c957516001600160a01b0390818116908190036100c95780156100b05760018060a01b0319918260015416600155816000549384161760005560405192167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36001600255611bc190816100e58239f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c80631157e2c1146116fa5780631c5b5b93146116d157806322f3e2d41461169057806326e05dd4146116735780633dc9abfa146115c45780633defb9621461156957806344d6ee2b1461154b57806369c1a7121461152d578063715018a6146114c857806377142c08146114aa57806379ba50971461142c5780638da5cb5b14611405578063945c11ff146113dc57806394e8c3311461121b578063aa1a0989146110f5578063b9cd881314610c5b578063c6522d0114610b6d578063d1951e15146106ad578063e30c397814610684578063e5f6534a146101735763f2fde38b1461010457600080fd5b346101705760203660031901126101705761011d611769565b6101256117bf565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b5034610170576060366003190112610170576004356001600160401b038111610680576101a4903690600401611737565b6101ac6117bf565b600280541461066e5760028055604051818382376020818381016003815203019020916004830154156106495760068301549060ff8216156106245760ff8260081c166105fc576005840154908560ff60018701541695600187146000146105e2578360243511945b60243585116105c457620f424061022e86602435611a2c565b045b600289036105be5761024190611a6f565b975b83958061050a575b505061ff00191661010017600682015560405161026781611841565b8515158152876020820152846040820152426060820152602435608082015260443560a0820152600560a0604051898782376020818b810185815203019020926102c081511515859060ff801983541691151516179055565b6020810151600185015560408101516002850155606081015160038501556080810151600485015501519101556001600a5401600a5560405186848237600487820190815281900360200190206006546001600160a01b031680610467575b50506007546001600160a01b031690816103a2575b505050908360c093927fd7bc90a7b314cbf2954c472d1c018339fab1bb78c0782cf7338a60eb17899fe595604051928392833781016000815203902094604051921515835260208301526040820152602435606082015260443560808201524260a0820152a2600160025580f35b60ff600182015460081c1690823b156104635761040192849283604051809681958294635aed5aed60e01b84526004840152610100602484015260036103ef610104850160028401611996565b91811985840301604486015201611996565b8b151560648301528d60848301528a60a483015260243560c483015260443560e483015203925af180156104585761043a575b80610334565b610447909493929461185c565b6104545790918538610434565b8580fd5b6040513d84823e3d90fd5b8380fd5b600260048394959301549301549060ff600186015460081c1693813b1561046357838a898b976104b8968b956040519a8b998a98899763a199b20760e01b895260c060048a015260c48901916117d3565b946024870152151560448601526064850152608484015260a483015203925af180156104ff576104ec575b9081889261031f565b6104f89097919761185c565b95386104e3565b6040513d8a823e3d90fd5b9095509192509060243581116105815761052681602435611a2c565b6127109081810291818304149015171561056d576105498a949392600292611a4f565b955b14610558575b388061024b565b9361056561010091611a6f565b949050610551565b634e487b7160e01b8a52601160045260248afd5b61058d60243582611a2c565b6127109081810291818304149015171561056d576105b86105b38b959493600293611a4f565b611a6f565b9561054b565b97610243565b6105dd620f42406105d760243588611a2c565b04611a6f565b610230565b600287036105f557836024351094610215565b8194610215565b8261062060405192839262f565ab60e21b84526020600485015260248401916117d3565b0390fd5b826106206040519283926340387f1b60e11b84526020600485015260248401916117d3565b60405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b604051633ee5aeb560e01b8152600490fd5b5080fd5b50346101705780600319360112610170576001546040516001600160a01b039091168152602090f35b503461017057600319604036820112610680576004356001600160401b038111610b69576106df903690600401611737565b90916001600160401b03602435116104635760a09060243536030112610b69576107076117bf565b6040518183823760208183810160038152030190209160048301548015610b4357600684015460ff8116610b205760101c60ff16610afa57610e108101809111610ae6574211610a8457600183015460405190838360208401376024803501356020858401015260ff60f81b9060f81b166040848301015260446024350135604184830101526107a460618285810103604181018452018261186f565b60208151910120835490818103610a665750506040518282823760208184810160048152030190206107e0602435600401602435600401611964565b906001600160401b0382116109e1578190610805826107ff86546118d6565b86611910565b8790601f8311600114610a005788926109f5575b50508160011b916000199060031b1c19161781555b6024803501356001820155604460243501356002820155610859606460243501602435600401611964565b906001600160401b0382116109e1576108828261087960038601546118d6565b60038601611910565b8690601f831160011461094a5792827ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc896936109219693600499968b9261093f575b50508160011b916000199060031b1c19161760038201555b60243560840135960186905560068301805460ff1916600117905560405191829181908337810187815203902093604051928392608084526002608085019101611996565b9060446024350135602084015260408301524260608301520390a280f35b0135905038806108c4565b6003840188526020882091885b601f19851681106109c9575083610921969360049996936001937ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc89a97601f198116106109af575b505050811b0160038201556108dc565b0135600019600384901b60f8161c1916905538808061099f565b90926020600181928686013581550194019101610957565b634e487b7160e01b87526041600452602487fd5b013590503880610819565b84895260208920899450915b601f1984168510610a4e576001945083601f19811610610a34575b505050811b01815561082e565b0135600019600384901b60f8161c19169055388080610a27565b81810135835560209485019460019093019201610a0c565b60449250604051916305846adf60e11b835260048301526024820152fd5b90836040518091838583378382019081520390207f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc6020604051428152a2610620604051928392638981073360e01b84526020600485015260248401916117d3565b634e487b7160e01b85526011600452602485fd5b50604051638981073360e01b8152602060048201529182916106209160248401916117d3565b604051633b7f299d60e11b815260206004820152806106206024820187876117d3565b5060405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b8280fd5b5034610170576020366003190112610170576004356001600160401b03811161068057906020610ba360c0933690600401611737565b9260a0604051610bb281611841565b8281528285820152826040820152826060820152826080820152015282604051938492833781016005815203019020604051610bed81611841565b60ff8254161515918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346101705760e0366003190112610170576004356001600160401b03811161068057610c8c903690600401611737565b906044359060ff82168203610463576064359260ff841684036110f1576084356001600160401b03811161045457610cc8903690600401611737565b60a4356001600160401b0381116110ed57610ce7903690600401611737565b939094610cf26117bf565b600460405183838237602081858101600381520301902001546110c857600360ff8916116110ad57604051610d26816117f4565b602435815260ff8816602082015260ff89166040820152610d48368587611890565b6060820152610d58368789611890565b60808201524260a082015260c43560c08201528960e08201528961010082015289610120820152604051838382376020818581016003815203019020815181556001810160ff60208401511681549061ff00604086015160081b169161ffff19161717905560608201518051906001600160401b03821161101f578c8291610df083610de760028801546118d6565b60028801611910565b602091601f841160011461103e5792611033575b50508160011b916000199060031b1c19161760028201555b60808201518051906001600160401b03821161101f57610e438261087960038601546118d6565b6020908d601f8411600114610f7c5794600660ff9c9995857fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b92610f71575b50508160011b916000199060031b1c19161760038201555b60a0830151600482015560c083015160058201550190610edd60e08201511515839060ff801983541691151516179055565b61010081015115159061ff0062ff00006101208554930151151560101b169260081b169062ffff001916171790556001600954016009558d82604051938493843782019081520390209a604051998a996024358b521660208a015216604088015260e0606088015260e08701916117d3565b9184830360808601526117d3565b60c43560a08301524260c08301520390a280f35b015190503880610e93565b919060038501835260208320925b601f1985168110611007575094600660ff9c999560017fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b83601f19811610610fee575b505050811b016003820155610eab565b015160001960f88460031b161c19169055388080610fde565b91926020600181928685015181550194019201610f8a565b634e487b7160e01b8d52604160045260248dfd5b015190503880610e04565b6002860181526020812090945091905b601f1984168510611092576001945083601f19811610611079575b505050811b016002820155610e1c565b015160001960f88460031b161c19169055388080611069565b8181015183556020948501946001909301929091019061104e565b604051630a2dce0760e31b815260ff89166004820152602490fd5b60405163796cc68d60e01b8152602060048201529182916106209160248401916117d3565b8780fd5b8480fd5b503461017057602080600319360112610680576004356001600160401b038111610b6957918161112b60a0943690600401611737565b92608060405161113a81611826565b606081528285820152826040820152606080820152015282604051938492833781016004815203019020906112106040519261117584611826565b60405161118d816111868185611996565b038261186f565b84526001810154908385019182526002810154604086019081526111f16004604051936111c8856111c18160038501611996565b038661186f565b6060890194855201549560808801968752604051988998828a52519189015260c088019061177f565b9251604087015251606086015251848203601f1901608086015261177f565b905160a08301520390f35b5034610170576020366003190112610170576004356001600160401b0381116106805761124e6020913690600401611737565b9261012060405161125e816117f4565b8281528285820152826040820152606080820152606060808201528260a08201528260c08201528260e08201528261010082015201528260405193849283378101600381520301902060ff6006604051926112b8846117f4565b80548452826001820154818116602087015260081c1660408501526040516112e7816111868160028601611996565b6060850152604051611300816111868160038601611996565b6080850152600481015460a0850152600581015460c08501520154818116151560e0840152818160081c16151561010084015260101c1615156101208201526040518091602082528051602083015260ff602082015116604083015260ff604082015116606083015260608101516101206113a261138c6101409384608088015261016087019061177f565b6080850151868203601f190160a088015261177f565b9260a081015160c086015260c081015160e086015260e0810151151561010086015261010081015115158286015201511515908301520390f35b50346101705780600319360112610170576006546040516001600160a01b039091168152602090f35b5034610170578060031936011261017057546040516001600160a01b039091168152602090f35b50346101705780600319360112610170576001546001600160a01b033381831603611492576001600160a01b031991821660015582543392811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405163118cdaa760e01b8152336004820152602490fd5b50346101705780600319360112610170576020600a54604051908152f35b50346101705780600319360112610170576114e16117bf565b600180546001600160a01b03199081169091558154908116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101705780600319360112610170576020600854604051908152f35b50346101705780600319360112610170576020600954604051908152f35b50346101705780600319360112610170576115826117bf565b426008557f2c9f2b6011d93cfc4365f13817b7a0105d374c3b06cdf4de6723009f3aa80ba86060600954600a546040519142835260208301526040820152a180f35b5034610170576040366003190112610170576115de611769565b6001600160a01b036024358181169290839003610463576115fd6117bf565b16908115611661578015611661577feaef7cd9257c1fea4f8488cbea5e7d9089a48a21dd9dd1603762c3013e1bd20e91816040926bffffffffffffffffffffffff60a01b83816006541617600655600754161760075582519182526020820152a180f35b60405163d92e233d60e01b8152600490fd5b50346101705780600319360112610170576020604051610e108152f35b5034610170578060031936011261017057602060085480151590816116bb575b506040519015158152f35b611c2091506116ca9042611a2c565b10826116b0565b50346101705780600319360112610170576007546040516001600160a01b039091168152602090f35b5034610170576020366003190112610170576004356001600160401b0381116106805761172e611734913690600401611737565b90611a80565b80f35b9181601f84011215611764578235916001600160401b038311611764576020838186019501011161176457565b600080fd5b600435906001600160a01b038216820361176457565b919082519283825260005b8481106117ab575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161178a565b6000546001600160a01b0316330361149257565b908060209392818452848401376000828201840152601f01601f1916010190565b61014081019081106001600160401b0382111761181057604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761181057604052565b60c081019081106001600160401b0382111761181057604052565b6001600160401b03811161181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b9291926001600160401b03821161181057604051916118b9601f8201601f19166020018461186f565b829481845281830111611764578281602093846000960137010152565b90600182811c92168015611906575b60208310146118f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916118e5565b90601f811161191e57505050565b600091825260208220906020601f850160051c8301941061195a575b601f0160051c01915b82811061194f57505050565b818155600101611943565b909250829061193a565b903590601e198136030182121561176457018035906001600160401b0382116117645760200191813603831361176457565b90600092918054916119a7836118d6565b918282526001938481169081600014611a0957506001146119c9575b50505050565b90919394506000526020928360002092846000945b8386106119f55750505050010190388080806119c3565b8054858701830152940193859082016119de565b9294505050602093945060ff191683830152151560051b010190388080806119c3565b91908203918211611a3957565b634e487b7160e01b600052601160045260246000fd5b8115611a59570490565b634e487b7160e01b600052601260045260246000fd5b600160ff1b8114611a395760000390565b9060409182518282823760208184810160038152030190206004810154908115611b69576006019081549060ff8216611b475760ff8260101c16611b3f57610e108101809111611a3957421115611b1d5762ff000019166201000017905582517f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc92602092829190819083378101600081520390209251428152a2565b8451630d64593d60e31b815260206004820152806106206024820187876117d3565b505050505050565b8551633b7f299d60e11b815260206004820152806106206024820188886117d3565b845163129a3e3360e21b815260206004820152806106206024820187876117d356fea2646970667358221220ecea29cd8e03afde10a890b139c655e07ee1c04502f1373c8c386393db5e2c5664736f6c63430008140033000000000000000000000000dd06e4fac3df7ec18b552d7cd26036bc27e23ce6

部署字节码

0x6080604052600436101561001257600080fd5b6000803560e01c80631157e2c1146116fa5780631c5b5b93146116d157806322f3e2d41461169057806326e05dd4146116735780633dc9abfa146115c45780633defb9621461156957806344d6ee2b1461154b57806369c1a7121461152d578063715018a6146114c857806377142c08146114aa57806379ba50971461142c5780638da5cb5b14611405578063945c11ff146113dc57806394e8c3311461121b578063aa1a0989146110f5578063b9cd881314610c5b578063c6522d0114610b6d578063d1951e15146106ad578063e30c397814610684578063e5f6534a146101735763f2fde38b1461010457600080fd5b346101705760203660031901126101705761011d611769565b6101256117bf565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b5034610170576060366003190112610170576004356001600160401b038111610680576101a4903690600401611737565b6101ac6117bf565b600280541461066e5760028055604051818382376020818381016003815203019020916004830154156106495760068301549060ff8216156106245760ff8260081c166105fc576005840154908560ff60018701541695600187146000146105e2578360243511945b60243585116105c457620f424061022e86602435611a2c565b045b600289036105be5761024190611a6f565b975b83958061050a575b505061ff00191661010017600682015560405161026781611841565b8515158152876020820152846040820152426060820152602435608082015260443560a0820152600560a0604051898782376020818b810185815203019020926102c081511515859060ff801983541691151516179055565b6020810151600185015560408101516002850155606081015160038501556080810151600485015501519101556001600a5401600a5560405186848237600487820190815281900360200190206006546001600160a01b031680610467575b50506007546001600160a01b031690816103a2575b505050908360c093927fd7bc90a7b314cbf2954c472d1c018339fab1bb78c0782cf7338a60eb17899fe595604051928392833781016000815203902094604051921515835260208301526040820152602435606082015260443560808201524260a0820152a2600160025580f35b60ff600182015460081c1690823b156104635761040192849283604051809681958294635aed5aed60e01b84526004840152610100602484015260036103ef610104850160028401611996565b91811985840301604486015201611996565b8b151560648301528d60848301528a60a483015260243560c483015260443560e483015203925af180156104585761043a575b80610334565b610447909493929461185c565b6104545790918538610434565b8580fd5b6040513d84823e3d90fd5b8380fd5b600260048394959301549301549060ff600186015460081c1693813b1561046357838a898b976104b8968b956040519a8b998a98899763a199b20760e01b895260c060048a015260c48901916117d3565b946024870152151560448601526064850152608484015260a483015203925af180156104ff576104ec575b9081889261031f565b6104f89097919761185c565b95386104e3565b6040513d8a823e3d90fd5b9095509192509060243581116105815761052681602435611a2c565b6127109081810291818304149015171561056d576105498a949392600292611a4f565b955b14610558575b388061024b565b9361056561010091611a6f565b949050610551565b634e487b7160e01b8a52601160045260248afd5b61058d60243582611a2c565b6127109081810291818304149015171561056d576105b86105b38b959493600293611a4f565b611a6f565b9561054b565b97610243565b6105dd620f42406105d760243588611a2c565b04611a6f565b610230565b600287036105f557836024351094610215565b8194610215565b8261062060405192839262f565ab60e21b84526020600485015260248401916117d3565b0390fd5b826106206040519283926340387f1b60e11b84526020600485015260248401916117d3565b60405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b604051633ee5aeb560e01b8152600490fd5b5080fd5b50346101705780600319360112610170576001546040516001600160a01b039091168152602090f35b503461017057600319604036820112610680576004356001600160401b038111610b69576106df903690600401611737565b90916001600160401b03602435116104635760a09060243536030112610b69576107076117bf565b6040518183823760208183810160038152030190209160048301548015610b4357600684015460ff8116610b205760101c60ff16610afa57610e108101809111610ae6574211610a8457600183015460405190838360208401376024803501356020858401015260ff60f81b9060f81b166040848301015260446024350135604184830101526107a460618285810103604181018452018261186f565b60208151910120835490818103610a665750506040518282823760208184810160048152030190206107e0602435600401602435600401611964565b906001600160401b0382116109e1578190610805826107ff86546118d6565b86611910565b8790601f8311600114610a005788926109f5575b50508160011b916000199060031b1c19161781555b6024803501356001820155604460243501356002820155610859606460243501602435600401611964565b906001600160401b0382116109e1576108828261087960038601546118d6565b60038601611910565b8690601f831160011461094a5792827ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc896936109219693600499968b9261093f575b50508160011b916000199060031b1c19161760038201555b60243560840135960186905560068301805460ff1916600117905560405191829181908337810187815203902093604051928392608084526002608085019101611996565b9060446024350135602084015260408301524260608301520390a280f35b0135905038806108c4565b6003840188526020882091885b601f19851681106109c9575083610921969360049996936001937ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc89a97601f198116106109af575b505050811b0160038201556108dc565b0135600019600384901b60f8161c1916905538808061099f565b90926020600181928686013581550194019101610957565b634e487b7160e01b87526041600452602487fd5b013590503880610819565b84895260208920899450915b601f1984168510610a4e576001945083601f19811610610a34575b505050811b01815561082e565b0135600019600384901b60f8161c19169055388080610a27565b81810135835560209485019460019093019201610a0c565b60449250604051916305846adf60e11b835260048301526024820152fd5b90836040518091838583378382019081520390207f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc6020604051428152a2610620604051928392638981073360e01b84526020600485015260248401916117d3565b634e487b7160e01b85526011600452602485fd5b50604051638981073360e01b8152602060048201529182916106209160248401916117d3565b604051633b7f299d60e11b815260206004820152806106206024820187876117d3565b5060405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b8280fd5b5034610170576020366003190112610170576004356001600160401b03811161068057906020610ba360c0933690600401611737565b9260a0604051610bb281611841565b8281528285820152826040820152826060820152826080820152015282604051938492833781016005815203019020604051610bed81611841565b60ff8254161515918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346101705760e0366003190112610170576004356001600160401b03811161068057610c8c903690600401611737565b906044359060ff82168203610463576064359260ff841684036110f1576084356001600160401b03811161045457610cc8903690600401611737565b60a4356001600160401b0381116110ed57610ce7903690600401611737565b939094610cf26117bf565b600460405183838237602081858101600381520301902001546110c857600360ff8916116110ad57604051610d26816117f4565b602435815260ff8816602082015260ff89166040820152610d48368587611890565b6060820152610d58368789611890565b60808201524260a082015260c43560c08201528960e08201528961010082015289610120820152604051838382376020818581016003815203019020815181556001810160ff60208401511681549061ff00604086015160081b169161ffff19161717905560608201518051906001600160401b03821161101f578c8291610df083610de760028801546118d6565b60028801611910565b602091601f841160011461103e5792611033575b50508160011b916000199060031b1c19161760028201555b60808201518051906001600160401b03821161101f57610e438261087960038601546118d6565b6020908d601f8411600114610f7c5794600660ff9c9995857fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b92610f71575b50508160011b916000199060031b1c19161760038201555b60a0830151600482015560c083015160058201550190610edd60e08201511515839060ff801983541691151516179055565b61010081015115159061ff0062ff00006101208554930151151560101b169260081b169062ffff001916171790556001600954016009558d82604051938493843782019081520390209a604051998a996024358b521660208a015216604088015260e0606088015260e08701916117d3565b9184830360808601526117d3565b60c43560a08301524260c08301520390a280f35b015190503880610e93565b919060038501835260208320925b601f1985168110611007575094600660ff9c999560017fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b83601f19811610610fee575b505050811b016003820155610eab565b015160001960f88460031b161c19169055388080610fde565b91926020600181928685015181550194019201610f8a565b634e487b7160e01b8d52604160045260248dfd5b015190503880610e04565b6002860181526020812090945091905b601f1984168510611092576001945083601f19811610611079575b505050811b016002820155610e1c565b015160001960f88460031b161c19169055388080611069565b8181015183556020948501946001909301929091019061104e565b604051630a2dce0760e31b815260ff89166004820152602490fd5b60405163796cc68d60e01b8152602060048201529182916106209160248401916117d3565b8780fd5b8480fd5b503461017057602080600319360112610680576004356001600160401b038111610b6957918161112b60a0943690600401611737565b92608060405161113a81611826565b606081528285820152826040820152606080820152015282604051938492833781016004815203019020906112106040519261117584611826565b60405161118d816111868185611996565b038261186f565b84526001810154908385019182526002810154604086019081526111f16004604051936111c8856111c18160038501611996565b038661186f565b6060890194855201549560808801968752604051988998828a52519189015260c088019061177f565b9251604087015251606086015251848203601f1901608086015261177f565b905160a08301520390f35b5034610170576020366003190112610170576004356001600160401b0381116106805761124e6020913690600401611737565b9261012060405161125e816117f4565b8281528285820152826040820152606080820152606060808201528260a08201528260c08201528260e08201528261010082015201528260405193849283378101600381520301902060ff6006604051926112b8846117f4565b80548452826001820154818116602087015260081c1660408501526040516112e7816111868160028601611996565b6060850152604051611300816111868160038601611996565b6080850152600481015460a0850152600581015460c08501520154818116151560e0840152818160081c16151561010084015260101c1615156101208201526040518091602082528051602083015260ff602082015116604083015260ff604082015116606083015260608101516101206113a261138c6101409384608088015261016087019061177f565b6080850151868203601f190160a088015261177f565b9260a081015160c086015260c081015160e086015260e0810151151561010086015261010081015115158286015201511515908301520390f35b50346101705780600319360112610170576006546040516001600160a01b039091168152602090f35b5034610170578060031936011261017057546040516001600160a01b039091168152602090f35b50346101705780600319360112610170576001546001600160a01b033381831603611492576001600160a01b031991821660015582543392811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405163118cdaa760e01b8152336004820152602490fd5b50346101705780600319360112610170576020600a54604051908152f35b50346101705780600319360112610170576114e16117bf565b600180546001600160a01b03199081169091558154908116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101705780600319360112610170576020600854604051908152f35b50346101705780600319360112610170576020600954604051908152f35b50346101705780600319360112610170576115826117bf565b426008557f2c9f2b6011d93cfc4365f13817b7a0105d374c3b06cdf4de6723009f3aa80ba86060600954600a546040519142835260208301526040820152a180f35b5034610170576040366003190112610170576115de611769565b6001600160a01b036024358181169290839003610463576115fd6117bf565b16908115611661578015611661577feaef7cd9257c1fea4f8488cbea5e7d9089a48a21dd9dd1603762c3013e1bd20e91816040926bffffffffffffffffffffffff60a01b83816006541617600655600754161760075582519182526020820152a180f35b60405163d92e233d60e01b8152600490fd5b50346101705780600319360112610170576020604051610e108152f35b5034610170578060031936011261017057602060085480151590816116bb575b506040519015158152f35b611c2091506116ca9042611a2c565b10826116b0565b50346101705780600319360112610170576007546040516001600160a01b039091168152602090f35b5034610170576020366003190112610170576004356001600160401b0381116106805761172e611734913690600401611737565b90611a80565b80f35b9181601f84011215611764578235916001600160401b038311611764576020838186019501011161176457565b600080fd5b600435906001600160a01b038216820361176457565b919082519283825260005b8481106117ab575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161178a565b6000546001600160a01b0316330361149257565b908060209392818452848401376000828201840152601f01601f1916010190565b61014081019081106001600160401b0382111761181057604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761181057604052565b60c081019081106001600160401b0382111761181057604052565b6001600160401b03811161181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b9291926001600160401b03821161181057604051916118b9601f8201601f19166020018461186f565b829481845281830111611764578281602093846000960137010152565b90600182811c92168015611906575b60208310146118f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916118e5565b90601f811161191e57505050565b600091825260208220906020601f850160051c8301941061195a575b601f0160051c01915b82811061194f57505050565b818155600101611943565b909250829061193a565b903590601e198136030182121561176457018035906001600160401b0382116117645760200191813603831361176457565b90600092918054916119a7836118d6565b918282526001938481169081600014611a0957506001146119c9575b50505050565b90919394506000526020928360002092846000945b8386106119f55750505050010190388080806119c3565b8054858701830152940193859082016119de565b9294505050602093945060ff191683830152151560051b010190388080806119c3565b91908203918211611a3957565b634e487b7160e01b600052601160045260246000fd5b8115611a59570490565b634e487b7160e01b600052601260045260246000fd5b600160ff1b8114611a395760000390565b9060409182518282823760208184810160038152030190206004810154908115611b69576006019081549060ff8216611b475760ff8260101c16611b3f57610e108101809111611a3957421115611b1d5762ff000019166201000017905582517f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc92602092829190819083378101600081520390209251428152a2565b8451630d64593d60e31b815260206004820152806106206024820187876117d3565b505050505050565b8551633b7f299d60e11b815260206004820152806106206024820188886117d3565b845163129a3e3360e21b815260206004820152806106206024820187876117d356fea2646970667358221220ecea29cd8e03afde10a890b139c655e07ee1c04502f1373c8c386393db5e2c5664736f6c63430008140033