跳到文章正文
返回研究

技术方法

基于历史交易重放的任意外部调用漏洞扫描系统:方法与实证

以历史交易重放、调用参数溯源与变异验证检测任意外部调用风险,并分析以太坊与 BSC 的漏洞案例及扫描结果。

ZKSec

前言

任意外部调用漏洞——合约把调用的目标与数据交给调用者填写——是链上授权资金面临的一类风险。我们在归档节点数据上重放 21 亿笔历史交易,扫描出超过一百个漏洞合约,涉及多个代码族。本文先介绍检测方法,再分析漏洞构成与链间差异,结语给出防御建议。

1.1 任意外部调用漏洞

存在任意外部调用漏洞的合约,提供一个公开入口:调用的目标地址和数据由任何提交者填写,合约以自己的身份执行。正常合约不是这样——要调用谁、传什么数据,写在代码里或限定在白名单内。

这种入口有时是刻意的设计取舍(批量工具、跨链桥为了通用故意开放),有时是设计缺陷(本想限制调用范围,却漏了校验)。无论是刻意开放还是校验遗漏,只要合约持有用户授权或滞留资金,缺少调用者限制的入口就可能被非预期调用者利用。

1.2 一个目标限制不足的案例

BSC 上的 MetaAggregatorSwapContract(0xc17b234fad8e40642662f1d2a6cbd1d609e7b9b5)存在目标限制不足的任意外部调用风险。它的功能是代用户执行兑换:接收代币,调用外部聚合器完成交易。

Solidity
// 入口:任何人可调用,全部参数来自 calldata
function swapERC20(SwapERC20Params calldata params) external nonReentrant {
    (uint256 amountOut, uint256 fee) = _swapERC20(params);
    // …… emit TokenSwapped(……)
}

function _swapERC20(SwapERC20Params memory params) internal returns (uint256, uint256) {
    address aggregator = params.aggregator;   // 任意地址
    bytes memory swapData = params.swapData;  // 任意字节
    // ……
    uint256 balanceBefore = tokenOut.balanceOf(address(this));
    _executeAggregatorCall(swapData, isDelegate, aggregator, 0);
    uint256 amountOut = tokenOut.balanceOf(address(this)) - balanceBefore;
    if (amountOut < minAmountOut) revert InsufficientTokenOutAmount();
    // ……
}

function _executeAggregatorCall(
    bytes memory swapData,
    bool isDelegate,
    address aggregator,
    uint256 value
) internal {
    (bool success, bytes memory returnData) = isDelegate
        ? SWAP_TARGET.delegatecall(swapData)
        : aggregator.call{value: value}(swapData);   // CALL 或 DELEGATECALL 的目标和代码路径由参数影响
    // ……
}

aggregator 和 swapData 都来自调用者,合约没有白名单校验。非 delegate 模式下,合约通过 CALL 调用 aggregator;delegate 模式下,代码在 SWAP_TARGET 的上下文中执行。目标限制不足,可能扩大合约可调用的范围;合约名下还挂着用户为兑换授权的额度。

aggregator 和 swapData 可控,但这本身不能推出任意 token.transferFrom 攻击。minAmountOut 在源码中要求大于零;非 delegate 模式下,MetaAggregator 通过 CALL 调用 aggregator,代币看到的调用者还要由实际调用链确定。因此,本案例只有在给出完整 trace、spender 和资金路径后,才能判定为授权转移漏洞。

要把该入口判定为授权转移漏洞,还需列出实际 spender、受害者授权和资金流;现有示例只支持滞留余额路径。两条路径应分开列出。

2.1 漏洞扫描系统设计

把历史交易一笔一笔重新执行,拿到完整的调用树——每一层调用、每个参数都有记录。然后在树里找可操控的点:内部调用的某个参数(转账给谁、转多少、调用哪个合约、带什么数据),如果能一路追溯到交易顶层 calldata 里的原始字节,只能说明这个参数可能受外部提交者影响,还要通过变异重放确认。把这些点逐个替换后重放,验证参数是否确实可控,以及操控能否传导成真实的资金流动。

2.2 扫描执行流程

一笔交易在代码里的完整执行流程见图 1。

图 1 单笔交易的执行流程

2.3 调用参数溯源

扫描器先检查内层参数是否能在顶层 calldata 中找到原始字节。找到时,只能说明该参数在当前编码路径上可由提交者影响,仍需通过变异重放确认。

扫描器做字节级匹配:参数的 32 字节直接出现在顶层对齐位置,或整段调用 calldata 作为连续字节串嵌在顶层,即登记为可由外部参数改变的内部参数并记下偏移;匹配不到时标记为“无法建立参数来源”,不据此断定该值由合约内部算出。变异时改顶层偏移,重放验证内层是否跟随。

当前实现不做语义分析,只做 EVM 层的字节匹配,因此开源和闭源合约都能处理。已知缺口是:合约在内存里重组 calldata 时,参数来源可能无法继续追踪。

2.4 实现

整套系统只有一个核心设计:每笔历史交易,都在它发生前一瞬的世界状态上执行两遍(图 2)。

图 2 扫描器的核心设计

一笔交易的执行结果,取决于它之前所有交易留下的状态——区块里第 5 笔交易看到的余额,是前 4 笔执行完的余额。重放第 5 笔之前,先把前 4 笔逐笔执行到一个临时状态层(PreState)里,停在第 5 笔开始前。

然后在这份状态上,把这笔交易跑两遍。第一遍原样执行,记录完整过程:调用了哪些合约、转了哪些钱、改了哪些存储。第二遍换掉可操控的参数——发起人、收款人、金额——再执行,看结果有什么不同。两遍都不改这份状态,所以换不同参数可以反复试。

试完之后,把第一遍的结果写进状态层,继续处理下一笔交易。这样区块里的每一笔,都在它当年看到的那个世界上执行。

2.5 排除误报

重放产出的待审核记录以万计,人工逐条看完不可能,绝大多数在复核之前就被流水线筛掉了。图 1 的每个 ✕ 标记一类被筛除的原因,这里展开其中几种。

地址投毒批次 钓鱼者用假币、零值或极小额转账污染地址记录。扫描器会看到多个受害者、官方代币名称和极小额转账等相似形态,因此需要结合代币代码、金额和调用批次排除。

纯文本
// 批量转账入口(同一代码族的两个 selector)
transfer(address[] from, address[] to, address token, uint256[] amount)   // 0xe19c2253
transfer_7211834412884((uint8,address,address,address,uint256)[])          // 0x12514bba
// 受害者列表直接写在 calldata 里,一笔交易打几十个地址

实例:0x184aaf087ca6dd17eb1200dbfbee9f671bd906fc。该家族在同轮扫描中产生数百条记录,包含几十个 helper,未发现官方稳定币的非零余额。

仿冒币名 假币攻击的升级——代币名字里混进西里尔字母或零宽字符,肉眼看是 USDT,字节上不是。一律标记。

纯文本
USDT → 55 53 44 54          (ASCII)
USDТ → 55 53 44 d0a2        (末位是西里尔字母 Т,U+0422)

实例:0x9257cf49…f4253、0x6b1b80b4…1ca6cc,同一批地址投毒记录中转出的仿冒 USDT/USDC。

EIP-7702 重放限制 在这组 type-4 重放中,原交易由原发起人携带 authorizationList 执行;换成测试地址并去掉该列表后,交易回滚。这个结果只说明该重放依赖原授权状态,不能推广为所有 EIP-7702 交易都必须携带 authorizationList。扫描器保留这类记录,再用 caller_only 和 dual 两种变体区分真实可执行路径与重放条件导致的回滚。

纯文本
原始交易   type-4,携带 authorizationList(账户本人签名)→ 执行成功
换人重放   同一 calldata,发起人换成测试地址,无授权列表 → 整笔 revert

使用相同字节码的账户组 多个地址运行同一段字节码、使用同一个发起人和归集地址,待审记录来自一组同特征账户。

纯文本
// 一组账户的共同特征:字节码全部指向同一个委托目标
0xef0100 + 631af7731569e10b22a0430051cfd5c8930a1656   // 多个账户共用
发起人相同 · 归集地址相同

实例:0x001100bd…3ff16、0x043d01a9…669d,两个成员的字节码完全相同。

3.1 判定条件

扫描器筛出的漏洞记录按图 3 依次判定。条件一、二用于确认参数可控性和模拟执行是否成功;条件三只区分资金来源:付款方是授权者时标为授权滥用,资金来自公开流动性时标为公开套利。两类记录的后续复核不同,不能直接等同于真实漏洞。

图 3 判定条件

3.2 AI 审核

扫描器产出的待审核记录由 AI 自动复核(图 4)。AI 读取原始交易的调用和资金流,分别做换发起人和换收款人重放。模拟成功只证明替换参数后交易可执行;资金来源、授权关系或调用链证据不足时,记录标为“证据不足,待人工复核”,不自动判为漏洞。

图 4 AI 复核代理

AI 复核结果回写到面板(图 5)。图 5 展示单条记录的五阶段证据链、标签、备注和模拟编号;它不展示全局标签计数。

图 5 面板上的待审核记录与标签

4.1 已知攻击交易检测

Seneca Protocol Chamber 用于验证扫描器检出的漏洞:该事件有公开分析,相关调用模式也出现在扫描结果中。

Seneca Protocol 于 2024 年 2 月 28 日遭到攻击,损失达数百万美元。BlockSec、SlowMist 和 Rekt 分别分析了这起事件。受影响合约地址为 0x65c210c5…91f06,其 Chamber.sol 源码已在 Etherscan 验证。图 6、图 7 对应的 PT-weETH 重放交易为 0x6da8f7cb…e820d,调用目标为 clone 0xbc83f271…7c05。0x23fcf9d4…01286 是另一笔 PT-rsETH 交易,不与图混用。

漏洞代码如下,省略无关部分:

Solidity
// 入口:任何人可调用,三个数组参数全部来自 calldata
function performOperations(
    uint8[] calldata actions,
    uint256[] calldata values,
    bytes[] calldata datas
) whenNotPaused external payable returns (uint256 value1, uint256 value2) {
    // ……
    } else if (action == Constants.OPERATION_CALL) {
        (bytes memory returnData, uint8 returnValues)
            = _call(values[i], datas[i], value1, value2);
    // ……
}

function _call(uint256 value, bytes memory data, ...) internal returns (bytes memory, uint8) {
    // 调用者提供目标地址和 calldata,合约解码后直接使用
    (address callee, bytes memory callData, ...) = abi.decode(data, (address, bytes, ...));

    // callee 只经过黑名单检查
    require(!blacklisted[callee], "Chamber: can't call");

    // 通过 callee.call 执行外部调用;代币看到的调用者取决于当前调用帧
    (bool success, bytes memory returnData) = callee.call{value: value}(callData);
    require(success, "Chamber: call failed");
    return (returnData, returnValues);
}

这与第 1.2 节的 MetaAggregatorSwapContract 属于同一类外部调用风险:调用者把 callee 和 callData 编入顶层 calldata,Chamber 解码后直接使用。在该历史状态中,Chamber 名下保留着用户为管理仓位授予的 ERC-20 授权,因此需要进一步核对实际 spender、受害者授权对象和资金路径,才能判定为授权转移漏洞。

扫描器重放这笔交易,用 call_tracer 记录完整调用树。在 Chamber 的内部调用帧中,它定位到 callee.call(callData),并确认 callee 和 callData 都能追溯到顶层 datas 参数。系统将它们登记为可操控点,再把顶层 calldata 中对应的收款人地址替换为测试地址,在同一历史状态上重放。交易执行成功,测试地址收到 PT-weETH;资金来源和调用链证据另行记录。

图 6 展示这笔 PT-weETH 重放交易的 Invocation Flow Diff,图 7 展示对应的 Fund Flow Diff;两图共同呈现替换收款人前后的调用和资金差异。

图 6 PT-weETH 调用差异
图 7 PT-weETH 资金流差异

thirdweb Pay UniversalGatewayV1(2025 年,以太坊)——公开事件交叉验证

thirdweb 的支付网关 0x81d57dd01a15bc1c19563693902df621500d4d2a 也出现在扫描结果中。thirdweb 的公开报告确认该旧合约存在授权余额风险并已停用。

该历史实现没有可直接核对的验证源码。签名绑定、假代币地址和 callData 的具体关系,需要与对应区块的代理实现和交易 trace 对齐;当前参考源码不能替代历史实现作为结论依据。

该案例的历史调用包含代币地址、转发数据和授权余额之间的组合关系。当前材料不足以把“假代币地址绕过扣款”确定为该历史实现的根因;在补充对应区块的实现代码和完整 trace 前,不将其作为已确认机制。

5.1 扫描器检出的风险路径

以下案例的证据类型不同:部分来自历史交易重放,部分还有源码、审计或事故报告支持。每节只对已列出的证据作判断,并区分扫描结果和外部资料。

案例状态以所引交易的区块状态或明确的查询时间为准;余额、授权和合约是否仍可调用,不从历史交易直接推导当前状态。

一、Maker Multicall2:没有调用者白名单的批量执行器

0x5ba1e12693dc8f9c48aad8770482f4739beed696

Solidity
// 官方合约,2021 年部署,源码公开
function aggregate(Call[] memory calls)
    public returns (uint256 blockNumber, bytes[] memory returnData)
{
    blockNumber = block.number;
    returnData = new bytes[](calls.length);
    for (uint256 i = 0; i < calls.length; i++) {
        (bool success, bytes memory ret)
            = calls[i].target.call(calls[i].callData);   // 没有调用者白名单
        require(success, "Multicall aggregate: call failed");
        returnData[i] = ret;
    }
}

target 和 callData 全部来自调用者,合约没有调用者白名单校验,但仍检查底层调用是否成功。它是通用批量执行器,风险取决于用户是否把代币授权给了这个执行器;本文样本中的授权和资金路径应按具体交易逐笔核对。

二、THORSwap TSAggregatorGeneric:目标限制不完整

0x0ccd5dd5bcf1af77dc358d1e2f06ee880ef63c3c

Solidity
function swapIn(
    address router, address vault, string calldata memo,
    address token, uint amount,
    address swapRouter,          // 调用目标由参数提供
    bytes calldata data,         // 调用数据由参数提供
    uint deadline
) public nonReentrant {
    // 只禁止调用 TTP(THOR 的代币代理)
    require(swapRouter != address(tokenTransferProxy), "no calling ttp");
    tokenTransferProxy.transferTokens(token, msg.sender, address(this), amount);
    token.safeApprove(address(swapRouter), amount);

    (bool success,) = swapRouter.call(data);   // 其他目标仍可调用
    require(success, "failed to swap");
    // ……
}

当前源码只排除了 TTP,没有把 swapRouter 限制到白名单,因此代币合约仍可作为目标。历史状态重放显示,调用者可以把 swapRouter 和 data 指向代币转账路径;是否构成授权滥用,还需同时核对 spender、授权人和资金来源。

三、Symbiosis MetaRouter:跨链路由的任意 calldata

0xf621fb08bbe51af70e7e0f4ea63496894166ff7f

metaRoute 从网关提取用户授权的代币,并检查 relayRecipient 不是网关且目标地址有代码。随后,源码直接使用调用者提供的 otherSideCalldata 调用 relayRecipient;这里没有按函数选择器建立白名单。

otherSideCalldata 的字节内容没有按函数选择器做白名单校验,目标地址只受网关地址和代码存在性检查约束。扫描器检出的交易中,该参数包含 USDT.transferFrom;如要认定为授权滥用,还需把交易中的 spender、授权人和资金接收方逐项列出。

四、LayerZero LZMultiCall:授权错位与无签名执行入口

0x5528cf58feb8fbfce94f43b33240fffb1312bde3

Solidity
// 合约同时提供带签名和不带签名的两个 execute 重载
function execute(
    Call[] calldata _calls,
    bytes32 _quoteId
) public payable virtual {
    uint256 nonce = nonces[msg.sender]++;
    _executeCalls(_calls, msg.sender);
    emit Executed(msg.sender, _quoteId, nonce);
}

function _executeCalls(Call[] calldata _calls, address signer) internal {
    for (uint256 i = 0; i < _calls.length; ++i) {
        if (_calls[i].target == address(TRANSFER_DELEGATE)) {
            _handleTransfer(_calls[i].data, signer);
        } else {
            _handleCall(_calls[i].target, _calls[i].data, _calls[i].value);
        }
    }
}

原始复核交易走的是两参数的无签名入口,不是带 _signature 的重载。该入口把 msg.sender 作为 signer;只有目标是 TransferDelegate 时,才检查 transfer 的 from 是否等于 signer。若调用列表直接把代币合约作为 target 并放入 token.transferFrom(受害者, 自己, 金额),代码会走通用的 _handleCall,由 LZMultiCall 作为 spender 发起转账。

LayerZero 的正常流程应把授权交给 TransferDelegate;如果用户把授权直接给了 LZMultiCall,公开的无签名 execute 就可能消耗这份额度。这里的风险来自授权对象与通用转发路径的错位,不涉及带签名入口。

五、thirdweb Pay UniversalGatewayV1:证据范围

0x81d57dd01a15bc1c19563693902df621500d4d2a

该案例已在 4.1 作为公开事件交叉验证。公开报告确认旧合约存在授权余额风险并已停用;历史实现的签名绑定、代币地址和 callData 的具体关系,需要与对应区块的代理实现和交易 trace 对齐。本文不使用当前 UniversalBridgeV1 参考源码替代历史实现下定论。

六、BSC BnbSettler:BASIC 任意调用消耗误授权

0x4c6f446dd88fd1be8b80d2940806002777dc12a2

这是 0x Protocol Settler 的 BSC 部署。风险入口由公开的 execute 和 BASIC action 组成,转账路径通过 action 进入代币合约:

Solidity
// 示意代码,省略 action dispatch 与结算,不能替代完整源码
function execute(
    AllowedSlippage calldata slippage,
    bytes[] calldata actions,
    bytes32
) public payable takerSubmitted returns (bool) {
    // actions 由调用者提供,BASIC 在这里分派
    // takerSubmitted 只记录 payer,不做调用者认证
}

function basicSellToPool(
    IERC20 sellToken, uint256 bps, address pool,
    uint256 offset, bytes memory data
) internal {
    if (_isRestrictedTarget(pool)) revert ConfusedDeputy(); // 只限制 Permit2
    (bool success, bytes memory returnData) = payable(pool).call(data);
    if (!success) {
        assembly { revert(add(returnData, 32), mload(returnData)) }
    }
    if (returnData.length == 0 && pool.code.length == 0) revert InvalidTarget(); // 目标和 calldata 可控
}

用户若直接把 ERC-20 授权给 Settler,调用者就可以把 pool 填成代币合约,把 data 编成 token.transferFrom(受害者, 自己, 金额)。Settler 以自身身份发起调用,代币会按这份授权执行。历史重放还显示该合约存在可改变收款人的滞留余额;这两条路径应分开计。


表中按主要利用前提归类;“扫描检出的漏洞”“历史重放确认”和“公开事件交叉验证”不是同一个证据等级:

形态案例链特征
设计取舍Multicall2ETH官方合约,无恶意代码,用户误授权
补丁不完整THORSwapETH只禁 TTP,其他外部调用目标仍开放
跨链任意指令SymbiosisETHcalldata 内容缺少语义白名单,目标有代码存在性检查
授权错位与无签名转发LayerZeroETH误授权给外壳,可绕过 TransferDelegate 的 from 校验
历史授权余额风险thirdwebETH公开报告确认旧合约已停用,具体历史调用路径待实现和 trace 对齐
BASIC 任意调用BnbSettlerBSC直接 approve 本体后,BASIC 可调用代币 transferFrom

这些案例的证据类型不同:部分有历史交易重放,部分只有源码或公开报告。扫描器能直接验证的是:在对应历史状态下,改变顶层可控参数是否仍能把资金导向测试地址;其余结论需要单独标注来源和证据范围。

5.2 漏洞记录汇总

扫描器在以太坊和 BSC 上汇总了超过四百条漏洞记录,涉及三百多个地址。同一地址可能对应多条检测记录,地址中也包括 EIP-7702 委托账户。

以太坊的记录主要集中在 Maker Multicall2;BSC 的记录分布在更多地址,单个地址对应的记录较少。其他记录还涉及 CallDataExecutor、UniswapInterfaceMulticall、SquidMulticall 和 0x Settler 等合约。完整地址清单见附录 A、B。

链合约或账户说明
以太坊0x5ba1e126…ed696Maker Multicall2(第 5.1 节案例一)
以太坊0xbc83f271…7c05Seneca Chamber(第 4.1 节案例)
以太坊0x5724b5bc…81a1Swap0x 转发器
以太坊0x65c210c5…91f06Seneca Chamber(另一实例)
以太坊0xd791fcf4…d001废弃合约
以太坊0x0ccd5dd5…3c3cTHORSwap(第 5.1 节案例二)
以太坊0x81d57dd0…4d2athirdweb Pay(第 4.1 节案例)
以太坊0x5528cf58…bde3LayerZero LZMultiCall(第 5.1 节案例四)
以太坊0xf621fb08…ff7fSymbiosis MetaRouter(第 5.1 节案例三)
BSC0xc17b234f…b9b5swapERC20(第 1.2 节案例)
BSC0x62ccef0b…27dcsmartSwapByOrderId
BSC0xca11daf5…4ca11—

5.3 Lynx:交易分析与模拟平台

Lynx 是我们自研的交易分析与模拟平台,支持以太坊和 BSC,接口与标准 JSON-RPC 兼容。本文的重放验证和资金流对比通过 Lynx 完成。平台支持基于归档节点历史状态的 eth_call 模拟,可替换发起人、修改 calldata 或覆盖账户余额。

Lynx 通过 debug_traceCall 及相应的 tracer 获取调用树,记录调用目标、calldata 和返回值,供扫描器追踪参数来源;界面同时展示存储变化。平台还分别生成原始交易和模拟交易的资金流图,对比资产的来源、去向和金额。第 4.1 节图 6、图 7 分别展示调用流程和资金流的差异,图 8 展示调用树界面。

每次模拟结果按唯一编号保存,可按编号复查。

图 8 Lynx 的调用树界面

结语

本文在 21 亿笔历史交易中扫描出超过一百个漏洞合约,涉及基础设施、跨链路由器、支付网关和工具合约等形态。其中一部分漏洞经历史状态重放确认;Seneca 和 thirdweb 提供了独立的公开事件作为交叉验证。

在已复现的案例中,授权额度在余额变化后仍可能存在,因此监控授权存量可以补充余额事件监控。这个结论不外推到所有案例。

防御建议:

用户:用完就撤销授权,或改用支持过期签名的授权方案(如 Permit2)。授权前确认 spender 对应的是协议预期的执行入口;如果协议通过代理或 Permit2 转发,还要核对实际 spender、目标合约和额度。

协议开发者:任意外部调用入口应限制目标和 selector/data;签名转发入口应把签名内容绑定到调用者和接收者。打补丁时审计所有调用路径;THORSwap 的历史补丁只排除了一个目标,其他目标仍需检查。

行业:可将授权存量纳入持续监控,记录 spender、授权人、区块状态和余额变化。本文展示的是历史重放;持续追踪不在本文范围。


附录 A:以太坊漏洞记录对应地址

附录 B:BSC 漏洞记录对应地址

地址入口 selector
0xc17b234fad8e40642662f1d2a6cbd1d609e7b9b50x8b20aa49
0x62ccef0b4545166f721caa9fee13c1d3767e27dc0x0c307f76
0xca11daf554079783545f5044c1e6ac8d29f4ca110x511abb0d
0xe4f42786d1bc06e4fa1018ee6ec9802ad4f4d9bc0x174dea71
0x5f842beff5203297fb07ab88e1803c7aa51f5af50x174dea71
0xe7bb57763020d3fadbd915fb14b723f1811f6ef00x174dea71
0x0000000036377a76df1ce37e98ebd5f1fff38ec30x174dea71
0x64f086118f424e310162a7c19a597b874e5335440x174dea71
0xa8bc4415855e9986d5a99a1a49f3275c3dfe3c8a0x174dea71
0xd07a07b6330035d546d52eda42a9dd8d24521aaa0x174dea71
0xdeade69dbb08114d684c6f38f6de6ce85d18dead0x174dea71
0xd95f9b7d5876523c44952f9bda788d80ec6e977c0x174dea71
0x56112d83ba59d79f09cd2ae25a24c343438955ec0x174dea71
0xc30eb7a80db96c69715e4f1a3640f4155ea480e00x174dea71
0x19bedf5c4c99d8499542fb432f6c0dba69cc790c0x174dea71
0xde62ccbb439d6288e1ea1af3525a6e9b945f2cdd0x174dea71
0x8393f7105b4ef216d2adc9fd50a25f19a9e582dd0x235b5278
0x088eadd234f72a9fb16dd8637c6c6b892e2f0d5c0x174dea71
0xbcde24396bdcd81ab71cd9b123fe3d4d3f80da9f0x174dea71
0x0f22ea10321a5ec4e4a53f8209e0f38161f401f30x174dea71
0xd5f8ee28d2bc1430759703dd0328237ec0081ef50x174dea71
0x35d78d0c76e3756046246b6b4f95617fb2ad60fd0x174dea71
0xdaad9b0d3554a0d9aa6f3f306cb40cae8f0de3c00x174dea71
0xf7aed5fb4e5fbbfbea424e68efe73a24eca239b60x174dea71
0x781fc439cb1c4b5c5830dedbb82a41b81f4d63a90xc0193458
0x300251c2bdfd0dcbcf7be9ddedea5d7226f78d210x174dea71
0xb27497fcbbe11caa273743aca180a7c354ce77400x174dea71
0x32f0652f90850e29fb21505c352091059464fc700x174dea71
0xca33eed9f68fc8709467ce87535e66dd70e391570x174dea71
0xef0ffb138393daedb225dc1b34a7fe63289113510x174dea71
0x855178dc65d139a00eb5dfb92fca925f122f4a4c0x174dea71
0x36e583bad29e8acd593ccc82f1244804c75d07f60x174dea71
0x54cd857cd59c6a65d3a0691942893809e33cdcd90x174dea71
0x42af102d2cf0bf2bbde35896a63a4146cc4605490x174dea71
0xc570707a38f087decb75472b37bc74119483d12a0x174dea71
0xd2ba56eb708c129d84c8b3f0b5a832d2cf9bb57d0x174dea71
0x7926a4752ae51220a4ba558e0fd47934a13d3f6d0x174dea71
0x34d1516a1e3aef181b58e3784e9d6cd1d155241c0x174dea71
0x9129fc71fe069fed8130c7d83ad12cc88929701e0x174dea71
0xa02652569d0131b73f0cf09d6c3020ecd29d9c6b0x174dea71
0xabbba4c023d38a0114a2f47e6ff36950ea36ecd90x174dea71
0xf511d1dde7781eb1fa548a133bf388c6db1875ed0x174dea71
0xe37a36c93be349cc83b21f8cb5b0bb6f2b4c2d700x174dea71
0xa2f7edd0f771d2212189a4396ce5a1401014da040x174dea71
0x62980549fba08b11203f76ca3f5eee9d655847b40x174dea71
0x433e3843a4f9afce21e68b4e48134c5a8f18cf310x174dea71
0xba8e44947dc0e89da0c669ad215333a712212ffd0x174dea71
0x00edb6f34cc601b83af9701cf465678c830fb1730x174dea71
0x8e976529db39f2d6638ebd51dc4cccaafbe3132c0x174dea71
0xae61a5820904464c29104ca1034f5d7ae39f22130x174dea71
0xecb74c2b0437b12d79a91ae74e75bff6ad24dcee0x174dea71
0xbca1552da92c9f3391e8a21833a1adaa21c0b3e60x174dea71
0xdead707525a0d2251cab61a85a449cb114563dee0x174dea71
0x0579611cc461b1ef0d41a255035aed555876ff110x174dea71
0x808d06dadad67c2cef33824b927884c66bded7540x174dea71
0xfbcdefd3a9e689394c39b075ef47569c043216460x174dea71
0x1e816b9f552f527f3843dbce97577a09836e68790x174dea71
0x3d4fc990fd0b65dc8b57b2202ad26fc51c01155b0x174dea71
0x844d69e900b48a0b8134b9eb2dcc84e80ab420610x174dea71
0x0248f350783f5302a8f661685e7d0cd42841c0030x174dea71
0x39fd3c3e22b8c4cac9518ecbde5f19773444d4ba0x82ad56cb
0xec95396736dffbc16554fb098253248803514bff0x174dea71
0xc6c739ea76437626ff24764312c35ab1c8be26b70x174dea71
0xe785b214cdffce493388e1586a593d2221015b400xc0193458
0x7939f4fc30ca1cbcab73a24163f5b91f12a932e80xc0193458
0xca378865d21b9d0a4453fea08776424d905851c30xc0193458
0x0fb252b44071dd9cdfab121d26f22db2fd877ae20xc0193458
0x1d503158f6443717e31f996408eebbcfb7afb2e70xc0193458
0xbc1c2b1fa723adb911e20047a3a4b76c38826b520xc0193458
0xae545c0d8d4b4645fba8c895e370529d22f8a71c0x174dea71
0x00000000d4b140d24d749f4307cc0f75ca6a9ce20x174dea71
0x4aadfc6c8901abf802f829d03f2d02a97801c40d0x174dea71
0x94afa45534bfcc739fd69a8572362e25952d8bfe0x174dea71
0xc9dfcc73d60d74e8646eb078eb8e0fcbcfc3684f0x174dea71
0xde552f23ee3f5ae7dd8709e4ceca8804880c8e0b0x174dea71
0xe07c75ef7fe495a030cde809a25a314a5585e7080x174dea71
0x65f27df8c78d22e0f95ed0d851e0f3430b844f620x174dea71
0x07163134f1d32358169f46ae98c7d5ba6242fbae0x8d80ff0a
0x167bae68bf353999f78af97b4dd392a0c0a8de7f0x174dea71
0x910e8dae837e5fc446431830a195ebc0e49ef3820x174dea71
0xfe58698b7c86587a973fbd8498f1d10cb6a9d61b0x174dea71
0x4c6f446dd88fd1be8b80d2940806002777dc12a20x1fff991f
0x2ff481925c779555110d5cbbc51566d7535ef85a0x174dea71
0xb2a941999ce1e95cd480cab75035ad783227391c0x174dea71
0xea616751d42374496d4d90847650e5d1d376e8710x174dea71
0xc449b3c3c7025c8c142eb4d4272fe5a908b5bb240x174dea71
0xb856cc87ca1d15fede5bce96f72515cfe2c514a80x174dea71
0xdf51d71412cf78fb7fe6b696a7ba510ef112e8410x174dea71
0x2f8cfe3faf46c5c0087607ee23403908027fb9a70x174dea71
0xcfa9a95f01a406ab6d861d9e7d6331494f8f8be70x174dea71
0x14b0ebda412e08ef98a86fec3d5b719680f7e1330x174dea71
0x478defd9c86977b06bf1ebc14b489d80cf8bb2980x174dea71
0xaf5dcb834a56686a2553ec63aad4dfa4c28ca2fd0x174dea71
0xd1b0874f14623eafa87ab4478dfa5a368474bd610x174dea71
0x618cf13c76c1ffc2168fc47c98453dcc6134f5c80x174dea71
0x75ef256b8f480637b1198917c14c8586dfc193200x174dea71
0x544f5720166f09b74ca2e53b1930b9de9152b60d0x82ad56cb
0x6ce7b4955d7cdd7760243af73f6f0b54a49d730f0x174dea71
0x910f89bcf88cec80864f3d27a1af9d5e36a169660x174dea71
0x55c782227b878c53a365603a68a2ee1948d8c4590x174dea71
0xe1d22eb3290868bc4dae612bf20ea46ae29465950x174dea71
0xbd0bf321fe457fa79b16cb7c391c75e2cd7d6a4c0x174dea71
0xfde68d7f31f05b0cc3029b30880f204b416ddaaf0x174dea71
0xb01eaede24ad33b820f8c1bd35ea9324230ede3e0x174dea71
0x75cbeff2d8c9207e2cf1cbdee27743e4df3130b60x174dea71
0x87369a388cb162bb28ea60d33e4f836afc0da2d70x174dea71
0x68318500a5cb010bf8826967f0d59c40489f2e850x174dea71
0x022832b3dcc169d66a6409354bfca7cd7796c68f0x174dea71
0x56cb05cc8413c3efbe4348a732f53e5fe547dedb0x174dea71
0xa76460b3262cecb28c3d1453f79e4f81e384ce4f0x174dea71
0x6703d03cbbbe5dbf060f57b9c19bdfea07ac70580x174dea71
0x4a0708f0dbbed896fbc3b5529f726a811169a6a60x174dea71
0x79d691c616bd88539861e1a42f3cc47e37d8f81d0x174dea71
0x5aa60c120da0d060e2514be5c13bf1394efe8a760x8dcc1c6b
0x59dec13c88cab608b656f34d09c758bc9ce399540x174dea71
0x42d2ae193484470feb0674e6c9f4949b796f5c370x174dea71
0xf82e8dc725ae40b800b86342b8a27d1cbd2f67b10xcff314eb
0x83692733889f596b1cefb89af039185e414721850x174dea71
0xcdb73750c3a7eedac7d0ed9aeedf37f67dbe44880x174dea71
0x2d2843a559f9be7c667baa48d303673c711a64590x174dea71
0x11e3868b7fc2e9e7b5d47c29f3271770d557e6400x174dea71
0x7752e39745bd945f6f31e8629b19fe85559facf60xbdc813c4
0x247080acbcadefc91ebd99366cf056beec3331c70xc60afc00
0x16fa6aa0eebf99caf4d8100173f01793019a10600x252dba42
0xe9d5c1d81a76bbd9cc7998ee51706f1032f95b3b0x174dea71
0x1759a83e8b8f1b1f269c85d946a24d586415cc4a0x174dea71
0x2928504dfed9fe8541a20a37e7428c42b5dbdce50x174dea71
0xd0ff75f2349c01f8833e3aa222a2aa3bff9ade660x174dea71
0xad4efaf9dbbb07d5f44eb45177583943ddc323d30x174dea71
0xcabde480e28e8e6da81a2b57ca450588408676c00x174dea71
0x32c3d80380df68743cd20d7090d72ba73f82e6a80x174dea71
0x934f6b45017a203584109f831f84671e000b068e0x174dea71
0xa955ead1b4c60ec531189f0bc1a536a5a6ce11f80x174dea71
0x6a8bb2b8d45806136e61322eb47a74b587eebf0b0x252dba42
0x6976463d90f43db2f1524e2be0443ebbec9d7b680x252dba42
0x7d73f3622bc08b0b39edd66cb612a7688c6a3c880x252dba42
0x96ee9e29cf5c09d3819d11706a088a1a0b634ded0x252dba42
0x6881c1bc56fe781e0ff4df46904b3162aebbbc050x252dba42
0xd2963c7beef1926738ce8f3fb721f51e0b1dab2d0x252dba42
0x9ac5bb5499e1f844078cde5eb40339833c9a108b0x252dba42
0x280870929507d4902bafb2f736f771ba162c149f0x252dba42
0x9a84f3e4e46c1ba79cd3ae49ed398d557cef5f9c0x252dba42
0xfc10f8205eb994cbac30e1781d2f2daac40b42450x252dba42
0xdf3a322dd042d167b823ce4221b18b8b5115c3890x252dba42
0x4dfd0e81ed4206b4ddce7fff83060f1b3e7d95940x252dba42
0x22a1fe96edcb5e94fa9dfc0f0050e94e241540590x252dba42
0x7e9bb253674c3d20ebc5f767717072f3c2a614090x252dba42
0x713ad87cbeae5a7b226be5752da58d2835aebda80x252dba42
0x9caaef24aff26350cfd8048f96dee6c0912fcaef0x174dea71
0xf3fd42c2950614414019c73d7258b23e0ef5cc6c0x174dea71
0xfc57f8ecfe0e6dfe6a1a48ae51e4029a4e9977860x174dea71
0xbb380dd4db29912c79b8acad4ed820924b573b5f0x174dea71
0xb00b9f1de05d36e511515970aff6f06a7124b00b0x174dea71
0xa982f04c665bfdb2d7e4da90514ba48978dcefd70x174dea71
0x998f89c0552a4efba365214149bba290325ed0840x174dea71
0x9733b6a0ae4064b84e842e9b24b98623697c6c440x174dea71
0x6add22b70d0032dad8064e3bb724f741deeca6020x174dea71
0x52548b0e8c01978eceb7482a232f0ed45f84af230x174dea71
0x21c42182fd12e47b176d69f7cfd7893eeb59b4a60x174dea71
0x136aca776bdeff210dd807e622b5284b5db7ba720x174dea71
0x0b02eb823499bf4ba46583339d13a3831c2235040x174dea71
0xdb9604e0f3a56a7a1f7923d65240bacd8dc349b10x174dea71
0xb3f3a880ae1564b7763cb83f48f7703904b59ba10x174dea71
0xac31ba9348ddf51d328737f9f1134e31f14a88e80x174dea71
0x494c13ee764e6b203f8eb2286a8de897c92bb9fd0x174dea71
0x59ca6450afd9fd7e9e1086487f8722346129b5d90x174dea71
0xc5ee9fbb3c2add9fbe214360e9e9e8cd361f0bca0x174dea71
0x5e45f2bb8c67d5afff81a8d5ef40eb5764bf6ea90x174dea71
0xda8951693e928a2e180cbd4b1ff716eeb925a8aa0x63fb0b96
0x30b8611e33ac6cc32b51e8fa8704b568d3173a1c0x252dba42
0x6cc5a0f528f63d53fdbe3af36a71e01da1c50a830x174dea71
0x83ea947549bfac52d19816a73e16c07b7921410c0x174dea71
0xb48ed5290af55a4da28d6894dcf6196f6c0f25bb0x174dea71
0x0fcf69030cbe2f3d038f840677e0a8e8013ccb660x174dea71
0xf9a3fd2df29f653992b2a97db033e9f8bece92ad0x174dea71
0x4d21c73c49e11e45c9aa55e57b463664f42892540x174dea71
0x64c67cb210667bb5db2df4979fa8d77d08d5d2930x174dea71
0x826c175d681f589231734722cc4c2fc2d8f9a99f0x174dea71
0x7ed7b288959e95fb82a7ab26d4922d45164ef21a0x174dea71
0x46e762cd5f9a61816227f990eee8f17f3ac691460x174dea71
0x2be79e69c7f2b0f0f431fae01e7c38e22548d93d0x174dea71
0x8752eedcbeda8db049767a4ef332029592ea03900x174dea71
0x78d952fea0adea76fea486420f273a60314822620x174dea71
0x2d8f4f1c310f9441b14f88a231539f004ff576620x174dea71
0xafcc9188c0d75ebc3a1b338a9063b57964f00a960x174dea71
0xbea58e7b1de06875c97022625526b555417d96110x174dea71
0xd6cfe89767c15c630337ee251120f4f6ad1dc9940x174dea71
0x8e0ed0b0ace49ad6430f5a722bed6ed49a89410c0x174dea71
0x1de9bb2146a610f6ec7ac26e40c5ddc427177f4e0x174dea71
0xfa74fbb400fe685cbce184b3fb509a94220cab500x174dea71
0xcbdaa246156ee19f5565c02c856dee7d4a66778c0x174dea71
0x5f3a385bb82937a5339379f2dd145e0c4b0a59070x174dea71
0x7b7172bfc97ae8efc0d9a6146c592d1705c600ea0xbce38bd7
0x4a89b61a0670dbe11f62c07e1189ade0ee30e7ac0xbca8c7b5
0x89b2fc693d5f9f0100ceb770921c8dcfddaca6120xbca8c7b5
0x6f0cde1fec1c9982553a2552e68cbf342507275b0xbca8c7b5
0x5cc74ab29dee935199c1c432c6fd45efdaaafb3a0xbca8c7b5
0x3e8ffc47493d2b1e39604aa156e08ff5c31982100x174dea71
0xf6e13b6e0b1b244e2602a9265710dae873d0a7090x174dea71
0xde1b96cbe3002b9013de038bd77be14cd2bd424d0x174dea71
0x03439a05d37599de5fade43416ea60db7820637e0x89296d8c
0x3953ff3253717e2dcb69caeb3cf4ee76d50820e60x825aeabe
0x1fc452d38e12a9f5c524a7e614703e91c054933f0x174dea71
0x0181b23886cc36eb44ad21e53503a1bf1d0da8480x174dea71
0xdcb56912c613d1a286d0c5dafe56f602469fdbfd0x174dea71
0xe7b7182321b3a01c01d8f04f5099cd52d80a90c60xbca8c7b5
0x7d2ccabe986f4394a30fb975d04cc70787284cf10xbca8c7b5
0x97f345d24d97ef2d5de93729b280922742b8b57a0xbca8c7b5
0xcc825fb53658d522260c85bcdf5173d4a428759d0xbca8c7b5
0xe50000205be4dbef65095d1740c03377cac294d70xbca8c7b5
0xe53c2286f0d4b8cda8531228e90f51edc98686080x82ad56cb
0xcd97f503c7f496c566677f4c5f9b6085a4b3714c0x82ad56cb
0xed74cf9ca1e95c0084d893a1a007bae6c22328180x82ad56cb
0xee488b39ae8ad2d268351ee5703c59148763c7300x82ad56cb
0xfe9c36ef6a3f334a2c04d5e6967477f289d3d60e0x82ad56cb
0xfd9cd6ea8a234b60cfab1b04128f14c5f0ef7dfb0x82ad56cb
0xcf888525854a9d8fcca32d7b54637c08982d079c0x82ad56cb
0xe9bed15098000e0c6aadc661d734071f8934e6620x82ad56cb
0xfa65cab6ec417567f0f78df4437cd31aeab0692d0x82ad56cb
0xdf9352b20ceed4a2a4942b87fed47d1b529173550x82ad56cb
0x7d8cd5473343babb2331da0d24ac8795944b70780x82ad56cb
0xc3124be577b473cece9e1ff42c27a40790b5afc10x82ad56cb
0xcd0d57c8ef4de02b7cce6e8ba07b6f63659557bc0x82ad56cb
0xe31a116802d63d547c935f1475f868d213a26b6e0x82ad56cb
0xc05419d4e0338d1084af044d80586686d50533ef0x82ad56cb
0xb0ebf3d13daf20cebf4a4b6a74f1a3e7221a1ee30x82ad56cb
0xa634fc36de0ae0743144295f59b747cd67edd7b70x82ad56cb
0xb964397e1ef7b6755a7959bf3b5c7311811dff280x82ad56cb
0xa85168daaa396aba905d508230bdb8d0b04b1c5e0x82ad56cb
0xabe701343bbb88fe38006df116ca981ace8c69bb0x82ad56cb
0xa65e379ce474f90cac648db667c6fd11a48d2d300x82ad56cb
0xa5ad1833f86540dc55393aa74b88a169833f3b300x82ad56cb
0xa8da5d38b4799ed0d81299fd3cc0c0bdf3e6ce850x82ad56cb
0xa9bdcab1b4441e2c842eb013170be0cb399076e30x82ad56cb
0xa1955f22acb9fd2c3449c2c40315c80d85c599110x82ad56cb
0xa5ee347c19eb8ead8478e93374ad307f61aafd660x82ad56cb
0xa475c62093e84ee362eaa07b09c266f7df2b2c8d0x82ad56cb
0xafacc81a9fcc082c8c65621385ac426412e46bd60x82ad56cb
0xa0b1f3187d0d6bccf5a15707531acdb65feee0580x82ad56cb
0x9cd0e5e70b68dc2bb183ead3e33688bbfd8da0430x82ad56cb
0x9ff427a9c97c7baf75413de1b67b860209e873610x82ad56cb
0x96f62a7ac72f52d14ac2940467edd64385bdba190x82ad56cb
0x83203a507bc70f2856f6794c303e8cee5d915e1e0x82ad56cb
0x79b1d0114a429d2902b5de80b785d2057716e70b0x82ad56cb
0x63275a1e12f1be52d23118ffdf1cfccaddbaef630x82ad56cb
0x8070cabee288dfda1b97971365694692d943a8c10x82ad56cb
0x8069047489bb391a56e0d3947b77e4e564ddf1b20x82ad56cb
0x93caa2f0079b9a1345165b7f80458dbfeb66d5d50x82ad56cb
0x816b0f8e26f4f2af6d22872574ffd2ee8a848d2b0x82ad56cb
0x9149cef5852cc340912076ee881c92682af1d7ce0x82ad56cb
0x8d1448c4d1db2344a464d5a880715c3e6132b9220x82ad56cb
0x95496aab01e24e0cf023ef66848c28123e01a7a30x82ad56cb
0x878c1fb5379f503e0d207f91464ad381f6b218cd0x82ad56cb
0x75f21969e8be8907aa6db68d5f7398df67f7a49a0x82ad56cb
0x792e93c606b05cf37b64b3bfaf20d2cac554eee80x82ad56cb
0x74adcfc5d9094237e9e3a7114d60efa00c80d36d0x82ad56cb
0x6549c73a1e4bae75b375a7c460e0216b5b0909cb0x82ad56cb
0x5347fae4c588b8696c2f3eb9c3f1f9e10dc29b790x82ad56cb
0x6ad7d83f926ef0b51d78493cce6ad34517e2bfa30x82ad56cb
0x58f223c0745e59496a28cc89f3cc3e2897c590cf0x82ad56cb
0x67f3db9b15e387f80ae566da260eefa24a43e6fc0x82ad56cb
0x52fdd9f797ebc22ecbb122e15ffe3ff59ec362810x82ad56cb
0x5a3aef3ccb85cf1a2d2db5400c1ca331462c332c0x82ad56cb
0x57f8399433623dc07e53f71a6f6e609fe28b3a780x82ad56cb
0x655e0f4ba4864a4b136acee8f827722d7880ec910x82ad56cb
0x744c86082d452eae1d949300ddbd44a358a524140x82ad56cb
0x51c049d276d668ceadc0d9de8381283b2099d27a0x82ad56cb
0x4ced0083f4246faba093f997410a0df2de08e5aa0x82ad56cb
0x5007456ab4983fafcd755311efc66d62c1f461e80x82ad56cb
0x2143f61ae2b2599a84e666e4f91059dbfc0ccfdf0x82ad56cb
0x258939e8ec3a12fb513a28161363edeee1370b850x82ad56cb
0x460e4c6af591b08715375fa58a16c48a06ceb19c0x82ad56cb
0x2107ab1f9e802ff4cbbf170ae65325a73fdacc4a0x82ad56cb
0x21b799ec32af08ecf4bb78ca32273a324a1c05530x82ad56cb
0x4126dbef8723457266aa16c070b018a36357a0140x82ad56cb
0x352afb8b6c94d64c39916d45c22fee2b6ab25f750x82ad56cb
0x3b6920513b2554b82befe0ff413283dbf5d4d2bb0x82ad56cb
0x2ed502cff23ea8d9c41fe5d1e0514a11a5a488b00x82ad56cb
0x3110fb67d0263e0dca2637a90e5efd637ecf9bdf0x82ad56cb
0x4035fa4c6f949033e3764a98a2de00aac7de6db50x82ad56cb
0x1e4f40e7f81b0dd1e218feaf0f00f6242c5ffd970x82ad56cb
0x28a09c75f6423a882c9cd64a6c50c09c9f710be90x82ad56cb
0x043d01a92bf82a5b64e9ea5272210c6ed1a6669d0x82ad56cb
0x185a564eafcc9803e264c2d60b3ac332fe7626150x82ad56cb
0x001100bd3b13f6fc54c14b84b4814e04e063ff160x82ad56cb
0x153eb5123b5fde183d931a3d8df2e19f495e7c4a0x82ad56cb
0x0f40f39373876d2a2818f08aa02e47ab4e18cec80x82ad56cb
0x163db040ff0c50885d7b6f25db1a7e1d9781eeda0x82ad56cb
0x19061dd9dfcb09bb38e1833940c122ea1296747d0x82ad56cb
0x585cf81e0c34b08fb4234afd97efab826b0038490x174dea71
0xae2e7ceaab01e7c517ee13ecc791a649cb48716a0x174dea71
0xbe69f122c9ca56c74c66653aafc773bce91d3e730x174dea71
0xe8ba03d0c2f12f1c024f917b831412d7f60958330x4a854638
0x147e202dcfbe5c59602f4db619b0fcef4c543c8a0xbca8c7b5
0xccbc174523ff6c484f0fede5c63c7fdb40db06050xbca8c7b5
0xa6c483dbc5a12b2f67ea91c5daa9afabfb4924740xbca8c7b5
0x59c3e48e0bd3ce9f36996e4d326da07d37dc87c20xbca8c7b5
0xf75584ef6673ad213a685a1b58cc0330b8ea22cf0xb94c3609
0x40624181783dc7246482829bdc3b8196e44aea8c0x174dea71
0x8d71dbe5a422227608cc28a1ec805231c204ca010x174dea71
0x1ea13dc0598aed359ea9625040415d693ed1f5440x174dea71
0x14986f48256e334fa47e5b20b3ba9cfe594cb9d10x174dea71
0xf79786eee6ed478eb55a6c68b65fddd444130ca80x174dea71
0xa38d8ba127373f274e62bff7febb3955c8cabc9f0x174dea71
0xe027ef7842d11d652a58521e36cb15872df0fd4d0x174dea71
0x4c3089c43d19bc8c01252815bbb9f1c441444ba30x174dea71
0xaad6947e6c3d854e30124d9388233272f0b8264e0x174dea71
0x9fcde04a3ad8ad18aa88e6e384f9671ab90e05fb0x174dea71
0x4503725641f26d2b36554ddf5060358065757d4a0xc0193458
0xd8b1ae6036b31e3f63f05a45b5183a63672e0c110x82ad56cb
0xddab822ac42b55e294ff3f1bb39388db4f076fc00x82ad56cb
0x931c4a97919bcefd4b20e53906192b1d6d2e3b660x82ad56cb
0x9fd5f597c98900ede1598d4a2049a712817bfa2d0x82ad56cb
0x810eac823ab523ba265e4619b21d9c5bd5b0060f0x82ad56cb
0x744eb2281d1a49686feecbb09d90b636c149620b0x82ad56cb
0x3b8f1aa149a13956aed3551d2f3499fe5c3a64290x82ad56cb
0x454fd70f5b502febb70880ea7a944be31c12f2580x82ad56cb
0x5773621d21ae113f357445425044e782392649320x82ad56cb
0x392e49d9c05e812dfa3860a7f35d0a9636d410130x82ad56cb
0x384d162fe06b4b31d60fd63a14d7032cc7e6f2880x82ad56cb
0x24d6aab4be40b065f9f63c6a9076cbf016b895710x82ad56cb
0x346b7462fb5e4635af21a636454b14951882e0c90x82ad56cb
0x16532fe8fc2eacdc69c6148958ca917e80268e160x82ad56cb
0xfea3196e51362efa9bd1594349a4df16479050c60x82ad56cb
0xffd293ad27d5066fd9ae88c8d2d6a891916cfd6f0x82ad56cb
0x374630eca84819ce95d72094436e8224246575440x82ad56cb
0xc2c60eb6a0c0207392148b2c0393bac2096571570xa7d981ef
0x67a49807eb4b1eb2e733b8e4d0a041448f5cc55c0xc0193458
0x982c46c31a90be002cca65eee7b4fb24faee16dc0x82ad56cb
0xeb85c4e28af444ce60df31b6c670034c7f167c0a0x11804535
0x682df425c1cc4b1fa56707e085c358f9284566c30x7f6db9c1
0xd8e415479ad34c11308767300c9f991c935bb6bb0x82ad56cb
0xca5fe56766758bce48d2d8df724893210d74cb260x82ad56cb