From 9065b31bcdd9ce3a36a132bc3db08678f51f3053 Mon Sep 17 00:00:00 2001 From: wangjj9219 <183318287@qq.com> Date: Mon, 9 Sep 2024 21:04:23 +0800 Subject: [PATCH] impl DEXV2 to support bootstrap --- contracts/dex/DEX.sol | 133 +++------ contracts/dex/DEXV2.sol | 121 ++++++++ contracts/dex/IBootstrap.sol | 69 +++++ contracts/docs/dex/DEXV2.md | 454 +++++++++++++++++++++++++++++++ contracts/docs/dex/IBootstrap.md | 203 ++++++++++++++ contracts/utils/AcalaTokens.d.ts | 1 + contracts/utils/AcalaTokens.js | 2 + contracts/utils/AcalaTokens.sol | 1 + contracts/utils/Predeploy.d.ts | 1 + contracts/utils/Predeploy.js | 2 + contracts/utils/Predeploy.sol | 1 + generate/generate.js | 5 + resources/acala_tokens.json | 4 + resources/bytecodes.json | 14 +- resources/deployedBytecodes.json | 14 +- 15 files changed, 925 insertions(+), 100 deletions(-) create mode 100644 contracts/dex/DEXV2.sol create mode 100644 contracts/dex/IBootstrap.sol create mode 100644 contracts/docs/dex/DEXV2.md create mode 100644 contracts/docs/dex/IBootstrap.md diff --git a/contracts/dex/DEX.sol b/contracts/dex/DEX.sol index 8ddb386..5f347e6 100644 --- a/contracts/dex/DEX.sol +++ b/contracts/dex/DEX.sol @@ -10,116 +10,75 @@ import {IDEX} from "./IDEX.sol"; /// @dev This contracts will interact with dex pallet contract DEX is IDEX { /// @dev The DEX precompile address. - address private constant PRECOMPILE = - address(0x0000000000000000000000000000000000000405); + address internal constant PRECOMPILE = address(0x0000000000000000000000000000000000000405); /// @inheritdoc IDEX - function getLiquidityPool( - address tokenA, - address tokenB - ) public view override returns (uint256, uint256) { + function getLiquidityPool(address tokenA, address tokenB) public view override returns (uint256, uint256) { require(tokenA != address(0), "DEX: tokenA is zero address"); require(tokenB != address(0), "DEX: tokenB is zero address"); - (bool success, bytes memory returnData) = PRECOMPILE.staticcall( - abi.encodeWithSignature( - "getLiquidityPool(address,address)", - tokenA, - tokenB - ) - ); + (bool success, bytes memory returnData) = + PRECOMPILE.staticcall(abi.encodeWithSignature("getLiquidityPool(address,address)", tokenA, tokenB)); assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize()) - } + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } return abi.decode(returnData, (uint256, uint256)); } /// @inheritdoc IDEX - function getLiquidityTokenAddress( - address tokenA, - address tokenB - ) public view override returns (address) { + function getLiquidityTokenAddress(address tokenA, address tokenB) public view override returns (address) { require(tokenA != address(0), "DEX: tokenA is zero address"); require(tokenB != address(0), "DEX: tokenB is zero address"); - (bool success, bytes memory returnData) = PRECOMPILE.staticcall( - abi.encodeWithSignature( - "getLiquidityTokenAddress(address,address)", - tokenA, - tokenB - ) - ); + (bool success, bytes memory returnData) = + PRECOMPILE.staticcall(abi.encodeWithSignature("getLiquidityTokenAddress(address,address)", tokenA, tokenB)); assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize()) - } + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } return abi.decode(returnData, (address)); } /// @inheritdoc IDEX - function getSwapTargetAmount( - address[] memory path, - uint256 supplyAmount - ) public view override returns (uint256) { - for (uint i = 0; i < path.length; i++) { + function getSwapTargetAmount(address[] memory path, uint256 supplyAmount) public view override returns (uint256) { + for (uint256 i = 0; i < path.length; i++) { require(path[i] != address(0), "DEX: token is zero address"); } require(supplyAmount != 0, "DEX: supplyAmount is zero"); - (bool success, bytes memory returnData) = PRECOMPILE.staticcall( - abi.encodeWithSignature( - "getSwapTargetAmount(address[],uint256)", - path, - supplyAmount - ) - ); + (bool success, bytes memory returnData) = + PRECOMPILE.staticcall(abi.encodeWithSignature("getSwapTargetAmount(address[],uint256)", path, supplyAmount)); assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize()) - } + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } return abi.decode(returnData, (uint256)); } /// @inheritdoc IDEX - function getSwapSupplyAmount( - address[] memory path, - uint256 targetAmount - ) public view override returns (uint256) { - for (uint i = 0; i < path.length; i++) { + function getSwapSupplyAmount(address[] memory path, uint256 targetAmount) public view override returns (uint256) { + for (uint256 i = 0; i < path.length; i++) { require(path[i] != address(0), "DEX: token is zero address"); } require(targetAmount != 0, "DEX: targetAmount is zero"); - (bool success, bytes memory returnData) = PRECOMPILE.staticcall( - abi.encodeWithSignature( - "getSwapSupplyAmount(address[],uint256)", - path, - targetAmount - ) - ); + (bool success, bytes memory returnData) = + PRECOMPILE.staticcall(abi.encodeWithSignature("getSwapSupplyAmount(address[],uint256)", path, targetAmount)); assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize()) - } + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } return abi.decode(returnData, (uint256)); } /// @inheritdoc IDEX - function swapWithExactSupply( - address[] memory path, - uint256 supplyAmount, - uint256 minTargetAmount - ) public override returns (bool) { - for (uint i = 0; i < path.length; i++) { + function swapWithExactSupply(address[] memory path, uint256 supplyAmount, uint256 minTargetAmount) + public + override + returns (bool) + { + for (uint256 i = 0; i < path.length; i++) { require(path[i] != address(0), "DEX: token is zero address"); } require(supplyAmount != 0, "DEX: supplyAmount is zero"); @@ -134,27 +93,20 @@ contract DEX is IDEX { ) ); assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize()) - } + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } - emit Swaped( - msg.sender, - path, - supplyAmount, - abi.decode(returnData, (uint256)) - ); + emit Swaped(msg.sender, path, supplyAmount, abi.decode(returnData, (uint256))); return true; } /// @inheritdoc IDEX - function swapWithExactTarget( - address[] memory path, - uint256 targetAmount, - uint256 maxSupplyAmount - ) public override returns (bool) { - for (uint i = 0; i < path.length; i++) { + function swapWithExactTarget(address[] memory path, uint256 targetAmount, uint256 maxSupplyAmount) + public + override + returns (bool) + { + for (uint256 i = 0; i < path.length; i++) { require(path[i] != address(0), "DEX: token is zero address"); } require(targetAmount != 0, "DEX: targetAmount is zero"); @@ -169,17 +121,10 @@ contract DEX is IDEX { ) ); assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize()) - } + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } - emit Swaped( - msg.sender, - path, - abi.decode(returnData, (uint256)), - targetAmount - ); + emit Swaped(msg.sender, path, abi.decode(returnData, (uint256)), targetAmount); return true; } @@ -208,9 +153,7 @@ contract DEX is IDEX { ) ); assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize()) - } + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } emit AddedLiquidity(msg.sender, tokenA, tokenB, maxAmountA, maxAmountB); @@ -241,9 +184,7 @@ contract DEX is IDEX { ) ); assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize()) - } + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } emit RemovedLiquidity(msg.sender, tokenA, tokenB, removeShare); diff --git a/contracts/dex/DEXV2.sol b/contracts/dex/DEXV2.sol new file mode 100644 index 0000000..ed926a6 --- /dev/null +++ b/contracts/dex/DEXV2.sol @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.0; + +import {IDEX} from "./IDEX.sol"; +import {DEX} from "./DEX.sol"; +import {IBootstrap} from "./IBootstrap.sol"; + +/// @title DEX Predeploy Contract, V2, support bootstrap +/// @author Acala Developers +/// @notice You can use this predeploy contract to call dex pallet +/// @dev This contracts will interact with dex pallet +contract DEXV2 is DEX, IBootstrap { + /// @inheritdoc IBootstrap + function getProvisionPool(address tokenA, address tokenB) public view override returns (uint256, uint256) { + require(tokenA != address(0), "DEX: tokenA is zero address"); + require(tokenB != address(0), "DEX: tokenB is zero address"); + + (bool success, bytes memory returnData) = + PRECOMPILE.staticcall(abi.encodeWithSignature("getProvisionPool(address,address)", tokenA, tokenB)); + assembly { + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } + } + + return abi.decode(returnData, (uint256, uint256)); + } + + /// @inheritdoc IBootstrap + function getProvisionPoolOf(address who, address tokenA, address tokenB) + public + view + override + returns (uint256, uint256) + { + require(tokenA != address(0), "DEX: tokenA is zero address"); + require(tokenB != address(0), "DEX: tokenB is zero address"); + + (bool success, bytes memory returnData) = PRECOMPILE.staticcall( + abi.encodeWithSignature("getProvisionPoolOf(address, address,address)", who, tokenA, tokenB) + ); + assembly { + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } + } + + return abi.decode(returnData, (uint256, uint256)); + } + + /// @inheritdoc IBootstrap + function getInitialShareExchangeRate(address tokenA, address tokenB) + public + view + override + returns (uint256, uint256) + { + require(tokenA != address(0), "DEX: tokenA is zero address"); + require(tokenB != address(0), "DEX: tokenB is zero address"); + + (bool success, bytes memory returnData) = PRECOMPILE.staticcall( + abi.encodeWithSignature("getInitialShareExchangeRate(address,address)", tokenA, tokenB) + ); + assembly { + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } + } + + return abi.decode(returnData, (uint256, uint256)); + } + + /// @inheritdoc IBootstrap + function addProvision(address tokenA, address tokenB, uint256 amountA, uint256 amountB) + public + override + returns (bool) + { + require(tokenA != address(0), "DEX: tokenA is zero address"); + require(tokenB != address(0), "DEX: tokenB is zero address"); + require(amountA != 0 || amountB != 0, "DEX: invalid contribution amount"); + + (bool success, bytes memory returnData) = PRECOMPILE.call( + abi.encodeWithSignature( + "addProvision(address,address,address,uint256,uint256)", msg.sender, tokenA, tokenB, amountA, amountB + ) + ); + assembly { + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } + } + + emit AddProvision(msg.sender, tokenA, tokenB, amountA, amountB); + return true; + } + + /// @inheritdoc IBootstrap + function claimDexShare(address who, address tokenA, address tokenB) public override returns (bool) { + require(who != address(0), "DEX: who is zero address"); + require(tokenA != address(0), "DEX: tokenA is zero address"); + require(tokenB != address(0), "DEX: tokenB is zero address"); + + (bool success, bytes memory returnData) = + PRECOMPILE.call(abi.encodeWithSignature("claimDexShare(address,address,address)", who, tokenA, tokenB)); + assembly { + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } + } + + emit ClaimShare(who, tokenA, tokenB, abi.decode(returnData, (uint256))); + return true; + } + + /// @inheritdoc IBootstrap + function refundProvision(address who, address tokenA, address tokenB) public override returns (bool) { + require(who != address(0), "DEX: who is zero address"); + require(tokenA != address(0), "DEX: tokenA is zero address"); + require(tokenB != address(0), "DEX: tokenB is zero address"); + + (bool success, bytes memory returnData) = + PRECOMPILE.call(abi.encodeWithSignature("refundProvision(address,address,address)", who, tokenA, tokenB)); + assembly { + if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } + } + + return true; + } +} diff --git a/contracts/dex/IBootstrap.sol b/contracts/dex/IBootstrap.sol new file mode 100644 index 0000000..5bd415c --- /dev/null +++ b/contracts/dex/IBootstrap.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.0; + +/// @title IBootstrap Predeploy Contract Interface +/// @author Acala Developers +/// @notice You can use this predeploy contract to call the bootstrap functions of dex pallet +/// @dev The interface through which solidity contracts will interact with dex pallet +interface IBootstrap { + /// @notice AddProvision event. + /// @param sender The sender of the transaction. + /// @param tokenA The ERC20 address of the tokenA. + /// @param tokenB The ERC20 address of the tokenB. + /// @param amountA The amount of tokenA contribute to provision pool. + /// @param amountB The amount of tokenB contribute to provision pool. + event AddProvision( + address indexed sender, address indexed tokenA, address indexed tokenB, uint256 amountA, uint256 amountB + ); + + /// @notice Claim share event. + /// @param who The owner of the claimed share. + /// @param tokenA The ERC20 address of the tokenA. + /// @param tokenB The ERC20 address of the tokenB. + /// @param amount The amount of claimed share token. + event ClaimShare(address indexed who, address indexed tokenA, address indexed tokenB, uint256 amount); + + /// @notice Get total provision pool of the tokenA and tokenB. + /// @param tokenA The ERC20 address of the tokenA. + /// @param tokenB The ERC20 address of the tokenB. + /// @return Returns (provision_a, provision_b). + function getProvisionPool(address tokenA, address tokenB) external view returns (uint256, uint256); + + /// @notice Get who's provision of the tokenA and tokenB. + /// @param who The contributor. + /// @param tokenA The ERC20 address of the tokenA. + /// @param tokenB The ERC20 address of the tokenB. + /// @return Returns (provision_a, provision_b). + function getProvisionPoolOf(address who, address tokenA, address tokenB) external view returns (uint256, uint256); + + /// @notice Get the initial share exchange rate of the ended provision pool of tokenA and tokenB. 100% = 1**18 + /// @param tokenA The ERC20 address of the tokenA. + /// @param tokenB The ERC20 address of the tokenB. + /// @return Returns (rateA, rateB). + function getInitialShareExchangeRate(address tokenA, address tokenB) external view returns (uint256, uint256); + + /// @notice Add provision to the bootstraping trading pair. + /// @dev It'll emit an {AddProvision} event. + /// @param tokenA The ERC20 address of the tokenA. + /// @param tokenB The ERC20 address of the tokenB. + /// @param amountA The amount of tokenA contribute to liquidity pool. + /// @param amountB The amount of tokenB contribute to liquidity pool. + /// @return Returns a boolean value indicating whether the operation succeeded. + function addProvision(address tokenA, address tokenB, uint256 amountA, uint256 amountB) external returns (bool); + + /// @notice Claim share token of the ended bootstrap trading pair for `who`. + /// @dev It'll emit an {ClaimShare} event. + /// @param who The contributor. + /// @param tokenA The ERC20 address of the tokenA. + /// @param tokenB The ERC20 address of the tokenB. + /// @return Returns a boolean value indicating whether the operation succeeded. + function claimDexShare(address who, address tokenA, address tokenB) external returns (bool); + + /// @notice Refund the contribution token of the aborted bootstrap trading pair for `who`. + /// @param who The contributor. + /// @param tokenA The ERC20 address of the tokenA. + /// @param tokenB The ERC20 address of the tokenB. + /// @return Returns a boolean value indicating whether the operation succeeded. + function refundProvision(address who, address tokenA, address tokenB) external returns (bool); +} diff --git a/contracts/docs/dex/DEXV2.md b/contracts/docs/dex/DEXV2.md new file mode 100644 index 0000000..a590266 --- /dev/null +++ b/contracts/docs/dex/DEXV2.md @@ -0,0 +1,454 @@ +# DEXV2 + +*Acala Developers* + +> DEX Predeploy Contract, V2, support bootstrap + +You can use this predeploy contract to call dex pallet + +*This contracts will interact with dex pallet* + +## Methods + +### addLiquidity + +```solidity +function addLiquidity(address tokenA, address tokenB, uint256 maxAmountA, uint256 maxAmountB, uint256 minShareIncrement) external nonpayable returns (bool) +``` + +Add liquidity to the trading pair. + +*It'll emit an {AddedLiquidity} event.* + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the currency_id_a. | +| tokenB | address | The ERC20 address of the currency_id_b. | +| maxAmountA | uint256 | The maximum amount of currency_id_a is allowed to inject to liquidity pool. | +| maxAmountB | uint256 | The maximum amount of currency_id_b is allowed to inject to liquidity pool. | +| minShareIncrement | uint256 | The minimum acceptable share amount. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + +### addProvision + +```solidity +function addProvision(address tokenA, address tokenB, uint256 amountA, uint256 amountB) external nonpayable returns (bool) +``` + +Add provision to the bootstraping trading pair. + +*It'll emit an {AddProvision} event.* + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | +| amountA | uint256 | The amount of tokenA contribute to liquidity pool. | +| amountB | uint256 | The amount of tokenB contribute to liquidity pool. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + +### claimDexShare + +```solidity +function claimDexShare(address who, address tokenA, address tokenB) external nonpayable returns (bool) +``` + +Claim share token of the ended bootstrap trading pair for `who`. + +*It'll emit an {ClaimShare} event.* + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| who | address | The contributor. | +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + +### getInitialShareExchangeRate + +```solidity +function getInitialShareExchangeRate(address tokenA, address tokenB) external view returns (uint256, uint256) +``` + +Get the initial share exchange rate of the ended provision pool of tokenA and tokenB. 100% = 1**18 + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (rateA, rateB). | +| _1 | uint256 | undefined | + +### getLiquidityPool + +```solidity +function getLiquidityPool(address tokenA, address tokenB) external view returns (uint256, uint256) +``` + +Get liquidity pool of the currency_id_a and currency_id_b. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the currency_id_a. | +| tokenB | address | The ERC20 address of the currency_id_b. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (liquidity_a, liquidity_b). | +| _1 | uint256 | undefined | + +### getLiquidityTokenAddress + +```solidity +function getLiquidityTokenAddress(address tokenA, address tokenB) external view returns (address) +``` + +Get liquidity token address. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the currency_id_a. | +| tokenB | address | The ERC20 address of the currency_id_b. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | address | Returns (liquidity_token_address). Return address(0x0) if the liquidity token address is not mapped. | + +### getProvisionPool + +```solidity +function getProvisionPool(address tokenA, address tokenB) external view returns (uint256, uint256) +``` + +Get total provision pool of the tokenA and tokenB. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (provision_a, provision_b). | +| _1 | uint256 | undefined | + +### getProvisionPoolOf + +```solidity +function getProvisionPoolOf(address who, address tokenA, address tokenB) external view returns (uint256, uint256) +``` + +Get who's provision of the tokenA and tokenB. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| who | address | The contributor. | +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (provision_a, provision_b). | +| _1 | uint256 | undefined | + +### getSwapSupplyAmount + +```solidity +function getSwapSupplyAmount(address[] path, uint256 targetAmount) external view returns (uint256) +``` + +Get swap supply amount. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| path | address[] | The trading path of the transaction. | +| targetAmount | uint256 | The exact target amount. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (supply_amount). Returns 0 if getting the supply amount fails. | + +### getSwapTargetAmount + +```solidity +function getSwapTargetAmount(address[] path, uint256 supplyAmount) external view returns (uint256) +``` + +Get swap target amount. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| path | address[] | The trading path of the transaction. | +| supplyAmount | uint256 | The exact supply amount. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (target_amount). Returns 0 if getting the target amount fails. | + +### refundProvision + +```solidity +function refundProvision(address who, address tokenA, address tokenB) external nonpayable returns (bool) +``` + +Refund the contribution token of the aborted bootstrap trading pair for `who`. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| who | address | The contributor. | +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + +### removeLiquidity + +```solidity +function removeLiquidity(address tokenA, address tokenB, uint256 removeShare, uint256 minWithdrawnA, uint256 minWithdrawnB) external nonpayable returns (bool) +``` + +Remove liquidity from the trading pair. + +*It'll emit an {RemovedLiquidity} event.* + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the currency_id_a. | +| tokenB | address | The ERC20 address of the currency_id_b. | +| removeShare | uint256 | The liquidity amount to remove. | +| minWithdrawnA | uint256 | The minimum acceptable withrawn for currency_id_a. | +| minWithdrawnB | uint256 | The minimum acceptable withrawn for currency_id_b. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + +### swapWithExactSupply + +```solidity +function swapWithExactSupply(address[] path, uint256 supplyAmount, uint256 minTargetAmount) external nonpayable returns (bool) +``` + +Swap with exact supply. + +*It'll emit an {Swaped} event.* + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| path | address[] | The trading path of the swap transaction. | +| supplyAmount | uint256 | The exact gsupply amount. | +| minTargetAmount | uint256 | The acceptable minimum target amount. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + +### swapWithExactTarget + +```solidity +function swapWithExactTarget(address[] path, uint256 targetAmount, uint256 maxSupplyAmount) external nonpayable returns (bool) +``` + +Swap with exact target. + +*It'll emit an {Swaped} event.* + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| path | address[] | The trading path of the swap transaction. | +| targetAmount | uint256 | The exact target amount. | +| maxSupplyAmount | uint256 | The acceptable maximum supply amount. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + + + +## Events + +### AddProvision + +```solidity +event AddProvision(address indexed sender, address indexed tokenA, address indexed tokenB, uint256 amountA, uint256 amountB) +``` + +AddProvision event. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| sender `indexed` | address | The sender of the transaction. | +| tokenA `indexed` | address | The ERC20 address of the tokenA. | +| tokenB `indexed` | address | The ERC20 address of the tokenB. | +| amountA | uint256 | The amount of tokenA contribute to provision pool. | +| amountB | uint256 | The amount of tokenB contribute to provision pool. | + +### AddedLiquidity + +```solidity +event AddedLiquidity(address indexed sender, address indexed tokenA, address indexed tokenB, uint256 maxAmountA, uint256 maxAmountB) +``` + +Added liquidity event. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| sender `indexed` | address | The sender of the transaction. | +| tokenA `indexed` | address | The ERC20 address of the currency_id_a. | +| tokenB `indexed` | address | The ERC20 address of the currency_id_b. | +| maxAmountA | uint256 | The maximum amount of currency_id_a is allowed to inject to liquidity pool. | +| maxAmountB | uint256 | The maximum amount of currency_id_b is allowed to inject to liquidity pool. | + +### ClaimShare + +```solidity +event ClaimShare(address indexed who, address indexed tokenA, address indexed tokenB, uint256 amount) +``` + +Claim share event. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| who `indexed` | address | The owner of the claimed share. | +| tokenA `indexed` | address | The ERC20 address of the tokenA. | +| tokenB `indexed` | address | The ERC20 address of the tokenB. | +| amount | uint256 | The amount of claimed share token. | + +### RemovedLiquidity + +```solidity +event RemovedLiquidity(address indexed sender, address indexed tokenA, address indexed tokenB, uint256 removeShare) +``` + +Removed liquidity event. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| sender `indexed` | address | The sender of the transaction. | +| tokenA `indexed` | address | The ERC20 address of the currency_id_a. | +| tokenB `indexed` | address | The ERC20 address of the currency_id_b. | +| removeShare | uint256 | The liquidity amount has been removed. | + +### Swaped + +```solidity +event Swaped(address indexed sender, address[] path, uint256 supplyAmount, uint256 targetAmount) +``` + +Swaped event with DEX. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| sender `indexed` | address | The sender of the transaction. | +| path | address[] | The trading path of the swap transaction. | +| supplyAmount | uint256 | The exact supply amount. | +| targetAmount | uint256 | The exact target amount. | + + + diff --git a/contracts/docs/dex/IBootstrap.md b/contracts/docs/dex/IBootstrap.md new file mode 100644 index 0000000..1682263 --- /dev/null +++ b/contracts/docs/dex/IBootstrap.md @@ -0,0 +1,203 @@ +# IBootstrap + +*Acala Developers* + +> IBootstrap Predeploy Contract Interface + +You can use this predeploy contract to call the bootstrap functions of dex pallet + +*The interface through which solidity contracts will interact with dex pallet* + +## Methods + +### addProvision + +```solidity +function addProvision(address tokenA, address tokenB, uint256 amountA, uint256 amountB) external nonpayable returns (bool) +``` + +Add provision to the bootstraping trading pair. + +*It'll emit an {AddProvision} event.* + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | +| amountA | uint256 | The amount of tokenA contribute to liquidity pool. | +| amountB | uint256 | The amount of tokenB contribute to liquidity pool. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + +### claimDexShare + +```solidity +function claimDexShare(address who, address tokenA, address tokenB) external nonpayable returns (bool) +``` + +Claim share token of the ended bootstrap trading pair for `who`. + +*It'll emit an {ClaimShare} event.* + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| who | address | The contributor. | +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + +### getInitialShareExchangeRate + +```solidity +function getInitialShareExchangeRate(address tokenA, address tokenB) external view returns (uint256, uint256) +``` + +Get the initial share exchange rate of the ended provision pool of tokenA and tokenB. 100% = 1**18 + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (rateA, rateB). | +| _1 | uint256 | undefined | + +### getProvisionPool + +```solidity +function getProvisionPool(address tokenA, address tokenB) external view returns (uint256, uint256) +``` + +Get total provision pool of the tokenA and tokenB. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (provision_a, provision_b). | +| _1 | uint256 | undefined | + +### getProvisionPoolOf + +```solidity +function getProvisionPoolOf(address who, address tokenA, address tokenB) external view returns (uint256, uint256) +``` + +Get who's provision of the tokenA and tokenB. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| who | address | The contributor. | +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | uint256 | Returns (provision_a, provision_b). | +| _1 | uint256 | undefined | + +### refundProvision + +```solidity +function refundProvision(address who, address tokenA, address tokenB) external nonpayable returns (bool) +``` + +Refund the contribution token of the aborted bootstrap trading pair for `who`. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| who | address | The contributor. | +| tokenA | address | The ERC20 address of the tokenA. | +| tokenB | address | The ERC20 address of the tokenB. | + +#### Returns + +| Name | Type | Description | +|---|---|---| +| _0 | bool | Returns a boolean value indicating whether the operation succeeded. | + + + +## Events + +### AddProvision + +```solidity +event AddProvision(address indexed sender, address indexed tokenA, address indexed tokenB, uint256 amountA, uint256 amountB) +``` + +AddProvision event. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| sender `indexed` | address | The sender of the transaction. | +| tokenA `indexed` | address | The ERC20 address of the tokenA. | +| tokenB `indexed` | address | The ERC20 address of the tokenB. | +| amountA | uint256 | The amount of tokenA contribute to provision pool. | +| amountB | uint256 | The amount of tokenB contribute to provision pool. | + +### ClaimShare + +```solidity +event ClaimShare(address indexed who, address indexed tokenA, address indexed tokenB, uint256 amount) +``` + +Claim share event. + + + +#### Parameters + +| Name | Type | Description | +|---|---|---| +| who `indexed` | address | The owner of the claimed share. | +| tokenA `indexed` | address | The ERC20 address of the tokenA. | +| tokenB `indexed` | address | The ERC20 address of the tokenB. | +| amount | uint256 | The amount of claimed share token. | + + + diff --git a/contracts/utils/AcalaTokens.d.ts b/contracts/utils/AcalaTokens.d.ts index 163f801..e076649 100644 --- a/contracts/utils/AcalaTokens.d.ts +++ b/contracts/utils/AcalaTokens.d.ts @@ -7,6 +7,7 @@ export const LP_ACA_AUSD: "0x0000000000000000000200000000000000000001"; export const LP_LDOT_AUSD: "0x0000000000000000000200000000010000000003"; export const LP_LCDOT_AUSD: "0x000000000000000000020000000001020000000D"; export const LP_LCDOT_DOT: "0x000000000000000000020000000002020000000d"; +export const LP_LDOT_JITOSOL: "0x00000000000000000002000000000301A7fB0045"; export const SA_DOT: "0x0000000000000000000300000000000000000000"; export const SA_TUSD: "0x0000000000000000000300000000000000000001"; export const LCDOT_13: "0x000000000000000000040000000000000000000d"; diff --git a/contracts/utils/AcalaTokens.js b/contracts/utils/AcalaTokens.js index 4288e39..9a84422 100644 --- a/contracts/utils/AcalaTokens.js +++ b/contracts/utils/AcalaTokens.js @@ -7,6 +7,7 @@ const LP_ACA_AUSD = '0x0000000000000000000200000000000000000001'; const LP_LDOT_AUSD = '0x0000000000000000000200000000010000000003'; const LP_LCDOT_AUSD = '0x000000000000000000020000000001020000000D'; const LP_LCDOT_DOT = '0x000000000000000000020000000002020000000d'; +const LP_LDOT_JITOSOL = '0x00000000000000000002000000000301A7fB0045'; const SA_DOT = '0x0000000000000000000300000000000000000000'; const SA_TUSD = '0x0000000000000000000300000000000000000001'; const LCDOT_13 = '0x000000000000000000040000000000000000000d'; @@ -36,6 +37,7 @@ module.exports = { LP_LDOT_AUSD, LP_LCDOT_AUSD, LP_LCDOT_DOT, + LP_LDOT_JITOSOL, SA_DOT, SA_TUSD, LCDOT_13, diff --git a/contracts/utils/AcalaTokens.sol b/contracts/utils/AcalaTokens.sol index 7aa0f19..4d9b98f 100644 --- a/contracts/utils/AcalaTokens.sol +++ b/contracts/utils/AcalaTokens.sol @@ -11,6 +11,7 @@ address constant LP_ACA_AUSD = 0x0000000000000000000200000000000000000001; address constant LP_LDOT_AUSD = 0x0000000000000000000200000000010000000003; address constant LP_LCDOT_AUSD = 0x000000000000000000020000000001020000000D; address constant LP_LCDOT_DOT = 0x000000000000000000020000000002020000000d; +address constant LP_LDOT_JITOSOL = 0x00000000000000000002000000000301A7fB0045; address constant SA_DOT = 0x0000000000000000000300000000000000000000; address constant SA_TUSD = 0x0000000000000000000300000000000000000001; address constant LCDOT_13 = 0x000000000000000000040000000000000000000d; diff --git a/contracts/utils/Predeploy.d.ts b/contracts/utils/Predeploy.d.ts index 8fba0ad..6633eb2 100644 --- a/contracts/utils/Predeploy.d.ts +++ b/contracts/utils/Predeploy.d.ts @@ -2,6 +2,7 @@ export const EVM: "0x0000000000000000000000000000000000000800"; export const ORACLE: "0x0000000000000000000000000000000000000801"; export const SCHEDULE: "0x0000000000000000000000000000000000000802"; export const DEX: "0x0000000000000000000000000000000000000803"; +export const DEXV2: "0x0000000000000000000000000000000000000803"; export const STABLE_ASSET: "0x0000000000000000000000000000000000000804"; export const HOMA: "0x0000000000000000000000000000000000000805"; export const EVM_ACCOUNTS: "0x0000000000000000000000000000000000000806"; diff --git a/contracts/utils/Predeploy.js b/contracts/utils/Predeploy.js index 9423f9a..2e9ae52 100644 --- a/contracts/utils/Predeploy.js +++ b/contracts/utils/Predeploy.js @@ -2,6 +2,7 @@ const EVM = '0x0000000000000000000000000000000000000800'; const ORACLE = '0x0000000000000000000000000000000000000801'; const SCHEDULE = '0x0000000000000000000000000000000000000802'; const DEX = '0x0000000000000000000000000000000000000803'; +const DEXV2 = '0x0000000000000000000000000000000000000803'; const STABLE_ASSET = '0x0000000000000000000000000000000000000804'; const HOMA = '0x0000000000000000000000000000000000000805'; const EVM_ACCOUNTS = '0x0000000000000000000000000000000000000806'; @@ -16,6 +17,7 @@ module.exports = { ORACLE, SCHEDULE, DEX, + DEXV2, STABLE_ASSET, HOMA, EVM_ACCOUNTS, diff --git a/contracts/utils/Predeploy.sol b/contracts/utils/Predeploy.sol index ba465d3..055d4a6 100644 --- a/contracts/utils/Predeploy.sol +++ b/contracts/utils/Predeploy.sol @@ -6,6 +6,7 @@ address constant EVM = 0x0000000000000000000000000000000000000800; address constant ORACLE = 0x0000000000000000000000000000000000000801; address constant SCHEDULE = 0x0000000000000000000000000000000000000802; address constant DEX = 0x0000000000000000000000000000000000000803; +address constant DEXV2 = 0x0000000000000000000000000000000000000803; address constant STABLE_ASSET = 0x0000000000000000000000000000000000000804; address constant HOMA = 0x0000000000000000000000000000000000000805; address constant EVM_ACCOUNTS = 0x0000000000000000000000000000000000000806; diff --git a/generate/generate.js b/generate/generate.js index d07a46e..f17c54b 100644 --- a/generate/generate.js +++ b/generate/generate.js @@ -69,6 +69,11 @@ const generate = async () => { bytecodes.push(['DEX', ethers.utils.getAddress('0x0000000000000000000000000000000000000803'), dex]); deployedBytecodes.push(['DEX', ethers.utils.getAddress('0x0000000000000000000000000000000000000803'), dexDeployedBytecode]); + // add DEXV2 bytecodes + const { bytecode: dexV2, deployedBytecode: dexV2DeployedBytecode } = await hre.artifacts.readArtifact("DEXV2"); + bytecodes.push(['DEXV2', ethers.utils.getAddress('0x0000000000000000000000000000000000000803'), dexV2]); + deployedBytecodes.push(['DEXV2', ethers.utils.getAddress('0x0000000000000000000000000000000000000803'), dexV2DeployedBytecode]); + // add StableAsset bytecodes const { bytecode: stableAsset, deployedBytecode: stableAssetDeployedBytecode } = await hre.artifacts.readArtifact("StableAsset"); bytecodes.push(['STABLE_ASSET', ethers.utils.getAddress('0x0000000000000000000000000000000000000804'), stableAsset]); diff --git a/resources/acala_tokens.json b/resources/acala_tokens.json index a256a82..84277f5 100644 --- a/resources/acala_tokens.json +++ b/resources/acala_tokens.json @@ -35,6 +35,10 @@ "symbol": "LP_LCDOT_DOT", "address": "0x000000000000000000020000000002020000000d" }, + { + "symbol": "LP_LDOT_JITOSOL", + "address": "0x00000000000000000002000000000301a7fb0045" + }, { "symbol": "SA_DOT", "address": "0x0000000000000000000300000000000000000000" diff --git a/resources/bytecodes.json b/resources/bytecodes.json index 56dbcf9..2adabb2 100644 --- a/resources/bytecodes.json +++ b/resources/bytecodes.json @@ -44,6 +44,11 @@ "0x000000000000000000020000000002020000000d", "0x608060405234801561001057600080fd5b506111f1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806370a0823111610081578063a457c2d71161005b578063a457c2d71461019e578063a9059cbb146101b1578063dd62ed3e146101c457600080fd5b806370a0823114610170578063871069c01461018357806395d89b411461019657600080fd5b806323b872dd116100b257806323b872dd14610130578063313ce56714610143578063395093511461015d57600080fd5b806306fdde03146100d9578063095ea7b3146100f757806318160ddd1461011a575b600080fd5b6100e1610208565b6040516100ee9190610ed8565b60405180910390f35b61010a610105366004610f52565b610217565b60405190151581526020016100ee565b610122610231565b6040519081526020016100ee565b61010a61013e366004610f7c565b61023b565b61014b61025f565b60405160ff90911681526020016100ee565b61010a61016b366004610f52565b610269565b61012261017e366004610fb8565b6102b3565b61010a610191366004610fda565b6102be565b6100e16103bb565b61010a6101ac366004610f52565b6103c5565b61010a6101bf366004610f52565b610494565b6101226101d2366004610ffc565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825291909152205490565b60606102126104a2565b905090565b60003361022581858561057d565b60019150505b92915050565b600061021261072f565b600033610249858285610802565b6102548585856108d7565b506001949350505050565b6000610212610a87565b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061022590829086906102ae90879061102f565b61057d565b600061022b82610b5a565b600033838203610355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f45524332303a207472616e7366657220746f20746865207a65726f204163636f60448201527f756e74496433320000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610360818585610c76565b838173ffffffffffffffffffffffffffffffffffffffff167f1d17b5770b13229fb9a0fbb368edadb0cd26837679bf04920d26031ad8fd6bdc856040516103a991815260200190565b60405180910390a35060019392505050565b6060610212610d8b565b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161034c565b610254828686840361057d565b6000336102258185856108d7565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde030000000000000000000000000000000000000000000000000000000017905290516060916000918291610400916105109190611069565b600060405180830381855afa9150503d806000811461054b576040519150601f19603f3d011682016040523d82523d6000602084013e610550565b606091505b50909250905081610562573d60208201fd5b8080602001905181019061057691906110b4565b9250505090565b73ffffffffffffffffffffffffffffffffffffffff831661061f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff82166106c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f18160ddd000000000000000000000000000000000000000000000000000000001790529051600091829182916104009161079c9190611069565b600060405180830381855afa9150503d80600081146107d7576040519150601f19603f3d011682016040523d82523d6000602084013e6107dc565b606091505b509092509050816107ee573d60208201fd5b80806020019051810190610576919061117f565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260208181526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108d157818110156108c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161034c565b6108d1848484840361057d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161034c565b610a28838383610df9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161072291815260200190565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829161040091610af49190611069565b600060405180830381855afa9150503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b50909250905081610b46573d60208201fd5b808060200190518101906105769190611198565b60405173ffffffffffffffffffffffffffffffffffffffff821660248201526000908190819061040090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905251610c089190611069565b600060405180830381855afa9150503d8060008114610c43576040519150601f19603f3d011682016040523d82523d6000602084013e610c48565b606091505b50909250905081610c5a573d60208201fd5b80806020019051810190610c6e919061117f565b949350505050565b60405173ffffffffffffffffffffffffffffffffffffffff841660248201526044810183905260648101829052600090819061040090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f895904980000000000000000000000000000000000000000000000000000000017905251610d309190611069565b6000604051808303816000865af19150503d8060008114610d6d576040519150601f19603f3d011682016040523d82523d6000602084013e610d72565b606091505b50909250905081610d84573d60208201fd5b5050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b410000000000000000000000000000000000000000000000000000000017905290516060916000918291610400916105109190611069565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528316604482015260648101829052600090819061040090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbeabacc80000000000000000000000000000000000000000000000000000000017905251610d309190611069565b60005b83811015610ecf578181015183820152602001610eb7565b50506000910152565b6020815260008251806020840152610ef7816040850160208701610eb4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4d57600080fd5b919050565b60008060408385031215610f6557600080fd5b610f6e83610f29565b946020939093013593505050565b600080600060608486031215610f9157600080fd5b610f9a84610f29565b9250610fa860208501610f29565b9150604084013590509250925092565b600060208284031215610fca57600080fd5b610fd382610f29565b9392505050565b60008060408385031215610fed57600080fd5b50508035926020909101359150565b6000806040838503121561100f57600080fd5b61101883610f29565b915061102660208401610f29565b90509250929050565b8082018082111561022b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000825161107b818460208701610eb4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156110c657600080fd5b815167ffffffffffffffff808211156110de57600080fd5b818401915084601f8301126110f257600080fd5b81518181111561110457611104611085565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561114a5761114a611085565b8160405282815287602084870101111561116357600080fd5b611174836020830160208801610eb4565b979650505050505050565b60006020828403121561119157600080fd5b5051919050565b6000602082840312156111aa57600080fd5b815160ff81168114610fd357600080fdfea2646970667358221220054e18bc0b3f0a07464c0663a4015c3aa60d5e66cf648752fbf056e6eeefc5e864736f6c63430008120033" ], + [ + "LP_LDOT_JITOSOL", + "0x00000000000000000002000000000301A7fB0045", + "0x608060405234801561001057600080fd5b506111f1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806370a0823111610081578063a457c2d71161005b578063a457c2d71461019e578063a9059cbb146101b1578063dd62ed3e146101c457600080fd5b806370a0823114610170578063871069c01461018357806395d89b411461019657600080fd5b806323b872dd116100b257806323b872dd14610130578063313ce56714610143578063395093511461015d57600080fd5b806306fdde03146100d9578063095ea7b3146100f757806318160ddd1461011a575b600080fd5b6100e1610208565b6040516100ee9190610ed8565b60405180910390f35b61010a610105366004610f52565b610217565b60405190151581526020016100ee565b610122610231565b6040519081526020016100ee565b61010a61013e366004610f7c565b61023b565b61014b61025f565b60405160ff90911681526020016100ee565b61010a61016b366004610f52565b610269565b61012261017e366004610fb8565b6102b3565b61010a610191366004610fda565b6102be565b6100e16103bb565b61010a6101ac366004610f52565b6103c5565b61010a6101bf366004610f52565b610494565b6101226101d2366004610ffc565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825291909152205490565b60606102126104a2565b905090565b60003361022581858561057d565b60019150505b92915050565b600061021261072f565b600033610249858285610802565b6102548585856108d7565b506001949350505050565b6000610212610a87565b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061022590829086906102ae90879061102f565b61057d565b600061022b82610b5a565b600033838203610355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f45524332303a207472616e7366657220746f20746865207a65726f204163636f60448201527f756e74496433320000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610360818585610c76565b838173ffffffffffffffffffffffffffffffffffffffff167f1d17b5770b13229fb9a0fbb368edadb0cd26837679bf04920d26031ad8fd6bdc856040516103a991815260200190565b60405180910390a35060019392505050565b6060610212610d8b565b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161034c565b610254828686840361057d565b6000336102258185856108d7565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde030000000000000000000000000000000000000000000000000000000017905290516060916000918291610400916105109190611069565b600060405180830381855afa9150503d806000811461054b576040519150601f19603f3d011682016040523d82523d6000602084013e610550565b606091505b50909250905081610562573d60208201fd5b8080602001905181019061057691906110b4565b9250505090565b73ffffffffffffffffffffffffffffffffffffffff831661061f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff82166106c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f18160ddd000000000000000000000000000000000000000000000000000000001790529051600091829182916104009161079c9190611069565b600060405180830381855afa9150503d80600081146107d7576040519150601f19603f3d011682016040523d82523d6000602084013e6107dc565b606091505b509092509050816107ee573d60208201fd5b80806020019051810190610576919061117f565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260208181526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108d157818110156108c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161034c565b6108d1848484840361057d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161034c565b610a28838383610df9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161072291815260200190565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829161040091610af49190611069565b600060405180830381855afa9150503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b50909250905081610b46573d60208201fd5b808060200190518101906105769190611198565b60405173ffffffffffffffffffffffffffffffffffffffff821660248201526000908190819061040090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905251610c089190611069565b600060405180830381855afa9150503d8060008114610c43576040519150601f19603f3d011682016040523d82523d6000602084013e610c48565b606091505b50909250905081610c5a573d60208201fd5b80806020019051810190610c6e919061117f565b949350505050565b60405173ffffffffffffffffffffffffffffffffffffffff841660248201526044810183905260648101829052600090819061040090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f895904980000000000000000000000000000000000000000000000000000000017905251610d309190611069565b6000604051808303816000865af19150503d8060008114610d6d576040519150601f19603f3d011682016040523d82523d6000602084013e610d72565b606091505b50909250905081610d84573d60208201fd5b5050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b410000000000000000000000000000000000000000000000000000000017905290516060916000918291610400916105109190611069565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528316604482015260648101829052600090819061040090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbeabacc80000000000000000000000000000000000000000000000000000000017905251610d309190611069565b60005b83811015610ecf578181015183820152602001610eb7565b50506000910152565b6020815260008251806020840152610ef7816040850160208701610eb4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4d57600080fd5b919050565b60008060408385031215610f6557600080fd5b610f6e83610f29565b946020939093013593505050565b600080600060608486031215610f9157600080fd5b610f9a84610f29565b9250610fa860208501610f29565b9150604084013590509250925092565b600060208284031215610fca57600080fd5b610fd382610f29565b9392505050565b60008060408385031215610fed57600080fd5b50508035926020909101359150565b6000806040838503121561100f57600080fd5b61101883610f29565b915061102660208401610f29565b90509250929050565b8082018082111561022b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000825161107b818460208701610eb4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156110c657600080fd5b815167ffffffffffffffff808211156110de57600080fd5b818401915084601f8301126110f257600080fd5b81518181111561110457611104611085565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561114a5761114a611085565b8160405282815287602084870101111561116357600080fd5b611174836020830160208801610eb4565b979650505050505050565b60006020828403121561119157600080fd5b5051919050565b6000602082840312156111aa57600080fd5b815160ff81168114610fd357600080fdfea2646970667358221220054e18bc0b3f0a07464c0663a4015c3aa60d5e66cf648752fbf056e6eeefc5e864736f6c63430008120033" + ], [ "SA_DOT", "0x0000000000000000000300000000000000000000", @@ -402,7 +407,12 @@ [ "DEX", "0x0000000000000000000000000000000000000803", - "0x608060405234801561001057600080fd5b50611a1a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063dbcd19a21161005b578063dbcd19a2146100fc578063e2dc85dc1461010f578063f4f31ede14610122578063ffd73c4a1461014a57600080fd5b80633d8d96201461008d5780634d60beb1146100b55780636fc4b4e5146100d657806391c98a2a146100e9575b600080fd5b6100a061009b3660046116cf565b610182565b60405190151581526020015b60405180910390f35b6100c86100c336600461171d565b610439565b6040519081526020016100ac565b6100a06100e43660046116cf565b610691565b6100a06100f7366004611762565b61092f565b6100c861010a36600461171d565b610c89565b6100a061011d366004611762565b610e72565b6101356101303660046117b3565b611171565b604080519283526020830191909152016100ac565b61015d6101583660046117b3565b611395565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6000805b845181101561025557600073ffffffffffffffffffffffffffffffffffffffff168582815181106101b9576101b96117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064015b60405180910390fd5b8061024d8161181b565b915050610186565b50826000036102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016102f394939291906118cb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9782ac810000000000000000000000000000000000000000000000000000000017905251610374919061190d565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b509092509050816103c8573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a8783806020019051810190610415919061193c565b8860405161042593929190611955565b60405180910390a250600195945050505050565b6000805b835181101561050757600073ffffffffffffffffffffffffffffffffffffffff16848281518110610470576104706117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036104f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b806104ff8161181b565b91505061043d565b5081600003610572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016105a192919061197a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4d60beb10000000000000000000000000000000000000000000000000000000017905251610622919061190d565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905081610674573d60208201fd5b80806020019051810190610688919061193c565b95945050505050565b6000805b845181101561075f57600073ffffffffffffffffffffffffffffffffffffffff168582815181106106c8576106c86117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361074d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b806107578161181b565b915050610695565b50826000036107ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016107fd94939291906118cb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f579baa18000000000000000000000000000000000000000000000000000000001790525161087e919061190d565b6000604051808303816000865af19150503d80600081146108bb576040519150601f19603f3d011682016040523d82523d6000602084013e6108c0565b606091505b509092509050816108d2573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a878784806020019051810190610920919061193c565b60405161042593929190611955565b600073ffffffffffffffffffffffffffffffffffffffff86166109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8516610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b83600003610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4445583a206d6178416d6f756e7441206973207a65726f000000000000000000604482015260640161023a565b82600003610aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4445583a206d6178416d6f756e7442206973207a65726f000000000000000000604482015260640161023a565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f67088d590000000000000000000000000000000000000000000000000000000017905251610bce919061190d565b6000604051808303816000865af19150503d8060008114610c0b576040519150601f19603f3d011682016040523d82523d6000602084013e610c10565b606091505b50909250905081610c22573d60208201fd5b604080518781526020810187905273ffffffffffffffffffffffffffffffffffffffff808a1692908b169133917f5b6f5f6550282279c4e72b95a8ba538bea92c64dec9e8c7c08a556d4457225c891015b60405180910390a4506001979650505050505050565b6000805b8351811015610d5757600073ffffffffffffffffffffffffffffffffffffffff16848281518110610cc057610cc06117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b80610d4f8161181b565b915050610c8d565b5081600003610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff168585604051602401610df192919061197a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fdbcd19a20000000000000000000000000000000000000000000000000000000017905251610622919061190d565b600073ffffffffffffffffffffffffffffffffffffffff8616610ef1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8516610f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b83600003610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4445583a2072656d6f76655368617265206973207a65726f0000000000000000604482015260640161023a565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3531533200000000000000000000000000000000000000000000000000000000179052516110a7919061190d565b6000604051808303816000865af19150503d80600081146110e4576040519150601f19603f3d011682016040523d82523d6000602084013e6110e9565b606091505b509092509050816110fb573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f038116623990e7d0fed04a27e35b5dc88000ea942b37360c5898ae750bfa5df689604051610c7391815260200190565b60008073ffffffffffffffffffffffffffffffffffffffff84166111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff831661126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b60405173ffffffffffffffffffffffffffffffffffffffff858116602483015284166044820152600090819061040590606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff4f31ede0000000000000000000000000000000000000000000000000000000017905251611322919061190d565b600060405180830381855afa9150503d806000811461135d576040519150601f19603f3d011682016040523d82523d6000602084013e611362565b606091505b50909250905081611374573d60208201fd5b80806020019051810190611388919061199c565b9350935050509250929050565b600073ffffffffffffffffffffffffffffffffffffffff8316611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8216611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283166044820152600090819061040590606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffd73c4a0000000000000000000000000000000000000000000000000000000017905251611545919061190d565b600060405180830381855afa9150503d8060008114611580576040519150601f19603f3d011682016040523d82523d6000602084013e611585565b606091505b50909250905081611597573d60208201fd5b8080602001905181019061068891906119c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146115fc57600080fd5b50565b803561160a816115da565b919050565b600082601f83011261162057600080fd5b8135602067ffffffffffffffff8083111561163d5761163d6115ab565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715611680576116806115ab565b60405293845285810183019383810192508785111561169e57600080fd5b83870191505b848210156116c4576116b5826115ff565b835291830191908301906116a4565b979650505050505050565b6000806000606084860312156116e457600080fd5b833567ffffffffffffffff8111156116fb57600080fd5b6117078682870161160f565b9660208601359650604090950135949350505050565b6000806040838503121561173057600080fd5b823567ffffffffffffffff81111561174757600080fd5b6117538582860161160f565b95602094909401359450505050565b600080600080600060a0868803121561177a57600080fd5b8535611785816115da565b94506020860135611795816115da565b94979496505050506040830135926060810135926080909101359150565b600080604083850312156117c657600080fd5b82356117d1816115da565b915060208301356117e1816115da565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611873577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600081518084526020808501945080840160005b838110156118c057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161188e565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006118fa608083018661187a565b6040830194909452506060015292915050565b6000825160005b8181101561192e5760208186018101518583015201611914565b506000920191825250919050565b60006020828403121561194e57600080fd5b5051919050565b606081526000611968606083018661187a565b60208301949094525060400152919050565b60408152600061198d604083018561187a565b90508260208301529392505050565b600080604083850312156119af57600080fd5b505080516020909101519092909150565b6000602082840312156119d257600080fd5b81516119dd816115da565b939250505056fea26469706673582212203571b085ba38af00af94c1024e11fe466dc0cf2492619dd503ef2e797a627b5464736f6c63430008120033" + "0x608060405234801561001057600080fd5b50611a1a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063dbcd19a21161005b578063dbcd19a2146100fc578063e2dc85dc1461010f578063f4f31ede14610122578063ffd73c4a1461014a57600080fd5b80633d8d96201461008d5780634d60beb1146100b55780636fc4b4e5146100d657806391c98a2a146100e9575b600080fd5b6100a061009b3660046116cf565b610182565b60405190151581526020015b60405180910390f35b6100c86100c336600461171d565b610439565b6040519081526020016100ac565b6100a06100e43660046116cf565b610691565b6100a06100f7366004611762565b61092f565b6100c861010a36600461171d565b610c89565b6100a061011d366004611762565b610e72565b6101356101303660046117b3565b611171565b604080519283526020830191909152016100ac565b61015d6101583660046117b3565b611395565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6000805b845181101561025557600073ffffffffffffffffffffffffffffffffffffffff168582815181106101b9576101b96117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064015b60405180910390fd5b8061024d8161181b565b915050610186565b50826000036102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016102f394939291906118cb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9782ac810000000000000000000000000000000000000000000000000000000017905251610374919061190d565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b509092509050816103c8573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a8783806020019051810190610415919061193c565b8860405161042593929190611955565b60405180910390a250600195945050505050565b6000805b835181101561050757600073ffffffffffffffffffffffffffffffffffffffff16848281518110610470576104706117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036104f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b806104ff8161181b565b91505061043d565b5081600003610572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016105a192919061197a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4d60beb10000000000000000000000000000000000000000000000000000000017905251610622919061190d565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905081610674573d60208201fd5b80806020019051810190610688919061193c565b95945050505050565b6000805b845181101561075f57600073ffffffffffffffffffffffffffffffffffffffff168582815181106106c8576106c86117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361074d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b806107578161181b565b915050610695565b50826000036107ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016107fd94939291906118cb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f579baa18000000000000000000000000000000000000000000000000000000001790525161087e919061190d565b6000604051808303816000865af19150503d80600081146108bb576040519150601f19603f3d011682016040523d82523d6000602084013e6108c0565b606091505b509092509050816108d2573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a878784806020019051810190610920919061193c565b60405161042593929190611955565b600073ffffffffffffffffffffffffffffffffffffffff86166109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8516610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b83600003610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4445583a206d6178416d6f756e7441206973207a65726f000000000000000000604482015260640161023a565b82600003610aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4445583a206d6178416d6f756e7442206973207a65726f000000000000000000604482015260640161023a565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f67088d590000000000000000000000000000000000000000000000000000000017905251610bce919061190d565b6000604051808303816000865af19150503d8060008114610c0b576040519150601f19603f3d011682016040523d82523d6000602084013e610c10565b606091505b50909250905081610c22573d60208201fd5b604080518781526020810187905273ffffffffffffffffffffffffffffffffffffffff808a1692908b169133917f5b6f5f6550282279c4e72b95a8ba538bea92c64dec9e8c7c08a556d4457225c891015b60405180910390a4506001979650505050505050565b6000805b8351811015610d5757600073ffffffffffffffffffffffffffffffffffffffff16848281518110610cc057610cc06117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b80610d4f8161181b565b915050610c8d565b5081600003610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff168585604051602401610df192919061197a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fdbcd19a20000000000000000000000000000000000000000000000000000000017905251610622919061190d565b600073ffffffffffffffffffffffffffffffffffffffff8616610ef1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8516610f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b83600003610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4445583a2072656d6f76655368617265206973207a65726f0000000000000000604482015260640161023a565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3531533200000000000000000000000000000000000000000000000000000000179052516110a7919061190d565b6000604051808303816000865af19150503d80600081146110e4576040519150601f19603f3d011682016040523d82523d6000602084013e6110e9565b606091505b509092509050816110fb573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f038116623990e7d0fed04a27e35b5dc88000ea942b37360c5898ae750bfa5df689604051610c7391815260200190565b60008073ffffffffffffffffffffffffffffffffffffffff84166111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff831661126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b60405173ffffffffffffffffffffffffffffffffffffffff858116602483015284166044820152600090819061040590606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff4f31ede0000000000000000000000000000000000000000000000000000000017905251611322919061190d565b600060405180830381855afa9150503d806000811461135d576040519150601f19603f3d011682016040523d82523d6000602084013e611362565b606091505b50909250905081611374573d60208201fd5b80806020019051810190611388919061199c565b9350935050509250929050565b600073ffffffffffffffffffffffffffffffffffffffff8316611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8216611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283166044820152600090819061040590606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffd73c4a0000000000000000000000000000000000000000000000000000000017905251611545919061190d565b600060405180830381855afa9150503d8060008114611580576040519150601f19603f3d011682016040523d82523d6000602084013e611585565b606091505b50909250905081611597573d60208201fd5b8080602001905181019061068891906119c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146115fc57600080fd5b50565b803561160a816115da565b919050565b600082601f83011261162057600080fd5b8135602067ffffffffffffffff8083111561163d5761163d6115ab565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715611680576116806115ab565b60405293845285810183019383810192508785111561169e57600080fd5b83870191505b848210156116c4576116b5826115ff565b835291830191908301906116a4565b979650505050505050565b6000806000606084860312156116e457600080fd5b833567ffffffffffffffff8111156116fb57600080fd5b6117078682870161160f565b9660208601359650604090950135949350505050565b6000806040838503121561173057600080fd5b823567ffffffffffffffff81111561174757600080fd5b6117538582860161160f565b95602094909401359450505050565b600080600080600060a0868803121561177a57600080fd5b8535611785816115da565b94506020860135611795816115da565b94979496505050506040830135926060810135926080909101359150565b600080604083850312156117c657600080fd5b82356117d1816115da565b915060208301356117e1816115da565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611873577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600081518084526020808501945080840160005b838110156118c057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161188e565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006118fa608083018661187a565b6040830194909452506060015292915050565b6000825160005b8181101561192e5760208186018101518583015201611914565b506000920191825250919050565b60006020828403121561194e57600080fd5b5051919050565b606081526000611968606083018661187a565b60208301949094525060400152919050565b60408152600061198d604083018561187a565b90508260208301529392505050565b600080604083850312156119af57600080fd5b505080516020909101519092909150565b6000602082840312156119d257600080fd5b81516119dd816115da565b939250505056fea2646970667358221220a9b9cc3e4cbe6cc14fe43347a866bcb13115b0bf4789cf2e67be30fe7975219264736f6c63430008120033" + ], + [ + "DEXV2", + "0x0000000000000000000000000000000000000803", + "0x608060405234801561001057600080fd5b5061247d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806392ea19911161008c578063e2dc85dc11610066578063e2dc85dc146101e5578063f1e908f8146101f8578063f4f31ede1461020b578063ffd73c4a1461021e57600080fd5b806392ea1991146101ac578063aa02e9d3146101bf578063dbcd19a2146101d257600080fd5b80635859df34116100c85780635859df34146101605780636fc4b4e5146101735780638ef239cf1461018657806391c98a2a1461019957600080fd5b8063165c7c9a146100ef5780633d8d96201461011c5780634d60beb11461013f575b600080fd5b6101026100fd366004611fd0565b610256565b604080519283526020830191909152015b60405180910390f35b61012f61012a3660046120da565b61042d565b6040519015158152602001610113565b61015261014d366004612128565b61068d565b604051908152602001610113565b61010261016e366004611fd0565b610893565b61012f6101813660046120da565b6109f2565b61010261019436600461216d565b610c3e565b61012f6101a73660046121b8565b610e19565b61012f6101ba366004612209565b6110ed565b61012f6101cd36600461216d565b611371565b6101526101e0366004612128565b61159a565b61012f6101f33660046121b8565b611731565b61012f61020636600461216d565b6119c4565b610102610219366004611fd0565b611c78565b61023161022c366004611fd0565b611dd7565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b60008073ffffffffffffffffffffffffffffffffffffffff84166102c15760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166103245760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260009081906104059060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f165c7c9a00000000000000000000000000000000000000000000000000000000179052516103ba919061224f565b600060405180830381855afa9150503d80600081146103f5576040519150601f19603f3d011682016040523d82523d6000602084013e6103fa565b606091505b5090925090508161040c573d60208201fd5b80806020019051810190610420919061227e565b9350935050509250929050565b6000805b84518110156104e157600073ffffffffffffffffffffffffffffffffffffffff16858281518110610464576104646122a2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036104cf5760405162461bcd60e51b815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064016102b8565b806104d9816122d1565b915050610431565b50826000036105325760405162461bcd60e51b815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f0000000000000060448201526064016102b8565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016105659493929190612381565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9782ac8100000000000000000000000000000000000000000000000000000000179052516105c8919061224f565b6000604051808303816000865af19150503d8060008114610605576040519150601f19603f3d011682016040523d82523d6000602084013e61060a565b606091505b5090925090508161061c573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a878380602001905181019061066991906123c3565b88604051610679939291906123dc565b60405180910390a250600195945050505050565b6000805b835181101561074157600073ffffffffffffffffffffffffffffffffffffffff168482815181106106c4576106c46122a2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361072f5760405162461bcd60e51b815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064016102b8565b80610739816122d1565b915050610691565b50816000036107925760405162461bcd60e51b815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f0000000000000060448201526064016102b8565b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016107c1929190612401565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4d60beb10000000000000000000000000000000000000000000000000000000017905251610824919061224f565b600060405180830381855afa9150503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b50909250905081610876573d60208201fd5b8080602001905181019061088a91906123c3565b95945050505050565b60008073ffffffffffffffffffffffffffffffffffffffff84166108f95760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff831661095c5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260009081906104059060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5859df3400000000000000000000000000000000000000000000000000000000179052516103ba919061224f565b6000805b8451811015610aa657600073ffffffffffffffffffffffffffffffffffffffff16858281518110610a2957610a296122a2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610a945760405162461bcd60e51b815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064016102b8565b80610a9e816122d1565b9150506109f6565b5082600003610af75760405162461bcd60e51b815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f0000000000000060448201526064016102b8565b60008061040573ffffffffffffffffffffffffffffffffffffffff1633878787604051602401610b2a9493929190612381565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f579baa180000000000000000000000000000000000000000000000000000000017905251610b8d919061224f565b6000604051808303816000865af19150503d8060008114610bca576040519150601f19603f3d011682016040523d82523d6000602084013e610bcf565b606091505b50909250905081610be1573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a878784806020019051810190610c2f91906123c3565b604051610679939291906123dc565b60008073ffffffffffffffffffffffffffffffffffffffff8416610ca45760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8316610d075760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff868116602483015285811660448301528416606482015260009081906104059060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7d3d27f20000000000000000000000000000000000000000000000000000000017905251610da5919061224f565b600060405180830381855afa9150503d8060008114610de0576040519150601f19603f3d011682016040523d82523d6000602084013e610de5565b606091505b50909250905081610df7573d60208201fd5b80806020019051810190610e0b919061227e565b935093505050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff8616610e7e5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8516610ee15760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b83600003610f315760405162461bcd60e51b815260206004820152601760248201527f4445583a206d6178416d6f756e7441206973207a65726f00000000000000000060448201526064016102b8565b82600003610f815760405162461bcd60e51b815260206004820152601760248201527f4445583a206d6178416d6f756e7442206973207a65726f00000000000000000060448201526064016102b8565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f67088d590000000000000000000000000000000000000000000000000000000017905251611032919061224f565b6000604051808303816000865af19150503d806000811461106f576040519150601f19603f3d011682016040523d82523d6000602084013e611074565b606091505b50909250905081611086573d60208201fd5b604080518781526020810187905273ffffffffffffffffffffffffffffffffffffffff808a1692908b169133917f5b6f5f6550282279c4e72b95a8ba538bea92c64dec9e8c7c08a556d4457225c891015b60405180910390a4506001979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff85166111525760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff84166111b55760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b821515806111c257508115155b61120e5760405162461bcd60e51b815260206004820181905260248201527f4445583a20696e76616c696420636f6e747269627574696f6e20616d6f756e7460448201526064016102b8565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8681166044830152851660648201526084810184905260a4810183905260009081906104059060c40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97a2051600000000000000000000000000000000000000000000000000000000179052516112b8919061224f565b6000604051808303816000865af19150503d80600081146112f5576040519150601f19603f3d011682016040523d82523d6000602084013e6112fa565b606091505b5090925090508161130c573d60208201fd5b604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff80891692908a169133917f8d1357284615c1e124990863d94a78bee5ad0b610eda8b2e250d792224bfa520910160405180910390a45060019695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff84166113d65760405162461bcd60e51b815260206004820152601860248201527f4445583a2077686f206973207a65726f2061646472657373000000000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff83166114395760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff821661149c5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff858116602483015284811660448301528316606482015260009081906104059060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167faa02e9d3000000000000000000000000000000000000000000000000000000001790525161153a919061224f565b6000604051808303816000865af19150503d8060008114611577576040519150601f19603f3d011682016040523d82523d6000602084013e61157c565b606091505b5090925090508161158e573d60208201fd5b50600195945050505050565b6000805b835181101561164e57600073ffffffffffffffffffffffffffffffffffffffff168482815181106115d1576115d16122a2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361163c5760405162461bcd60e51b815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064016102b8565b80611646816122d1565b91505061159e565b508160000361169f5760405162461bcd60e51b815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f0000000000000060448201526064016102b8565b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016116ce929190612401565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fdbcd19a20000000000000000000000000000000000000000000000000000000017905251610824919061224f565b600073ffffffffffffffffffffffffffffffffffffffff86166117965760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff85166117f95760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b836000036118495760405162461bcd60e51b815260206004820152601860248201527f4445583a2072656d6f76655368617265206973207a65726f000000000000000060448201526064016102b8565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3531533200000000000000000000000000000000000000000000000000000000179052516118fa919061224f565b6000604051808303816000865af19150503d8060008114611937576040519150601f19603f3d011682016040523d82523d6000602084013e61193c565b606091505b5090925090508161194e573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f038116623990e7d0fed04a27e35b5dc88000ea942b37360c5898ae750bfa5df6896040516110d791815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8416611a295760405162461bcd60e51b815260206004820152601860248201527f4445583a2077686f206973207a65726f2061646472657373000000000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8316611a8c5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8216611aef5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff858116602483015284811660448301528316606482015260009081906104059060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff1e908f80000000000000000000000000000000000000000000000000000000017905251611b8d919061224f565b6000604051808303816000865af19150503d8060008114611bca576040519150601f19603f3d011682016040523d82523d6000602084013e611bcf565b606091505b50909250905081611be1573d60208201fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f0a871e96c44907fad6faf1446ccd03932216813ea3a548e12e72a217d7e8c96784806020019051810190611c5b91906123c3565b60405190815260200160405180910390a450600195945050505050565b60008073ffffffffffffffffffffffffffffffffffffffff8416611cde5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8316611d415760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260009081906104059060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff4f31ede00000000000000000000000000000000000000000000000000000000179052516103ba919061224f565b600073ffffffffffffffffffffffffffffffffffffffff8316611e3c5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8216611e9f5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528316604482015260009081906104059060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffd73c4a0000000000000000000000000000000000000000000000000000000017905251611f35919061224f565b600060405180830381855afa9150503d8060008114611f70576040519150601f19603f3d011682016040523d82523d6000602084013e611f75565b606091505b50909250905081611f87573d60208201fd5b8080602001905181019061088a9190612423565b73ffffffffffffffffffffffffffffffffffffffff81168114611fbd57600080fd5b50565b8035611fcb81611f9b565b919050565b60008060408385031215611fe357600080fd5b8235611fee81611f9b565b91506020830135611ffe81611f9b565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261204957600080fd5b8135602067ffffffffffffffff8083111561206657612066612009565b8260051b604051601f19603f8301168101818110848211171561208b5761208b612009565b6040529384528581018301938381019250878511156120a957600080fd5b83870191505b848210156120cf576120c082611fc0565b835291830191908301906120af565b979650505050505050565b6000806000606084860312156120ef57600080fd5b833567ffffffffffffffff81111561210657600080fd5b61211286828701612038565b9660208601359650604090950135949350505050565b6000806040838503121561213b57600080fd5b823567ffffffffffffffff81111561215257600080fd5b61215e85828601612038565b95602094909401359450505050565b60008060006060848603121561218257600080fd5b833561218d81611f9b565b9250602084013561219d81611f9b565b915060408401356121ad81611f9b565b809150509250925092565b600080600080600060a086880312156121d057600080fd5b85356121db81611f9b565b945060208601356121eb81611f9b565b94979496505050506040830135926060810135926080909101359150565b6000806000806080858703121561221f57600080fd5b843561222a81611f9b565b9350602085013561223a81611f9b565b93969395505050506040820135916060013590565b6000825160005b818110156122705760208186018101518583015201612256565b506000920191825250919050565b6000806040838503121561229157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612329577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600081518084526020808501945080840160005b8381101561237657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612344565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006123b06080830186612330565b6040830194909452506060015292915050565b6000602082840312156123d557600080fd5b5051919050565b6060815260006123ef6060830186612330565b60208301949094525060400152919050565b6040815260006124146040830185612330565b90508260208301529392505050565b60006020828403121561243557600080fd5b815161244081611f9b565b939250505056fea2646970667358221220c4caa2d2c812c87c1ae3d949c009784662857384465e88145e4cbe3e5ac1b68a64736f6c63430008120033" ], [ "STABLE_ASSET", @@ -442,6 +452,6 @@ [ "EARNING", "0x000000000000000000000000000000000000080b", - "0x608060405234801561001057600080fd5b50610f74806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80636fd2c80b116100765780639940686e1161005b5780639940686e1461014c578063c3e07c041461015f578063eaffb3f91461017c57600080fd5b80636fd2c80b146101315780637384977d1461013957600080fd5b8063361592d7116100a7578063361592d7146101015780635990dc2b146101215780636e373bef1461012957600080fd5b806309bfc8a1146100c357806327de9e32146100de575b600080fd5b6100cb61018f565b6040519081526020015b60405180910390f35b6100f16100ec366004610c35565b610269565b60405190151581526020016100d5565b61011461010f366004610c4e565b610432565b6040516100d59190610c8b565b6100cb610570565b6100f16105dd565b6100cb61072f565b6100f1610147366004610c35565b61079c565b6100f161015a366004610c35565b6108a5565b610167610a4e565b604080519283526020830191909152016100d5565b6100f161018a366004610c35565b610b2c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f09bfc8a10000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610cfb565b600060405180830381855afa9150503d8060008114610237576040519150601f19603f3d011682016040523d82523d6000602084013e61023c565b606091505b5090925090508161024e573d60208201fd5b808060200190518101906102629190610d2a565b9250505090565b6000816000036102da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a20756e626f6e64416d6f756e74206973207a65726f00000060448201526064015b60405180910390fd5b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa5d059ca00000000000000000000000000000000000000000000000000000000179052516103779190610cfb565b6000604051808303816000865af19150503d80600081146103b4576040519150601f19603f3d011682016040523d82523d6000602084013e6103b9565b606091505b509092509050816103cb573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167fd24dbf5e9299ce53c3aa9f7227ff1cc8441c2faae04509aa370ca3703385d6b4828060200190518101906104179190610d2a565b60405190815260200160405180910390a25060019392505050565b61045660405180606001604052806000815260200160008152602001606081525090565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152600090819061040d90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f361592d700000000000000000000000000000000000000000000000000000000179052516105029190610cfb565b600060405180830381855afa9150503d806000811461053d576040519150601f19603f3d011682016040523d82523d6000602084013e610542565b606091505b50909250905081610554573d60208201fd5b808060200190518101906105689190610e0d565b949350505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5990dc2b0000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610cfb565b6040513360248201526000908190819061040d90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167faeffaa4700000000000000000000000000000000000000000000000000000000179052516106759190610cfb565b6000604051808303816000865af19150503d80600081146106b2576040519150601f19603f3d011682016040523d82523d6000602084013e6106b7565b606091505b509092509050816106c9573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5828060200190518101906107159190610d2a565b60405190815260200160405180910390a260019250505090565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fd2c80b0000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610cfb565b600081600003610808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a20756e626f6e64416d6f756e74206973207a65726f00000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd15a4d6000000000000000000000000000000000000000000000000000000000179052516103779190610cfb565b600081600003610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4561726e696e673a20626f6e64416d6f756e74206973207a65726f000000000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa515366a00000000000000000000000000000000000000000000000000000000179052516109ae9190610cfb565b6000604051808303816000865af19150503d80600081146109eb576040519150601f19603f3d011682016040523d82523d6000602084013e6109f0565b606091505b50909250905081610a02573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167fd0a009034e24a39106653c4903cf28b1947b8a9964d03206648e0f0a5de74a46828060200190518101906104179190610d2a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc3e07c0400000000000000000000000000000000000000000000000000000000179052905160009182918291829161040d91610abc91610cfb565b600060405180830381855afa9150503d8060008114610af7576040519150601f19603f3d011682016040523d82523d6000602084013e610afc565b606091505b50909250905081610b0e573d60208201fd5b80806020019051810190610b229190610f1a565b9350935050509091565b600081600003610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a207265626f6e64416d6f756e74206973207a65726f00000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f92d1b78400000000000000000000000000000000000000000000000000000000179052516109ae9190610cfb565b600060208284031215610c4757600080fd5b5035919050565b600060208284031215610c6057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610c8457600080fd5b9392505050565b602080825282518282015282810151604080840191909152808401516060808501528051608085018190526000939291830191849160a08701905b80841015610cef5784518051835286015186830152938501936001939093019290820190610cc6565b50979650505050505050565b6000825160005b81811015610d1c5760208186018101518583015201610d02565b506000920191825250919050565b600060208284031215610d3c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610d9557610d95610d43565b60405290565b6040805190810167ffffffffffffffff81118282101715610d9557610d95610d43565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610e0557610e05610d43565b604052919050565b60006020808385031215610e2057600080fd5b825167ffffffffffffffff80821115610e3857600080fd5b9084019060608287031215610e4c57600080fd5b610e54610d72565b82518152838301518482015260408084015183811115610e7357600080fd5b80850194505087601f850112610e8857600080fd5b835183811115610e9a57610e9a610d43565b610ea8868260051b01610dbe565b818152868101945060069190911b850186019089821115610ec857600080fd5b948601945b81861015610f085782868b031215610ee55760008081fd5b610eed610d9b565b86518152878701518882015285529482019493860193610ecd565b91830191909152509695505050505050565b60008060408385031215610f2d57600080fd5b50508051602090910151909290915056fea26469706673582212209371e369556f69cfb94940414b0ab778e684e0014179ae10992d36644970755464736f6c63430008120033" + "0x608060405234801561001057600080fd5b50611014806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80636fd2c80b116100765780639940686e1161005b5780639940686e1461014c578063c3e07c041461015f578063eaffb3f91461017c57600080fd5b80636fd2c80b146101315780637384977d1461013957600080fd5b8063361592d7116100a7578063361592d7146101015780635990dc2b146101215780636e373bef1461012957600080fd5b806309bfc8a1146100c357806327de9e32146100de575b600080fd5b6100cb61018f565b6040519081526020015b60405180910390f35b6100f16100ec366004610cd5565b610269565b60405190151581526020016100d5565b61011461010f366004610cee565b610432565b6040516100d59190610d2b565b6100cb610570565b6100f16105dd565b6100cb61072f565b6100f1610147366004610cd5565b61079c565b6100f161015a366004610cd5565b6108a5565b610167610a4e565b604080519283526020830191909152016100d5565b6100f161018a366004610cd5565b610b2c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f09bfc8a10000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610d9b565b600060405180830381855afa9150503d8060008114610237576040519150601f19603f3d011682016040523d82523d6000602084013e61023c565b606091505b5090925090508161024e573d60208201fd5b808060200190518101906102629190610dca565b9250505090565b6000816000036102da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a20756e626f6e64416d6f756e74206973207a65726f00000060448201526064015b60405180910390fd5b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa5d059ca00000000000000000000000000000000000000000000000000000000179052516103779190610d9b565b6000604051808303816000865af19150503d80600081146103b4576040519150601f19603f3d011682016040523d82523d6000602084013e6103b9565b606091505b509092509050816103cb573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167fd24dbf5e9299ce53c3aa9f7227ff1cc8441c2faae04509aa370ca3703385d6b4828060200190518101906104179190610dca565b60405190815260200160405180910390a25060019392505050565b61045660405180606001604052806000815260200160008152602001606081525090565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152600090819061040d90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f361592d700000000000000000000000000000000000000000000000000000000179052516105029190610d9b565b600060405180830381855afa9150503d806000811461053d576040519150601f19603f3d011682016040523d82523d6000602084013e610542565b606091505b50909250905081610554573d60208201fd5b808060200190518101906105689190610ead565b949350505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5990dc2b0000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610d9b565b6040513360248201526000908190819061040d90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167faeffaa4700000000000000000000000000000000000000000000000000000000179052516106759190610d9b565b6000604051808303816000865af19150503d80600081146106b2576040519150601f19603f3d011682016040523d82523d6000602084013e6106b7565b606091505b509092509050816106c9573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5828060200190518101906107159190610dca565b60405190815260200160405180910390a260019250505090565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fd2c80b0000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610d9b565b600081600003610808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a20756e626f6e64416d6f756e74206973207a65726f00000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd15a4d6000000000000000000000000000000000000000000000000000000000179052516103779190610d9b565b600081600003610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4561726e696e673a20626f6e64416d6f756e74206973207a65726f000000000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa515366a00000000000000000000000000000000000000000000000000000000179052516109ae9190610d9b565b6000604051808303816000865af19150503d80600081146109eb576040519150601f19603f3d011682016040523d82523d6000602084013e6109f0565b606091505b50909250905081610a02573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167fd0a009034e24a39106653c4903cf28b1947b8a9964d03206648e0f0a5de74a46828060200190518101906104179190610dca565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc3e07c0400000000000000000000000000000000000000000000000000000000179052905160009182918291829161040d91610abc91610d9b565b600060405180830381855afa9150503d8060008114610af7576040519150601f19603f3d011682016040523d82523d6000602084013e610afc565b606091505b50909250905081610b0e573d60208201fd5b80806020019051810190610b229190610fba565b9350935050509091565b600081600003610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a207265626f6e64416d6f756e74206973207a65726f00000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f92d1b7840000000000000000000000000000000000000000000000000000000017905251610c359190610d9b565b6000604051808303816000865af19150503d8060008114610c72576040519150601f19603f3d011682016040523d82523d6000602084013e610c77565b606091505b50909250905081610c89573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167feb3e12bfc0f5c64812948cc1e4399dae343d1c4a1dc6669996d331b66b5626bd828060200190518101906104179190610dca565b600060208284031215610ce757600080fd5b5035919050565b600060208284031215610d0057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610d2457600080fd5b9392505050565b602080825282518282015282810151604080840191909152808401516060808501528051608085018190526000939291830191849160a08701905b80841015610d8f5784518051835286015186830152938501936001939093019290820190610d66565b50979650505050505050565b6000825160005b81811015610dbc5760208186018101518583015201610da2565b506000920191825250919050565b600060208284031215610ddc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610e3557610e35610de3565b60405290565b6040805190810167ffffffffffffffff81118282101715610e3557610e35610de3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610ea557610ea5610de3565b604052919050565b60006020808385031215610ec057600080fd5b825167ffffffffffffffff80821115610ed857600080fd5b9084019060608287031215610eec57600080fd5b610ef4610e12565b82518152838301518482015260408084015183811115610f1357600080fd5b80850194505087601f850112610f2857600080fd5b835183811115610f3a57610f3a610de3565b610f48868260051b01610e5e565b818152868101945060069190911b850186019089821115610f6857600080fd5b948601945b81861015610fa85782868b031215610f855760008081fd5b610f8d610e3b565b86518152878701518882015285529482019493860193610f6d565b91830191909152509695505050505050565b60008060408385031215610fcd57600080fd5b50508051602090910151909290915056fea2646970667358221220b533cf423993dc7c98b90da85b433f0880191beca61deb880ba7bdc4e4012efc64736f6c63430008120033" ] ] \ No newline at end of file diff --git a/resources/deployedBytecodes.json b/resources/deployedBytecodes.json index dc4f0de..e3beec7 100644 --- a/resources/deployedBytecodes.json +++ b/resources/deployedBytecodes.json @@ -44,6 +44,11 @@ "0x000000000000000000020000000002020000000d", "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c806370a0823111610081578063a457c2d71161005b578063a457c2d71461019e578063a9059cbb146101b1578063dd62ed3e146101c457600080fd5b806370a0823114610170578063871069c01461018357806395d89b411461019657600080fd5b806323b872dd116100b257806323b872dd14610130578063313ce56714610143578063395093511461015d57600080fd5b806306fdde03146100d9578063095ea7b3146100f757806318160ddd1461011a575b600080fd5b6100e1610208565b6040516100ee9190610ed8565b60405180910390f35b61010a610105366004610f52565b610217565b60405190151581526020016100ee565b610122610231565b6040519081526020016100ee565b61010a61013e366004610f7c565b61023b565b61014b61025f565b60405160ff90911681526020016100ee565b61010a61016b366004610f52565b610269565b61012261017e366004610fb8565b6102b3565b61010a610191366004610fda565b6102be565b6100e16103bb565b61010a6101ac366004610f52565b6103c5565b61010a6101bf366004610f52565b610494565b6101226101d2366004610ffc565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825291909152205490565b60606102126104a2565b905090565b60003361022581858561057d565b60019150505b92915050565b600061021261072f565b600033610249858285610802565b6102548585856108d7565b506001949350505050565b6000610212610a87565b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061022590829086906102ae90879061102f565b61057d565b600061022b82610b5a565b600033838203610355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f45524332303a207472616e7366657220746f20746865207a65726f204163636f60448201527f756e74496433320000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610360818585610c76565b838173ffffffffffffffffffffffffffffffffffffffff167f1d17b5770b13229fb9a0fbb368edadb0cd26837679bf04920d26031ad8fd6bdc856040516103a991815260200190565b60405180910390a35060019392505050565b6060610212610d8b565b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161034c565b610254828686840361057d565b6000336102258185856108d7565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde030000000000000000000000000000000000000000000000000000000017905290516060916000918291610400916105109190611069565b600060405180830381855afa9150503d806000811461054b576040519150601f19603f3d011682016040523d82523d6000602084013e610550565b606091505b50909250905081610562573d60208201fd5b8080602001905181019061057691906110b4565b9250505090565b73ffffffffffffffffffffffffffffffffffffffff831661061f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff82166106c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f18160ddd000000000000000000000000000000000000000000000000000000001790529051600091829182916104009161079c9190611069565b600060405180830381855afa9150503d80600081146107d7576040519150601f19603f3d011682016040523d82523d6000602084013e6107dc565b606091505b509092509050816107ee573d60208201fd5b80806020019051810190610576919061117f565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260208181526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108d157818110156108c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161034c565b6108d1848484840361057d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161034c565b610a28838383610df9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161072291815260200190565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829161040091610af49190611069565b600060405180830381855afa9150503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b50909250905081610b46573d60208201fd5b808060200190518101906105769190611198565b60405173ffffffffffffffffffffffffffffffffffffffff821660248201526000908190819061040090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905251610c089190611069565b600060405180830381855afa9150503d8060008114610c43576040519150601f19603f3d011682016040523d82523d6000602084013e610c48565b606091505b50909250905081610c5a573d60208201fd5b80806020019051810190610c6e919061117f565b949350505050565b60405173ffffffffffffffffffffffffffffffffffffffff841660248201526044810183905260648101829052600090819061040090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f895904980000000000000000000000000000000000000000000000000000000017905251610d309190611069565b6000604051808303816000865af19150503d8060008114610d6d576040519150601f19603f3d011682016040523d82523d6000602084013e610d72565b606091505b50909250905081610d84573d60208201fd5b5050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b410000000000000000000000000000000000000000000000000000000017905290516060916000918291610400916105109190611069565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528316604482015260648101829052600090819061040090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbeabacc80000000000000000000000000000000000000000000000000000000017905251610d309190611069565b60005b83811015610ecf578181015183820152602001610eb7565b50506000910152565b6020815260008251806020840152610ef7816040850160208701610eb4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4d57600080fd5b919050565b60008060408385031215610f6557600080fd5b610f6e83610f29565b946020939093013593505050565b600080600060608486031215610f9157600080fd5b610f9a84610f29565b9250610fa860208501610f29565b9150604084013590509250925092565b600060208284031215610fca57600080fd5b610fd382610f29565b9392505050565b60008060408385031215610fed57600080fd5b50508035926020909101359150565b6000806040838503121561100f57600080fd5b61101883610f29565b915061102660208401610f29565b90509250929050565b8082018082111561022b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000825161107b818460208701610eb4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156110c657600080fd5b815167ffffffffffffffff808211156110de57600080fd5b818401915084601f8301126110f257600080fd5b81518181111561110457611104611085565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561114a5761114a611085565b8160405282815287602084870101111561116357600080fd5b611174836020830160208801610eb4565b979650505050505050565b60006020828403121561119157600080fd5b5051919050565b6000602082840312156111aa57600080fd5b815160ff81168114610fd357600080fdfea2646970667358221220054e18bc0b3f0a07464c0663a4015c3aa60d5e66cf648752fbf056e6eeefc5e864736f6c63430008120033" ], + [ + "LP_LDOT_JITOSOL", + "0x00000000000000000002000000000301A7fB0045", + "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c806370a0823111610081578063a457c2d71161005b578063a457c2d71461019e578063a9059cbb146101b1578063dd62ed3e146101c457600080fd5b806370a0823114610170578063871069c01461018357806395d89b411461019657600080fd5b806323b872dd116100b257806323b872dd14610130578063313ce56714610143578063395093511461015d57600080fd5b806306fdde03146100d9578063095ea7b3146100f757806318160ddd1461011a575b600080fd5b6100e1610208565b6040516100ee9190610ed8565b60405180910390f35b61010a610105366004610f52565b610217565b60405190151581526020016100ee565b610122610231565b6040519081526020016100ee565b61010a61013e366004610f7c565b61023b565b61014b61025f565b60405160ff90911681526020016100ee565b61010a61016b366004610f52565b610269565b61012261017e366004610fb8565b6102b3565b61010a610191366004610fda565b6102be565b6100e16103bb565b61010a6101ac366004610f52565b6103c5565b61010a6101bf366004610f52565b610494565b6101226101d2366004610ffc565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825291909152205490565b60606102126104a2565b905090565b60003361022581858561057d565b60019150505b92915050565b600061021261072f565b600033610249858285610802565b6102548585856108d7565b506001949350505050565b6000610212610a87565b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061022590829086906102ae90879061102f565b61057d565b600061022b82610b5a565b600033838203610355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f45524332303a207472616e7366657220746f20746865207a65726f204163636f60448201527f756e74496433320000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610360818585610c76565b838173ffffffffffffffffffffffffffffffffffffffff167f1d17b5770b13229fb9a0fbb368edadb0cd26837679bf04920d26031ad8fd6bdc856040516103a991815260200190565b60405180910390a35060019392505050565b6060610212610d8b565b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161034c565b610254828686840361057d565b6000336102258185856108d7565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde030000000000000000000000000000000000000000000000000000000017905290516060916000918291610400916105109190611069565b600060405180830381855afa9150503d806000811461054b576040519150601f19603f3d011682016040523d82523d6000602084013e610550565b606091505b50909250905081610562573d60208201fd5b8080602001905181019061057691906110b4565b9250505090565b73ffffffffffffffffffffffffffffffffffffffff831661061f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff82166106c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f18160ddd000000000000000000000000000000000000000000000000000000001790529051600091829182916104009161079c9190611069565b600060405180830381855afa9150503d80600081146107d7576040519150601f19603f3d011682016040523d82523d6000602084013e6107dc565b606091505b509092509050816107ee573d60208201fd5b80806020019051810190610576919061117f565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260208181526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108d157818110156108c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161034c565b6108d1848484840361057d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161034c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161034c565b610a28838383610df9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161072291815260200190565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829161040091610af49190611069565b600060405180830381855afa9150503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b50909250905081610b46573d60208201fd5b808060200190518101906105769190611198565b60405173ffffffffffffffffffffffffffffffffffffffff821660248201526000908190819061040090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905251610c089190611069565b600060405180830381855afa9150503d8060008114610c43576040519150601f19603f3d011682016040523d82523d6000602084013e610c48565b606091505b50909250905081610c5a573d60208201fd5b80806020019051810190610c6e919061117f565b949350505050565b60405173ffffffffffffffffffffffffffffffffffffffff841660248201526044810183905260648101829052600090819061040090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f895904980000000000000000000000000000000000000000000000000000000017905251610d309190611069565b6000604051808303816000865af19150503d8060008114610d6d576040519150601f19603f3d011682016040523d82523d6000602084013e610d72565b606091505b50909250905081610d84573d60208201fd5b5050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b410000000000000000000000000000000000000000000000000000000017905290516060916000918291610400916105109190611069565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528316604482015260648101829052600090819061040090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbeabacc80000000000000000000000000000000000000000000000000000000017905251610d309190611069565b60005b83811015610ecf578181015183820152602001610eb7565b50506000910152565b6020815260008251806020840152610ef7816040850160208701610eb4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4d57600080fd5b919050565b60008060408385031215610f6557600080fd5b610f6e83610f29565b946020939093013593505050565b600080600060608486031215610f9157600080fd5b610f9a84610f29565b9250610fa860208501610f29565b9150604084013590509250925092565b600060208284031215610fca57600080fd5b610fd382610f29565b9392505050565b60008060408385031215610fed57600080fd5b50508035926020909101359150565b6000806040838503121561100f57600080fd5b61101883610f29565b915061102660208401610f29565b90509250929050565b8082018082111561022b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000825161107b818460208701610eb4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156110c657600080fd5b815167ffffffffffffffff808211156110de57600080fd5b818401915084601f8301126110f257600080fd5b81518181111561110457611104611085565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561114a5761114a611085565b8160405282815287602084870101111561116357600080fd5b611174836020830160208801610eb4565b979650505050505050565b60006020828403121561119157600080fd5b5051919050565b6000602082840312156111aa57600080fd5b815160ff81168114610fd357600080fdfea2646970667358221220054e18bc0b3f0a07464c0663a4015c3aa60d5e66cf648752fbf056e6eeefc5e864736f6c63430008120033" + ], [ "SA_DOT", "0x0000000000000000000300000000000000000000", @@ -402,7 +407,12 @@ [ "DEX", "0x0000000000000000000000000000000000000803", - "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063dbcd19a21161005b578063dbcd19a2146100fc578063e2dc85dc1461010f578063f4f31ede14610122578063ffd73c4a1461014a57600080fd5b80633d8d96201461008d5780634d60beb1146100b55780636fc4b4e5146100d657806391c98a2a146100e9575b600080fd5b6100a061009b3660046116cf565b610182565b60405190151581526020015b60405180910390f35b6100c86100c336600461171d565b610439565b6040519081526020016100ac565b6100a06100e43660046116cf565b610691565b6100a06100f7366004611762565b61092f565b6100c861010a36600461171d565b610c89565b6100a061011d366004611762565b610e72565b6101356101303660046117b3565b611171565b604080519283526020830191909152016100ac565b61015d6101583660046117b3565b611395565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6000805b845181101561025557600073ffffffffffffffffffffffffffffffffffffffff168582815181106101b9576101b96117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064015b60405180910390fd5b8061024d8161181b565b915050610186565b50826000036102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016102f394939291906118cb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9782ac810000000000000000000000000000000000000000000000000000000017905251610374919061190d565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b509092509050816103c8573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a8783806020019051810190610415919061193c565b8860405161042593929190611955565b60405180910390a250600195945050505050565b6000805b835181101561050757600073ffffffffffffffffffffffffffffffffffffffff16848281518110610470576104706117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036104f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b806104ff8161181b565b91505061043d565b5081600003610572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016105a192919061197a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4d60beb10000000000000000000000000000000000000000000000000000000017905251610622919061190d565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905081610674573d60208201fd5b80806020019051810190610688919061193c565b95945050505050565b6000805b845181101561075f57600073ffffffffffffffffffffffffffffffffffffffff168582815181106106c8576106c86117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361074d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b806107578161181b565b915050610695565b50826000036107ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016107fd94939291906118cb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f579baa18000000000000000000000000000000000000000000000000000000001790525161087e919061190d565b6000604051808303816000865af19150503d80600081146108bb576040519150601f19603f3d011682016040523d82523d6000602084013e6108c0565b606091505b509092509050816108d2573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a878784806020019051810190610920919061193c565b60405161042593929190611955565b600073ffffffffffffffffffffffffffffffffffffffff86166109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8516610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b83600003610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4445583a206d6178416d6f756e7441206973207a65726f000000000000000000604482015260640161023a565b82600003610aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4445583a206d6178416d6f756e7442206973207a65726f000000000000000000604482015260640161023a565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f67088d590000000000000000000000000000000000000000000000000000000017905251610bce919061190d565b6000604051808303816000865af19150503d8060008114610c0b576040519150601f19603f3d011682016040523d82523d6000602084013e610c10565b606091505b50909250905081610c22573d60208201fd5b604080518781526020810187905273ffffffffffffffffffffffffffffffffffffffff808a1692908b169133917f5b6f5f6550282279c4e72b95a8ba538bea92c64dec9e8c7c08a556d4457225c891015b60405180910390a4506001979650505050505050565b6000805b8351811015610d5757600073ffffffffffffffffffffffffffffffffffffffff16848281518110610cc057610cc06117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b80610d4f8161181b565b915050610c8d565b5081600003610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff168585604051602401610df192919061197a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fdbcd19a20000000000000000000000000000000000000000000000000000000017905251610622919061190d565b600073ffffffffffffffffffffffffffffffffffffffff8616610ef1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8516610f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b83600003610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4445583a2072656d6f76655368617265206973207a65726f0000000000000000604482015260640161023a565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3531533200000000000000000000000000000000000000000000000000000000179052516110a7919061190d565b6000604051808303816000865af19150503d80600081146110e4576040519150601f19603f3d011682016040523d82523d6000602084013e6110e9565b606091505b509092509050816110fb573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f038116623990e7d0fed04a27e35b5dc88000ea942b37360c5898ae750bfa5df689604051610c7391815260200190565b60008073ffffffffffffffffffffffffffffffffffffffff84166111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff831661126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b60405173ffffffffffffffffffffffffffffffffffffffff858116602483015284166044820152600090819061040590606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff4f31ede0000000000000000000000000000000000000000000000000000000017905251611322919061190d565b600060405180830381855afa9150503d806000811461135d576040519150601f19603f3d011682016040523d82523d6000602084013e611362565b606091505b50909250905081611374573d60208201fd5b80806020019051810190611388919061199c565b9350935050509250929050565b600073ffffffffffffffffffffffffffffffffffffffff8316611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8216611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283166044820152600090819061040590606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffd73c4a0000000000000000000000000000000000000000000000000000000017905251611545919061190d565b600060405180830381855afa9150503d8060008114611580576040519150601f19603f3d011682016040523d82523d6000602084013e611585565b606091505b50909250905081611597573d60208201fd5b8080602001905181019061068891906119c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146115fc57600080fd5b50565b803561160a816115da565b919050565b600082601f83011261162057600080fd5b8135602067ffffffffffffffff8083111561163d5761163d6115ab565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715611680576116806115ab565b60405293845285810183019383810192508785111561169e57600080fd5b83870191505b848210156116c4576116b5826115ff565b835291830191908301906116a4565b979650505050505050565b6000806000606084860312156116e457600080fd5b833567ffffffffffffffff8111156116fb57600080fd5b6117078682870161160f565b9660208601359650604090950135949350505050565b6000806040838503121561173057600080fd5b823567ffffffffffffffff81111561174757600080fd5b6117538582860161160f565b95602094909401359450505050565b600080600080600060a0868803121561177a57600080fd5b8535611785816115da565b94506020860135611795816115da565b94979496505050506040830135926060810135926080909101359150565b600080604083850312156117c657600080fd5b82356117d1816115da565b915060208301356117e1816115da565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611873577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600081518084526020808501945080840160005b838110156118c057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161188e565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006118fa608083018661187a565b6040830194909452506060015292915050565b6000825160005b8181101561192e5760208186018101518583015201611914565b506000920191825250919050565b60006020828403121561194e57600080fd5b5051919050565b606081526000611968606083018661187a565b60208301949094525060400152919050565b60408152600061198d604083018561187a565b90508260208301529392505050565b600080604083850312156119af57600080fd5b505080516020909101519092909150565b6000602082840312156119d257600080fd5b81516119dd816115da565b939250505056fea26469706673582212203571b085ba38af00af94c1024e11fe466dc0cf2492619dd503ef2e797a627b5464736f6c63430008120033" + "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063dbcd19a21161005b578063dbcd19a2146100fc578063e2dc85dc1461010f578063f4f31ede14610122578063ffd73c4a1461014a57600080fd5b80633d8d96201461008d5780634d60beb1146100b55780636fc4b4e5146100d657806391c98a2a146100e9575b600080fd5b6100a061009b3660046116cf565b610182565b60405190151581526020015b60405180910390f35b6100c86100c336600461171d565b610439565b6040519081526020016100ac565b6100a06100e43660046116cf565b610691565b6100a06100f7366004611762565b61092f565b6100c861010a36600461171d565b610c89565b6100a061011d366004611762565b610e72565b6101356101303660046117b3565b611171565b604080519283526020830191909152016100ac565b61015d6101583660046117b3565b611395565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6000805b845181101561025557600073ffffffffffffffffffffffffffffffffffffffff168582815181106101b9576101b96117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064015b60405180910390fd5b8061024d8161181b565b915050610186565b50826000036102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016102f394939291906118cb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9782ac810000000000000000000000000000000000000000000000000000000017905251610374919061190d565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b509092509050816103c8573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a8783806020019051810190610415919061193c565b8860405161042593929190611955565b60405180910390a250600195945050505050565b6000805b835181101561050757600073ffffffffffffffffffffffffffffffffffffffff16848281518110610470576104706117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036104f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b806104ff8161181b565b91505061043d565b5081600003610572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016105a192919061197a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4d60beb10000000000000000000000000000000000000000000000000000000017905251610622919061190d565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905081610674573d60208201fd5b80806020019051810190610688919061193c565b95945050505050565b6000805b845181101561075f57600073ffffffffffffffffffffffffffffffffffffffff168582815181106106c8576106c86117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361074d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b806107578161181b565b915050610695565b50826000036107ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016107fd94939291906118cb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f579baa18000000000000000000000000000000000000000000000000000000001790525161087e919061190d565b6000604051808303816000865af19150503d80600081146108bb576040519150601f19603f3d011682016040523d82523d6000602084013e6108c0565b606091505b509092509050816108d2573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a878784806020019051810190610920919061193c565b60405161042593929190611955565b600073ffffffffffffffffffffffffffffffffffffffff86166109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8516610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b83600003610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4445583a206d6178416d6f756e7441206973207a65726f000000000000000000604482015260640161023a565b82600003610aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4445583a206d6178416d6f756e7442206973207a65726f000000000000000000604482015260640161023a565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f67088d590000000000000000000000000000000000000000000000000000000017905251610bce919061190d565b6000604051808303816000865af19150503d8060008114610c0b576040519150601f19603f3d011682016040523d82523d6000602084013e610c10565b606091505b50909250905081610c22573d60208201fd5b604080518781526020810187905273ffffffffffffffffffffffffffffffffffffffff808a1692908b169133917f5b6f5f6550282279c4e72b95a8ba538bea92c64dec9e8c7c08a556d4457225c891015b60405180910390a4506001979650505050505050565b6000805b8351811015610d5757600073ffffffffffffffffffffffffffffffffffffffff16848281518110610cc057610cc06117ec565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f2061646472657373000000000000604482015260640161023a565b80610d4f8161181b565b915050610c8d565b5081600003610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f00000000000000604482015260640161023a565b60008061040573ffffffffffffffffffffffffffffffffffffffff168585604051602401610df192919061197a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fdbcd19a20000000000000000000000000000000000000000000000000000000017905251610622919061190d565b600073ffffffffffffffffffffffffffffffffffffffff8616610ef1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8516610f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b83600003610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4445583a2072656d6f76655368617265206973207a65726f0000000000000000604482015260640161023a565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3531533200000000000000000000000000000000000000000000000000000000179052516110a7919061190d565b6000604051808303816000865af19150503d80600081146110e4576040519150601f19603f3d011682016040523d82523d6000602084013e6110e9565b606091505b509092509050816110fb573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f038116623990e7d0fed04a27e35b5dc88000ea942b37360c5898ae750bfa5df689604051610c7391815260200190565b60008073ffffffffffffffffffffffffffffffffffffffff84166111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff831661126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b60405173ffffffffffffffffffffffffffffffffffffffff858116602483015284166044820152600090819061040590606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff4f31ede0000000000000000000000000000000000000000000000000000000017905251611322919061190d565b600060405180830381855afa9150503d806000811461135d576040519150601f19603f3d011682016040523d82523d6000602084013e611362565b606091505b50909250905081611374573d60208201fd5b80806020019051810190611388919061199c565b9350935050509250929050565b600073ffffffffffffffffffffffffffffffffffffffff8316611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f20616464726573730000000000604482015260640161023a565b73ffffffffffffffffffffffffffffffffffffffff8216611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f20616464726573730000000000604482015260640161023a565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283166044820152600090819061040590606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffd73c4a0000000000000000000000000000000000000000000000000000000017905251611545919061190d565b600060405180830381855afa9150503d8060008114611580576040519150601f19603f3d011682016040523d82523d6000602084013e611585565b606091505b50909250905081611597573d60208201fd5b8080602001905181019061068891906119c0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146115fc57600080fd5b50565b803561160a816115da565b919050565b600082601f83011261162057600080fd5b8135602067ffffffffffffffff8083111561163d5761163d6115ab565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715611680576116806115ab565b60405293845285810183019383810192508785111561169e57600080fd5b83870191505b848210156116c4576116b5826115ff565b835291830191908301906116a4565b979650505050505050565b6000806000606084860312156116e457600080fd5b833567ffffffffffffffff8111156116fb57600080fd5b6117078682870161160f565b9660208601359650604090950135949350505050565b6000806040838503121561173057600080fd5b823567ffffffffffffffff81111561174757600080fd5b6117538582860161160f565b95602094909401359450505050565b600080600080600060a0868803121561177a57600080fd5b8535611785816115da565b94506020860135611795816115da565b94979496505050506040830135926060810135926080909101359150565b600080604083850312156117c657600080fd5b82356117d1816115da565b915060208301356117e1816115da565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611873577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600081518084526020808501945080840160005b838110156118c057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161188e565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006118fa608083018661187a565b6040830194909452506060015292915050565b6000825160005b8181101561192e5760208186018101518583015201611914565b506000920191825250919050565b60006020828403121561194e57600080fd5b5051919050565b606081526000611968606083018661187a565b60208301949094525060400152919050565b60408152600061198d604083018561187a565b90508260208301529392505050565b600080604083850312156119af57600080fd5b505080516020909101519092909150565b6000602082840312156119d257600080fd5b81516119dd816115da565b939250505056fea2646970667358221220a9b9cc3e4cbe6cc14fe43347a866bcb13115b0bf4789cf2e67be30fe7975219264736f6c63430008120033" + ], + [ + "DEXV2", + "0x0000000000000000000000000000000000000803", + "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806392ea19911161008c578063e2dc85dc11610066578063e2dc85dc146101e5578063f1e908f8146101f8578063f4f31ede1461020b578063ffd73c4a1461021e57600080fd5b806392ea1991146101ac578063aa02e9d3146101bf578063dbcd19a2146101d257600080fd5b80635859df34116100c85780635859df34146101605780636fc4b4e5146101735780638ef239cf1461018657806391c98a2a1461019957600080fd5b8063165c7c9a146100ef5780633d8d96201461011c5780634d60beb11461013f575b600080fd5b6101026100fd366004611fd0565b610256565b604080519283526020830191909152015b60405180910390f35b61012f61012a3660046120da565b61042d565b6040519015158152602001610113565b61015261014d366004612128565b61068d565b604051908152602001610113565b61010261016e366004611fd0565b610893565b61012f6101813660046120da565b6109f2565b61010261019436600461216d565b610c3e565b61012f6101a73660046121b8565b610e19565b61012f6101ba366004612209565b6110ed565b61012f6101cd36600461216d565b611371565b6101526101e0366004612128565b61159a565b61012f6101f33660046121b8565b611731565b61012f61020636600461216d565b6119c4565b610102610219366004611fd0565b611c78565b61023161022c366004611fd0565b611dd7565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b60008073ffffffffffffffffffffffffffffffffffffffff84166102c15760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166103245760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260009081906104059060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f165c7c9a00000000000000000000000000000000000000000000000000000000179052516103ba919061224f565b600060405180830381855afa9150503d80600081146103f5576040519150601f19603f3d011682016040523d82523d6000602084013e6103fa565b606091505b5090925090508161040c573d60208201fd5b80806020019051810190610420919061227e565b9350935050509250929050565b6000805b84518110156104e157600073ffffffffffffffffffffffffffffffffffffffff16858281518110610464576104646122a2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036104cf5760405162461bcd60e51b815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064016102b8565b806104d9816122d1565b915050610431565b50826000036105325760405162461bcd60e51b815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f0000000000000060448201526064016102b8565b60008061040573ffffffffffffffffffffffffffffffffffffffff16338787876040516024016105659493929190612381565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9782ac8100000000000000000000000000000000000000000000000000000000179052516105c8919061224f565b6000604051808303816000865af19150503d8060008114610605576040519150601f19603f3d011682016040523d82523d6000602084013e61060a565b606091505b5090925090508161061c573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a878380602001905181019061066991906123c3565b88604051610679939291906123dc565b60405180910390a250600195945050505050565b6000805b835181101561074157600073ffffffffffffffffffffffffffffffffffffffff168482815181106106c4576106c46122a2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361072f5760405162461bcd60e51b815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064016102b8565b80610739816122d1565b915050610691565b50816000036107925760405162461bcd60e51b815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f0000000000000060448201526064016102b8565b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016107c1929190612401565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4d60beb10000000000000000000000000000000000000000000000000000000017905251610824919061224f565b600060405180830381855afa9150503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b50909250905081610876573d60208201fd5b8080602001905181019061088a91906123c3565b95945050505050565b60008073ffffffffffffffffffffffffffffffffffffffff84166108f95760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff831661095c5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260009081906104059060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5859df3400000000000000000000000000000000000000000000000000000000179052516103ba919061224f565b6000805b8451811015610aa657600073ffffffffffffffffffffffffffffffffffffffff16858281518110610a2957610a296122a2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610a945760405162461bcd60e51b815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064016102b8565b80610a9e816122d1565b9150506109f6565b5082600003610af75760405162461bcd60e51b815260206004820152601960248201527f4445583a20737570706c79416d6f756e74206973207a65726f0000000000000060448201526064016102b8565b60008061040573ffffffffffffffffffffffffffffffffffffffff1633878787604051602401610b2a9493929190612381565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f579baa180000000000000000000000000000000000000000000000000000000017905251610b8d919061224f565b6000604051808303816000865af19150503d8060008114610bca576040519150601f19603f3d011682016040523d82523d6000602084013e610bcf565b606091505b50909250905081610be1573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a878784806020019051810190610c2f91906123c3565b604051610679939291906123dc565b60008073ffffffffffffffffffffffffffffffffffffffff8416610ca45760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8316610d075760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff868116602483015285811660448301528416606482015260009081906104059060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7d3d27f20000000000000000000000000000000000000000000000000000000017905251610da5919061224f565b600060405180830381855afa9150503d8060008114610de0576040519150601f19603f3d011682016040523d82523d6000602084013e610de5565b606091505b50909250905081610df7573d60208201fd5b80806020019051810190610e0b919061227e565b935093505050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff8616610e7e5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8516610ee15760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b83600003610f315760405162461bcd60e51b815260206004820152601760248201527f4445583a206d6178416d6f756e7441206973207a65726f00000000000000000060448201526064016102b8565b82600003610f815760405162461bcd60e51b815260206004820152601760248201527f4445583a206d6178416d6f756e7442206973207a65726f00000000000000000060448201526064016102b8565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f67088d590000000000000000000000000000000000000000000000000000000017905251611032919061224f565b6000604051808303816000865af19150503d806000811461106f576040519150601f19603f3d011682016040523d82523d6000602084013e611074565b606091505b50909250905081611086573d60208201fd5b604080518781526020810187905273ffffffffffffffffffffffffffffffffffffffff808a1692908b169133917f5b6f5f6550282279c4e72b95a8ba538bea92c64dec9e8c7c08a556d4457225c891015b60405180910390a4506001979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff85166111525760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff84166111b55760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b821515806111c257508115155b61120e5760405162461bcd60e51b815260206004820181905260248201527f4445583a20696e76616c696420636f6e747269627574696f6e20616d6f756e7460448201526064016102b8565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8681166044830152851660648201526084810184905260a4810183905260009081906104059060c40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97a2051600000000000000000000000000000000000000000000000000000000179052516112b8919061224f565b6000604051808303816000865af19150503d80600081146112f5576040519150601f19603f3d011682016040523d82523d6000602084013e6112fa565b606091505b5090925090508161130c573d60208201fd5b604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff80891692908a169133917f8d1357284615c1e124990863d94a78bee5ad0b610eda8b2e250d792224bfa520910160405180910390a45060019695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff84166113d65760405162461bcd60e51b815260206004820152601860248201527f4445583a2077686f206973207a65726f2061646472657373000000000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff83166114395760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff821661149c5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff858116602483015284811660448301528316606482015260009081906104059060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167faa02e9d3000000000000000000000000000000000000000000000000000000001790525161153a919061224f565b6000604051808303816000865af19150503d8060008114611577576040519150601f19603f3d011682016040523d82523d6000602084013e61157c565b606091505b5090925090508161158e573d60208201fd5b50600195945050505050565b6000805b835181101561164e57600073ffffffffffffffffffffffffffffffffffffffff168482815181106115d1576115d16122a2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361163c5760405162461bcd60e51b815260206004820152601a60248201527f4445583a20746f6b656e206973207a65726f206164647265737300000000000060448201526064016102b8565b80611646816122d1565b91505061159e565b508160000361169f5760405162461bcd60e51b815260206004820152601960248201527f4445583a20746172676574416d6f756e74206973207a65726f0000000000000060448201526064016102b8565b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016116ce929190612401565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fdbcd19a20000000000000000000000000000000000000000000000000000000017905251610824919061224f565b600073ffffffffffffffffffffffffffffffffffffffff86166117965760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff85166117f95760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b836000036118495760405162461bcd60e51b815260206004820152601860248201527f4445583a2072656d6f76655368617265206973207a65726f000000000000000060448201526064016102b8565b60405133602482015273ffffffffffffffffffffffffffffffffffffffff8781166044830152861660648201526084810185905260a4810184905260c4810183905260009081906104059060e40160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3531533200000000000000000000000000000000000000000000000000000000179052516118fa919061224f565b6000604051808303816000865af19150503d8060008114611937576040519150601f19603f3d011682016040523d82523d6000602084013e61193c565b606091505b5090925090508161194e573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f038116623990e7d0fed04a27e35b5dc88000ea942b37360c5898ae750bfa5df6896040516110d791815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8416611a295760405162461bcd60e51b815260206004820152601860248201527f4445583a2077686f206973207a65726f2061646472657373000000000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8316611a8c5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8216611aef5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff858116602483015284811660448301528316606482015260009081906104059060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff1e908f80000000000000000000000000000000000000000000000000000000017905251611b8d919061224f565b6000604051808303816000865af19150503d8060008114611bca576040519150601f19603f3d011682016040523d82523d6000602084013e611bcf565b606091505b50909250905081611be1573d60208201fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f0a871e96c44907fad6faf1446ccd03932216813ea3a548e12e72a217d7e8c96784806020019051810190611c5b91906123c3565b60405190815260200160405180910390a450600195945050505050565b60008073ffffffffffffffffffffffffffffffffffffffff8416611cde5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8316611d415760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260009081906104059060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff4f31ede00000000000000000000000000000000000000000000000000000000179052516103ba919061224f565b600073ffffffffffffffffffffffffffffffffffffffff8316611e3c5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e41206973207a65726f2061646472657373000000000060448201526064016102b8565b73ffffffffffffffffffffffffffffffffffffffff8216611e9f5760405162461bcd60e51b815260206004820152601b60248201527f4445583a20746f6b656e42206973207a65726f2061646472657373000000000060448201526064016102b8565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528316604482015260009081906104059060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffd73c4a0000000000000000000000000000000000000000000000000000000017905251611f35919061224f565b600060405180830381855afa9150503d8060008114611f70576040519150601f19603f3d011682016040523d82523d6000602084013e611f75565b606091505b50909250905081611f87573d60208201fd5b8080602001905181019061088a9190612423565b73ffffffffffffffffffffffffffffffffffffffff81168114611fbd57600080fd5b50565b8035611fcb81611f9b565b919050565b60008060408385031215611fe357600080fd5b8235611fee81611f9b565b91506020830135611ffe81611f9b565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261204957600080fd5b8135602067ffffffffffffffff8083111561206657612066612009565b8260051b604051601f19603f8301168101818110848211171561208b5761208b612009565b6040529384528581018301938381019250878511156120a957600080fd5b83870191505b848210156120cf576120c082611fc0565b835291830191908301906120af565b979650505050505050565b6000806000606084860312156120ef57600080fd5b833567ffffffffffffffff81111561210657600080fd5b61211286828701612038565b9660208601359650604090950135949350505050565b6000806040838503121561213b57600080fd5b823567ffffffffffffffff81111561215257600080fd5b61215e85828601612038565b95602094909401359450505050565b60008060006060848603121561218257600080fd5b833561218d81611f9b565b9250602084013561219d81611f9b565b915060408401356121ad81611f9b565b809150509250925092565b600080600080600060a086880312156121d057600080fd5b85356121db81611f9b565b945060208601356121eb81611f9b565b94979496505050506040830135926060810135926080909101359150565b6000806000806080858703121561221f57600080fd5b843561222a81611f9b565b9350602085013561223a81611f9b565b93969395505050506040820135916060013590565b6000825160005b818110156122705760208186018101518583015201612256565b506000920191825250919050565b6000806040838503121561229157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612329577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600081518084526020808501945080840160005b8381101561237657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612344565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006123b06080830186612330565b6040830194909452506060015292915050565b6000602082840312156123d557600080fd5b5051919050565b6060815260006123ef6060830186612330565b60208301949094525060400152919050565b6040815260006124146040830185612330565b90508260208301529392505050565b60006020828403121561243557600080fd5b815161244081611f9b565b939250505056fea2646970667358221220c4caa2d2c812c87c1ae3d949c009784662857384465e88145e4cbe3e5ac1b68a64736f6c63430008120033" ], [ "STABLE_ASSET", @@ -442,6 +452,6 @@ [ "EARNING", "0x000000000000000000000000000000000000080b", - "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80636fd2c80b116100765780639940686e1161005b5780639940686e1461014c578063c3e07c041461015f578063eaffb3f91461017c57600080fd5b80636fd2c80b146101315780637384977d1461013957600080fd5b8063361592d7116100a7578063361592d7146101015780635990dc2b146101215780636e373bef1461012957600080fd5b806309bfc8a1146100c357806327de9e32146100de575b600080fd5b6100cb61018f565b6040519081526020015b60405180910390f35b6100f16100ec366004610c35565b610269565b60405190151581526020016100d5565b61011461010f366004610c4e565b610432565b6040516100d59190610c8b565b6100cb610570565b6100f16105dd565b6100cb61072f565b6100f1610147366004610c35565b61079c565b6100f161015a366004610c35565b6108a5565b610167610a4e565b604080519283526020830191909152016100d5565b6100f161018a366004610c35565b610b2c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f09bfc8a10000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610cfb565b600060405180830381855afa9150503d8060008114610237576040519150601f19603f3d011682016040523d82523d6000602084013e61023c565b606091505b5090925090508161024e573d60208201fd5b808060200190518101906102629190610d2a565b9250505090565b6000816000036102da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a20756e626f6e64416d6f756e74206973207a65726f00000060448201526064015b60405180910390fd5b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa5d059ca00000000000000000000000000000000000000000000000000000000179052516103779190610cfb565b6000604051808303816000865af19150503d80600081146103b4576040519150601f19603f3d011682016040523d82523d6000602084013e6103b9565b606091505b509092509050816103cb573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167fd24dbf5e9299ce53c3aa9f7227ff1cc8441c2faae04509aa370ca3703385d6b4828060200190518101906104179190610d2a565b60405190815260200160405180910390a25060019392505050565b61045660405180606001604052806000815260200160008152602001606081525090565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152600090819061040d90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f361592d700000000000000000000000000000000000000000000000000000000179052516105029190610cfb565b600060405180830381855afa9150503d806000811461053d576040519150601f19603f3d011682016040523d82523d6000602084013e610542565b606091505b50909250905081610554573d60208201fd5b808060200190518101906105689190610e0d565b949350505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5990dc2b0000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610cfb565b6040513360248201526000908190819061040d90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167faeffaa4700000000000000000000000000000000000000000000000000000000179052516106759190610cfb565b6000604051808303816000865af19150503d80600081146106b2576040519150601f19603f3d011682016040523d82523d6000602084013e6106b7565b606091505b509092509050816106c9573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5828060200190518101906107159190610d2a565b60405190815260200160405180910390a260019250505090565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fd2c80b0000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610cfb565b600081600003610808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a20756e626f6e64416d6f756e74206973207a65726f00000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd15a4d6000000000000000000000000000000000000000000000000000000000179052516103779190610cfb565b600081600003610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4561726e696e673a20626f6e64416d6f756e74206973207a65726f000000000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa515366a00000000000000000000000000000000000000000000000000000000179052516109ae9190610cfb565b6000604051808303816000865af19150503d80600081146109eb576040519150601f19603f3d011682016040523d82523d6000602084013e6109f0565b606091505b50909250905081610a02573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167fd0a009034e24a39106653c4903cf28b1947b8a9964d03206648e0f0a5de74a46828060200190518101906104179190610d2a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc3e07c0400000000000000000000000000000000000000000000000000000000179052905160009182918291829161040d91610abc91610cfb565b600060405180830381855afa9150503d8060008114610af7576040519150601f19603f3d011682016040523d82523d6000602084013e610afc565b606091505b50909250905081610b0e573d60208201fd5b80806020019051810190610b229190610f1a565b9350935050509091565b600081600003610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a207265626f6e64416d6f756e74206973207a65726f00000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f92d1b78400000000000000000000000000000000000000000000000000000000179052516109ae9190610cfb565b600060208284031215610c4757600080fd5b5035919050565b600060208284031215610c6057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610c8457600080fd5b9392505050565b602080825282518282015282810151604080840191909152808401516060808501528051608085018190526000939291830191849160a08701905b80841015610cef5784518051835286015186830152938501936001939093019290820190610cc6565b50979650505050505050565b6000825160005b81811015610d1c5760208186018101518583015201610d02565b506000920191825250919050565b600060208284031215610d3c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610d9557610d95610d43565b60405290565b6040805190810167ffffffffffffffff81118282101715610d9557610d95610d43565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610e0557610e05610d43565b604052919050565b60006020808385031215610e2057600080fd5b825167ffffffffffffffff80821115610e3857600080fd5b9084019060608287031215610e4c57600080fd5b610e54610d72565b82518152838301518482015260408084015183811115610e7357600080fd5b80850194505087601f850112610e8857600080fd5b835183811115610e9a57610e9a610d43565b610ea8868260051b01610dbe565b818152868101945060069190911b850186019089821115610ec857600080fd5b948601945b81861015610f085782868b031215610ee55760008081fd5b610eed610d9b565b86518152878701518882015285529482019493860193610ecd565b91830191909152509695505050505050565b60008060408385031215610f2d57600080fd5b50508051602090910151909290915056fea26469706673582212209371e369556f69cfb94940414b0ab778e684e0014179ae10992d36644970755464736f6c63430008120033" + "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80636fd2c80b116100765780639940686e1161005b5780639940686e1461014c578063c3e07c041461015f578063eaffb3f91461017c57600080fd5b80636fd2c80b146101315780637384977d1461013957600080fd5b8063361592d7116100a7578063361592d7146101015780635990dc2b146101215780636e373bef1461012957600080fd5b806309bfc8a1146100c357806327de9e32146100de575b600080fd5b6100cb61018f565b6040519081526020015b60405180910390f35b6100f16100ec366004610cd5565b610269565b60405190151581526020016100d5565b61011461010f366004610cee565b610432565b6040516100d59190610d2b565b6100cb610570565b6100f16105dd565b6100cb61072f565b6100f1610147366004610cd5565b61079c565b6100f161015a366004610cd5565b6108a5565b610167610a4e565b604080519283526020830191909152016100d5565b6100f161018a366004610cd5565b610b2c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f09bfc8a10000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610d9b565b600060405180830381855afa9150503d8060008114610237576040519150601f19603f3d011682016040523d82523d6000602084013e61023c565b606091505b5090925090508161024e573d60208201fd5b808060200190518101906102629190610dca565b9250505090565b6000816000036102da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a20756e626f6e64416d6f756e74206973207a65726f00000060448201526064015b60405180910390fd5b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa5d059ca00000000000000000000000000000000000000000000000000000000179052516103779190610d9b565b6000604051808303816000865af19150503d80600081146103b4576040519150601f19603f3d011682016040523d82523d6000602084013e6103b9565b606091505b509092509050816103cb573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167fd24dbf5e9299ce53c3aa9f7227ff1cc8441c2faae04509aa370ca3703385d6b4828060200190518101906104179190610dca565b60405190815260200160405180910390a25060019392505050565b61045660405180606001604052806000815260200160008152602001606081525090565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152600090819061040d90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f361592d700000000000000000000000000000000000000000000000000000000179052516105029190610d9b565b600060405180830381855afa9150503d806000811461053d576040519150601f19603f3d011682016040523d82523d6000602084013e610542565b606091505b50909250905081610554573d60208201fd5b808060200190518101906105689190610ead565b949350505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5990dc2b0000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610d9b565b6040513360248201526000908190819061040d90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167faeffaa4700000000000000000000000000000000000000000000000000000000179052516106759190610d9b565b6000604051808303816000865af19150503d80600081146106b2576040519150601f19603f3d011682016040523d82523d6000602084013e6106b7565b606091505b509092509050816106c9573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5828060200190518101906107159190610dca565b60405190815260200160405180910390a260019250505090565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fd2c80b0000000000000000000000000000000000000000000000000000000017905290516000918291829161040d916101fc9190610d9b565b600081600003610808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a20756e626f6e64416d6f756e74206973207a65726f00000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd15a4d6000000000000000000000000000000000000000000000000000000000179052516103779190610d9b565b600081600003610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4561726e696e673a20626f6e64416d6f756e74206973207a65726f000000000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa515366a00000000000000000000000000000000000000000000000000000000179052516109ae9190610d9b565b6000604051808303816000865af19150503d80600081146109eb576040519150601f19603f3d011682016040523d82523d6000602084013e6109f0565b606091505b50909250905081610a02573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167fd0a009034e24a39106653c4903cf28b1947b8a9964d03206648e0f0a5de74a46828060200190518101906104179190610dca565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc3e07c0400000000000000000000000000000000000000000000000000000000179052905160009182918291829161040d91610abc91610d9b565b600060405180830381855afa9150503d8060008114610af7576040519150601f19603f3d011682016040523d82523d6000602084013e610afc565b606091505b50909250905081610b0e573d60208201fd5b80806020019051810190610b229190610fba565b9350935050509091565b600081600003610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4561726e696e673a207265626f6e64416d6f756e74206973207a65726f00000060448201526064016102d1565b60405133602482015260448101839052600090819061040d90606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f92d1b7840000000000000000000000000000000000000000000000000000000017905251610c359190610d9b565b6000604051808303816000865af19150503d8060008114610c72576040519150601f19603f3d011682016040523d82523d6000602084013e610c77565b606091505b50909250905081610c89573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167feb3e12bfc0f5c64812948cc1e4399dae343d1c4a1dc6669996d331b66b5626bd828060200190518101906104179190610dca565b600060208284031215610ce757600080fd5b5035919050565b600060208284031215610d0057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610d2457600080fd5b9392505050565b602080825282518282015282810151604080840191909152808401516060808501528051608085018190526000939291830191849160a08701905b80841015610d8f5784518051835286015186830152938501936001939093019290820190610d66565b50979650505050505050565b6000825160005b81811015610dbc5760208186018101518583015201610da2565b506000920191825250919050565b600060208284031215610ddc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610e3557610e35610de3565b60405290565b6040805190810167ffffffffffffffff81118282101715610e3557610e35610de3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610ea557610ea5610de3565b604052919050565b60006020808385031215610ec057600080fd5b825167ffffffffffffffff80821115610ed857600080fd5b9084019060608287031215610eec57600080fd5b610ef4610e12565b82518152838301518482015260408084015183811115610f1357600080fd5b80850194505087601f850112610f2857600080fd5b835183811115610f3a57610f3a610de3565b610f48868260051b01610e5e565b818152868101945060069190911b850186019089821115610f6857600080fd5b948601945b81861015610fa85782868b031215610f855760008081fd5b610f8d610e3b565b86518152878701518882015285529482019493860193610f6d565b91830191909152509695505050505050565b60008060408385031215610fcd57600080fd5b50508051602090910151909290915056fea2646970667358221220b533cf423993dc7c98b90da85b433f0880191beca61deb880ba7bdc4e4012efc64736f6c63430008120033" ] ] \ No newline at end of file