diff --git a/.DS_Store b/.DS_Store index 55a1e3c..0bb192a 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index bd1096c..7affa13 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -662,7 +662,7 @@ contract Bridge is Context, ReentrancyGuard { recipient.transfer(amount); } else { IERC20 currentPaymentMethod = IERC20(_paymentMethod); - require(currentPaymentMethod.safeTransfer(recipient, amount), "I_F"); + currentPaymentMethod.safeTransfer(recipient, amount); } } @@ -1141,5 +1141,3 @@ contract Bridge is Context, ReentrancyGuard { ); } } -bridge.txt -Displaying bridge.txt. \ No newline at end of file diff --git a/contracts/ERC1155.sol b/contracts/ERC1155.sol new file mode 100644 index 0000000..efdbb74 --- /dev/null +++ b/contracts/ERC1155.sol @@ -0,0 +1,513 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; +import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; +import "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol"; +import "@openzeppelin/contracts/utils/Address.sol"; +import "@openzeppelin/contracts/utils/Context.sol"; +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; + +/** + * @dev Implementation of the basic standard multi-token. + * See https://eips.ethereum.org/EIPS/eip-1155 + * Originally based on code by Enjin: https://github.com/enjin/erc-1155 + * + * _Available since v3.1._ + */ +contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { + using Address for address; + + address public owner_; + + // Mapping from token ID to account balances + mapping(uint256 => mapping(address => uint256)) private _balances; + + // Mapping from account to operator approvals + mapping(address => mapping(address => bool)) private _operatorApprovals; + + // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json + string private _uri; + mapping(address => uint[]) tokenIds; + + modifier onlyOwner { + require(msg.sender == owner_); + _; + } + + /** + * @dev See {_setURI}. + */ + constructor(string memory uri_) { + _setURI(uri_); + owner_ = msg.sender; + } + + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { + return + interfaceId == type(IERC1155).interfaceId || + interfaceId == type(IERC1155MetadataURI).interfaceId || + super.supportsInterface(interfaceId); + } + + /** + * @dev See {IERC1155MetadataURI-uri}. + * + * This implementation returns the same URI for *all* token types. It relies + * on the token type ID substitution mechanism + * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. + * + * Clients calling this function must replace the `\{id\}` substring with the + * actual token type ID. + */ + function uri(uint256) public view virtual override returns (string memory) { + return _uri; + } + + /** + * @dev See {IERC1155-balanceOf}. + * + * Requirements: + * + * - `account` cannot be the zero address. + */ + function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { + require(account != address(0), "ERC1155: balance query for the zero address"); + return _balances[id][account]; + } + + /** + * @dev See {IERC1155-balanceOfBatch}. + * + * Requirements: + * + * - `accounts` and `ids` must have the same length. + */ + function balanceOfBatch(address[] memory accounts, uint256[] memory ids) + public + view + virtual + override + returns (uint256[] memory) + { + require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); + + uint256[] memory batchBalances = new uint256[](accounts.length); + + for (uint256 i = 0; i < accounts.length; ++i) { + batchBalances[i] = balanceOf(accounts[i], ids[i]); + } + + return batchBalances; + } + + /** + * @dev See {IERC1155-setApprovalForAll}. + */ + function setApprovalForAll(address operator, bool approved) public virtual override { + _setApprovalForAll(_msgSender(), operator, approved); + } + + /** + * @dev See {IERC1155-isApprovedForAll}. + */ + function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { + return _operatorApprovals[account][operator]; + } + + /** + * @dev See {IERC1155-safeTransferFrom}. + */ + function safeTransferFrom( + address from, + address to, + uint256 id, + uint256 amount, + bytes memory data + ) public virtual override { + require( + from == _msgSender() || isApprovedForAll(from, _msgSender()), + "ERC1155: caller is not owner nor approved" + ); + _safeTransferFrom(from, to, id, amount, data); + } + + /** + * @dev See {IERC1155-safeBatchTransferFrom}. + */ + function safeBatchTransferFrom( + address from, + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) public virtual override { + require( + from == _msgSender() || isApprovedForAll(from, _msgSender()), + "ERC1155: transfer caller is not owner nor approved" + ); + _safeBatchTransferFrom(from, to, ids, amounts, data); + } + + /** + * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. + * + * Emits a {TransferSingle} event. + * + * Requirements: + * + * - `to` cannot be the zero address. + * - `from` must have a balance of tokens of type `id` of at least `amount`. + * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the + * acceptance magic value. + */ + function _safeTransferFrom( + address from, + address to, + uint256 id, + uint256 amount, + bytes memory data + ) internal virtual { + require(to != address(0), "ERC1155: transfer to the zero address"); + + address operator = _msgSender(); + + _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); + + uint256 fromBalance = _balances[id][from]; + require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); + unchecked { + _balances[id][from] = fromBalance - amount; + } + _balances[id][to] += amount; + + _update(from, to, id); + + emit TransferSingle(operator, from, to, id, amount); + + _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); + } + + /** + * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. + * + * Emits a {TransferBatch} event. + * + * Requirements: + * + * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the + * acceptance magic value. + */ + function _safeBatchTransferFrom( + address from, + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) internal virtual { + require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); + require(to != address(0), "ERC1155: transfer to the zero address"); + + address operator = _msgSender(); + + _beforeTokenTransfer(operator, from, to, ids, amounts, data); + + for (uint256 i = 0; i < ids.length; ++i) { + uint256 id = ids[i]; + uint256 amount = amounts[i]; + + uint256 fromBalance = _balances[id][from]; + require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); + unchecked { + _balances[id][from] = fromBalance - amount; + } + _balances[id][to] += amount; + } + + emit TransferBatch(operator, from, to, ids, amounts); + + _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); + } + + /** + * @dev Sets a new URI for all token types, by relying on the token type ID + * substitution mechanism + * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. + * + * By this mechanism, any occurrence of the `\{id\}` substring in either the + * URI or any of the amounts in the JSON file at said URI will be replaced by + * clients with the token type ID. + * + * For example, the `https://token-cdn-domain/\{id\}.json` URI would be + * interpreted by clients as + * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` + * for token type ID 0x4cce0. + * + * See {uri}. + * + * Because these URIs cannot be meaningfully represented by the {URI} event, + * this function emits no events. + */ + function _setURI(string memory newuri) internal virtual { + _uri = newuri; + } + + /** + * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. + * + * Emits a {TransferSingle} event. + * + * Requirements: + * + * - `to` cannot be the zero address. + * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the + * acceptance magic value. + */ + function _mint( + address to, + uint256 id, + uint256 amount, + bytes memory data + ) internal virtual { + require(to != address(0), "ERC1155: mint to the zero address"); + + address operator = _msgSender(); + + _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); + + _balances[id][to] += amount; + emit TransferSingle(operator, address(0), to, id, amount); + + _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); + } + + /** + * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. + * + * Requirements: + * + * - `ids` and `amounts` must have the same length. + * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the + * acceptance magic value. + */ + function _mintBatch( + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) internal virtual { + require(to != address(0), "ERC1155: mint to the zero address"); + require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); + + address operator = _msgSender(); + + _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); + + for (uint256 i = 0; i < ids.length; i++) { + _balances[ids[i]][to] += amounts[i]; + } + + emit TransferBatch(operator, address(0), to, ids, amounts); + + _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); + } + + /** + * @dev Destroys `amount` tokens of token type `id` from `from` + * + * Requirements: + * + * - `from` cannot be the zero address. + * - `from` must have at least `amount` tokens of token type `id`. + */ + function _burn( + address from, + uint256 id, + uint256 amount + ) internal virtual { + require(from != address(0), "ERC1155: burn from the zero address"); + + address operator = _msgSender(); + + _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); + + uint256 fromBalance = _balances[id][from]; + require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); + unchecked { + _balances[id][from] = fromBalance - amount; + } + + emit TransferSingle(operator, from, address(0), id, amount); + } + + /** + * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. + * + * Requirements: + * + * - `ids` and `amounts` must have the same length. + */ + function _burnBatch( + address from, + uint256[] memory ids, + uint256[] memory amounts + ) internal virtual { + require(from != address(0), "ERC1155: burn from the zero address"); + require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); + + address operator = _msgSender(); + + _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); + + for (uint256 i = 0; i < ids.length; i++) { + uint256 id = ids[i]; + uint256 amount = amounts[i]; + + uint256 fromBalance = _balances[id][from]; + require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); + unchecked { + _balances[id][from] = fromBalance - amount; + } + } + + emit TransferBatch(operator, from, address(0), ids, amounts); + } + + /** + * @dev Approve `operator` to operate on all of `owner` tokens + * + * Emits a {ApprovalForAll} event. + */ + function _setApprovalForAll( + address owner, + address operator, + bool approved + ) internal virtual { + require(owner != operator, "ERC1155: setting approval status for self"); + _operatorApprovals[owner][operator] = approved; + emit ApprovalForAll(owner, operator, approved); + } + + /** + * @dev Hook that is called before any token transfer. This includes minting + * and burning, as well as batched variants. + * + * The same hook is called on both single and batched variants. For single + * transfers, the length of the `id` and `amount` arrays will be 1. + * + * Calling conditions (for each `id` and `amount` pair): + * + * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * of token type `id` will be transferred to `to`. + * - When `from` is zero, `amount` tokens of token type `id` will be minted + * for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` + * will be burned. + * - `from` and `to` are never both zero. + * - `ids` and `amounts` have the same, non-zero length. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _beforeTokenTransfer( + address operator, + address from, + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) internal virtual {} + + function _doSafeTransferAcceptanceCheck( + address operator, + address from, + address to, + uint256 id, + uint256 amount, + bytes memory data + ) private { + if (to.isContract()) { + try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { + if (response != IERC1155Receiver.onERC1155Received.selector) { + revert("ERC1155: ERC1155Receiver rejected tokens"); + } + } catch Error(string memory reason) { + revert(reason); + } catch { + revert("ERC1155: transfer to non ERC1155Receiver implementer"); + } + } + } + + function _doSafeBatchTransferAcceptanceCheck( + address operator, + address from, + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) private { + if (to.isContract()) { + try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( + bytes4 response + ) { + if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { + revert("ERC1155: ERC1155Receiver rejected tokens"); + } + } catch Error(string memory reason) { + revert(reason); + } catch { + revert("ERC1155: transfer to non ERC1155Receiver implementer"); + } + } + } + + function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { + uint256[] memory array = new uint256[](1); + array[0] = element; + + return array; + } + + function mint( address to, uint256 id, uint256 amount) external onlyOwner { + _mint(to, id, amount, '0x'); + tokenIds[to].push(id); + } + + function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts) public { + _mintBatch(to, ids, amounts, "0x"); + } + + + function _update(address from, address to, uint tokenId) internal{ + + uint[] memory tokenList = tokenIds[from]; + uint index; + + if (tokenList.length == 1) { + delete tokenIds[from]; + } + else{ + for(uint i=0; i { + describe("Migration", () => { let newBridge: Bridge; beforeEach(async () => { await settings @@ -1638,23 +1638,6 @@ describe("Bridge", function () { await time.increase(2 * 24 * 60 * 60); await pool.connect(Admin).activateNewBridge() - let transactionID = await registry.getID( - newBridge.chainId(), - 2, - assetToken2.address, - ethers.utils.parseEther("0.01"), - user2.address, - registry.getUserNonce(user1.address) - ); - - let transactionID2 = await registry.getID( - newBridge.chainId(), - 2, - assetToken.address, - ethers.utils.parseEther("0.01"), - user2.address, - registry.getUserNonce(user1.address) - ); await assetToken2 .connect(assetAdmin) @@ -1663,6 +1646,14 @@ describe("Bridge", function () { .connect(assetAdmin) .approve(newBridge.address, ethers.constants.MaxUint256); + let transactionID = await registry.getID( + newBridge.chainId(), + 2, + assetToken2.address, + ethers.utils.parseEther("0.01"), + user2.address, + registry.getUserNonce(assetAdmin.address) + ); await newBridge .connect(assetAdmin) @@ -1676,19 +1667,6 @@ describe("Bridge", function () { } ); - await newBridge - .connect(assetAdmin) - .send( - 2, - assetToken.address, - ethers.utils.parseEther("0.01"), - user2.address, - { - value: parseEther("0.01") - } - ); - - await newBridge .connect(assetAdmin) .send(10, zeroAddress, parseEther("1"), Admin.address, { @@ -1696,7 +1674,6 @@ describe("Bridge", function () { }); expect(await registry.isSendTransaction(transactionID)).to.be.true; - expect(await registry.isSendTransaction(transactionID2)).to.be.true; }); it("Should not be able to migrate without initialization", async () => { diff --git a/test/NewBridge_test.ts b/test/NewBridge_test.ts new file mode 100644 index 0000000..0d08ac2 --- /dev/null +++ b/test/NewBridge_test.ts @@ -0,0 +1,2346 @@ +import { ethers } from "hardhat"; +import type { + Controller, + Deployer, + Settings, + FeeController, + Registry, + Bridge, + BridgeSocket, + Token, + BridgePool, +} from "../typechain-types"; +import type { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { expect } from "chai"; +import { parseEther, parseUnits } from "ethers/lib/utils"; +import { time } from "@nomicfoundation/hardhat-network-helpers"; + +describe("NewBridge", function () { + let controller: Controller; + let deployer: Deployer; + let settings: Settings; + let feeController: FeeController; + let registry: Registry; + let bridge: Bridge; + let socket: BridgeSocket; + let pool: BridgePool; + let controller2: Controller; + let deployer2: Deployer; + let settings2: Settings; + let feeController2: FeeController; + let registry2: Registry; + let bridge2: Bridge; + let pool2: BridgePool; + let brgToken: Token; + let assetToken: Token; + let assetToken2: Token; + let assetToken3: Token; + let assetToken4: Token; + let assetToken6: Token; + let assetToken5: Token; + let assetToken7: Token; + let assetToken8: Token; + let assetToken9: Token; + let assetToken10: Token; + let assetToken1: Token; + let feeRemittance: SignerWithAddress; + let Admin: SignerWithAddress; + let assetFeeRemittance: SignerWithAddress; + let assetManager: SignerWithAddress; + let assetAdmin: SignerWithAddress; + let notManagerOrAdmin: SignerWithAddress; + let notManagerOrAdminOrAdminOrApproved: SignerWithAddress; + let validator1: SignerWithAddress; + let validator2: SignerWithAddress; + let validator3: SignerWithAddress; + let validator4: SignerWithAddress; + let validator5: SignerWithAddress; + let oracle: SignerWithAddress; + let registrar: SignerWithAddress; + let user1: SignerWithAddress; + let user2: SignerWithAddress; + let owner: SignerWithAddress; + const zeroAddress = ethers.constants.AddressZero; + + beforeEach(async () => { + [ + Admin, + feeRemittance, + assetAdmin, + assetFeeRemittance, + assetManager, + notManagerOrAdmin, + notManagerOrAdminOrAdminOrApproved, + validator1, + validator2, + validator3, + validator4, + validator5, + oracle, + registrar, + user1, + user2, + owner, + ] = await ethers.getSigners(); + + const controllerContract = await ethers.getContractFactory("Controller"); + controller = await controllerContract.deploy(); + await controller.connect(Admin).addRegistrar(registrar.address, true); + await controller.connect(Admin).addOracle(oracle.address, true); + await controller.connect(Admin).addValidator(validator1.address, true); + await controller.connect(Admin).addValidator(validator2.address, true); + await controller.connect(Admin).addValidator(validator3.address, true); + await controller.connect(Admin).addValidator(validator4.address, true); + await controller.connect(Admin).addValidator(validator5.address, true); + + const deployerContract = await ethers.getContractFactory("Deployer"); + deployer = await deployerContract.deploy(controller.address); + + const SettingContract = await ethers.getContractFactory("Settings"); + settings = await SettingContract.deploy( + controller.address, + feeRemittance.address, + owner.address + ); + + const feeControllerContract = await ethers.getContractFactory( + "FeeController" + ); + feeController = await feeControllerContract.deploy( + controller.address, + settings.address + ); + + const registryContract = await ethers.getContractFactory("Registry"); + registry = await registryContract.deploy(); + + const bridgePool = await ethers.getContractFactory("BridgePool"); + pool = await bridgePool.deploy(controller.address); + + const Bridge = await ethers.getContractFactory("Bridge"); + bridge = await Bridge.deploy( + controller.address, + settings.address, + registry.address, + deployer.address, + feeController.address, + pool.address, + ethers.constants.AddressZero + ); + + const BridgeToken = await ethers.getContractFactory("Token"); + brgToken = await BridgeToken.deploy("Bridge Token", "Brdg"); + + const TestToken = await ethers.getContractFactory("Token"); + assetToken = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken1 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken2 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken3 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken4 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken5 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken6 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken7 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken8 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken9 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + assetToken10 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + + await registry.transferOwnership(bridge.address); + await settings.setbrgToken(brgToken.address); + await deployer.updateBridge(bridge.address); + await pool.initializePool(bridge.address); + }); + + describe("Deployment", () => { + it("All Bridge Contract should be correct", async () => { + expect(await bridge.controller()).to.be.equal(controller.address); + expect(await bridge.registry()).to.be.equal(registry.address); + expect(await bridge.settings()).to.be.equal(settings.address); + expect(await bridge.feeController()).to.be.equal(feeController.address); + expect(await bridge.bridgePool()).to.be.equal(pool.address); + expect(await bridge.deployer()).to.be.equal(deployer.address); + }); + }); + + describe("Registering Rail", () => { + it("should be able register Rail by Admin", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + + await bridge + .connect(Admin) + .registerRail( + ethers.constants.AddressZero, + "100000000000000000000", + "10000000000000000000000", + [2], + [ethers.constants.AddressZero], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + let asset = await bridge.nativeAssets(ethers.constants.AddressZero); + expect(asset[9]).to.be.true; + }); + + it("should be able register Rail by Asset Admin", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetAdmin.address, settings.railRegistrationFee()); + await brgToken + .connect(assetAdmin) + .approve(bridge.address, settings.railRegistrationFee()); + await bridge + .connect(assetAdmin) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [ethers.constants.AddressZero], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + let asset = await bridge.nativeAssets(assetToken.address); + await expect(asset[9]).to.be.true; + }); + it("should be able register Rail by User Approved Add", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [ethers.constants.AddressZero], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + let asset = await bridge.nativeAssets(assetToken.address); + + expect(asset[9]).to.be.true; + }); + + it("should not be able register Rail by User who is not Admin/Admin/Approved", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer( + notManagerOrAdminOrAdminOrApproved.address, + settings.railRegistrationFee() + ); + await brgToken + .connect(notManagerOrAdminOrAdminOrApproved) + .approve(bridge.address, settings.railRegistrationFee()); + + await expect( + bridge + .connect(notManagerOrAdminOrAdminOrApproved) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [ethers.constants.AddressZero], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ) + ).to.be.revertedWith("U_A"); + }); + }); + + describe("Updating Rail", () => { + it("should allow manager update asset", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [ethers.constants.AddressZero], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + expect( + await bridge + .connect(assetManager) + .updateAsset( + assetToken.address, + assetManager.address, + assetManager.address, + "100000000000000000000", + "10000000000000000000000" + ) + ).to.not.throw; + }); + it("should be able to update asset", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [ethers.constants.AddressZero], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + await bridge + .connect(assetManager) + .updateAsset( + assetToken.address, + assetManager.address, + assetManager.address, + "1000000000000000000000", + "10000000000000000000000" + ); + + const asset = await bridge + .connect(assetManager) + .nativeAssets(assetToken.address); + await expect(asset[1]).to.equal("1000000000000000000000"); + }); + it("should allow Admin update asset", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [ethers.constants.AddressZero], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + expect( + await bridge + .connect(Admin) + .updateAsset( + assetToken.address, + assetManager.address, + assetManager.address, + "100000000000000000000", + "10000000000000000000000" + ) + ).to.not.throw; + }); + + it("should not allow none manager/Admin update asset", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [ethers.constants.AddressZero], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + await expect( + bridge + .connect(notManagerOrAdmin) + .updateAsset( + assetToken.address, + assetManager.address, + assetManager.address, + "100000000000000000000", + "10000000000000000000000" + ) + ).to.revertedWith("U_A"); + }); + }); + + describe("Transaction", () => { + it("should not be able Bridge assetToken without approval asset/Fees ", async function () { + await settings + .connect(Admin) + .setNetworkSupportedChains([2], ["10000000000000000000"], true); + await brgToken + .connect(Admin) + .transfer(assetAdmin.address, settings.railRegistrationFee()); + + await brgToken + .connect(assetAdmin) + .approve(bridge.address, ethers.constants.MaxUint256); + + await bridge + .connect(assetAdmin) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + await bridge.connect(Admin).activeNativeAsset(assetToken.address, true); + + await expect( + bridge + .connect(assetAdmin) + .send(2, assetToken.address, "100000000000000000000", Admin.address) + ).to.revertedWith("I_F"); + }); + + it("should be able to Bridge coin", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [0], true); + await brgToken + .connect(Admin) + .approve(bridge.address, settings.railRegistrationFee()); + + await bridge + .connect(Admin) + .registerRail( + zeroAddress, + "100000000000000000000", + "10000000000000000000000", + [2], + ["0xbf07d7C2613188E3b403D9fbdca7872D0ff1e5aF"], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + // let fees = await ethers.utils.parseEther(val) + await bridge.connect(Admin).activeNativeAsset(zeroAddress, true); + // await assetToken.connect(Admin).approve(bridge.address, "1000000000000000000000") + let transactionID = await registry.getID( + bridge.chainId(), + 2, + zeroAddress, + "100000000000000000000", + Admin.address, + registry.getUserNonce(Admin.address) + ); + await bridge + .connect(Admin) + .send(2, zeroAddress, "100000000000000000000", Admin.address, { + value: "100000000000000000000", + }); + + //console.log(await ethers.provider.getBalance(bridge.address)); + expect(await registry.isSendTransaction(transactionID)).to.be.true; + }); + + it("should be able Bridge assetToken", async function () { + await settings + .connect(Admin) + .setNetworkSupportedChains( + [2, 10], + [parseEther("0.01"), parseEther("0.01")], + true + ); + await brgToken + .connect(Admin) + .transfer(assetManager.address, parseEther("100000")); + await brgToken + .connect(assetManager) + .approve(bridge.address, ethers.constants.MaxUint256); + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + // await settings.connect(Admin).enableBaseFee() + + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [10], + [zeroAddress], + true, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge.connect(Admin).activeNativeAsset(assetToken.address, true); + await assetToken + .connect(assetAdmin) + .transfer(user1.address, ethers.utils.parseEther("10")); + await assetToken + .connect(user1) + .approve(bridge.address, ethers.constants.MaxUint256); + let val = await settings.networkGas(2); + let transactionID = await registry.getID( + bridge.chainId(), + 2, + assetToken.address, + ethers.utils.parseEther("0.01"), + user2.address, + registry.getUserNonce(user1.address) + ); + + await bridge + .connect(user1) + .send( + 2, + assetToken.address, + ethers.utils.parseEther("0.01"), + user2.address, + { + value: val, + } + ); + + expect(await registry.isSendTransaction(transactionID)).to.be.true; + }); + + it("Should be able Bridge assetToken With any decimals", async function () { + const assetTokenContract2 = await ethers.getContractFactory("TestToken"); + + const token = await assetTokenContract2 + .connect(assetAdmin) + .deploy("Token", "tkn", 6); + await settings + .connect(Admin) + .setNetworkSupportedChains([2], ["10000000000000000000"], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, token.address, true); + // await settings.connect(Admin).enableBaseFee() + + await bridge + .connect(assetManager) + .registerRail( + token.address, + ethers.utils.parseUnits("0.001", 6), + ethers.utils.parseUnits("1000", 6), + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + // let fees = await ethers.utils.parseEther(val) + await bridge.connect(Admin).activeNativeAsset(token.address, true); + await token + .connect(assetAdmin) + .transfer(user1.address, ethers.utils.parseUnits("10", 6)); + await token + .connect(user1) + .approve(bridge.address, ethers.utils.parseUnits("1", 6)); + let val = await settings.networkGas(2); + let transactionID = await registry.getID( + bridge.chainId(), + 2, + token.address, + ethers.utils.parseUnits("1", 16), // to get the correct transaction you have to standardizes the token + user2.address, + registry.getUserNonce(user1.address) + ); + + await bridge + .connect(user1) + .send( + 2, + token.address, + ethers.utils.parseUnits("0.01", 6), + user2.address, + { + value: val, + } + ); + + expect(await registry.isSendTransaction(transactionID)).to.be.true; + }); + + it("should be able validate DirectSwap assetToken With any decimals", async function () { + await settings + .connect(Admin) + .setNetworkSupportedChains([2], [parseEther("0.01")], true); + + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + + const assetTokenContract = await ethers.getContractFactory("TestToken"); + + const assetToken2 = await assetTokenContract.deploy("Token", "tkn", 6); + + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken2.address, true); + await settings.connect(Admin).enableBaseFee(); + + await bridge + .connect(assetManager) + .registerRail( + assetToken2.address, + "1000000", + "1000000000000", + [2], + ["0x55d398326f99059fF775485246999027B3197955"], + true, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .addForiegnAsset( + "0x55d398326f99059fF775485246999027B3197955", + 2, + ["1000000", "1000000"], + ["w", "w"], + true, + assetManager.address, + assetFeeRemittance.address, + 0, + true, + assetToken2.address + ); + // let fees = await ethers.utils.parseEther(val) + await bridge.connect(Admin).activeNativeAsset(assetToken2.address, true); + await assetToken2.connect(Admin).approve(bridge.address, "1000000000"); + let val = await settings.networkGas(2); + + await bridge + .connect(Admin) + .send( + 2, + assetToken2.address, + parseUnits("1000", 6), + assetManager.address, + { + value: val, + } + ); + + let mintID = await registry.getID( + 2, + bridge.chainId(), + "0x55d398326f99059fF775485246999027B3197955", + parseUnits("100000000000000", 6), + assetManager.address, + 0 + ); + + await registry + .connect(oracle) + .registerMintTransaction( + mintID, + 2, + "0x55d398326f99059fF775485246999027B3197955", + parseUnits("100000000000000", 6), + assetManager.address, + 0 + ); + + let transaction = await registry.mintTransactions(mintID); + + let signatures = []; + let id = await bridge.chainId(); + let message = await registry.getID( + id.toString(), + transaction[0], + transaction[1], + transaction[2], + transaction[3], + transaction[4] + ); + signatures[0] = await validator1.signMessage( + ethers.utils.arrayify(message) + ); + signatures[1] = await validator2.signMessage( + ethers.utils.arrayify(message) + ); + signatures[2] = await validator3.signMessage( + ethers.utils.arrayify(message) + ); + signatures[3] = await validator4.signMessage( + ethers.utils.arrayify(message) + ); + signatures[4] = await validator5.signMessage( + ethers.utils.arrayify(message) + ); + + await registry + .connect(validator3) + .validateTransaction(mintID, signatures, true); + + let balance = await assetToken2.balanceOf(assetManager.address); + expect(balance).to.equal(parseUnits("100", 6)); + }); + + it("should allow Admin Pause Bridge", async function () { + expect(await bridge.connect(Admin).pauseBrigde()).to.not.throw; + }); + + it("should not allow none Admin Pause Bridge", async function () { + await expect(bridge.connect(assetManager).pauseBrigde()).to.revertedWith( + "U_A" + ); + }); + + it("should be able to register claim transaction", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + let claimID = await registry.getID( + 2, + bridge.chainId(), + assetToken.address, + "100000000000000000000", + Admin.address, + 0 + ); + expect( + await registry + .connect(oracle) + .registerClaimTransaction( + claimID, + 2, + assetToken.address, + "100000000000000000000", + Admin.address, + 0 + ) + ).to.not.throw; + }); + + it("should not be able to validate transaction transaction with value overFlow between Chains", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + let claimID = await registry.getID( + 2, + bridge.chainId(), + assetToken.address, + "100000000000000000000", + Admin.address, + 0 + ); + await registry + .connect(oracle) + .registerClaimTransaction( + claimID, + 2, + assetToken.address, + "100000000000000000000", + Admin.address, + 0 + ); + + let signatures = []; + let message = await registry.getID( + bridge.chainId(), + 2, + assetToken.address, + "100000000000000000000", + Admin.address, + 0 + ); + signatures[0] = await validator1.signMessage(message); + signatures[1] = await validator2.signMessage(message); + signatures[2] = await validator3.signMessage(message); + signatures[3] = await validator4.signMessage(message); + signatures[4] = await validator5.signMessage(message); + + await expect( + registry + .connect(validator1) + .validateTransaction(claimID, signatures, false) + ).to.revertedWith("Amount_limit_Err"); + }); + + it("should not be able to validate with less validators ", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + await bridge + .connect(assetManager) + .registerRail( + assetToken.address, + "100000000000000000000", + "10000000000000000000000", + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + // let fees = await ethers.utils.parseEther(val) + await bridge.connect(Admin).activeNativeAsset(assetToken.address, true); + await assetToken + .connect(assetManager) + .approve(bridge.address, "100000000000000000000"); + let val = await settings.networkGas(2); + await assetToken + .connect(assetAdmin) + .transfer(assetManager.address, "100000000000000000000"); + await bridge + .connect(assetManager) + .send(2, assetToken.address, "100000000000000000000", Admin.address, { + value: val, + }); + + let claimID = await registry.getID( + 2, + bridge.chainId(), + assetToken.address, + "100000000000000000000", + Admin.address, + 0 + ); + await registry + .connect(oracle) + .registerClaimTransaction( + claimID, + 2, + assetToken.address, + "100000000000000000000", + Admin.address, + 0 + ); + let transaction = await registry.claimTransactions(claimID); + let signatures = []; + let id = await bridge.chainId(); + let message = await registry.getID( + id.toString(), + transaction[0], + transaction[1], + transaction[2], + transaction[3], + transaction[4] + ); + + signatures[0] = await validator1.signMessage( + await ethers.utils.arrayify(message) + ); + signatures[1] = await validator1.signMessage( + await ethers.utils.arrayify(message) + ); + signatures[2] = await validator1.signMessage( + await ethers.utils.arrayify(message) + ); + signatures[3] = await validator1.signMessage( + await ethers.utils.arrayify(message) + ); + signatures[4] = await validator1.signMessage( + await ethers.utils.arrayify(message) + ); + + await expect( + registry + .connect(validator3) + .validateTransaction(claimID, signatures, false) + ).to.revertedWith("insuficient_signers"); + }); + + it("should be able to validate transaction ", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + const assetTokenContract = await ethers.getContractFactory("TestToken"); + const assetToken2 = await assetTokenContract + .connect(assetManager) + .deploy("Token", "tkn", 6); + + await bridge + .connect(assetManager) + .registerRail( + assetToken2.address, + "1000000", + "1000000000000", + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + // let fees = await ethers.utils.parseEther(val) + await bridge.connect(Admin).activeNativeAsset(assetToken2.address, true); + await assetToken2 + .connect(assetManager) + .approve(bridge.address, "1000000000"); + let val = await settings.networkGas(2); + + await bridge + .connect(assetManager) + .send(2, assetToken2.address, "1000000000", Admin.address, { + value: val, + }); + + let claimID = await registry.getID( + 2, + bridge.chainId(), + assetToken2.address, + "1000000000000000000000", + Admin.address, + 0 + ); + await registry + .connect(oracle) + .registerClaimTransaction( + claimID, + 2, + assetToken2.address, + "1000000000000000000000", + Admin.address, + 0 + ); + let transaction = await registry.claimTransactions(claimID); + + let signatures = []; + let id = await bridge.chainId(); + let message = await registry.getID( + id.toString(), + transaction[0], + transaction[1], + transaction[2], + transaction[3], + transaction[4] + ); + signatures[0] = await validator1.signMessage( + ethers.utils.arrayify(message) + ); + signatures[1] = await validator2.signMessage( + ethers.utils.arrayify(message) + ); + signatures[2] = await validator3.signMessage( + ethers.utils.arrayify(message) + ); + signatures[3] = await validator4.signMessage( + ethers.utils.arrayify(message) + ); + signatures[4] = await validator5.signMessage( + ethers.utils.arrayify(message) + ); + + await expect( + registry + .connect(validator3) + .validateTransaction(claimID, signatures, false) + ).to.not.throw; + }); + + it("should be able to validate transaction and send correctValue ", async function () { + await settings.connect(Admin).setNetworkSupportedChains([2], [10], true); + await brgToken + .connect(Admin) + .transfer(assetManager.address, settings.railRegistrationFee()); + await brgToken + .connect(assetManager) + .approve(bridge.address, settings.railRegistrationFee()); + const assetTokenContract = await ethers.getContractFactory("TestToken"); + const assetToken2 = await assetTokenContract + .connect(assetManager) + .deploy("Token", "tkn", 6); + + await bridge + .connect(assetManager) + .registerRail( + assetToken2.address, + "1000000", + "1000000000000", + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 2 + ); + + // let fees = await ethers.utils.parseEther(val) + await bridge.connect(Admin).activeNativeAsset(assetToken2.address, true); + await assetToken2 + .connect(assetManager) + .approve(bridge.address, "1000000000"); + let val = await settings.networkGas(2); + + await bridge + .connect(assetManager) + .send(2, assetToken2.address, "1000000000", Admin.address, { + value: val, + }); + + let claimID = await registry.getID( + 2, + bridge.chainId(), + assetToken2.address, + "1000000000000000000000", + Admin.address, + 0 + ); + await registry + .connect(oracle) + .registerClaimTransaction( + claimID, + 2, + assetToken2.address, + "1000000000000000000000", + Admin.address, + 0 + ); + let transaction = await registry.claimTransactions(claimID); + + let signatures = []; + let id = await bridge.chainId(); + let message = await registry.getID( + id.toString(), + transaction[0], + transaction[1], + transaction[2], + transaction[3], + transaction[4] + ); + signatures[0] = await validator1.signMessage( + ethers.utils.arrayify(message) + ); + signatures[1] = await validator2.signMessage( + ethers.utils.arrayify(message) + ); + signatures[2] = await validator3.signMessage( + ethers.utils.arrayify(message) + ); + signatures[3] = await validator4.signMessage( + ethers.utils.arrayify(message) + ); + signatures[4] = await validator5.signMessage( + ethers.utils.arrayify(message) + ); + + await registry + .connect(validator3) + .validateTransaction(claimID, signatures, false); + + let balance = await assetToken2.balanceOf(Admin.address); + expect(balance).to.equal("1000000000"); + }); + + it("should be able to register foriegn asset", async function () { + const TestToken = await ethers.getContractFactory("Token"); + const foreignAsset = await TestToken.deploy( + "asset9", + "a9" + ) + await settings + .connect(Admin) + .setNetworkSupportedChains([2], ["10000000000000000000"], true); + expect( + await bridge + .connect(registrar) + .addForiegnAsset( + foreignAsset.address, + 2, + ["100000000000000000000", "10000000000000000000000"], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + false, + zeroAddress + ) + ).to.not.throw; + // console.log(await bridge.getAssetCount()) + // console.log(await bridge.wrappedForiegnPair(foreignAsset.address, 2)) + // console.log(await bridge.foriegnAssetsList(0)) + }); + + it("should be able to mint Transaction", async function () { + await settings + .connect(Admin) + .setNetworkSupportedChains([2], ["10000000000000000000"], true); + + await bridge + .connect(registrar) + .addForiegnAsset( + zeroAddress, + 2, + ["100000000000000000000", "10000000000000000000000"], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + false, + zeroAddress + ); + await bridge.wrappedForiegnPair(zeroAddress, 2); + let mintID = await registry.getID( + 2, + bridge.chainId(), + zeroAddress, + "100000000000000000000", + Admin.address, + 0 + ); + expect( + await registry + .connect(oracle) + .registerMintTransaction( + mintID, + 2, + zeroAddress, + "100000000000000000000", + Admin.address, + 0 + ) + ).to.not.throw; + }); + + it("should be able to validate mint Transaction", async function () { + await settings + .connect(Admin) + .setNetworkSupportedChains([2], ["10000000000000000000"], true); + + await bridge + .connect(registrar) + .addForiegnAsset( + zeroAddress, + 2, + ["100000000000000000000", "10000000000000000000000"], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + false, + zeroAddress + ); + let wrapped = await bridge.wrappedForiegnPair(zeroAddress, 2); + let mintID = await registry.getID( + 2, + bridge.chainId(), + zeroAddress, + "100000000000000000000", + Admin.address, + 0 + ); + await registry + .connect(oracle) + .registerMintTransaction( + mintID, + 2, + zeroAddress, + "100000000000000000000", + Admin.address, + 0 + ); + + let transaction = await registry.mintTransactions(mintID); + + let signatures = []; + let id = await bridge.chainId(); + let message = await registry.getID( + id.toString(), + transaction[0], + transaction[1], + transaction[2], + transaction[3], + transaction[4] + ); + + signatures[0] = await validator1.signMessage( + ethers.utils.arrayify(message) + ); + signatures[1] = await validator2.signMessage( + ethers.utils.arrayify(message) + ); + signatures[2] = await validator3.signMessage( + ethers.utils.arrayify(message) + ); + signatures[3] = await validator4.signMessage( + ethers.utils.arrayify(message) + ); + signatures[4] = await validator5.signMessage( + ethers.utils.arrayify(message) + ); + + await registry + .connect(validator3) + .validateTransaction(mintID, signatures, true); + + let wrappedAddress = await bridge.wrappedForiegnPair(zeroAddress, 2); + let wrappedToken = await ethers.getContractAt( + "WrappedToken", + wrappedAddress, + Admin + ); + let balance = await wrappedToken.balanceOf(Admin.address); + expect(balance).to.equal("100000000000000000000"); + }); + }); + + describe("Migration", () => { + let newBridge: Bridge; + beforeEach(async () => { + await settings + .connect(Admin) + .setNetworkSupportedChains( + [2, 10], + [parseEther("0.01"), parseEther("0.01")], + true + ); + await brgToken + .connect(Admin) + .transfer(assetManager.address, parseEther("100000")); + await brgToken + .connect(assetManager) + .approve(bridge.address, ethers.constants.MaxUint256); + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + + const TestToken = await ethers.getContractFactory("Token"); + const foreignToken1 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken2 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken3 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken4 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken5 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken6 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken7 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken8 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken9 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken10 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + + await bridge + .connect(Admin) + .registerRail( + assetToken.address, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .registerRail( + assetToken.address, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [10], + [zeroAddress], + true, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .registerRail( + zeroAddress, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [2], + [zeroAddress], + true, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .registerRail( + zeroAddress, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [10], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .registerRail( + assetToken2.address, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [10, 2], + [foreignToken10.address, foreignToken2.address], + true, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(registrar) + .addForiegnAsset( + foreignToken2.address, + 2, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + true, + assetToken2.address + ); + + await bridge + .connect(registrar) + .addForiegnAsset( + foreignToken10.address, + 10, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + true, + assetToken2.address + ); + + await bridge + .connect(registrar) + .addForiegnAsset( + foreignToken3.address, + 2, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + false, + zeroAddress + ); + await bridge + .connect(registrar) + .addForiegnAsset( + foreignToken4.address, + 10, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + true, + zeroAddress + ); + + await bridge + .connect(registrar) + .addForiegnAsset( + zeroAddress, + 2, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + true, + zeroAddress + ); + + await assetToken + .connect(assetAdmin) + .approve(bridge.address, ethers.constants.MaxUint256); + await assetToken2 + .connect(assetAdmin) + .approve(bridge.address, ethers.constants.MaxUint256); + //await assetToken10.connect(assetAdmin).approve(bridge.address, ethers.constants.MaxUint256) + + await bridge.connect(Admin).activeNativeAsset(zeroAddress, true); + await bridge.connect(Admin).activeNativeAsset(assetToken.address, true); + await bridge.connect(Admin).activeNativeAsset(assetToken2.address, true); + //wait bridge.connect(Admin).activeNativeAsset(assetToken10.address, true); + // await assetToken.connect(Admin).approve(bridge.address, "1000000000000000000000") + await bridge + .connect(assetAdmin) + .send(2, assetToken.address, parseEther("1"), Admin.address, { + value: parseEther("0.01"), + }); + + await bridge + .connect(assetAdmin) + .send(10, assetToken.address, parseEther("1"), Admin.address, { + value: parseEther("0.01"), + }); + + await bridge + .connect(assetAdmin) + .send(10, zeroAddress, parseEther("1"), Admin.address, { + value: parseEther("1.01"), + }); + + await bridge + .connect(assetAdmin) + .send(2, zeroAddress, parseEther("1"), Admin.address, { + value: parseEther("1.01"), + }); + + await bridge + .connect(assetAdmin) + .send(2, assetToken2.address, parseEther("1"), Admin.address, { + value: parseEther("0.01"), + }); + + const controllerContract2 = await ethers.getContractFactory("Controller"); + controller2 = await controllerContract2.deploy(); + await controller2.connect(Admin).addRegistrar(registrar.address, true); + await controller2.connect(Admin).addOracle(oracle.address, true); + await controller2.connect(Admin).addValidator(validator1.address, true); + await controller2.connect(Admin).addValidator(validator2.address, true); + await controller2.connect(Admin).addValidator(validator3.address, true); + await controller2.connect(Admin).addValidator(validator4.address, true); + await controller2.connect(Admin).addValidator(validator5.address, true); + + const deployerContract2 = await ethers.getContractFactory("Deployer"); + deployer2 = await deployerContract2.deploy(controller2.address); + + const SettingContract2 = await ethers.getContractFactory("Settings"); + settings2 = await SettingContract2.deploy( + controller2.address, + feeRemittance.address, + owner.address + ); + + const feeControllerContract2 = await ethers.getContractFactory( + "FeeController" + ); + feeController2 = await feeControllerContract2.deploy( + controller2.address, + settings2.address + ); + + const registryContract2 = await ethers.getContractFactory("Registry"); + registry2 = await registryContract2.deploy(); + + const bridgePool2 = await ethers.getContractFactory("BridgePool"); + pool2 = await bridgePool2.deploy(controller.address); + const Bridge2 = await ethers.getContractFactory("Bridge"); + newBridge = await Bridge2.deploy( + controller2.address, + settings2.address, + registry2.address, + deployer2.address, + feeController2.address, + pool2.address, + bridge.address + ); + + await settings2 + .connect(Admin) + .setNetworkSupportedChains( + [2, 10], + [parseEther("0.01"), parseEther("0.01")], + true + ); + pool2.initializePool(newBridge.address); + deployer2.updateBridge(newBridge.address); + registry2.transferOwnership(newBridge.address); + }); + + + + it("Should Migrate Bridge", async () => { + await bridge.connect(Admin).initiateMigration(newBridge.address); + await time.increase(2 * 24 * 60 * 60); + await bridge.connect(Admin).migrateForiegn(5, true); + await bridge.connect(Admin).migrateForiegn(5, false); + await bridge.connect(Admin).migrateNative(2); + await bridge.connect(Admin).migrateNative(2); + await bridge.connect(Admin).completeMigration(); + expect(await bridge.getAssetCount()).to.deep.equal( + await newBridge.getAssetCount() + ); + }); + + it("Should not be able to migrate without initialization", async () => { + await expect(bridge.connect(Admin).migrateNative(1)).to.be.revertedWith( + "N_Y_T" + ); + await expect( + bridge.connect(Admin).migrateForiegn(1, false) + ).to.be.revertedWith("N_Y_T"); + }); + + it("Should not be migrate until migration delay is completed", async () => { + await bridge.connect(Admin).initiateMigration(newBridge.address); + await expect(bridge.connect(Admin).migrateNative(1)).to.be.revertedWith( + "N_Y_T" + ); + await expect( + bridge.connect(Admin).migrateForiegn(1, false) + ).to.be.revertedWith("N_Y_T"); + }); + }); + + describe("NewBridge", () => { + let newBridge: Bridge; + let foreignToken2: Token; + let foreignToken3: Token + beforeEach(async () => { + await settings + .connect(Admin) + .setNetworkSupportedChains( + [2, 10], + [parseEther("0.01"), parseEther("0.01")], + true + ); + await brgToken + .connect(Admin) + .transfer(assetManager.address, parseEther("100000")); + await brgToken + .connect(assetManager) + .approve(bridge.address, ethers.constants.MaxUint256); + await settings + .connect(Admin) + .setApprovedToAdd(assetManager.address, assetToken.address, true); + const TestToken = await ethers.getContractFactory("Token"); + foreignToken2 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + foreignToken3 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + const foreignToken4 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + + const foreignToken10 = await TestToken.connect(assetAdmin).deploy( + "Asset_One", + "Ass1" + ); + + await bridge + .connect(Admin) + .registerRail( + assetToken.address, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [2], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .registerRail( + assetToken.address, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [10], + [zeroAddress], + true, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .registerRail( + zeroAddress, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [2], + [zeroAddress], + true, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .registerRail( + zeroAddress, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [10], + [zeroAddress], + false, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(Admin) + .registerRail( + assetToken2.address, + ethers.utils.parseEther("0.00001"), + ethers.utils.parseEther("1000"), + [10, 2], + [foreignToken10.address, foreignToken2.address], + true, + assetFeeRemittance.address, + assetManager.address, + 0 + ); + + await bridge + .connect(registrar) + .addForiegnAsset( + foreignToken2.address, + 2, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + true, + assetToken2.address + ); + + + + await bridge + .connect(registrar) + .addForiegnAsset( + foreignToken10.address, + 10, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + true, + assetToken2.address + ); + + + await bridge + .connect(registrar) + .addForiegnAsset( + foreignToken3.address, + 2, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + false, + zeroAddress + ); + + + await bridge + .connect(registrar) + .addForiegnAsset( + foreignToken4.address, + 10, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + true, + zeroAddress + ); + + + await bridge + .connect(registrar) + .addForiegnAsset( + zeroAddress, + 2, + [parseEther("0.01"), parseEther("100000")], + ["test", "test"], + true, + assetManager.address, + assetFeeRemittance.address, + 1, + true, + zeroAddress + ); + + await assetToken + .connect(assetAdmin) + .approve(bridge.address, ethers.constants.MaxUint256); + await assetToken2 + .connect(assetAdmin) + .approve(bridge.address, ethers.constants.MaxUint256); + //await assetToken10.connect(assetAdmin).approve(bridge.address, ethers.constants.MaxUint256) + + await bridge.connect(Admin).activeNativeAsset(zeroAddress, true); + await bridge.connect(Admin).activeNativeAsset(assetToken.address, true); + await bridge.connect(Admin).activeNativeAsset(assetToken2.address, true); + //wait bridge.connect(Admin).activeNativeAsset(assetToken10.address, true); + // await assetToken.connect(Admin).approve(bridge.address, "1000000000000000000000") + await bridge + .connect(assetAdmin) + .send(2, assetToken.address, parseEther("1"), Admin.address, { + value: parseEther("0.01"), + }); + + await bridge + .connect(assetAdmin) + .send(10, assetToken.address, parseEther("1"), Admin.address, { + value: parseEther("0.01"), + }); + + await bridge + .connect(assetAdmin) + .send(10, zeroAddress, parseEther("1"), Admin.address, { + value: parseEther("1.01"), + }); + + await bridge + .connect(assetAdmin) + .send(2, zeroAddress, parseEther("1"), Admin.address, { + value: parseEther("1.01"), + }); + + await bridge + .connect(assetAdmin) + .send(2, assetToken2.address, parseEther("1"), Admin.address, { + value: parseEther("0.01"), + }); + + const controllerContract2 = await ethers.getContractFactory("Controller"); + controller2 = await controllerContract2.deploy(); + await controller2.connect(Admin).addRegistrar(registrar.address, true); + await controller2.connect(Admin).addOracle(oracle.address, true); + await controller2.connect(Admin).addValidator(validator1.address, true); + await controller2.connect(Admin).addValidator(validator2.address, true); + await controller2.connect(Admin).addValidator(validator3.address, true); + await controller2.connect(Admin).addValidator(validator4.address, true); + await controller2.connect(Admin).addValidator(validator5.address, true); + + const deployerContract2 = await ethers.getContractFactory("Deployer"); + deployer2 = await deployerContract2.deploy(controller2.address); + + const SettingContract2 = await ethers.getContractFactory("Settings"); + settings2 = await SettingContract2.deploy( + controller2.address, + feeRemittance.address, + owner.address + ); + + const feeControllerContract2 = await ethers.getContractFactory( + "FeeController" + ); + feeController2 = await feeControllerContract2.deploy( + controller2.address, + settings2.address + ); + + const registryContract2 = await ethers.getContractFactory("Registry"); + registry2 = await registryContract2.deploy(); + + const bridgePool2 = await ethers.getContractFactory("BridgePool"); + pool2 = await bridgePool2.deploy(controller.address); + const Bridge2 = await ethers.getContractFactory("Bridge"); + newBridge = await Bridge2.deploy( + controller2.address, + settings2.address, + registry2.address, + deployer2.address, + feeController2.address, + pool2.address, + bridge.address + ); + + await settings2 + .connect(Admin) + .setNetworkSupportedChains( + [2, 10], + [parseEther("0.01"), parseEther("0.01")], + true + ); + pool2.initializePool(newBridge.address); + deployer2.updateBridge(newBridge.address); + registry2.transferOwnership(newBridge.address); + + + await bridge.connect(Admin).initiateMigration(newBridge.address); + await time.increase(2 * 24 * 60 * 60); + await bridge.connect(Admin).migrateForiegn(10, true); + await bridge.connect(Admin).migrateForiegn(10, false); + await bridge.connect(Admin).migrateNative(10); + await bridge.connect(Admin).completeMigration(); + await pool.connect(Admin).innitiateBridgeUpdate(newBridge.address); + await time.increase(2 * 24 * 60 * 60); + await pool.connect(Admin).activateNewBridge(); + // console.log("2:", await newBridge.wrappedForiegnPair(foreignToken2.address, 2)) + // console.log("10:", await newBridge.wrappedForiegnPair(foreignToken10.address, 10)) + // console.log("3:", await newBridge.wrappedForiegnPair(foreignToken3.address, 2)) + // console.log("4:", await newBridge.wrappedForiegnPair(foreignToken4.address, 10)) + //console.log(await bridge.getAssetCount(), await newBridge.getAssetCount()) + }); + + it("should be able Bridge assetToken", async function () { + + await assetToken2 + .connect(assetAdmin) + .approve(newBridge.address, ethers.constants.MaxUint256); + + await pool2 + .connect(Admin) + .createPool(assetToken2.address, parseEther("1000")); + + // console.log(await pool2.validPool(assetToken2.address)) + + let transactionID = await registry2.getID( + newBridge.chainId(), + 2, + assetToken2.address, + ethers.utils.parseEther("1"), + user2.address, + registry2.getUserNonce(assetAdmin.address) + ); + + await newBridge + .connect(assetAdmin) + .send( + 2, + assetToken2.address, + ethers.utils.parseEther("1"), + user2.address, + { + value: parseEther("0.01"), + } + ); + + expect(await registry2.isSendTransaction(transactionID)).to.be.true; + }); + it("Should be able to bridge directswap", async () => { + await assetToken2 + .connect(assetAdmin) + .approve(newBridge.address, ethers.constants.MaxUint256); + await assetToken + .connect(assetAdmin) + .approve(newBridge.address, ethers.constants.MaxUint256); + + await pool2 + .connect(Admin) + .createPool(assetToken2.address, parseEther("1000")); + + let transactionID = await registry2.getID( + newBridge.chainId(), + 2, + assetToken2.address, + ethers.utils.parseEther("0.01"), + user2.address, + registry.getUserNonce(assetAdmin.address) + ); + await newBridge + .connect(assetAdmin) + .send( + 2, + assetToken2.address, + ethers.utils.parseEther("0.01"), + user2.address, + { + value: parseEther("0.01"), + } + ); + expect(await registry2.isSendTransaction(transactionID)).to.be.true; + }); + it("Should be able to mint transaction", async () => { + await assetToken2 + .connect(assetAdmin) + .approve(newBridge.address, ethers.constants.MaxUint256); + await assetToken + .connect(assetAdmin) + .approve(newBridge.address, ethers.constants.MaxUint256); + + await pool2 + .connect(Admin) + .createPool(assetToken2.address, parseEther("1000")); + + let mintID = await registry.getID( + 2, + newBridge.chainId(), + assetToken2.address, + "100000000000000000000", + user2.address, + 0 + ); + await newBridge + .connect(assetAdmin) + .send( + 2, + assetToken2.address, + ethers.utils.parseEther("0.01"), + user2.address, + { + value: parseEther("0.01"), + } + ); + expect( + await registry2 + .connect(oracle) + .registerMintTransaction( + mintID, + 2, + assetToken2.address, + "100000000000000000000", + user2.address, + 0 + ) + ).to.not.throw; + }); + it("Should validate mint transaction", async () => { + await assetToken2 + .connect(assetAdmin) + .approve(newBridge.address, ethers.constants.MaxUint256); + await assetToken + .connect(assetAdmin) + .approve(newBridge.address, ethers.constants.MaxUint256); + + await pool2 + .connect(Admin) + .createPool(assetToken2.address, parseEther("1000")); + await pool2 + .connect(Admin) + .createPool(assetToken.address, parseEther("1000")); + await pool2 + .connect(Admin) + .createPool(zeroAddress, parseEther("1000")); + //console.log(await pool2.validPool(assetToken2.address)) + + let mintID = await registry.getID( + 2, + newBridge.chainId(), + foreignToken2.address, + parseEther("100"), + user2.address, + 0 + ); + await newBridge + .connect(assetAdmin) + .send( + 2, + assetToken2.address, + ethers.utils.parseEther("0.01"), + user2.address, + { + value: parseEther("0.01"), + } + ); + + let wrappedAddress = await newBridge.wrappedForiegnPair(foreignToken2.address, 2); + // console.log(await bridge.wrappedForiegnPair(foreignToken2.address, 2)) + // console.log(wrappedAddress, assetToken2.address) + // console.log(await newBridge.foriegnAssets(wrappedAddress)) + // console.log(await newBridge.isDirectSwap(foreignToken2.address, 2)) + + await registry2 + .connect(oracle) + .registerMintTransaction( + mintID, + 2, + foreignToken2.address, + parseEther("100"), + user2.address, + 0 + ) + + let transaction = await registry2.mintTransactions(mintID); + + let signatures = []; + let id = await newBridge.chainId(); + let message = await registry2.getID( + id.toString(), + transaction[0], + transaction[1], + transaction[2], + transaction[3], + transaction[4] + ); + + signatures[0] = await validator1.signMessage( + ethers.utils.arrayify(message) + ); + signatures[1] = await validator2.signMessage( + ethers.utils.arrayify(message) + ); + signatures[2] = await validator3.signMessage( + ethers.utils.arrayify(message) + ); + signatures[3] = await validator4.signMessage( + ethers.utils.arrayify(message) + ); + signatures[4] = await validator5.signMessage( + ethers.utils.arrayify(message) + ); + //console.log(await pool2.validPool(assetToken2.address)) + + + await registry2 + .connect(validator3) + .validateTransaction(mintID, signatures, true); + + + let wrappedToken = await ethers.getContractAt( + "WrappedToken", + wrappedAddress, + Admin + ); + let balance = await wrappedToken.balanceOf(Admin.address); + expect(balance).to.equal("100000000000000000000"); + }) + + it("Should validate foriegn non-direct swap", async () => { + let mintID = await registry.getID( + 2, + newBridge.chainId(), + foreignToken3.address, + parseEther("100"), + user2.address, + 0 + ); + + //console.log(await newBridge.wrappedForiegnPair(foreignToken3.address, 2)) + + await registry2 + .connect(oracle) + .registerMintTransaction( + mintID, + 2, + foreignToken3.address, + parseEther("100"), + user2.address, + 0 + ) + + + let transaction = await registry2.mintTransactions(mintID); + + let signatures = []; + let id = await newBridge.chainId(); + let message = await registry2.getID( + id.toString(), + transaction[0], + transaction[1], + transaction[2], + transaction[3], + transaction[4] + ); + + signatures[0] = await validator1.signMessage( + ethers.utils.arrayify(message) + ); + signatures[1] = await validator2.signMessage( + ethers.utils.arrayify(message) + ); + signatures[2] = await validator3.signMessage( + ethers.utils.arrayify(message) + ); + signatures[3] = await validator4.signMessage( + ethers.utils.arrayify(message) + ); + signatures[4] = await validator5.signMessage( + ethers.utils.arrayify(message) + ); + //console.log(await pool2.validPool(assetToken2.address)) + + expect(await registry2 + .connect(validator3) + .validateTransaction(mintID, signatures, true)).to.not.throw + + }) + it("Should validate claim transaction", async () => { + let claimID = await registry.getID( + 2, + newBridge.chainId(), + assetToken.address, + parseEther("100"), + user2.address, + 0 + ); + + //console.log(await newBridge.wrappedForiegnPair(assetToken.address, 2)) + + await registry2 + .connect(oracle) + .registerClaimTransaction( + claimID, + 2, + assetToken.address, + parseEther("100"), + user2.address, + 0 + ) + + + let transaction = await registry2.claimTransactions(claimID); + + let signatures = []; + let id = await newBridge.chainId(); + let message = await registry2.getID( + id.toString(), + transaction[0], + transaction[1], + transaction[2], + transaction[3], + transaction[4] + ); + + signatures[0] = await validator1.signMessage( + ethers.utils.arrayify(message) + ); + signatures[1] = await validator2.signMessage( + ethers.utils.arrayify(message) + ); + signatures[2] = await validator3.signMessage( + ethers.utils.arrayify(message) + ); + signatures[3] = await validator4.signMessage( + ethers.utils.arrayify(message) + ); + signatures[4] = await validator5.signMessage( + ethers.utils.arrayify(message) + ); + //console.log(await pool2.validPool(assetToken2.address)) + + expect(await registry2 + .connect(validator3) + .validateTransaction(claimID, signatures, false)).to.not.throw + }) + }); +}); diff --git a/typechain-types/contracts/Bridge.ts b/typechain-types/contracts/Bridge.ts index 03ceeee..d433603 100644 --- a/typechain-types/contracts/Bridge.ts +++ b/typechain-types/contracts/Bridge.ts @@ -46,7 +46,6 @@ export interface BridgeInterface extends utils.Interface { "foriegnAssetChainID(address)": FunctionFragment; "foriegnAssets(address)": FunctionFragment; "foriegnAssetsList(uint256)": FunctionFragment; - "foriegnPair(address)": FunctionFragment; "getAssetCount()": FunctionFragment; "getAssetSupportedChainIds(address)": FunctionFragment; "initiateMigration(address)": FunctionFragment; @@ -91,7 +90,6 @@ export interface BridgeInterface extends utils.Interface { | "foriegnAssetChainID" | "foriegnAssets" | "foriegnAssetsList" - | "foriegnPair" | "getAssetCount" | "getAssetSupportedChainIds" | "initiateMigration" @@ -191,10 +189,6 @@ export interface BridgeInterface extends utils.Interface { functionFragment: "foriegnAssetsList", values: [PromiseOrValue] ): string; - encodeFunctionData( - functionFragment: "foriegnPair", - values: [PromiseOrValue] - ): string; encodeFunctionData( functionFragment: "getAssetCount", values?: undefined @@ -376,10 +370,6 @@ export interface BridgeInterface extends utils.Interface { functionFragment: "foriegnAssetsList", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "foriegnPair", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "getAssetCount", data: BytesLike @@ -807,11 +797,6 @@ export interface Bridge extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - foriegnPair( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - getAssetCount( overrides?: CallOverrides ): Promise<[BigNumber, BigNumber, BigNumber]>; @@ -1105,11 +1090,6 @@ export interface Bridge extends BaseContract { overrides?: CallOverrides ): Promise; - foriegnPair( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - getAssetCount( overrides?: CallOverrides ): Promise<[BigNumber, BigNumber, BigNumber]>; @@ -1401,11 +1381,6 @@ export interface Bridge extends BaseContract { overrides?: CallOverrides ): Promise; - foriegnPair( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - getAssetCount( overrides?: CallOverrides ): Promise<[BigNumber, BigNumber, BigNumber]>; @@ -1807,11 +1782,6 @@ export interface Bridge extends BaseContract { overrides?: CallOverrides ): Promise; - foriegnPair( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - getAssetCount(overrides?: CallOverrides): Promise; getAssetSupportedChainIds( @@ -2035,11 +2005,6 @@ export interface Bridge extends BaseContract { overrides?: CallOverrides ): Promise; - foriegnPair( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - getAssetCount(overrides?: CallOverrides): Promise; getAssetSupportedChainIds( diff --git a/typechain-types/contracts/index.ts b/typechain-types/contracts/index.ts index d31d3aa..c95069e 100644 --- a/typechain-types/contracts/index.ts +++ b/typechain-types/contracts/index.ts @@ -1,8 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as registrypendingSol from "./Registrypending.sol"; -export type { registrypendingSol }; import type * as bridgeSocketSol from "./bridgeSocket.sol"; export type { bridgeSocketSol }; import type * as interface from "./interface"; diff --git a/typechain-types/factories/contracts/BridgePool__factory.ts b/typechain-types/factories/contracts/BridgePool__factory.ts index 8bcc34d..b4ad9ba 100644 --- a/typechain-types/factories/contracts/BridgePool__factory.ts +++ b/typechain-types/factories/contracts/BridgePool__factory.ts @@ -539,11 +539,7 @@ const _abi = [ ]; const _bytecode = -<<<<<<< HEAD "0x6080604052620151806008553480156200001857600080fd5b506040516200387f3803806200387f8339810160408190526200003b91620000b4565b60016000556001600160a01b0381166200008e5760405162461bcd60e51b815260206004820152601060248201526f2d32b9379030b2323932b9b99022b93960811b604482015260640160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055620000e4565b600060208284031215620000c6578081fd5b81516001600160a01b0381168114620000dd578182fd5b9392505050565b61378b80620000f46000396000f3fe608060405260043610620001465760003560e01c8063a4063dbc11620000bb578063e78cea921162000079578063e78cea921462000410578063f3fef3a31462000432578063f525cb681462000457578063f6b32c5d146200046f578063f77c47911462000487578063feb21b9c14620004a95762000146565b8063a4063dbc14620002de578063b5ada6d81462000379578063ba2756c914620003ba578063d36c0b4014620003e1578063d6f7ddf914620003f95762000146565b8063407431f71162000109578063407431f7146200024057806347e7ef241462000265578063507f596b146200027c5780635efe5b1414620002a1578063694fe81d14620002b95762000146565b806312d36171146200014b578063158ef93e146200017257806316b96f5914620001a357806321e0694a14620001f95780632501a618146200021b575b600080fd5b3480156200015857600080fd5b50620001706200016a3660046200231a565b620004ce565b005b3480156200017f57600080fd5b506009546200018e9060ff1681565b60405190151581526020015b60405180910390f35b348015620001b057600080fd5b50620001e0620001c236600462002297565b6001600160a01b039081166000908152600560205260409020541690565b6040516001600160a01b0390911681526020016200019a565b3480156200020657600080fd5b50600354620001e0906001600160a01b031681565b3480156200022857600080fd5b50620001706200023a36600462002297565b620009e6565b3480156200024d57600080fd5b50620001706200025f36600462002297565b62000ad6565b62000170620002763660046200231a565b62000b5f565b3480156200028957600080fd5b50620001706200029b366004620022d5565b62000d53565b348015620002ae57600080fd5b506200017062001173565b348015620002c657600080fd5b5062000170620002d83660046200231a565b6200120b565b348015620002eb57600080fd5b506200033f620002fd36600462002297565b60056020819052600091825260409091208054600182015460028301546003840154600485015494909501546001600160a01b03909316949193909260ff1686565b604080516001600160a01b03909716875260208701959095529385019290925260608401526080830152151560a082015260c0016200019a565b3480156200038657600080fd5b506200018e6200039836600462002297565b6001600160a01b03166000908152600560208190526040909120015460ff1690565b348015620003c757600080fd5b50620003d260085481565b6040519081526020016200019a565b348015620003ee57600080fd5b506200017062001330565b620001706200040a3660046200231a565b62001473565b3480156200041d57600080fd5b50600254620001e0906001600160a01b031681565b3480156200043f57600080fd5b5062000170620004513660046200231a565b620016c6565b3480156200046457600080fd5b50620003d260075481565b3480156200047c57600080fd5b50620003d260045481565b3480156200049457600080fd5b50600154620001e0906001600160a01b031681565b348015620004b657600080fd5b50620001e0620004c836600462002414565b62001bc0565b6002546001600160a01b0316331480620005825750600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053257600080fd5b505afa15801562000547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056d9190620022b6565b6001600160a01b0316336001600160a01b0316145b620005d45760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920417574687572697a65642043616c6c61626c65000000000000000060448201526064015b60405180910390fd5b60095460ff16620005f95760405162461bcd60e51b8152600401620005cb90620025d3565b6001600160a01b0382166000908152600560208190526040909120015460ff16156200065f5760405162461bcd60e51b81526020600482015260146024820152731c1bdbdb08185b1c9958591e4810dc99585d195960621b6044820152606401620005cb565b60008111620006a05760405162461bcd60e51b815260206004820152600c60248201526b63616e74206265207a65726f60a01b6044820152606401620005cb565b60006001600160a01b038316620006f3576012604051620006c19062002289565b620006cd919062002576565b604051809103906000f080158015620006ea573d6000803e3d6000fd5b509050620008be565b6000839050806001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200073257600080fd5b505afa15801562000747573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077191908101906200236a565b816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620007ab57600080fd5b505afa158015620007c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007ea91908101906200236a565b604051602001620007fc9190620024b5565b604051602081830303815290604052826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200084557600080fd5b505afa1580156200085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000880919062002446565b6040516200088e9062002289565b6200089c93929190620024f6565b604051809103906000f080158015620008b9573d6000803e3d6000fd5b509150505b6040805160c0810182526001600160a01b0380841682526000602080840182815284860183815260608601848152608087018a8152600160a089018181528d89168089526005978890529a882099518a5499166001600160a01b0319998a16178a559451898201559251600289015590516003880155516004870155905194909101805494151560ff199095169490941790935560068054938401815581527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909201805490911690921790915560078054916200099c8362002665565b9190505550806001600160a01b0316836001600160a01b03167f4f2ce4e40f623ca765fc0167a25cb7842ceaafb8d82d3dec26ca0d0e0d2d489660405160405180910390a3505050565b60095460ff1662000a0b5760405162461bcd60e51b8152600401620005cb90620025d3565b62000a1562001beb565b506003546001600160a01b03161562000a7b5760405162461bcd60e51b815260206004820152602160248201527f70656e64696e672042726964676520616c726561647920696e6e6974696174656044820152601960fa1b6064820152608401620005cb565b600380546001600160a01b0319166001600160a01b038381169190911791829055600254604051928216929116907f3e58e639c151e0d6df493210b3bfa74506c57251c0e65539bf2dd2391f55c4c590600090a35042600455565b62000ae062001beb565b506001600160a01b0381161580159062000afd575060095460ff16155b62000b305760405162461bcd60e51b815260206004820152600260248201526122b960f11b6044820152606401620005cb565b600280546001600160a01b0319166001600160a01b03929092169190911790556009805460ff19166001179055565b6002600054141562000bb45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401620005cb565b600260005560095460ff1662000bde5760405162461bcd60e51b8152600401620005cb90620025d3565b6001600160a01b0382166000908152600560208190526040909120015460ff1662000c1d5760405162461bcd60e51b8152600401620005cb9062002550565b60008062000c2c848462001cc5565b9150915081801562000c3e5750600081115b62000c5d5760405162461bcd60e51b8152600401620005cb9062002533565b6001600160a01b0384166000908152600560205260408120600101805483929062000c8a90849062002601565b90915550506001600160a01b03848116600090815260056020526040908190205490516340c10f1960e01b8152336004820152602481018490529116906340c10f1990604401600060405180830381600087803b15801562000ceb57600080fd5b505af115801562000d00573d6000803e3d6000fd5b50505050836001600160a01b03167fddc69a07b5bfcee2b68a56a2e28e712c83e6b1372b06f80aaab04dbaca91020f8260405162000d4091815260200190565b60405180910390a2505060016000555050565b6002546001600160a01b0316331462000da65760405162461bcd60e51b81526020600482015260146024820152734f6e6c79204272696467652043616c6c61626c6560601b6044820152606401620005cb565b60095460ff1662000dcb5760405162461bcd60e51b8152600401620005cb90620025d3565b6001600160a01b03821662000e0b5760405162461bcd60e51b81526020600482015260056024820152645a5f415f4560d81b6044820152606401620005cb565b6001600160a01b0383166000908152600560208190526040909120015460ff1662000e4a5760405162461bcd60e51b8152600401620005cb9062002550565b60006001600160a01b03841662000e6357504762000ee4565b6040516370a0823160e01b815230600482015284906001600160a01b038216906370a082319060240160206040518083038186803b15801562000ea557600080fd5b505afa15801562000eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ee091906200242d565b9150505b6001600160a01b03841660009081526005602052604090206001810154600390910154839162000f149162002601565b1015801562000f235750818110155b62000f6c5760405162461bcd60e51b8152602060048201526018602482015277496e737566666963656e7420506f6f6c2042616c616e636560401b6044820152606401620005cb565b6001600160a01b038416600090815260056020526040902060030154156200106d576001600160a01b038416600090815260056020526040902060030154821162000fea576001600160a01b0384166000908152600560205260408120600301805484929062000fde9084906200261c565b90915550620010679050565b6001600160a01b0384166000908152600560205260408120600301546200101290846200261c565b6001600160a01b0386166000908152600560205260408120600201805492935083929091906200104490849062002601565b9091555050506001600160a01b0384166000908152600560205260408120600301555b620010a0565b6001600160a01b038416600090815260056020526040812060020180548492906200109a90849062002601565b90915550505b6001600160a01b0384166000908152600560205260409020600481015460029091015410620011125760405162461bcd60e51b815260206004820152601760248201527f44657074205468726573686f6c642045786365656465640000000000000000006044820152606401620005cb565b6200111f83858462001ed2565b826001600160a01b0316846001600160a01b03167fe21d1ad7c600cb04e8158286eb45e7871820ec2318799d0ad0d4a3822ba0b65c846040516200116591815260200190565b60405180910390a350505050565b60095460ff16620011985760405162461bcd60e51b8152600401620005cb90620025d3565b620011a262001beb565b506003546001600160a01b0316620011f95760405162461bcd60e51b81526020600482015260196024820152781b995dc8189c9a5919d9481b9bdd081a5b9b9a5d1a585d1959603a1b6044820152606401620005cb565b600380546001600160a01b0319169055565b60095460ff16620012305760405162461bcd60e51b8152600401620005cb90620025d3565b6200123a62001beb565b506001600160a01b0382166000908152600560208190526040909120015460ff166200127a5760405162461bcd60e51b8152600401620005cb9062002550565b60008111620012bb5760405162461bcd60e51b815260206004820152600c60248201526b63616e74206265207a65726f60a01b6044820152606401620005cb565b6001600160a01b0382166000818152600560209081526040918290206004015482519081529081018490527fdb5d4802e9485bcc2d1f104f4bf94ea4f868f505fb441e5d04b041fea46b1d35910160405180910390a26001600160a01b03909116600090815260056020526040902060040155565b60095460ff16620013555760405162461bcd60e51b8152600401620005cb90620025d3565b6200135f62001beb565b506003546001600160a01b0316620013b65760405162461bcd60e51b81526020600482015260196024820152781b995dc8189c9a5919d9481b9bdd081a5b9b9a5d1a585d1959603a1b6044820152606401620005cb565b600854600454620013c890426200261c565b116200140d5760405162461bcd60e51b81526020600482015260136024820152727570646174652064656c61792061637469766560681b6044820152606401620005cb565b6003546002546040516001600160a01b0392831692909116907fd25b8cc1eae330aee7910bb0c832159d94e74e215cd50c82ebf78079628265f890600090a360038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b6002546001600160a01b03163314620014c65760405162461bcd60e51b81526020600482015260146024820152734f6e6c79204272696467652043616c6c61626c6560601b6044820152606401620005cb565b60095460ff16620014eb5760405162461bcd60e51b8152600401620005cb90620025d3565b600080620014fa848462001cc5565b6001600160a01b03861660009081526005602081905260409091200154919350915060ff168015620015295750815b620015485760405162461bcd60e51b8152600401620005cb9062002550565b6001600160a01b0384166000908152600560205260409020600201541562001649576001600160a01b0384166000908152600560205260409020600201548111620015c6576001600160a01b03841660009081526005602052604081206002018054839290620015ba9084906200261c565b90915550620016439050565b6001600160a01b038416600090815260056020526040812060020154620015ee90836200261c565b6001600160a01b0386166000908152600560205260408120600301805492935083929091906200162090849062002601565b9091555050506001600160a01b0384166000908152600560205260408120600201555b6200167c565b6001600160a01b038416600090815260056020526040812060030180548392906200167690849062002601565b90915550505b836001600160a01b03167f1af7da014a17ee00b70f5a5c1b333ccaa59a5bd9fcf6ba8dc5e1e636fc099c7482604051620016b891815260200190565b60405180910390a250505050565b600260005414156200171b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401620005cb565b600260005560095460ff16620017455760405162461bcd60e51b8152600401620005cb90620025d3565b6001600160a01b0382166000908152600560208190526040909120015460ff16620017845760405162461bcd60e51b8152600401620005cb9062002550565b60006001600160a01b038316620017a757506001600160a01b0382163162001828565b6040516370a0823160e01b815230600482015283906001600160a01b038216906370a082319060240160206040518083038186803b158015620017e957600080fd5b505afa158015620017fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200182491906200242d565b9150505b6001600160a01b038084166000908152600560205260409020805460019091015491169083118015906200185c5750828210155b620018a55760405162461bcd60e51b8152602060048201526018602482015277496e737566666963656e7420506f6f6c2042616c616e636560401b6044820152606401620005cb565b826001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b158015620018fc57600080fd5b505afa15801562001911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200193791906200242d565b1015620019585760405162461bcd60e51b8152600401620005cb9062002533565b6001600160a01b038481166000908152600560205260408082205490516370a0823160e01b8152306004820152919216906370a082319060240160206040518083038186803b158015620019ab57600080fd5b505afa158015620019c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019e691906200242d565b9050620019ff6001600160a01b03831633308762001f7d565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801562001a4257600080fd5b505afa15801562001a57573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a7d91906200242d565b9050600062001a8d83836200261c565b1162001aad5760405162461bcd60e51b8152600401620005cb9062002533565b600062001abb83836200261c565b6001600160a01b0388811660009081526005602052604090819020549051630852cd8d60e31b81526004810184905292935016906342966c6890602401600060405180830381600087803b15801562001b1357600080fd5b505af115801562001b28573d6000803e3d6000fd5b5050505062001b4062001b383390565b888362001ed2565b6001600160a01b0387166000908152600560205260408120600101805483929062001b6d9084906200261c565b909155505060405181815233906001600160a01b038916907f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e769060200160405180910390a3505060016000555050505050565b6006818154811062001bd157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000336001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001c4657600080fd5b505afa15801562001c5b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c819190620022b6565b6001600160a01b03161462001cbf5760405162461bcd60e51b8152602060048201526003602482015262555f4160e81b6044820152606401620005cb565b50600190565b6000806001600160a01b03841662001cf75782341062001ceb5750600190503462001ecb565b50600090508062001ecb565b83836001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b15801562001d4f57600080fd5b505afa15801562001d64573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d8a91906200242d565b1062001ec2576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801562001dd357600080fd5b505afa15801562001de8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0e91906200242d565b905062001e276001600160a01b03831633308862001f7d565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801562001e6a57600080fd5b505afa15801562001e7f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea591906200242d565b9050600162001eb583836200261c565b9450945050505062001ecb565b60008092509250505b9250929050565b6001600160a01b03831662001f125760405162461bcd60e51b81526020600482015260056024820152645a5f415f4560d81b6044820152606401620005cb565b6001600160a01b03821662001f5f576040516001600160a01b0384169082156108fc029083906000818181858888f1935050505015801562001f58573d6000803e3d6000fd5b5062001f78565b8162001f766001600160a01b038216858462001fea565b505b505050565b6040516001600160a01b038085166024830152831660448201526064810182905262001f769085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200201c565b6040516001600160a01b03831660248201526044810182905262001f7890849063a9059cbb60e01b9060640162001fb2565b600062002073826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620020f59092919063ffffffff16565b80519091501562001f78578080602001905181019062002094919062002348565b62001f785760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620005cb565b606062002106848460008562002110565b90505b9392505050565b606082471015620021735760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401620005cb565b6001600160a01b0385163b620021cc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620005cb565b600080866001600160a01b03168587604051620021ea919062002497565b60006040518083038185875af1925050503d806000811462002229576040519150601f19603f3d011682016040523d82523d6000602084013e6200222e565b606091505b5091509150620022408282866200224b565b979650505050505050565b606083156200225c57508162002109565b8251156200226d5782518084602001fd5b8160405162461bcd60e51b8152600401620005cb9190620024e1565b61108d80620026c983390190565b600060208284031215620022a9578081fd5b81356200210981620026af565b600060208284031215620022c8578081fd5b81516200210981620026af565b600080600060608486031215620022ea578182fd5b8335620022f781620026af565b925060208401356200230981620026af565b929592945050506040919091013590565b600080604083850312156200232d578182fd5b82356200233a81620026af565b946020939093013593505050565b6000602082840312156200235a578081fd5b8151801515811462002109578182fd5b6000602082840312156200237c578081fd5b815167ffffffffffffffff8082111562002394578283fd5b818401915084601f830112620023a8578283fd5b815181811115620023bd57620023bd62002699565b604051601f8201601f19908116603f01168101908382118183101715620023e857620023e862002699565b8160405282815287602084870101111562002401578586fd5b6200224083602083016020880162002636565b60006020828403121562002426578081fd5b5035919050565b6000602082840312156200243f578081fd5b5051919050565b60006020828403121562002458578081fd5b815160ff8116811462002109578182fd5b600081518084526200248381602086016020860162002636565b601f01601f19169290920160200192915050565b60008251620024ab81846020870162002636565b9190910192915050565b600061313960f11b82528251620024d481600285016020870162002636565b9190910160020192915050565b60006020825262002109602083018462002469565b6000606082526200250b606083018662002469565b82810360208401526200251f818662002469565b91505060ff83166040830152949350505050565b60208082526003908201526224afa360e91b604082015260600190565b6020808252600c908201526b1a5b9d985b1a5908141bdbdb60a21b604082015260600190565b6000606082526200259c6060830160058152644d4154494360d81b602082015260400190565b8281036020840152620025c18160058152644d4154494360d81b602082015260400190565b91505060ff8316604083015292915050565b6020808252601490820152731c1bdbdb081b9bdd081a5b9a5d1a585b1a5e995960621b604082015260600190565b6000821982111562002617576200261762002683565b500190565b60008282101562002631576200263162002683565b500390565b60005b838110156200265357818101518382015260200162002639565b8381111562001f765750506000910152565b60006000198214156200267c576200267c62002683565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620026c557600080fd5b5056fe60806040523480156200001157600080fd5b506040516200108d3803806200108d83398101604081905262000034916200024b565b82828282600390805190602001906200004f929190620000f2565b50815162000065906004906020850190620000f2565b506005805460ff191660ff92909216919091179055506200008f9050620000893390565b62000098565b5050506200031f565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010090620002cc565b90600052602060002090601f0160209004810192826200012457600085556200016f565b82601f106200013f57805160ff19168380011785556200016f565b828001600101855582156200016f579182015b828111156200016f57825182559160200191906001019062000152565b506200017d92915062000181565b5090565b5b808211156200017d576000815560010162000182565b600082601f830112620001a9578081fd5b81516001600160401b0380821115620001c657620001c662000309565b604051601f8301601f19908116603f01168101908282118183101715620001f157620001f162000309565b816040528381526020925086838588010111156200020d578485fd5b8491505b8382101562000230578582018301518183018401529082019062000211565b838211156200024157848385830101525b9695505050505050565b60008060006060848603121562000260578283fd5b83516001600160401b038082111562000277578485fd5b620002858783880162000198565b945060208601519150808211156200029b578384fd5b50620002aa8682870162000198565b925050604084015160ff81168114620002c1578182fd5b809150509250925092565b600281046001821680620002e157607f821691505b602082108114156200030357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b610d5e806200032f6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d71461020d578063a9059cbb14610220578063dd62ed3e14610233578063f2fde38b1461026c57610100565b806370a08231146101bb578063715018a6146101ce5780638da5cb5b146101d657806395d89b411461020557610100565b8063313ce567116100d3578063313ce5671461016b578063395093511461018057806340c10f191461019357806342966c68146101a857610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d61027f565b60405161011a9190610c55565b60405180910390f35b610136610131366004610c14565b610311565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004610bd9565b610327565b60055460405160ff909116815260200161011a565b61013661018e366004610c14565b6103d6565b6101a66101a1366004610c14565b610412565b005b6101a66101b6366004610c3d565b610428565b61014a6101c9366004610b86565b61043d565b6101a661045c565b6101ed60055461010090046001600160a01b031690565b6040516001600160a01b03909116815260200161011a565b61010d610470565b61013661021b366004610c14565b61047f565b61013661022e366004610c14565b610518565b61014a610241366004610ba7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101a661027a366004610b86565b610525565b60606003805461028e90610cd7565b80601f01602080910402602001604051908101604052809291908181526020018280546102ba90610cd7565b80156103075780601f106102dc57610100808354040283529160200191610307565b820191906000526020600020905b8154815290600101906020018083116102ea57829003601f168201915b5050505050905090565b600061031e33848461059b565b50600192915050565b60006103348484846106c0565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156103be5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6103cb853385840361059b565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161031e91859061040d908690610ca8565b61059b565b61041a61088f565b61042482826108ef565b5050565b61043061088f565b61043a33826109cf565b50565b6001600160a01b0381166000908152602081905260409020545b919050565b61046461088f565b61046e6000610b15565b565b60606004805461028e90610cd7565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156105015760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b5565b61050e338585840361059b565b5060019392505050565b600061031e3384846106c0565b61052d61088f565b6001600160a01b0381166105925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b5565b61043a81610b15565b6001600160a01b0383166105fd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b5565b6001600160a01b03821661065e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166107245760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103b5565b6001600160a01b0382166107865760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103b5565b6001600160a01b038316600090815260208190526040902054818110156107fe5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610835908490610ca8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161088191815260200190565b60405180910390a350505050565b6005546001600160a01b0361010090910416331461046e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b5565b6001600160a01b0382166109455760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103b5565b80600260008282546109579190610ca8565b90915550506001600160a01b03821660009081526020819052604081208054839290610984908490610ca8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610424565b6001600160a01b038216610a2f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103b5565b6001600160a01b03821660009081526020819052604090205481811015610aa35760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103b5565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610ad2908490610cc0565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106b3565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80356001600160a01b038116811461045757600080fd5b600060208284031215610b97578081fd5b610ba082610b6f565b9392505050565b60008060408385031215610bb9578081fd5b610bc283610b6f565b9150610bd060208401610b6f565b90509250929050565b600080600060608486031215610bed578081fd5b610bf684610b6f565b9250610c0460208501610b6f565b9150604084013590509250925092565b60008060408385031215610c26578182fd5b610c2f83610b6f565b946020939093013593505050565b600060208284031215610c4e578081fd5b5035919050565b6000602080835283518082850152825b81811015610c8157858101830151858201604001528201610c65565b81811115610c925783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610cbb57610cbb610d12565b500190565b600082821015610cd257610cd2610d12565b500390565b600281046001821680610ceb57607f821691505b60208210811415610d0c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220f0498a3fd78d28ebdc9b97161551cb401e8f2db996f648b3569e0fa19cde816f64736f6c63430008020033a2646970667358221220910689a97a0e1b768a1de28cc4077890668a6e3314bb9cf0007d0839c598221f64736f6c63430008020033"; -======= - "0x6080604052620151806008553480156200001857600080fd5b506040516200387b3803806200387b8339810160408190526200003b91620000b4565b60016000556001600160a01b0381166200008e5760405162461bcd60e51b815260206004820152601060248201526f2d32b9379030b2323932b9b99022b93960811b604482015260640160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055620000e4565b600060208284031215620000c6578081fd5b81516001600160a01b0381168114620000dd578182fd5b9392505050565b61378780620000f46000396000f3fe608060405260043610620001465760003560e01c8063a4063dbc11620000bb578063e78cea921162000079578063e78cea921462000410578063f3fef3a31462000432578063f525cb681462000457578063f6b32c5d146200046f578063f77c47911462000487578063feb21b9c14620004a95762000146565b8063a4063dbc14620002de578063b5ada6d81462000379578063ba2756c914620003ba578063d36c0b4014620003e1578063d6f7ddf914620003f95762000146565b8063407431f71162000109578063407431f7146200024057806347e7ef241462000265578063507f596b146200027c5780635efe5b1414620002a1578063694fe81d14620002b95762000146565b806312d36171146200014b578063158ef93e146200017257806316b96f5914620001a357806321e0694a14620001f95780632501a618146200021b575b600080fd5b3480156200015857600080fd5b50620001706200016a3660046200231a565b620004ce565b005b3480156200017f57600080fd5b506009546200018e9060ff1681565b60405190151581526020015b60405180910390f35b348015620001b057600080fd5b50620001e0620001c236600462002297565b6001600160a01b039081166000908152600560205260409020541690565b6040516001600160a01b0390911681526020016200019a565b3480156200020657600080fd5b50600354620001e0906001600160a01b031681565b3480156200022857600080fd5b50620001706200023a36600462002297565b620009e6565b3480156200024d57600080fd5b50620001706200025f36600462002297565b62000ad6565b62000170620002763660046200231a565b62000b5f565b3480156200028957600080fd5b50620001706200029b366004620022d5565b62000d53565b348015620002ae57600080fd5b506200017062001173565b348015620002c657600080fd5b5062000170620002d83660046200231a565b6200120b565b348015620002eb57600080fd5b506200033f620002fd36600462002297565b60056020819052600091825260409091208054600182015460028301546003840154600485015494909501546001600160a01b03909316949193909260ff1686565b604080516001600160a01b03909716875260208701959095529385019290925260608401526080830152151560a082015260c0016200019a565b3480156200038657600080fd5b506200018e6200039836600462002297565b6001600160a01b03166000908152600560208190526040909120015460ff1690565b348015620003c757600080fd5b50620003d260085481565b6040519081526020016200019a565b348015620003ee57600080fd5b506200017062001330565b620001706200040a3660046200231a565b62001473565b3480156200041d57600080fd5b50600254620001e0906001600160a01b031681565b3480156200043f57600080fd5b5062000170620004513660046200231a565b620016c6565b3480156200046457600080fd5b50620003d260075481565b3480156200047c57600080fd5b50620003d260045481565b3480156200049457600080fd5b50600154620001e0906001600160a01b031681565b348015620004b657600080fd5b50620001e0620004c836600462002414565b62001bc0565b6002546001600160a01b0316331480620005825750600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053257600080fd5b505afa15801562000547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056d9190620022b6565b6001600160a01b0316336001600160a01b0316145b620005d45760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920417574687572697a65642043616c6c61626c65000000000000000060448201526064015b60405180910390fd5b60095460ff16620005f95760405162461bcd60e51b8152600401620005cb90620025cf565b6001600160a01b0382166000908152600560208190526040909120015460ff16156200065f5760405162461bcd60e51b81526020600482015260146024820152731c1bdbdb08185b1c9958591e4810dc99585d195960621b6044820152606401620005cb565b60008111620006a05760405162461bcd60e51b815260206004820152600c60248201526b63616e74206265207a65726f60a01b6044820152606401620005cb565b60006001600160a01b038316620006f3576012604051620006c19062002289565b620006cd919062002550565b604051809103906000f080158015620006ea573d6000803e3d6000fd5b509050620008be565b6000839050806001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200073257600080fd5b505afa15801562000747573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077191908101906200236a565b816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620007ab57600080fd5b505afa158015620007c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007ea91908101906200236a565b604051602001620007fc9190620024b5565b604051602081830303815290604052826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200084557600080fd5b505afa1580156200085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000880919062002446565b6040516200088e9062002289565b6200089c93929190620024f6565b604051809103906000f080158015620008b9573d6000803e3d6000fd5b509150505b6040805160c0810182526001600160a01b0380841682526000602080840182815284860183815260608601848152608087018a8152600160a089018181528d89168089526005978890529a882099518a5499166001600160a01b0319998a16178a559451898201559251600289015590516003880155516004870155905194909101805494151560ff199095169490941790935560068054938401815581527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909201805490911690921790915560078054916200099c8362002661565b9190505550806001600160a01b0316836001600160a01b03167f4f2ce4e40f623ca765fc0167a25cb7842ceaafb8d82d3dec26ca0d0e0d2d489660405160405180910390a3505050565b60095460ff1662000a0b5760405162461bcd60e51b8152600401620005cb90620025cf565b62000a1562001beb565b506003546001600160a01b03161562000a7b5760405162461bcd60e51b815260206004820152602160248201527f70656e64696e672042726964676520616c726561647920696e6e6974696174656044820152601960fa1b6064820152608401620005cb565b600380546001600160a01b0319166001600160a01b038381169190911791829055600254604051928216929116907f3e58e639c151e0d6df493210b3bfa74506c57251c0e65539bf2dd2391f55c4c590600090a35042600455565b62000ae062001beb565b506001600160a01b0381161580159062000afd575060095460ff16155b62000b305760405162461bcd60e51b815260206004820152600260248201526122b960f11b6044820152606401620005cb565b600280546001600160a01b0319166001600160a01b03929092169190911790556009805460ff19166001179055565b6002600054141562000bb45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401620005cb565b600260005560095460ff1662000bde5760405162461bcd60e51b8152600401620005cb90620025cf565b6001600160a01b0382166000908152600560208190526040909120015460ff1662000c1d5760405162461bcd60e51b8152600401620005cb90620025a9565b60008062000c2c848462001cc5565b9150915081801562000c3e5750600081115b62000c5d5760405162461bcd60e51b8152600401620005cb9062002533565b6001600160a01b0384166000908152600560205260408120600101805483929062000c8a908490620025fd565b90915550506001600160a01b03848116600090815260056020526040908190205490516340c10f1960e01b8152336004820152602481018490529116906340c10f1990604401600060405180830381600087803b15801562000ceb57600080fd5b505af115801562000d00573d6000803e3d6000fd5b50505050836001600160a01b03167fddc69a07b5bfcee2b68a56a2e28e712c83e6b1372b06f80aaab04dbaca91020f8260405162000d4091815260200190565b60405180910390a2505060016000555050565b6002546001600160a01b0316331462000da65760405162461bcd60e51b81526020600482015260146024820152734f6e6c79204272696467652043616c6c61626c6560601b6044820152606401620005cb565b60095460ff1662000dcb5760405162461bcd60e51b8152600401620005cb90620025cf565b6001600160a01b03821662000e0b5760405162461bcd60e51b81526020600482015260056024820152645a5f415f4560d81b6044820152606401620005cb565b6001600160a01b0383166000908152600560208190526040909120015460ff1662000e4a5760405162461bcd60e51b8152600401620005cb90620025a9565b60006001600160a01b03841662000e6357504762000ee4565b6040516370a0823160e01b815230600482015284906001600160a01b038216906370a082319060240160206040518083038186803b15801562000ea557600080fd5b505afa15801562000eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ee091906200242d565b9150505b6001600160a01b03841660009081526005602052604090206001810154600390910154839162000f1491620025fd565b1015801562000f235750818110155b62000f6c5760405162461bcd60e51b8152602060048201526018602482015277496e737566666963656e7420506f6f6c2042616c616e636560401b6044820152606401620005cb565b6001600160a01b038416600090815260056020526040902060030154156200106d576001600160a01b038416600090815260056020526040902060030154821162000fea576001600160a01b0384166000908152600560205260408120600301805484929062000fde90849062002618565b90915550620010679050565b6001600160a01b03841660009081526005602052604081206003015462001012908462002618565b6001600160a01b03861660009081526005602052604081206002018054929350839290919062001044908490620025fd565b9091555050506001600160a01b0384166000908152600560205260408120600301555b620010a0565b6001600160a01b038416600090815260056020526040812060020180548492906200109a908490620025fd565b90915550505b6001600160a01b0384166000908152600560205260409020600481015460029091015410620011125760405162461bcd60e51b815260206004820152601760248201527f44657074205468726573686f6c642045786365656465640000000000000000006044820152606401620005cb565b6200111f83858462001ed2565b826001600160a01b0316846001600160a01b03167fe21d1ad7c600cb04e8158286eb45e7871820ec2318799d0ad0d4a3822ba0b65c846040516200116591815260200190565b60405180910390a350505050565b60095460ff16620011985760405162461bcd60e51b8152600401620005cb90620025cf565b620011a262001beb565b506003546001600160a01b0316620011f95760405162461bcd60e51b81526020600482015260196024820152781b995dc8189c9a5919d9481b9bdd081a5b9b9a5d1a585d1959603a1b6044820152606401620005cb565b600380546001600160a01b0319169055565b60095460ff16620012305760405162461bcd60e51b8152600401620005cb90620025cf565b6200123a62001beb565b506001600160a01b0382166000908152600560208190526040909120015460ff166200127a5760405162461bcd60e51b8152600401620005cb90620025a9565b60008111620012bb5760405162461bcd60e51b815260206004820152600c60248201526b63616e74206265207a65726f60a01b6044820152606401620005cb565b6001600160a01b0382166000818152600560209081526040918290206004015482519081529081018490527fdb5d4802e9485bcc2d1f104f4bf94ea4f868f505fb441e5d04b041fea46b1d35910160405180910390a26001600160a01b03909116600090815260056020526040902060040155565b60095460ff16620013555760405162461bcd60e51b8152600401620005cb90620025cf565b6200135f62001beb565b506003546001600160a01b0316620013b65760405162461bcd60e51b81526020600482015260196024820152781b995dc8189c9a5919d9481b9bdd081a5b9b9a5d1a585d1959603a1b6044820152606401620005cb565b600854600454620013c8904262002618565b116200140d5760405162461bcd60e51b81526020600482015260136024820152727570646174652064656c61792061637469766560681b6044820152606401620005cb565b6003546002546040516001600160a01b0392831692909116907fd25b8cc1eae330aee7910bb0c832159d94e74e215cd50c82ebf78079628265f890600090a360038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b6002546001600160a01b03163314620014c65760405162461bcd60e51b81526020600482015260146024820152734f6e6c79204272696467652043616c6c61626c6560601b6044820152606401620005cb565b60095460ff16620014eb5760405162461bcd60e51b8152600401620005cb90620025cf565b600080620014fa848462001cc5565b6001600160a01b03861660009081526005602081905260409091200154919350915060ff168015620015295750815b620015485760405162461bcd60e51b8152600401620005cb90620025a9565b6001600160a01b0384166000908152600560205260409020600201541562001649576001600160a01b0384166000908152600560205260409020600201548111620015c6576001600160a01b03841660009081526005602052604081206002018054839290620015ba90849062002618565b90915550620016439050565b6001600160a01b038416600090815260056020526040812060020154620015ee908362002618565b6001600160a01b03861660009081526005602052604081206003018054929350839290919062001620908490620025fd565b9091555050506001600160a01b0384166000908152600560205260408120600201555b6200167c565b6001600160a01b0384166000908152600560205260408120600301805483929062001676908490620025fd565b90915550505b836001600160a01b03167f1af7da014a17ee00b70f5a5c1b333ccaa59a5bd9fcf6ba8dc5e1e636fc099c7482604051620016b891815260200190565b60405180910390a250505050565b600260005414156200171b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401620005cb565b600260005560095460ff16620017455760405162461bcd60e51b8152600401620005cb90620025cf565b6001600160a01b0382166000908152600560208190526040909120015460ff16620017845760405162461bcd60e51b8152600401620005cb90620025a9565b60006001600160a01b038316620017a757506001600160a01b0382163162001828565b6040516370a0823160e01b815230600482015283906001600160a01b038216906370a082319060240160206040518083038186803b158015620017e957600080fd5b505afa158015620017fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200182491906200242d565b9150505b6001600160a01b038084166000908152600560205260409020805460019091015491169083118015906200185c5750828210155b620018a55760405162461bcd60e51b8152602060048201526018602482015277496e737566666963656e7420506f6f6c2042616c616e636560401b6044820152606401620005cb565b826001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b158015620018fc57600080fd5b505afa15801562001911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200193791906200242d565b1015620019585760405162461bcd60e51b8152600401620005cb9062002533565b6001600160a01b038481166000908152600560205260408082205490516370a0823160e01b8152306004820152919216906370a082319060240160206040518083038186803b158015620019ab57600080fd5b505afa158015620019c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019e691906200242d565b9050620019ff6001600160a01b03831633308762001f7d565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801562001a4257600080fd5b505afa15801562001a57573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a7d91906200242d565b9050600062001a8d838362002618565b1162001aad5760405162461bcd60e51b8152600401620005cb9062002533565b600062001abb838362002618565b6001600160a01b0388811660009081526005602052604090819020549051630852cd8d60e31b81526004810184905292935016906342966c6890602401600060405180830381600087803b15801562001b1357600080fd5b505af115801562001b28573d6000803e3d6000fd5b5050505062001b4062001b383390565b888362001ed2565b6001600160a01b0387166000908152600560205260408120600101805483929062001b6d90849062002618565b909155505060405181815233906001600160a01b038916907f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e769060200160405180910390a3505060016000555050505050565b6006818154811062001bd157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000336001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001c4657600080fd5b505afa15801562001c5b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c819190620022b6565b6001600160a01b03161462001cbf5760405162461bcd60e51b8152602060048201526003602482015262555f4160e81b6044820152606401620005cb565b50600190565b6000806001600160a01b03841662001cf75782341062001ceb5750600190503462001ecb565b50600090508062001ecb565b83836001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b15801562001d4f57600080fd5b505afa15801562001d64573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d8a91906200242d565b1062001ec2576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801562001dd357600080fd5b505afa15801562001de8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0e91906200242d565b905062001e276001600160a01b03831633308862001f7d565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801562001e6a57600080fd5b505afa15801562001e7f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea591906200242d565b9050600162001eb5838362002618565b9450945050505062001ecb565b60008092509250505b9250929050565b6001600160a01b03831662001f125760405162461bcd60e51b81526020600482015260056024820152645a5f415f4560d81b6044820152606401620005cb565b6001600160a01b03821662001f5f576040516001600160a01b0384169082156108fc029083906000818181858888f1935050505015801562001f58573d6000803e3d6000fd5b5062001f78565b8162001f766001600160a01b038216858462001fea565b505b505050565b6040516001600160a01b038085166024830152831660448201526064810182905262001f769085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200201c565b6040516001600160a01b03831660248201526044810182905262001f7890849063a9059cbb60e01b9060640162001fb2565b600062002073826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620020f59092919063ffffffff16565b80519091501562001f78578080602001905181019062002094919062002348565b62001f785760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620005cb565b606062002106848460008562002110565b90505b9392505050565b606082471015620021735760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401620005cb565b6001600160a01b0385163b620021cc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620005cb565b600080866001600160a01b03168587604051620021ea919062002497565b60006040518083038185875af1925050503d806000811462002229576040519150601f19603f3d011682016040523d82523d6000602084013e6200222e565b606091505b5091509150620022408282866200224b565b979650505050505050565b606083156200225c57508162002109565b8251156200226d5782518084602001fd5b8160405162461bcd60e51b8152600401620005cb9190620024e1565b61108d80620026c583390190565b600060208284031215620022a9578081fd5b81356200210981620026ab565b600060208284031215620022c8578081fd5b81516200210981620026ab565b600080600060608486031215620022ea578182fd5b8335620022f781620026ab565b925060208401356200230981620026ab565b929592945050506040919091013590565b600080604083850312156200232d578182fd5b82356200233a81620026ab565b946020939093013593505050565b6000602082840312156200235a578081fd5b8151801515811462002109578182fd5b6000602082840312156200237c578081fd5b815167ffffffffffffffff8082111562002394578283fd5b818401915084601f830112620023a8578283fd5b815181811115620023bd57620023bd62002695565b604051601f8201601f19908116603f01168101908382118183101715620023e857620023e862002695565b8160405282815287602084870101111562002401578586fd5b6200224083602083016020880162002632565b60006020828403121562002426578081fd5b5035919050565b6000602082840312156200243f578081fd5b5051919050565b60006020828403121562002458578081fd5b815160ff8116811462002109578182fd5b600081518084526200248381602086016020860162002632565b601f01601f19169290920160200192915050565b60008251620024ab81846020870162002632565b9190910192915050565b600061313960f11b82528251620024d481600285016020870162002632565b9190910160020192915050565b60006020825262002109602083018462002469565b6000606082526200250b606083018662002469565b82810360208401526200251f818662002469565b91505060ff83166040830152949350505050565b60208082526003908201526224afa360e91b604082015260600190565b6000606082526200257460608301600381526221272160e91b602082015260400190565b82810360208401526200259781600381526221272160e91b602082015260400190565b91505060ff8316604083015292915050565b6020808252600c908201526b1a5b9d985b1a5908141bdbdb60a21b604082015260600190565b6020808252601490820152731c1bdbdb081b9bdd081a5b9a5d1a585b1a5e995960621b604082015260600190565b600082198211156200261357620026136200267f565b500190565b6000828210156200262d576200262d6200267f565b500390565b60005b838110156200264f57818101518382015260200162002635565b8381111562001f765750506000910152565b60006000198214156200267857620026786200267f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620026c157600080fd5b5056fe60806040523480156200001157600080fd5b506040516200108d3803806200108d83398101604081905262000034916200024b565b82828282600390805190602001906200004f929190620000f2565b50815162000065906004906020850190620000f2565b506005805460ff191660ff92909216919091179055506200008f9050620000893390565b62000098565b5050506200031f565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010090620002cc565b90600052602060002090601f0160209004810192826200012457600085556200016f565b82601f106200013f57805160ff19168380011785556200016f565b828001600101855582156200016f579182015b828111156200016f57825182559160200191906001019062000152565b506200017d92915062000181565b5090565b5b808211156200017d576000815560010162000182565b600082601f830112620001a9578081fd5b81516001600160401b0380821115620001c657620001c662000309565b604051601f8301601f19908116603f01168101908282118183101715620001f157620001f162000309565b816040528381526020925086838588010111156200020d578485fd5b8491505b8382101562000230578582018301518183018401529082019062000211565b838211156200024157848385830101525b9695505050505050565b60008060006060848603121562000260578283fd5b83516001600160401b038082111562000277578485fd5b620002858783880162000198565b945060208601519150808211156200029b578384fd5b50620002aa8682870162000198565b925050604084015160ff81168114620002c1578182fd5b809150509250925092565b600281046001821680620002e157607f821691505b602082108114156200030357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b610d5e806200032f6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d71461020d578063a9059cbb14610220578063dd62ed3e14610233578063f2fde38b1461026c57610100565b806370a08231146101bb578063715018a6146101ce5780638da5cb5b146101d657806395d89b411461020557610100565b8063313ce567116100d3578063313ce5671461016b578063395093511461018057806340c10f191461019357806342966c68146101a857610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d61027f565b60405161011a9190610c55565b60405180910390f35b610136610131366004610c14565b610311565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004610bd9565b610327565b60055460405160ff909116815260200161011a565b61013661018e366004610c14565b6103d6565b6101a66101a1366004610c14565b610412565b005b6101a66101b6366004610c3d565b610428565b61014a6101c9366004610b86565b61043d565b6101a661045c565b6101ed60055461010090046001600160a01b031690565b6040516001600160a01b03909116815260200161011a565b61010d610470565b61013661021b366004610c14565b61047f565b61013661022e366004610c14565b610518565b61014a610241366004610ba7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101a661027a366004610b86565b610525565b60606003805461028e90610cd7565b80601f01602080910402602001604051908101604052809291908181526020018280546102ba90610cd7565b80156103075780601f106102dc57610100808354040283529160200191610307565b820191906000526020600020905b8154815290600101906020018083116102ea57829003601f168201915b5050505050905090565b600061031e33848461059b565b50600192915050565b60006103348484846106c0565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156103be5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6103cb853385840361059b565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161031e91859061040d908690610ca8565b61059b565b61041a61088f565b61042482826108ef565b5050565b61043061088f565b61043a33826109cf565b50565b6001600160a01b0381166000908152602081905260409020545b919050565b61046461088f565b61046e6000610b15565b565b60606004805461028e90610cd7565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156105015760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b5565b61050e338585840361059b565b5060019392505050565b600061031e3384846106c0565b61052d61088f565b6001600160a01b0381166105925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b5565b61043a81610b15565b6001600160a01b0383166105fd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b5565b6001600160a01b03821661065e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166107245760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103b5565b6001600160a01b0382166107865760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103b5565b6001600160a01b038316600090815260208190526040902054818110156107fe5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610835908490610ca8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161088191815260200190565b60405180910390a350505050565b6005546001600160a01b0361010090910416331461046e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b5565b6001600160a01b0382166109455760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103b5565b80600260008282546109579190610ca8565b90915550506001600160a01b03821660009081526020819052604081208054839290610984908490610ca8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610424565b6001600160a01b038216610a2f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103b5565b6001600160a01b03821660009081526020819052604090205481811015610aa35760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103b5565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610ad2908490610cc0565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106b3565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80356001600160a01b038116811461045757600080fd5b600060208284031215610b97578081fd5b610ba082610b6f565b9392505050565b60008060408385031215610bb9578081fd5b610bc283610b6f565b9150610bd060208401610b6f565b90509250929050565b600080600060608486031215610bed578081fd5b610bf684610b6f565b9250610c0460208501610b6f565b9150604084013590509250925092565b60008060408385031215610c26578182fd5b610c2f83610b6f565b946020939093013593505050565b600060208284031215610c4e578081fd5b5035919050565b6000602080835283518082850152825b81811015610c8157858101830151858201604001528201610c65565b81811115610c925783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610cbb57610cbb610d12565b500190565b600082821015610cd257610cd2610d12565b500390565b600281046001821680610ceb57607f821691505b60208210811415610d0c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220f0498a3fd78d28ebdc9b97161551cb401e8f2db996f648b3569e0fa19cde816f64736f6c63430008020033a2646970667358221220c305b2d023c38bc8b0b5c3ec7ce0c4f7971c9b4c320628d9b949d832c6dc8bbf64736f6c63430008020033"; ->>>>>>> 6bc7fc991f262d3896e10700cf04ee01a2d79f23 type BridgePoolConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/Bridge__factory.ts b/typechain-types/factories/contracts/Bridge__factory.ts index f43541d..63c9c5d 100644 --- a/typechain-types/factories/contracts/Bridge__factory.ts +++ b/typechain-types/factories/contracts/Bridge__factory.ts @@ -816,25 +816,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "foriegnPair", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "getAssetCount", @@ -1442,11 +1423,7 @@ const _abi = [ ]; const _bytecode = -<<<<<<< HEAD - "0x60806040523480156200001157600080fd5b506040516200618938038062006189833981016040819052620000349162000169565b6001600055620000448762000105565b50620000508662000105565b506200005c8562000105565b50620000688462000105565b50620000748362000105565b50620000808262000105565b50600280546001600160a01b03199081166001600160a01b03988916179091556001805482169888169890981790975560038054881695871695909517909455601680548716948616949094179093556012805486169285169290921790915560138054851691841691909117905560048054909316911617905546601155620001fd565b60006001600160a01b038216620001485760405162461bcd60e51b815260206004820152600360248201526220afbd60e91b604482015260640160405180910390fd5b5060015b919050565b80516001600160a01b03811681146200014c57600080fd5b600080600080600080600060e0888a03121562000184578283fd5b6200018f8862000151565b96506200019f6020890162000151565b9550620001af6040890162000151565b9450620001bf6060890162000151565b9350620001cf6080890162000151565b9250620001df60a0890162000151565b9150620001ef60c0890162000151565b905092959891949750929550565b615f7c806200020d6000396000f3fe6080604052600436106102465760003560e01c80637b10399911610139578063b8ce670d116100b6578063d5f394881161007a578063d5f39488146108e1578063e06174e414610901578063e1d0ae9a14610921578063f36dccf914610936578063f77c4791146109b9578063fd16ad90146109d957610246565b8063b8ce670d1461085b578063ba4559d51461086e578063bd66528a1461088e578063c5be5383146108ae578063ce5d9746146108ce57610246565b8063aa5e4aa3116100fd578063aa5e4aa314610785578063aadab832146107b2578063abb56897146107ed578063adf2cead14610828578063b5e8c0141461084857610246565b80637b1039991461060e5780638d47d1011461062e5780639a8a05921461064e578063a0aead4d14610672578063a8b5b8ed146106a357610246565b806355a481d0116101c75780636999b3771161018b5780636999b3771461053c5780636f6bfae31461055c578063711ee04c1461058957806371726c92146105be578063751ba492146105de57610246565b806355a481d0146104755780635c14b206146104955780635c975abb146104d65780635d22448c146105075780635e46bea51461051c57610246565b80632481bb5c1161020e5780632481bb5c146103695780632d5ed912146103ea578063334c14391461040a5780633f0bfa441461042a5780634886f62c1461046057610246565b8063040713db1461024b57806307e6b6361461026d5780630d4de2a1146102aa5780630dcc1484146102ca5780631ce818c6146102ea575b600080fd5b34801561025757600080fd5b5061026b610266366004615318565b6109f9565b005b34801561027957600080fd5b5061028d6102883660046157a1565b610c88565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b657600080fd5b5061026b6102c53660046158b0565b610cb2565b3480156102d657600080fd5b5061026b6102e53660046157a1565b611122565b3480156102f657600080fd5b5061033c6103053660046157a1565b600b6020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169160ff1684565b604080516001600160a01b03958616815294909316602085015291830152151560608201526080016102a1565b34801561037557600080fd5b50601654601554601354601454601854601954601a54604080516001600160a01b0398891681529688166020880152600160a01b860460ff1615159087015260608601939093526202a300608086015260a085019190915260c084015260e083015291909116610100820152610120016102a1565b3480156103f657600080fd5b5061026b61040536600461547b565b611245565b34801561041657600080fd5b5061026b6104253660046152ce565b611361565b34801561043657600080fd5b5061028d610445366004615296565b600d602052600090815260409020546001600160a01b031681565b34801561046c57600080fd5b5061026b611411565b34801561048157600080fd5b5061026b6104903660046156da565b611511565b3480156104a157600080fd5b5061028d6104b03660046154b3565b600c6020908152600092835260408084209091529082529020546001600160a01b031681565b3480156104e257600080fd5b506004546104f790600160a01b900460ff1681565b60405190151581526020016102a1565b34801561051357600080fd5b5061026b61199c565b34801561052857600080fd5b5060045461028d906001600160a01b031681565b34801561054857600080fd5b5060135461028d906001600160a01b031681565b34801561056857600080fd5b5061057c610577366004615296565b6119c6565b6040516102a19190615a99565b34801561059557600080fd5b506105a96105a436600461547b565b611a33565b604080519283526020830191909152016102a1565b3480156105ca57600080fd5b5061026b6105d9366004615296565b611a93565b3480156105ea57600080fd5b506104f76105f9366004615296565b60066020526000908152604090205460ff1681565b34801561061a57600080fd5b5060035461028d906001600160a01b031681565b34801561063a57600080fd5b5061026b610649366004615514565b611b60565b34801561065a57600080fd5b5061066460115481565b6040519081526020016102a1565b34801561067e57600080fd5b50601c54601b54601754604080519384526020840192909252908201526060016102a1565b3480156106af57600080fd5b506107256106be366004615296565b600a60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979596949593949293919260ff80841693610100900482169291821691600160a01b9004168a565b604080516001600160a01b039b8c168152602081019a909a528901979097526060880195909552608087019390935260a0860191909152151560c0850152841660e0840152909216610100820152901515610120820152610140016102a1565b34801561079157600080fd5b506106646107a0366004615296565b60096020526000908152604090205481565b3480156107be57600080fd5b506104f76107cd3660046154b3565b600f60209081526000928352604080842090915290825290205460ff1681565b3480156107f957600080fd5b506104f76108083660046154b3565b600860209081526000928352604080842090915290825290205460ff1681565b34801561083457600080fd5b5061026b6108433660046157a1565b61228e565b610664610856366004615867565b612620565b6106646108693660046154de565b612a31565b34801561087a57600080fd5b5061026b61088936600461547b565b612cdc565b34801561089a57600080fd5b5061026b6108a93660046157a1565b612e79565b3480156108ba57600080fd5b5061026b6108c9366004615601565b613172565b61026b6108dc366004615372565b6136fc565b3480156108ed57600080fd5b5060125461028d906001600160a01b031681565b34801561090d57600080fd5b5060025461028d906001600160a01b031681565b34801561092d57600080fd5b50610664601281565b34801561094257600080fd5b50610725610951366004615296565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007909601546001600160a01b039586169794969395929493919260ff80841693610100900482169291821691600160a01b9004168a565b3480156109c557600080fd5b5060015461028d906001600160a01b031681565b3480156109e557600080fd5b5061028d6109f43660046157a1565b61382a565b610a0161383a565b50610a0b84613883565b50610a1583613883565b506001600160a01b0385166000908152600a6020526040902060070154600160a01b900460ff1680610a6957506001600160a01b038516600090815260056020526040902060070154600160a01b900460ff165b8015610a7457508181115b610a995760405162461bcd60e51b8152600401610a9090615b67565b60405180910390fd5b6000610aa68660016138c9565b15610ab357506001610b52565b610abe8660006138c9565b15610acb57506000610b52565b610ad3613994565b506001600160a01b0386166000908152600a6020526040902060070154600160a01b900460ff1615610b0757506000610b52565b6001600160a01b038616600090815260056020526040902060070154600160a01b900460ff1615610b3a57506001610b52565b60405162461bcd60e51b8152600401610a9090615b84565b8015610bb8576001600160a01b038681166000908152600560205260409020600681018054610100600160a81b031916610100898516021790556007810180546001600160a01b0319169287169290921790915560018101849055600201829055610c14565b6001600160a01b038681166000908152600a60205260409020600681018054610100600160a81b031916610100898516021790556007810180546001600160a01b03191692871692909217909155600181018490556002018290555b836001600160a01b0316856001600160a01b0316876001600160a01b03167fd16202366d5587c878fd5283ccc908ea1f5bb379ac191ad6781bbcb4974cec4b868686604051610c789392919092835260208301919091521515604082015260600190565b60405180910390a4505050505050565b601c8181548110610c9857600080fd5b6000918252602090912001546001600160a01b0316905081565b610cba613994565b50601354600160a01b900460ff168015610ce457506202a30060145442610ce19190615e96565b10155b610d185760405162461bcd60e51b81526020600482015260056024820152641397d657d560da1b6044820152606401610a90565b6000808215610e7d5760175460195410610d605760405162461bcd60e51b815260206004820152600960248201526818dbdb5c1b195d195960ba1b6044820152606401610a90565b601954601754909250610d738386615d30565b1015610d80575082610d93565b601954601754610d909190615e96565b90505b60005b81811015610e77576000600b81610dad8487615d30565b81526020810191909152604001600020600381015490915060ff1615610e64576015548154600283015460018085015460405163055a481d60e41b81526001600160a01b03958616956355a481d095610e1f959082169490936000938493849384938493849390911690600401615a40565b600060405180830381600087803b158015610e3957600080fd5b505af1158015610e4d573d6000803e3d6000fd5b505050506019546001610e609190615d30565b6019555b5080610e6f81615ed9565b915050610d96565b5061111c565b601b5460185410610ebc5760405162461bcd60e51b815260206004820152600960248201526818dbdb5c1b195d195960ba1b6044820152606401610a90565b601854601b54909250610ecf8386615d30565b1015610edc575082610eef565b601854601b54610eec9190615e96565b90505b60005b8181101561111a576000601b610f088386615d30565b81548110610f2657634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b03169150610f47908290611245565b6001600160a01b038181166000818152600a6020908152604091829020825161014081018452815486168152600182015492810192909252600281015482840152600381015460608301526004808201546080840152600582015460a0840152600682015460ff808216151560c086015261010091829004881660e086015260079093015480881691850191909152600160a01b90049091161515610120830152601554925163f2fde38b60e01b8152929094169382019390935263f2fde38b90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b505060155483516001600160a01b03818116600090815260096020908152604080832054828a0151828b015160c08c015160e08d01516101008e015160a08f01518f518b168a52600d90985286892054965163055a481d60e41b81529b8a169d506355a481d09c506110c19b9599949893979296919590949293929190911690600401615a40565b600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b5050505060185460016111029190615d30565b6018555081905061111281615ed9565b915050610ef2565b505b50505050565b61112a613994565b50601354600160a01b900460ff16801561115457506202a300601454426111519190615e96565b10155b6111885760405162461bcd60e51b81526020600482015260056024820152641397d657d560da1b6044820152606401610a90565b600080601a546000141561119f5750601a546111b0565b601a546111ad906001615d30565b90505b601a54601c546111c09085615d30565b10156111ce578291506111e1565b601a54601c546111de9190615e96565b91505b60005b8281101561111c57611233601c6111fb8385615d30565b8154811061121957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316613a4c565b8061123d81615ed9565b9150506111e4565b600080821561126d576001600160a01b03841660009081526005602052604090209150611288565b6001600160a01b0384166000908152600a6020526040902091505b600682015460ff16156112c4576003820154156112c45750600381018054600090915560078201546112c4906001600160a01b03168583613d49565b60048201541561111c575060048082018054600090915560025460408051632bdb901160e11b81529051929361111c936001600160a01b03909316926357b72022928083019260209291829003018186803b15801561132257600080fd5b505afa158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a91906152b2565b8583613d49565b611369613994565b5061137383613883565b5061137d82613883565b5061138781613883565b50806001600160a01b0316826001600160a01b0316846001600160a01b03167f4233a6fa155f27e6a5fe881410a1cb3f6ee591b1adf0d4f8111520d43611ebfe60405160405180910390a4600280546001600160a01b039485166001600160a01b031991821617909155601380549385169382169390931790925560128054919093169116179055565b611419613994565b50601354600160a01b900460ff1680156114375750601b5460185410155b6114695760405162461bcd60e51b8152602060048201526003602482015262505f4d60e81b6044820152606401610a90565b60035460155460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156114b257600080fd5b505af11580156114c6573d6000803e3d6000fd5b50506013805460ff60a01b1916905550506015546040516001600160a01b03909116907f917552ffe30574970b53b4e4d4c0a79ac1b3e6b6c2459457831cbf3b991fb70d90600090a2565b60025460405163df73eb5160e01b8152600481018b90526001600160a01b039091169063df73eb519060240160206040518083038186803b15801561155557600080fd5b505afa158015611569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158d9190615785565b80156115bd57506001600160a01b0381166000908152600e602090815260408083208c845290915290205460ff16155b80156115dc57506016546001600160a01b0316336001600160a01b0316145b6115f85760405162461bcd60e51b8152600401610a9090615b84565b811561173c576001600f60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180608001604052808b6001600160a01b03168152602001826001600160a01b031681526020018a815260200160011515815250600b6000601754815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050506017600081548092919061173290615ed9565b9190505550611985565b6040518061014001604052808b6001600160a01b0316815260200189815260200188815260200160008152602001600081526020018481526020018715158152602001866001600160a01b03168152602001856001600160a01b0316815260200160011515815250600a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160070160146101000a81548160ff02191690831515021790555090505088600960008c6001600160a01b03166001600160a01b031681526020019081526020016000208190555080600d60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b8a9080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055505b611990818a8c613e43565b50505050505050505050565b6119a4613994565b506004805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6001600160a01b038116600090815260076020908152604091829020805483518184028101840190945280845260609392830182828015611a2657602002820191906000526020600020905b815481526020019060010190808311611a12575b505050505090505b919050565b6000808215611a665750506001600160a01b03821660009081526005602052604090206001810154600290910154611a8c565b50506001600160a01b0382166000908152600a6020526040902060018101546002909101545b9250929050565b611a9b61383a565b50611aa4613994565b50611aae81613883565b50601354600160a01b900460ff1615611aef5760405162461bcd60e51b8152602060048201526003602482015262505f4d60e81b6044820152606401610a90565b601580546001600160a01b0319166001600160a01b03831690811790915560138054600160a01b60ff60a01b199182168117909255600480549091169091179055426014556040517fbf3aee0580cb96d1eb8ffba88fb8dc83e973b7cdf4a18be5a0d3cbb4e6ecb3d390600090a250565b6001546001600160a01b03166324d7806c336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611bb157600080fd5b505afa158015611bc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be99190615785565b80611c7857506001546001600160a01b031663d5db72eb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611c4057600080fd5b505afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c789190615785565b611cac5760405162461bcd60e51b81526020600482015260056024820152642aafa0afb960d91b6044820152606401610a90565b60025460405163df73eb5160e01b8152600481018d90526001600160a01b039091169063df73eb519060240160206040518083038186803b158015611cf057600080fd5b505afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d289190615785565b8015611d5857506001600160a01b038c166000908152600e602090815260408083208e845290915290205460ff16155b8015611d645750600289145b8015611d705750600287145b611da95760405162461bcd60e51b815260206004820152600a6024820152691c9959da5cdd195c995960b21b6044820152606401610a90565b60008215611ef2578190506001600f60008f6001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180608001604052808e6001600160a01b03168152602001826001600160a01b031681526020018d815260200160011515815250600b6000601754815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555090505060176000815480929190611ee890615ed9565b9190505550612274565b6012546001600160a01b031663803ef2698a8a600081611f2257634e487b7160e01b600052603260045260246000fd5b9050602002810190611f349190615c99565b8c8c6001818110611f5557634e487b7160e01b600052603260045260246000fd5b9050602002810190611f679190615c99565b896040518663ffffffff1660e01b8152600401611f88959493929190615add565b602060405180830381600087803b158015611fa257600080fd5b505af1158015611fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda91906152b2565b9050604051806101400160405280826001600160a01b031681526020018c8c600081811061201857634e487b7160e01b600052603260045260246000fd5b9050602002013581526020018c8c600181811061204557634e487b7160e01b600052603260045260246000fd5b9050602002013581526020016000815260200160008152602001600081526020018815158152602001876001600160a01b03168152602001866001600160a01b0316815260200160011515815250600a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160070160146101000a81548160ff0219169083151502179055509050508b60096000836001600160a01b03166001600160a01b03168152602001908152602001600020819055508c600d6000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b819080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055505b61227f8d8d83613e43565b50505050505050505050505050565b600260005414156122b15760405162461bcd60e51b8152600401610a9090615ba1565b60026000556122be61383a565b50600354604051633600fb2960e11b8152600481018390526000916001600160a01b031690636c01f6529060240160c060405180830381600087803b15801561230657600080fd5b505af115801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e91906157dc565b6003546040516306a2b7bd60e01b8152600481018590529192506001600160a01b0316906306a2b7bd90602401602060405180830381600087803b15801561238557600080fd5b505af1158015612399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bd9190615785565b80156123cb57508060a00151155b8015612450575060035460405163105ac01b60e01b8152600481018490526001600160a01b039091169063105ac01b90602401602060405180830381600087803b15801561241857600080fd5b505af115801561242c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124509190615785565b6124805760405162461bcd60e51b81526020600482015260016024820152604d60f81b6044820152606401610a90565b600061249c82604001516124978460200151613ec5565b613f57565b6020808401516001600160a01b03166000908152600f8252604080822086518352909252205490915060ff161561254a57600480546020840151606085015160405163507f596b60e01b81526001600160a01b03928316948101949094528116602484015260448301849052169063507f596b90606401600060405180830381600087803b15801561252d57600080fd5b505af1158015612541573d6000803e3d6000fd5b505050506125b7565b602082015160608301516040516340c10f1960e01b81526001600160a01b039182166004820152602481018490529116906340c10f1990604401600060405180830381600087803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b505050505b60035460405163aaff559b60e01b8152600481018590526001600160a01b039091169063aaff559b906024015b600060405180830381600087803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505060016000555050505050565b6000600260005414156126455760405162461bcd60e51b8152600401610a9090615ba1565b600260005561265261383a565b506001600160a01b03841660009081526006602052604090205460ff16801561269e57506001600160a01b038416600090815260086020908152604080832088845290915290205460ff165b6126d35760405162461bcd60e51b8152600401610a9090602080825260049082015263414c5f4560e01b604082015260600190565b6126dc82613883565b506000806126eb868887613f79565b915091508180156126fc5750600081115b801561272357506001600160a01b0386166000908152600560205260409020600101548110155b801561274a57506001600160a01b0386166000908152600560205260409020600201548111155b6127665760405162461bcd60e51b8152600401610a9090615b4a565b6127728682600161435d565b6001600160a01b0387166000908152600f602090815260408083208b845290915290205490915060ff1615612910576001600160a01b03861661281e576004805460405163d6f7ddf960e01b81526001600160a01b03898116938201939093526024810184905291169063d6f7ddf99083906044016000604051808303818588803b15801561280057600080fd5b505af1158015612814573d6000803e3d6000fd5b5050505050612910565b6004805460405163095ea7b360e01b81526001600160a01b03918216928101929092526024820183905287169063095ea7b390604401602060405180830381600087803b15801561286e57600080fd5b505af1158015612882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a69190615785565b506004805460405163d6f7ddf960e01b81526001600160a01b03898116938201939093526024810184905291169063d6f7ddf990604401600060405180830381600087803b1580156128f757600080fd5b505af115801561290b573d6000803e3d6000fd5b505050505b6129228161291d88613ec5565b61477f565b60035460405163f2e84dbd60e01b8152600481018a90526001600160a01b0389811660248301526044820184905287811660648301526000608483018190529394509091169063f2e84dbd9060a4016040805180830381600087803b15801561298a57600080fd5b505af115801561299e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c291906157b9565b60408051838152602081018c905290810185905260608101829052919550915033906001600160a01b0387811691908a16907f6eadb2b7a4982f73f1a7ebd22bd3841c236dfa73a50e818bb3fac34e236ff4159060800160405180910390a45050600160005550949350505050565b600060026000541415612a565760405162461bcd60e51b8152600401610a9090615ba1565b6002600055612a6361383a565b506001600160a01b038416600090815260096020908152604080832054600a90925290912060070154600160a01b900460ff16612ab25760405162461bcd60e51b8152600401610a9090615b67565b612abb83613883565b50600080612aca878488613f79565b91509150818015612af657506001600160a01b0387166000908152600a60205260409020600101548110155b8015612b1d57506001600160a01b0387166000908152600a60205260409020600201548111155b612b395760405162461bcd60e51b8152600401610a9090615b4a565b612b458782600061435d565b604051630852cd8d60e31b8152600481018290529091506001600160a01b038816906342966c6890602401600060405180830381600087803b158015612b8a57600080fd5b505af1158015612b9e573d6000803e3d6000fd5b505050506001600160a01b038781166000908152600d602052604090205416612bca8261291d8a613ec5565b60035460405163f2e84dbd60e01b8152600481018790526001600160a01b038481166024830152604482018490528981166064830152600160848301529294506000929091169063f2e84dbd9060a4016040805180830381600087803b158015612c3357600080fd5b505af1158015612c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6b91906157b9565b604080518381526020810189905290810186905260608101829052919750915033906001600160a01b0389811691908516907f52458269afd71a8a53a86e1bebaa32e82a4946c52441cbf62e946b7591fcba4c9060800160405180910390a450506001600055509195945050505050565b6001600160a01b038216600090815260056020526040902060070154600160a01b900460ff168015612e3257506001546001600160a01b03166324d7806c336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015612d5a57600080fd5b505afa158015612d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d929190615785565b80612e2157506001546001600160a01b031663d5db72eb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015612de957600080fd5b505afa158015612dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e219190615785565b80612e325750612e328260016138c9565b612e4e5760405162461bcd60e51b8152600401610a9090615b84565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60026000541415612e9c5760405162461bcd60e51b8152600401610a9090615ba1565b6002600055612ea961383a565b506003546040516375a28b8160e01b8152600481018390526000916001600160a01b0316906375a28b819060240160c060405180830381600087803b158015612ef157600080fd5b505af1158015612f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2991906157dc565b90506000612f4282604001516124978460200151613ec5565b6003546040516303c5dd0560e11b8152600481018690529192506001600160a01b03169063078bba0a90602401602060405180830381600087803b158015612f8957600080fd5b505af1158015612f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc19190615785565b801561306657506003546020830151835160405163071fdf5d60e51b815284936001600160a01b03169263e3fbeba092613011926004016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561302b57600080fd5b505af115801561303f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613063919061584f565b10155b801561307457508160a00151155b80156130f9575060035460405163105ac01b60e01b8152600481018590526001600160a01b039091169063105ac01b90602401602060405180830381600087803b1580156130c157600080fd5b505af11580156130d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f99190615785565b61312e5760405162461bcd60e51b8152600401610a9090602080825260049082015263414c5f4560e01b604082015260600190565b6131418260600151836020015183613d49565b60035460405163e3cce7f160e01b8152600481018590526001600160a01b039091169063e3cce7f1906024016125e4565b61317a61383a565b50600154604051630935e01b60e21b81523360048201526000916001600160a01b0316906324d7806c9060240160206040518083038186803b1580156131bf57600080fd5b505afa1580156131d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f79190615785565b1561322a576001600160a01b0383161580159061321c57506001600160a01b03841615155b15613225575060015b613636565b5060025460408051631d43bac360e21b815290516001926001600160a01b03169163750eeb0c916004808301926020929190829003018186803b15801561327057600080fd5b505afa158015613284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a89190615785565b15613489576001600160a01b038c1661335f5760025460405163702e9b0f60e11b81526001600160a01b038e811660048301523360248301529091169063e05d361e9060440160206040518083038186803b15801561330657600080fd5b505afa15801561331a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333e9190615785565b61335a5760405162461bcd60e51b8152600401610a9090615b84565b613489565b8b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561339857600080fd5b505afa1580156133ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d091906152b2565b6001600160a01b0316336001600160a01b0316148061346d575060025460405163702e9b0f60e11b81526001600160a01b038e811660048301523360248301529091169063e05d361e9060440160206040518083038186803b15801561343557600080fd5b505afa158015613449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346d9190615785565b6134895760405162461bcd60e51b8152600401610a9090615b84565b60025460408051632ec88e8960e11b815290516000926001600160a01b031691635d911d12916004808301926020929190829003018186803b1580156134ce57600080fd5b505afa1580156134e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350691906152b2565b905061363433600260009054906101000a90046001600160a01b03166001600160a01b03166357b720226040518163ffffffff1660e01b815260040160206040518083038186803b15801561355a57600080fd5b505afa15801561356e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359291906152b2565b600260009054906101000a90046001600160a01b03166001600160a01b03166319b9cd6e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135e057600080fd5b505afa1580156135f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613618919061584f565b613622908d615e77565b6001600160a01b0385169291906147a1565b505b6136898c8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878e8e868a8a600061480c565b826001600160a01b03168c6001600160a01b03167f5cefea613365c605e680542e6974e101c35c53536b5dc28944c793518093a3af8d8d8d8d8d8d8d6136cc3390565b8b8f8e6040516136e69b9a99989796959493929190615bd8565b60405180910390a3505050505050505050505050565b6001600160a01b038916600090815260056020526040902060070154600160a01b900460ff1615801561374257506016546001600160a01b0316336001600160a01b0316145b61375e5760405162461bcd60e51b8152600401610a9090615b84565b6000806137738b828760016020020151613f79565b91509150818015613788575060208501518110155b6137a45760405162461bcd60e51b8152600401610a9090615b4a565b895160208b01516137c0918d9186916000918d8c8e600161480c565b84516001600160a01b038c16600090815260056020819052604091829020600381019390935590870151600483015501899055831561381d576001600160a01b038b166000908152600660205260409020805460ff191660011790555b5050505050505050505050565b601b8181548110610c9857600080fd5b600454600090600160a01b900460ff161561387d5760405162461bcd60e51b81526020600482015260036024820152620425f560ec1b6044820152606401610a90565b50600190565b60006001600160a01b0382166138c15760405162461bcd60e51b815260206004820152600360248201526220afbd60e91b6044820152606401610a90565b506001919050565b6000808215613932576001600160a01b038481166000908152600560205260409020600601546101009004163314801561392457506001600160a01b0384811660009081526005602052604090206006015461010090041615155b1561392d575060015b61398d565b6001600160a01b038481166000908152600a60205260409020600601546101009004163314801561398457506001600160a01b038481166000908152600a602052604090206006015461010090041615155b1561398d575060015b9392505050565b6000336001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156139ee57600080fd5b505afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906152b2565b6001600160a01b03161461387d5760405162461bcd60e51b8152600401610a9090615b84565b6001600160a01b03808216600081815260056020818152604080842081516101408101835281548816815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529182015460a0820152600682015460ff808216151560c084015261010091829004871660e084015260079093015495861690820152600160a01b90940416151561012084015290613bcd57506015546040805180820182526020808501518252848301518183015260a085015160c086015160e08701516101008801518651606080820189528a015181524781870181905260808b0151828a01526001600160a01b038c81166000908152600689528a81205460079099528a9020995163672ecba360e11b8152919a169863ce5d9746988b98613b96988f9892979096929590949293909260ff9092169160040161599b565b6000604051808303818588803b158015613baf57600080fd5b505af1158015613bc3573d6000803e3d6000fd5b5050505050613d33565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b158015613c0c57600080fd5b505afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061584f565b601554909150613c61906001600160a01b03858116911683614dfe565b6015546040805180820182526020808601518252858301518183015260a086015160c087015160e08801516101008901518651606080820189528b015181528086018a905260808b0151818901526001600160a01b038c8116600090815260068852898120546007909852899020985163672ecba360e11b815299169863ce5d974698613d00988e989097969594939260ff909116919060040161599b565b600060405180830381600087803b158015613d1a57600080fd5b505af1158015613d2e573d6000803e3d6000fd5b505050505b601a54613d41906001615d30565b601a55505050565b613d5283613883565b506001600160a01b038216613d9d576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015613d97573d6000803e3d6000fd5b50613e3e565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283919082169063a9059cbb90604401602060405180830381600087803b158015613dea57600080fd5b505af1158015613dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e229190615785565b61111c5760405162461bcd60e51b8152600401610a9090615b4a565b505050565b6001600160a01b038381166000818152600c60209081526040808320878452825280832080546001600160a01b0319169587169586179055838352600e8252808320878452909152808220805460ff19166001179055518592917f84b5fe2fe42763acbedf938c1c7830e25fda76024f508b006ed78c7d88ac232c91a4505050565b60006001600160a01b038216613edd57506012611a2e565b816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613f1657600080fd5b505afa158015613f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4e91906158d4565b60ff1692915050565b6000613f64826012615e96565b613f6f90600a615dae565b61398d9084615d48565b600254604051630aacb67760e11b815260048101849052600091829182916001600160a01b0316906315596cee9060240160206040518083038186803b158015613fc257600080fd5b505afa158015613fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ffa919061584f565b90506001600160a01b0386166140e0576140148185615d30565b34106140d357806010600082825461402c9190615d30565b909155505080156140bd576002546040805163726a866f60e01b815290516140bd926001600160a01b03169163726a866f916004808301926020929190829003018186803b15801561407d57600080fd5b505afa158015614091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b591906152b2565b600083613d49565b60016140c98234615e96565b9250925050614355565b6000809250925050614355565b85846001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b15801561413757600080fd5b505afa15801561414b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061416f919061584f565b1015801561417d5750813410155b1561434b5734601060008282546141949190615d30565b90915550508115614225576002546040805163726a866f60e01b81529051614225926001600160a01b03169163726a866f916004808301926020929190829003018186803b1580156141e557600080fd5b505afa1580156141f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421d91906152b2565b600034613d49565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561426757600080fd5b505afa15801561427b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061429f919061584f565b90506142b66001600160a01b0383163330896147a1565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b1580156142f857600080fd5b505afa15801561430c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614330919061584f565b9050600161433e8383615e96565b9550955050505050614355565b6000809350935050505b935093915050565b600080821561438457506001600160a01b038416600090815260056020526040902061439e565b506001600160a01b0384166000908152600a602052604090205b6007810154600160a01b900460ff166143c95760405162461bcd60e51b8152600401610a9090615b67565b600260009054906101000a90046001600160a01b03166001600160a01b0316636332d2566040518163ffffffff1660e01b815260040160206040518083038186803b15801561441757600080fd5b505afa15801561442b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061444f9190615785565b61445c578391505061398d565b601354604051635d4a93ff60e11b81523360048201526001600160a01b038781166024830152600092169063ba9527fe9060440160206040518083038186803b1580156144a857600080fd5b505afa1580156144bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144e0919061584f565b9050806144f157849250505061398d565b600260009054906101000a90046001600160a01b03166001600160a01b03166356212e486040518163ffffffff1660e01b815260040160206040518083038186803b15801561453f57600080fd5b505afa158015614553573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614577919061584f565b81111561460757600260009054906101000a90046001600160a01b03166001600160a01b03166356212e486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145cc57600080fd5b505afa1580156145e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614604919061584f565b90505b60006127106146168388615e77565b6146209190615d48565b600684015490915060ff16156147355760006064600260009054906101000a90046001600160a01b03166001600160a01b031663f24356436040518163ffffffff1660e01b815260040160206040518083038186803b15801561468257600080fd5b505afa158015614696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146ba919061584f565b6146c49084615e77565b6146ce9190615d48565b905060006146dc8284615e96565b9050828560050160008282546146f29190615d30565b925050819055508185600301600082825461470d9190615d30565b92505081905550808560040160008282546147289190615d30565b9091555061476a92505050565b808360050160008282546147499190615d30565b92505081905550808360040160008282546147649190615d30565b90915550505b6147748187615e96565b979650505050505050565b600061478c826012615e96565b61479790600a615dae565b61398d9084615e77565b6040516001600160a01b038085166024830152831660448201526064810182905261111c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614f22565b6001600160a01b03891660009081526005602052604090206007810154600160a01b900460ff166149485780546001600160a01b0319166001600160a01b038b16178155600181018790556002810186905584156148d3576001600160a01b0384161580159061488457506001600160a01b03831615155b156148d3576006810180546007830180546001600160a01b0319166001600160a01b038881169190911790915560ff19909116600117610100600160a81b031916610100918616919091021790555b60078101805460ff60a01b1916600160a01b1790556001600160a01b038a166000818152600660205260408120805460ff19169055601c805460018101825591527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b03191690911790555b8780156149d15750600480546040516316b5b4db60e31b81526001600160a01b038d81169382019390935291169063b5ada6d89060240160206040518083038186803b15801561499757600080fd5b505afa1580156149ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149cf9190615785565b155b15614a3f57600480546040516312d3617160e01b81526001600160a01b038d811693820193909352602481018990529116906312d3617190604401600060405180830381600087803b158015614a2657600080fd5b505af1158015614a3a573d6000803e3d6000fd5b505050505b885160005b81811015614df0576002548b516001600160a01b039091169063df73eb51908d9084908110614a8357634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401614aa991815260200190565b60206040518083038186803b158015614ac157600080fd5b505afa158015614ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614af99190615785565b15614dde576001600160a01b038c1660009081526008602052604081208c519091908d9084908110614b3b57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182528101919091526040016000205460ff16614dde576001600160a01b038c1660009081526008602052604081208c51600192908e9085908110614b9b57634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600760008d6001600160a01b03166001600160a01b031681526020019081526020016000208b8281518110614c0d57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018101845560009384529190922001558315614d6c576016548b516001600160a01b039091169063aadab832908e908e9085908110614c6b57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401614ca49291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015614cbe57600080fd5b505af1158015614cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cf69190615785565b15614d67576001600160a01b038c166000908152600f602052604081208c51600192908e9085908110614d3957634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b614dde565b8915614dde576001600160a01b038c166000908152600f602052604081208c51600192908e9085908110614db057634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80614de881615ed9565b915050614a44565b505050505050505050505050565b801580614e875750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b158015614e4d57600080fd5b505afa158015614e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e85919061584f565b155b614ef25760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610a90565b6040516001600160a01b038316602482015260448101829052613e3e90849063095ea7b360e01b906064016147d5565b6000614f77826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614ff49092919063ffffffff16565b805190915015613e3e5780806020019051810190614f959190615785565b613e3e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a90565b6060615003848460008561500b565b949350505050565b60608247101561506c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a90565b6001600160a01b0385163b6150c35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a90565b600080866001600160a01b031685876040516150df919061597f565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b50915091506147748282866060831561513b57508161398d565b82511561514b5782518084602001fd5b8160405162461bcd60e51b8152600401610a909190615b17565b8035611a2e81615f20565b60008083601f840112615181578182fd5b50813567ffffffffffffffff811115615198578182fd5b6020830191508360208083028501011115611a8c57600080fd5b600082601f8301126151c2578081fd5b6151cc6060615cde565b8083856060860111156151dd578384fd5b835b60038110156151fe5781358452602093840193909101906001016151df565b509095945050505050565b600082601f830112615219578081fd5b8135602067ffffffffffffffff82111561523557615235615f0a565b808202615243828201615cde565b83815282810190868401838801850189101561525d578687fd5b8693505b8584101561527f578035835260019390930192918401918401615261565b50979650505050505050565b8035611a2e81615f38565b6000602082840312156152a7578081fd5b813561398d81615f20565b6000602082840312156152c3578081fd5b815161398d81615f20565b6000806000606084860312156152e2578182fd5b83356152ed81615f20565b925060208401356152fd81615f20565b9150604084013561530d81615f20565b809150509250925092565b600080600080600060a0868803121561532f578081fd5b853561533a81615f20565b9450602086013561534a81615f20565b9350604086013561535a81615f20565b94979396509394606081013594506080013592915050565b60008060008060008060008060006101808a8c031215615390578687fd5b893561539b81615f20565b98506020603f8b018c136153ad578788fd5b6153bf6153ba6002615d0f565b615cde565b80828d0160608e018f8111156153d3578b8cfd5b8b5b60028110156153f2578235855293850193918501916001016153d5565b50919b505035985061540991505060808b0161528b565b955061541760a08b01615165565b945061542560c08b01615165565b93506154348b60e08c016151b2565b92506154436101408b0161528b565b91506101608a013567ffffffffffffffff81111561545f578182fd5b61546b8c828d01615209565b9150509295985092959850929598565b6000806040838503121561548d578182fd5b823561549881615f20565b915060208301356154a881615f38565b809150509250929050565b600080604083850312156154c5578182fd5b82356154d081615f20565b946020939093013593505050565b6000806000606084860312156154f2578081fd5b83356154fd81615f20565b925060208401359150604084013561530d81615f20565b6000806000806000806000806000806000806101408d8f031215615536578586fd5b61553f8d615165565b9b5060208d01359a5067ffffffffffffffff60408e01351115615560578586fd5b6155708e60408f01358f01615170565b909a50985067ffffffffffffffff60608e0135111561558d578586fd5b61559d8e60608f01358f01615170565b90985096506155ae60808e0161528b565b95506155bc60a08e01615165565b94506155ca60c08e01615165565b935060e08d013592506155e06101008e0161528b565b91506155ef6101208e01615165565b90509295989b509295989b509295989b565b60008060008060008060008060008060006101208c8e031215615622578485fd5b61562c8c35615f20565b8b359a5060208c0135995060408c0135985067ffffffffffffffff8060608e01351115615657578586fd5b6156678e60608f01358f01615170565b909950975060808d013581101561567c578586fd5b5061568d8d60808e01358e01615170565b909650945061569f60a08d0135615f38565b60a08c013593506156b260c08d01615165565b92506156c060e08d01615165565b91506101008c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d0312156156f9578384fd5b8a3561570481615f20565b995060208b0135985060408b0135975060608b0135965060808b013561572981615f38565b955060a08b013561573981615f20565b945060c08b013561574981615f20565b935060e08b013592506101008b013561576181615f38565b91506101208b013561577281615f20565b809150509295989b9194979a5092959850565b600060208284031215615796578081fd5b815161398d81615f38565b6000602082840312156157b2578081fd5b5035919050565b600080604083850312156157cb578182fd5b505080516020909101519092909150565b600060c082840312156157ed578081fd5b6157f760c0615cde565b82518152602083015161580981615f20565b602082015260408381015190820152606083015161582681615f20565b60608201526080838101519082015260a083015161584381615f38565b60a08201529392505050565b600060208284031215615860578081fd5b5051919050565b6000806000806080858703121561587c578182fd5b84359350602085013561588e81615f20565b92506040850135915060608501356158a581615f20565b939692955090935050565b600080604083850312156158c2578182fd5b8235915060208301356154a881615f38565b6000602082840312156158e5578081fd5b815160ff8116811461398d578182fd5b8060005b600381101561111c5781518452602093840193909101906001016158f9565b6000815480845260208085019450838352808320835b8381101561594a5781548752958201956001918201910161592e565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008251615991818460208701615ead565b9190910192915050565b6001600160a01b038a168152600061018060208084018c845b60028110156159d1578151835291830191908301906001016159b4565b505050508960608401526159e9608084018a15159052565b6001600160a01b03881660a08401526001600160a01b03871660c0840152615a1460e08401876158f5565b84151561014084015280610160840152615a3081840185615918565b9c9b505050505050505050505050565b6001600160a01b039a8b168152602081019990995260408901979097526060880195909552921515608087015290861660a0860152851660c085015260e084015215156101008301529091166101208201526101400190565b6020808252825182820181905260009190848201906040850190845b81811015615ad157835183529284019291840191600101615ab5565b50909695505050505050565b600060608252615af1606083018789615955565b8281036020840152615b04818688615955565b9150508260408301529695505050505050565b6000602082528251806020840152615b36816040850160208701615ead565b601f01601f19169190910160400192915050565b60208082526003908201526224afa360e91b604082015260600190565b602080825260039082015262495f4160e81b604082015260600190565b602080825260039082015262555f4160e81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8b815260208082018c90526101206040830181905282018a9052600090610140906001600160fb1b038c1115615c0c578283fd5b808c02808e848701378401848103830160608601529182018a9052610160909101908a835b8b811015615c5f578135615c4481615f20565b6001600160a01b031684529282019290820190600101615c31565b5050509615156080830152506001600160a01b0394851660a082015292151560c0840152921660e082015261010001529695505050505050565b6000808335601e19843603018112615caf578283fd5b83018035915067ffffffffffffffff821115615cc9578283fd5b602001915036819003821315611a8c57600080fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615d0757615d07615f0a565b604052919050565b600067ffffffffffffffff821115615d2957615d29615f0a565b5060200290565b60008219821115615d4357615d43615ef4565b500190565b600082615d6357634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611615d7a5750615da5565b818704821115615d8c57615d8c615ef4565b80861615615d9957918102915b9490941c938002615d6b565b94509492505050565b600061398d6000198484600082615dc75750600161398d565b81615dd45750600061398d565b8160018114615dea5760028114615df457615e21565b600191505061398d565b60ff841115615e0557615e05615ef4565b6001841b915084821115615e1b57615e1b615ef4565b5061398d565b5060208310610133831016604e8410600b8410161715615e4f575081810a8381111561392d5761392d615ef4565b615e5c8484846001615d68565b808604821115615e6e57615e6e615ef4565b02949350505050565b6000816000190483118215151615615e9157615e91615ef4565b500290565b600082821015615ea857615ea8615ef4565b500390565b60005b83811015615ec8578181015183820152602001615eb0565b8381111561111c5750506000910152565b6000600019821415615eed57615eed615ef4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114615f3557600080fd5b50565b8015158114615f3557600080fdfea26469706673582212204fcd5f5d2aefd14c5c310c17e282a892bc191015eac1bca6cf5105bc2842a2b164736f6c63430008020033"; -======= - "0x60806040523480156200001157600080fd5b506040516200612638038062006126833981016040819052620000349162000169565b6001600055620000448762000105565b50620000508662000105565b506200005c8562000105565b50620000688462000105565b50620000748362000105565b50620000808262000105565b50600280546001600160a01b03199081166001600160a01b03988916179091556001805482169888169890981790975560038054881695871695909517909455601680548716948616949094179093556012805486169285169290921790915560138054851691841691909117905560048054909316911617905546601155620001fd565b60006001600160a01b038216620001485760405162461bcd60e51b815260206004820152600360248201526220afbd60e91b604482015260640160405180910390fd5b5060015b919050565b80516001600160a01b03811681146200014c57600080fd5b600080600080600080600060e0888a03121562000184578283fd5b6200018f8862000151565b96506200019f6020890162000151565b9550620001af6040890162000151565b9450620001bf6060890162000151565b9350620001cf6080890162000151565b9250620001df60a0890162000151565b9150620001ef60c0890162000151565b905092959891949750929550565b615f19806200020d6000396000f3fe60806040526004361061023b5760003560e01c80638d47d1011161012e578063ba4559d5116100ab578063e06174e41161006f578063e06174e4146108c0578063e1d0ae9a146108e0578063f36dccf9146108f5578063f77c479114610978578063fd16ad90146109985761023b565b8063ba4559d51461082d578063bd66528a1461084d578063c5be53831461086d578063ce5d97461461088d578063d5f39488146108a05761023b565b8063aadab832116100f2578063aadab83214610771578063abb56897146107ac578063adf2cead146107e7578063b5e8c01414610807578063b8ce670d1461081a5761023b565b80638d47d101146105ed5780639a8a05921461060d578063a0aead4d14610631578063a8b5b8ed14610662578063aa5e4aa3146107445761023b565b80635c14b206116101bc5780636f6bfae3116101805780636f6bfae31461051b578063711ee04c1461054857806371726c921461057d578063751ba4921461059d5780637b103999146105cd5761023b565b80635c14b206146104545780635c975abb146104955780635d22448c146104c65780635e46bea5146104db5780636999b377146104fb5761023b565b80632481bb5c116102035780632481bb5c1461035e5780632d5ed912146103df578063334c1439146103ff5780634886f62c1461041f57806355a481d0146104345761023b565b8063040713db1461024057806307e6b636146102625780630d4de2a11461029f5780630dcc1484146102bf5780631ce818c6146102df575b600080fd5b34801561024c57600080fd5b5061026061025b3660046152b5565b6109b8565b005b34801561026e57600080fd5b5061028261027d36600461573e565b610c47565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102ab57600080fd5b506102606102ba36600461584d565b610c71565b3480156102cb57600080fd5b506102606102da36600461573e565b6110e1565b3480156102eb57600080fd5b506103316102fa36600461573e565b600b6020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169160ff1684565b604080516001600160a01b0395861681529490931660208501529183015215156060820152608001610296565b34801561036a57600080fd5b50601654601554601354601454601854601954601a54604080516001600160a01b0398891681529688166020880152600160a01b860460ff1615159087015260608601939093526202a300608086015260a085019190915260c084015260e08301529190911661010082015261012001610296565b3480156103eb57600080fd5b506102606103fa366004615418565b6111e2565b34801561040b57600080fd5b5061026061041a36600461526b565b6112fe565b34801561042b57600080fd5b506102606113ae565b34801561044057600080fd5b5061026061044f366004615677565b6114ae565b34801561046057600080fd5b5061028261046f366004615450565b600c6020908152600092835260408084209091529082529020546001600160a01b031681565b3480156104a157600080fd5b506004546104b690600160a01b900460ff1681565b6040519015158152602001610296565b3480156104d257600080fd5b50610260611939565b3480156104e757600080fd5b50600454610282906001600160a01b031681565b34801561050757600080fd5b50601354610282906001600160a01b031681565b34801561052757600080fd5b5061053b610536366004615233565b611963565b6040516102969190615a36565b34801561055457600080fd5b50610568610563366004615418565b6119d0565b60408051928352602083019190915201610296565b34801561058957600080fd5b50610260610598366004615233565b611a30565b3480156105a957600080fd5b506104b66105b8366004615233565b60066020526000908152604090205460ff1681565b3480156105d957600080fd5b50600354610282906001600160a01b031681565b3480156105f957600080fd5b506102606106083660046154b1565b611afd565b34801561061957600080fd5b5061062360115481565b604051908152602001610296565b34801561063d57600080fd5b50601c54601b5460175460408051938452602084019290925290820152606001610296565b34801561066e57600080fd5b506106e461067d366004615233565b600a60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979596949593949293919260ff80841693610100900482169291821691600160a01b9004168a565b604080516001600160a01b039b8c168152602081019a909a528901979097526060880195909552608087019390935260a0860191909152151560c0850152841660e084015290921661010082015290151561012082015261014001610296565b34801561075057600080fd5b5061062361075f366004615233565b60096020526000908152604090205481565b34801561077d57600080fd5b506104b661078c366004615450565b600f60209081526000928352604080842090915290825290205460ff1681565b3480156107b857600080fd5b506104b66107c7366004615450565b600860209081526000928352604080842090915290825290205460ff1681565b3480156107f357600080fd5b5061026061080236600461573e565b61222b565b610623610815366004615804565b6125bd565b61062361082836600461547b565b6129ce565b34801561083957600080fd5b50610260610848366004615418565b612c79565b34801561085957600080fd5b5061026061086836600461573e565b612e16565b34801561087957600080fd5b5061026061088836600461559e565b61310f565b61026061089b36600461530f565b613699565b3480156108ac57600080fd5b50601254610282906001600160a01b031681565b3480156108cc57600080fd5b50600254610282906001600160a01b031681565b3480156108ec57600080fd5b50610623601281565b34801561090157600080fd5b506106e4610910366004615233565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007909601546001600160a01b039586169794969395929493919260ff80841693610100900482169291821691600160a01b9004168a565b34801561098457600080fd5b50600154610282906001600160a01b031681565b3480156109a457600080fd5b506102826109b336600461573e565b6137c7565b6109c06137d7565b506109ca84613820565b506109d483613820565b506001600160a01b0385166000908152600a6020526040902060070154600160a01b900460ff1680610a2857506001600160a01b038516600090815260056020526040902060070154600160a01b900460ff165b8015610a3357508181115b610a585760405162461bcd60e51b8152600401610a4f90615b04565b60405180910390fd5b6000610a65866001613866565b15610a7257506001610b11565b610a7d866000613866565b15610a8a57506000610b11565b610a92613931565b506001600160a01b0386166000908152600a6020526040902060070154600160a01b900460ff1615610ac657506000610b11565b6001600160a01b038616600090815260056020526040902060070154600160a01b900460ff1615610af957506001610b11565b60405162461bcd60e51b8152600401610a4f90615b21565b8015610b77576001600160a01b038681166000908152600560205260409020600681018054610100600160a81b031916610100898516021790556007810180546001600160a01b0319169287169290921790915560018101849055600201829055610bd3565b6001600160a01b038681166000908152600a60205260409020600681018054610100600160a81b031916610100898516021790556007810180546001600160a01b03191692871692909217909155600181018490556002018290555b836001600160a01b0316856001600160a01b0316876001600160a01b03167fd16202366d5587c878fd5283ccc908ea1f5bb379ac191ad6781bbcb4974cec4b868686604051610c379392919092835260208301919091521515604082015260600190565b60405180910390a4505050505050565b601c8181548110610c5757600080fd5b6000918252602090912001546001600160a01b0316905081565b610c79613931565b50601354600160a01b900460ff168015610ca357506202a30060145442610ca09190615e33565b10155b610cd75760405162461bcd60e51b81526020600482015260056024820152641397d657d560da1b6044820152606401610a4f565b6000808215610e3c5760175460195410610d1f5760405162461bcd60e51b815260206004820152600960248201526818dbdb5c1b195d195960ba1b6044820152606401610a4f565b601954601754909250610d328386615ccd565b1015610d3f575082610d52565b601954601754610d4f9190615e33565b90505b60005b81811015610e36576000600b81610d6c8487615ccd565b81526020810191909152604001600020600381015490915060ff1615610e23576015548154600283015460018085015460405163055a481d60e41b81526001600160a01b03958616956355a481d095610dde9590821694909360009384938493849384938493909116906004016159dd565b600060405180830381600087803b158015610df857600080fd5b505af1158015610e0c573d6000803e3d6000fd5b505050506019546001610e1f9190615ccd565b6019555b5080610e2e81615e76565b915050610d55565b506110db565b601b5460185410610e7b5760405162461bcd60e51b815260206004820152600960248201526818dbdb5c1b195d195960ba1b6044820152606401610a4f565b601854601b54909250610e8e8386615ccd565b1015610e9b575082610eae565b601854601b54610eab9190615e33565b90505b60005b818110156110d9576000601b610ec78386615ccd565b81548110610ee557634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b03169150610f069082906111e2565b6001600160a01b038181166000818152600a6020908152604091829020825161014081018452815486168152600182015492810192909252600281015482840152600381015460608301526004808201546080840152600582015460a0840152600682015460ff808216151560c086015261010091829004881660e086015260079093015480881691850191909152600160a01b90049091161515610120830152601554925163f2fde38b60e01b8152929094169382019390935263f2fde38b90602401600060405180830381600087803b158015610fe457600080fd5b505af1158015610ff8573d6000803e3d6000fd5b505060155483516001600160a01b03818116600090815260096020908152604080832054828a0151828b015160c08c015160e08d01516101008e015160a08f01518f518b168a52600d90985286892054965163055a481d60e41b81529b8a169d506355a481d09c506110809b95999498939792969195909492939291909116906004016159dd565b600060405180830381600087803b15801561109a57600080fd5b505af11580156110ae573d6000803e3d6000fd5b5050505060185460016110c19190615ccd565b601855508190506110d181615e76565b915050610eb1565b505b50505050565b6110e9613931565b50601354600160a01b900460ff16801561111357506202a300601454426111109190615e33565b10155b6111475760405162461bcd60e51b81526020600482015260056024820152641397d657d560da1b6044820152606401610a4f565b601a54601c5460009190819061115d9085615ccd565b101561116b5782915061117e565b601a54601c5461117b9190615e33565b91505b60005b828110156110db576111d0601c6111988385615ccd565b815481106111b657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03166139e9565b806111da81615e76565b915050611181565b600080821561120a576001600160a01b03841660009081526005602052604090209150611225565b6001600160a01b0384166000908152600a6020526040902091505b600682015460ff161561126157600382015415611261575060038101805460009091556007820154611261906001600160a01b03168583613ce6565b6004820154156110db575060048082018054600090915560025460408051632bdb901160e11b8152905192936110db936001600160a01b03909316926357b72022928083019260209291829003018186803b1580156112bf57600080fd5b505afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f7919061524f565b8583613ce6565b611306613931565b5061131083613820565b5061131a82613820565b5061132481613820565b50806001600160a01b0316826001600160a01b0316846001600160a01b03167f4233a6fa155f27e6a5fe881410a1cb3f6ee591b1adf0d4f8111520d43611ebfe60405160405180910390a4600280546001600160a01b039485166001600160a01b031991821617909155601380549385169382169390931790925560128054919093169116179055565b6113b6613931565b50601354600160a01b900460ff1680156113d45750601b5460185410155b6114065760405162461bcd60e51b8152602060048201526003602482015262505f4d60e81b6044820152606401610a4f565b60035460155460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b15801561144f57600080fd5b505af1158015611463573d6000803e3d6000fd5b50506013805460ff60a01b1916905550506015546040516001600160a01b03909116907f917552ffe30574970b53b4e4d4c0a79ac1b3e6b6c2459457831cbf3b991fb70d90600090a2565b60025460405163df73eb5160e01b8152600481018b90526001600160a01b039091169063df73eb519060240160206040518083038186803b1580156114f257600080fd5b505afa158015611506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152a9190615722565b801561155a57506001600160a01b0381166000908152600e602090815260408083208c845290915290205460ff16155b801561157957506016546001600160a01b0316336001600160a01b0316145b6115955760405162461bcd60e51b8152600401610a4f90615b21565b81156116d9576001600f60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180608001604052808b6001600160a01b03168152602001826001600160a01b031681526020018a815260200160011515815250600b6000601754815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550905050601760008154809291906116cf90615e76565b9190505550611922565b6040518061014001604052808b6001600160a01b0316815260200189815260200188815260200160008152602001600081526020018481526020018715158152602001866001600160a01b03168152602001856001600160a01b0316815260200160011515815250600a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160070160146101000a81548160ff02191690831515021790555090505088600960008c6001600160a01b03166001600160a01b031681526020019081526020016000208190555080600d60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b8a9080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055505b61192d818a8c613de0565b50505050505050505050565b611941613931565b506004805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6001600160a01b0381166000908152600760209081526040918290208054835181840281018401909452808452606093928301828280156119c357602002820191906000526020600020905b8154815260200190600101908083116119af575b505050505090505b919050565b6000808215611a035750506001600160a01b03821660009081526005602052604090206001810154600290910154611a29565b50506001600160a01b0382166000908152600a6020526040902060018101546002909101545b9250929050565b611a386137d7565b50611a41613931565b50611a4b81613820565b50601354600160a01b900460ff1615611a8c5760405162461bcd60e51b8152602060048201526003602482015262505f4d60e81b6044820152606401610a4f565b601580546001600160a01b0319166001600160a01b03831690811790915560138054600160a01b60ff60a01b199182168117909255600480549091169091179055426014556040517fbf3aee0580cb96d1eb8ffba88fb8dc83e973b7cdf4a18be5a0d3cbb4e6ecb3d390600090a250565b6001546001600160a01b03166324d7806c336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611b4e57600080fd5b505afa158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190615722565b80611c1557506001546001600160a01b031663d5db72eb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611bdd57600080fd5b505afa158015611bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c159190615722565b611c495760405162461bcd60e51b81526020600482015260056024820152642aafa0afb960d91b6044820152606401610a4f565b60025460405163df73eb5160e01b8152600481018d90526001600160a01b039091169063df73eb519060240160206040518083038186803b158015611c8d57600080fd5b505afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615722565b8015611cf557506001600160a01b038c166000908152600e602090815260408083208e845290915290205460ff16155b8015611d015750600289145b8015611d0d5750600287145b611d465760405162461bcd60e51b815260206004820152600a6024820152691c9959da5cdd195c995960b21b6044820152606401610a4f565b60008215611e8f578190506001600f60008f6001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180608001604052808e6001600160a01b03168152602001826001600160a01b031681526020018d815260200160011515815250600b6000601754815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555090505060176000815480929190611e8590615e76565b9190505550612211565b6012546001600160a01b031663803ef2698a8a600081611ebf57634e487b7160e01b600052603260045260246000fd5b9050602002810190611ed19190615c36565b8c8c6001818110611ef257634e487b7160e01b600052603260045260246000fd5b9050602002810190611f049190615c36565b896040518663ffffffff1660e01b8152600401611f25959493929190615a7a565b602060405180830381600087803b158015611f3f57600080fd5b505af1158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f77919061524f565b9050604051806101400160405280826001600160a01b031681526020018c8c6000818110611fb557634e487b7160e01b600052603260045260246000fd5b9050602002013581526020018c8c6001818110611fe257634e487b7160e01b600052603260045260246000fd5b9050602002013581526020016000815260200160008152602001600081526020018815158152602001876001600160a01b03168152602001866001600160a01b0316815260200160011515815250600a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160070160146101000a81548160ff0219169083151502179055509050508b60096000836001600160a01b03166001600160a01b03168152602001908152602001600020819055508c600d6000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b819080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055505b61221c8d8d83613de0565b50505050505050505050505050565b6002600054141561224e5760405162461bcd60e51b8152600401610a4f90615b3e565b600260005561225b6137d7565b50600354604051633600fb2960e11b8152600481018390526000916001600160a01b031690636c01f6529060240160c060405180830381600087803b1580156122a357600080fd5b505af11580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190615779565b6003546040516306a2b7bd60e01b8152600481018590529192506001600160a01b0316906306a2b7bd90602401602060405180830381600087803b15801561232257600080fd5b505af1158015612336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235a9190615722565b801561236857508060a00151155b80156123ed575060035460405163105ac01b60e01b8152600481018490526001600160a01b039091169063105ac01b90602401602060405180830381600087803b1580156123b557600080fd5b505af11580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed9190615722565b61241d5760405162461bcd60e51b81526020600482015260016024820152604d60f81b6044820152606401610a4f565b600061243982604001516124348460200151613e62565b613ef4565b6020808401516001600160a01b03166000908152600f8252604080822086518352909252205490915060ff16156124e757600480546020840151606085015160405163507f596b60e01b81526001600160a01b03928316948101949094528116602484015260448301849052169063507f596b90606401600060405180830381600087803b1580156124ca57600080fd5b505af11580156124de573d6000803e3d6000fd5b50505050612554565b602082015160608301516040516340c10f1960e01b81526001600160a01b039182166004820152602481018490529116906340c10f1990604401600060405180830381600087803b15801561253b57600080fd5b505af115801561254f573d6000803e3d6000fd5b505050505b60035460405163aaff559b60e01b8152600481018590526001600160a01b039091169063aaff559b906024015b600060405180830381600087803b15801561259b57600080fd5b505af11580156125af573d6000803e3d6000fd5b505060016000555050505050565b6000600260005414156125e25760405162461bcd60e51b8152600401610a4f90615b3e565b60026000556125ef6137d7565b506001600160a01b03841660009081526006602052604090205460ff16801561263b57506001600160a01b038416600090815260086020908152604080832088845290915290205460ff165b6126705760405162461bcd60e51b8152600401610a4f90602080825260049082015263414c5f4560e01b604082015260600190565b61267982613820565b50600080612688868887613f16565b915091508180156126995750600081115b80156126c057506001600160a01b0386166000908152600560205260409020600101548110155b80156126e757506001600160a01b0386166000908152600560205260409020600201548111155b6127035760405162461bcd60e51b8152600401610a4f90615ae7565b61270f868260016142fa565b6001600160a01b0387166000908152600f602090815260408083208b845290915290205490915060ff16156128ad576001600160a01b0386166127bb576004805460405163d6f7ddf960e01b81526001600160a01b03898116938201939093526024810184905291169063d6f7ddf99083906044016000604051808303818588803b15801561279d57600080fd5b505af11580156127b1573d6000803e3d6000fd5b50505050506128ad565b6004805460405163095ea7b360e01b81526001600160a01b03918216928101929092526024820183905287169063095ea7b390604401602060405180830381600087803b15801561280b57600080fd5b505af115801561281f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128439190615722565b506004805460405163d6f7ddf960e01b81526001600160a01b03898116938201939093526024810184905291169063d6f7ddf990604401600060405180830381600087803b15801561289457600080fd5b505af11580156128a8573d6000803e3d6000fd5b505050505b6128bf816128ba88613e62565b61471c565b60035460405163f2e84dbd60e01b8152600481018a90526001600160a01b0389811660248301526044820184905287811660648301526000608483018190529394509091169063f2e84dbd9060a4016040805180830381600087803b15801561292757600080fd5b505af115801561293b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295f9190615756565b60408051838152602081018c905290810185905260608101829052919550915033906001600160a01b0387811691908a16907f6eadb2b7a4982f73f1a7ebd22bd3841c236dfa73a50e818bb3fac34e236ff4159060800160405180910390a45050600160005550949350505050565b6000600260005414156129f35760405162461bcd60e51b8152600401610a4f90615b3e565b6002600055612a006137d7565b506001600160a01b038416600090815260096020908152604080832054600a90925290912060070154600160a01b900460ff16612a4f5760405162461bcd60e51b8152600401610a4f90615b04565b612a5883613820565b50600080612a67878488613f16565b91509150818015612a9357506001600160a01b0387166000908152600a60205260409020600101548110155b8015612aba57506001600160a01b0387166000908152600a60205260409020600201548111155b612ad65760405162461bcd60e51b8152600401610a4f90615ae7565b612ae2878260006142fa565b604051630852cd8d60e31b8152600481018290529091506001600160a01b038816906342966c6890602401600060405180830381600087803b158015612b2757600080fd5b505af1158015612b3b573d6000803e3d6000fd5b505050506001600160a01b038781166000908152600d602052604090205416612b67826128ba8a613e62565b60035460405163f2e84dbd60e01b8152600481018790526001600160a01b038481166024830152604482018490528981166064830152600160848301529294506000929091169063f2e84dbd9060a4016040805180830381600087803b158015612bd057600080fd5b505af1158015612be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c089190615756565b604080518381526020810189905290810186905260608101829052919750915033906001600160a01b0389811691908516907f52458269afd71a8a53a86e1bebaa32e82a4946c52441cbf62e946b7591fcba4c9060800160405180910390a450506001600055509195945050505050565b6001600160a01b038216600090815260056020526040902060070154600160a01b900460ff168015612dcf57506001546001600160a01b03166324d7806c336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015612cf757600080fd5b505afa158015612d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2f9190615722565b80612dbe57506001546001600160a01b031663d5db72eb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015612d8657600080fd5b505afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190615722565b80612dcf5750612dcf826001613866565b612deb5760405162461bcd60e51b8152600401610a4f90615b21565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60026000541415612e395760405162461bcd60e51b8152600401610a4f90615b3e565b6002600055612e466137d7565b506003546040516375a28b8160e01b8152600481018390526000916001600160a01b0316906375a28b819060240160c060405180830381600087803b158015612e8e57600080fd5b505af1158015612ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec69190615779565b90506000612edf82604001516124348460200151613e62565b6003546040516303c5dd0560e11b8152600481018690529192506001600160a01b03169063078bba0a90602401602060405180830381600087803b158015612f2657600080fd5b505af1158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e9190615722565b801561300357506003546020830151835160405163071fdf5d60e51b815284936001600160a01b03169263e3fbeba092612fae926004016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015612fc857600080fd5b505af1158015612fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300091906157ec565b10155b801561301157508160a00151155b8015613096575060035460405163105ac01b60e01b8152600481018590526001600160a01b039091169063105ac01b90602401602060405180830381600087803b15801561305e57600080fd5b505af1158015613072573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130969190615722565b6130cb5760405162461bcd60e51b8152600401610a4f90602080825260049082015263414c5f4560e01b604082015260600190565b6130de8260600151836020015183613ce6565b60035460405163e3cce7f160e01b8152600481018590526001600160a01b039091169063e3cce7f190602401612581565b6131176137d7565b50600154604051630935e01b60e21b81523360048201526000916001600160a01b0316906324d7806c9060240160206040518083038186803b15801561315c57600080fd5b505afa158015613170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131949190615722565b156131c7576001600160a01b038316158015906131b957506001600160a01b03841615155b156131c2575060015b6135d3565b5060025460408051631d43bac360e21b815290516001926001600160a01b03169163750eeb0c916004808301926020929190829003018186803b15801561320d57600080fd5b505afa158015613221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132459190615722565b15613426576001600160a01b038c166132fc5760025460405163702e9b0f60e11b81526001600160a01b038e811660048301523360248301529091169063e05d361e9060440160206040518083038186803b1580156132a357600080fd5b505afa1580156132b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132db9190615722565b6132f75760405162461bcd60e51b8152600401610a4f90615b21565b613426565b8b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561333557600080fd5b505afa158015613349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336d919061524f565b6001600160a01b0316336001600160a01b0316148061340a575060025460405163702e9b0f60e11b81526001600160a01b038e811660048301523360248301529091169063e05d361e9060440160206040518083038186803b1580156133d257600080fd5b505afa1580156133e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340a9190615722565b6134265760405162461bcd60e51b8152600401610a4f90615b21565b60025460408051632ec88e8960e11b815290516000926001600160a01b031691635d911d12916004808301926020929190829003018186803b15801561346b57600080fd5b505afa15801561347f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a3919061524f565b90506135d133600260009054906101000a90046001600160a01b03166001600160a01b03166357b720226040518163ffffffff1660e01b815260040160206040518083038186803b1580156134f757600080fd5b505afa15801561350b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352f919061524f565b600260009054906101000a90046001600160a01b03166001600160a01b03166319b9cd6e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561357d57600080fd5b505afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b591906157ec565b6135bf908d615e14565b6001600160a01b03851692919061473e565b505b6136268c8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878e8e868a8a60006147a9565b826001600160a01b03168c6001600160a01b03167f5cefea613365c605e680542e6974e101c35c53536b5dc28944c793518093a3af8d8d8d8d8d8d8d6136693390565b8b8f8e6040516136839b9a99989796959493929190615b75565b60405180910390a3505050505050505050505050565b6001600160a01b038916600090815260056020526040902060070154600160a01b900460ff161580156136df57506016546001600160a01b0316336001600160a01b0316145b6136fb5760405162461bcd60e51b8152600401610a4f90615b21565b6000806137108b828760016020020151613f16565b91509150818015613725575060208501518110155b6137415760405162461bcd60e51b8152600401610a4f90615ae7565b895160208b015161375d918d9186916000918d8c8e60016147a9565b84516001600160a01b038c1660009081526005602081905260409182902060038101939093559087015160048301550189905583156137ba576001600160a01b038b166000908152600660205260409020805460ff191660011790555b5050505050505050505050565b601b8181548110610c5757600080fd5b600454600090600160a01b900460ff161561381a5760405162461bcd60e51b81526020600482015260036024820152620425f560ec1b6044820152606401610a4f565b50600190565b60006001600160a01b03821661385e5760405162461bcd60e51b815260206004820152600360248201526220afbd60e91b6044820152606401610a4f565b506001919050565b60008082156138cf576001600160a01b03848116600090815260056020526040902060060154610100900416331480156138c157506001600160a01b0384811660009081526005602052604090206006015461010090041615155b156138ca575060015b61392a565b6001600160a01b038481166000908152600a60205260409020600601546101009004163314801561392157506001600160a01b038481166000908152600a602052604090206006015461010090041615155b1561392a575060015b9392505050565b6000336001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561398b57600080fd5b505afa15801561399f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c3919061524f565b6001600160a01b03161461381a5760405162461bcd60e51b8152600401610a4f90615b21565b6001600160a01b03808216600081815260056020818152604080842081516101408101835281548816815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529182015460a0820152600682015460ff808216151560c084015261010091829004871660e084015260079093015495861690820152600160a01b90940416151561012084015290613b6a57506015546040805180820182526020808501518252848301518183015260a085015160c086015160e08701516101008801518651606080820189528a015181524781870181905260808b0151828a01526001600160a01b038c81166000908152600689528a81205460079099528a9020995163672ecba360e11b8152919a169863ce5d9746988b98613b33988f9892979096929590949293909260ff90921691600401615938565b6000604051808303818588803b158015613b4c57600080fd5b505af1158015613b60573d6000803e3d6000fd5b5050505050613cd0565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b158015613ba957600080fd5b505afa158015613bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be191906157ec565b601554909150613bfe906001600160a01b03858116911683614d9b565b6015546040805180820182526020808601518252858301518183015260a086015160c087015160e08801516101008901518651606080820189528b015181528086018a905260808b0151818901526001600160a01b038c8116600090815260068852898120546007909852899020985163672ecba360e11b815299169863ce5d974698613c9d988e989097969594939260ff9091169190600401615938565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505050505b601a54613cde906001615ccd565b601a55505050565b613cef83613820565b506001600160a01b038216613d3a576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015613d34573d6000803e3d6000fd5b50613ddb565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283919082169063a9059cbb90604401602060405180830381600087803b158015613d8757600080fd5b505af1158015613d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dbf9190615722565b6110db5760405162461bcd60e51b8152600401610a4f90615ae7565b505050565b6001600160a01b038381166000818152600c60209081526040808320878452825280832080546001600160a01b0319169587169586179055838352600e8252808320878452909152808220805460ff19166001179055518592917f84b5fe2fe42763acbedf938c1c7830e25fda76024f508b006ed78c7d88ac232c91a4505050565b60006001600160a01b038216613e7a575060126119cb565b816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613eb357600080fd5b505afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190615871565b60ff1692915050565b6000613f01826012615e33565b613f0c90600a615d4b565b61392a9084615ce5565b600254604051630aacb67760e11b815260048101849052600091829182916001600160a01b0316906315596cee9060240160206040518083038186803b158015613f5f57600080fd5b505afa158015613f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9791906157ec565b90506001600160a01b03861661407d57613fb18185615ccd565b3410614070578060106000828254613fc99190615ccd565b9091555050801561405a576002546040805163726a866f60e01b8152905161405a926001600160a01b03169163726a866f916004808301926020929190829003018186803b15801561401a57600080fd5b505afa15801561402e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614052919061524f565b600083613ce6565b60016140668234615e33565b92509250506142f2565b60008092509250506142f2565b85846001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b1580156140d457600080fd5b505afa1580156140e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410c91906157ec565b1015801561411a5750813410155b156142e85734601060008282546141319190615ccd565b909155505081156141c2576002546040805163726a866f60e01b815290516141c2926001600160a01b03169163726a866f916004808301926020929190829003018186803b15801561418257600080fd5b505afa158015614196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ba919061524f565b600034613ce6565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561420457600080fd5b505afa158015614218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423c91906157ec565b90506142536001600160a01b03831633308961473e565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561429557600080fd5b505afa1580156142a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142cd91906157ec565b905060016142db8383615e33565b95509550505050506142f2565b6000809350935050505b935093915050565b600080821561432157506001600160a01b038416600090815260056020526040902061433b565b506001600160a01b0384166000908152600a602052604090205b6007810154600160a01b900460ff166143665760405162461bcd60e51b8152600401610a4f90615b04565b600260009054906101000a90046001600160a01b03166001600160a01b0316636332d2566040518163ffffffff1660e01b815260040160206040518083038186803b1580156143b457600080fd5b505afa1580156143c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ec9190615722565b6143f9578391505061392a565b601354604051635d4a93ff60e11b81523360048201526001600160a01b038781166024830152600092169063ba9527fe9060440160206040518083038186803b15801561444557600080fd5b505afa158015614459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061447d91906157ec565b90508061448e57849250505061392a565b600260009054906101000a90046001600160a01b03166001600160a01b03166356212e486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144dc57600080fd5b505afa1580156144f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451491906157ec565b8111156145a457600260009054906101000a90046001600160a01b03166001600160a01b03166356212e486040518163ffffffff1660e01b815260040160206040518083038186803b15801561456957600080fd5b505afa15801561457d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145a191906157ec565b90505b60006127106145b38388615e14565b6145bd9190615ce5565b600684015490915060ff16156146d25760006064600260009054906101000a90046001600160a01b03166001600160a01b031663f24356436040518163ffffffff1660e01b815260040160206040518083038186803b15801561461f57600080fd5b505afa158015614633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465791906157ec565b6146619084615e14565b61466b9190615ce5565b905060006146798284615e33565b90508285600501600082825461468f9190615ccd565b92505081905550818560030160008282546146aa9190615ccd565b92505081905550808560040160008282546146c59190615ccd565b9091555061470792505050565b808360050160008282546146e69190615ccd565b92505081905550808360040160008282546147019190615ccd565b90915550505b6147118187615e33565b979650505050505050565b6000614729826012615e33565b61473490600a615d4b565b61392a9084615e14565b6040516001600160a01b03808516602483015283166044820152606481018290526110db9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614ebf565b6001600160a01b03891660009081526005602052604090206007810154600160a01b900460ff166148e55780546001600160a01b0319166001600160a01b038b1617815560018101879055600281018690558415614870576001600160a01b0384161580159061482157506001600160a01b03831615155b15614870576006810180546007830180546001600160a01b0319166001600160a01b038881169190911790915560ff19909116600117610100600160a81b031916610100918616919091021790555b60078101805460ff60a01b1916600160a01b1790556001600160a01b038a166000818152600660205260408120805460ff19169055601c805460018101825591527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b03191690911790555b87801561496e5750600480546040516316b5b4db60e31b81526001600160a01b038d81169382019390935291169063b5ada6d89060240160206040518083038186803b15801561493457600080fd5b505afa158015614948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061496c9190615722565b155b156149dc57600480546040516312d3617160e01b81526001600160a01b038d811693820193909352602481018990529116906312d3617190604401600060405180830381600087803b1580156149c357600080fd5b505af11580156149d7573d6000803e3d6000fd5b505050505b885160005b81811015614d8d576002548b516001600160a01b039091169063df73eb51908d9084908110614a2057634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401614a4691815260200190565b60206040518083038186803b158015614a5e57600080fd5b505afa158015614a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a969190615722565b15614d7b576001600160a01b038c1660009081526008602052604081208c519091908d9084908110614ad857634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182528101919091526040016000205460ff16614d7b576001600160a01b038c1660009081526008602052604081208c51600192908e9085908110614b3857634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600760008d6001600160a01b03166001600160a01b031681526020019081526020016000208b8281518110614baa57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018101845560009384529190922001558315614d09576016548b516001600160a01b039091169063aadab832908e908e9085908110614c0857634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401614c419291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015614c5b57600080fd5b505af1158015614c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c939190615722565b15614d04576001600160a01b038c166000908152600f602052604081208c51600192908e9085908110614cd657634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b614d7b565b8915614d7b576001600160a01b038c166000908152600f602052604081208c51600192908e9085908110614d4d57634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80614d8581615e76565b9150506149e1565b505050505050505050505050565b801580614e245750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b158015614dea57600080fd5b505afa158015614dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e2291906157ec565b155b614e8f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610a4f565b6040516001600160a01b038316602482015260448101829052613ddb90849063095ea7b360e01b90606401614772565b6000614f14826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614f919092919063ffffffff16565b805190915015613ddb5780806020019051810190614f329190615722565b613ddb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a4f565b6060614fa08484600085614fa8565b949350505050565b6060824710156150095760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a4f565b6001600160a01b0385163b6150605760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a4f565b600080866001600160a01b0316858760405161507c919061591c565b60006040518083038185875af1925050503d80600081146150b9576040519150601f19603f3d011682016040523d82523d6000602084013e6150be565b606091505b5091509150614711828286606083156150d857508161392a565b8251156150e85782518084602001fd5b8160405162461bcd60e51b8152600401610a4f9190615ab4565b80356119cb81615ebd565b60008083601f84011261511e578182fd5b50813567ffffffffffffffff811115615135578182fd5b6020830191508360208083028501011115611a2957600080fd5b600082601f83011261515f578081fd5b6151696060615c7b565b80838560608601111561517a578384fd5b835b600381101561519b57813584526020938401939091019060010161517c565b509095945050505050565b600082601f8301126151b6578081fd5b8135602067ffffffffffffffff8211156151d2576151d2615ea7565b8082026151e0828201615c7b565b8381528281019086840183880185018910156151fa578687fd5b8693505b8584101561521c5780358352600193909301929184019184016151fe565b50979650505050505050565b80356119cb81615ed5565b600060208284031215615244578081fd5b813561392a81615ebd565b600060208284031215615260578081fd5b815161392a81615ebd565b60008060006060848603121561527f578182fd5b833561528a81615ebd565b9250602084013561529a81615ebd565b915060408401356152aa81615ebd565b809150509250925092565b600080600080600060a086880312156152cc578081fd5b85356152d781615ebd565b945060208601356152e781615ebd565b935060408601356152f781615ebd565b94979396509394606081013594506080013592915050565b60008060008060008060008060006101808a8c03121561532d578687fd5b893561533881615ebd565b98506020603f8b018c1361534a578788fd5b61535c6153576002615cac565b615c7b565b80828d0160608e018f811115615370578b8cfd5b8b5b600281101561538f57823585529385019391850191600101615372565b50919b50503598506153a691505060808b01615228565b95506153b460a08b01615102565b94506153c260c08b01615102565b93506153d18b60e08c0161514f565b92506153e06101408b01615228565b91506101608a013567ffffffffffffffff8111156153fc578182fd5b6154088c828d016151a6565b9150509295985092959850929598565b6000806040838503121561542a578182fd5b823561543581615ebd565b9150602083013561544581615ed5565b809150509250929050565b60008060408385031215615462578182fd5b823561546d81615ebd565b946020939093013593505050565b60008060006060848603121561548f578081fd5b833561549a81615ebd565b92506020840135915060408401356152aa81615ebd565b6000806000806000806000806000806000806101408d8f0312156154d3578586fd5b6154dc8d615102565b9b5060208d01359a5067ffffffffffffffff60408e013511156154fd578586fd5b61550d8e60408f01358f0161510d565b909a50985067ffffffffffffffff60608e0135111561552a578586fd5b61553a8e60608f01358f0161510d565b909850965061554b60808e01615228565b955061555960a08e01615102565b945061556760c08e01615102565b935060e08d0135925061557d6101008e01615228565b915061558c6101208e01615102565b90509295989b509295989b509295989b565b60008060008060008060008060008060006101208c8e0312156155bf578485fd5b6155c98c35615ebd565b8b359a5060208c0135995060408c0135985067ffffffffffffffff8060608e013511156155f4578586fd5b6156048e60608f01358f0161510d565b909950975060808d0135811015615619578586fd5b5061562a8d60808e01358e0161510d565b909650945061563c60a08d0135615ed5565b60a08c0135935061564f60c08d01615102565b925061565d60e08d01615102565b91506101008c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215615696578384fd5b8a356156a181615ebd565b995060208b0135985060408b0135975060608b0135965060808b01356156c681615ed5565b955060a08b01356156d681615ebd565b945060c08b01356156e681615ebd565b935060e08b013592506101008b01356156fe81615ed5565b91506101208b013561570f81615ebd565b809150509295989b9194979a5092959850565b600060208284031215615733578081fd5b815161392a81615ed5565b60006020828403121561574f578081fd5b5035919050565b60008060408385031215615768578182fd5b505080516020909101519092909150565b600060c0828403121561578a578081fd5b61579460c0615c7b565b8251815260208301516157a681615ebd565b60208201526040838101519082015260608301516157c381615ebd565b60608201526080838101519082015260a08301516157e081615ed5565b60a08201529392505050565b6000602082840312156157fd578081fd5b5051919050565b60008060008060808587031215615819578182fd5b84359350602085013561582b81615ebd565b925060408501359150606085013561584281615ebd565b939692955090935050565b6000806040838503121561585f578182fd5b82359150602083013561544581615ed5565b600060208284031215615882578081fd5b815160ff8116811461392a578182fd5b8060005b60038110156110db578151845260209384019390910190600101615896565b6000815480845260208085019450838352808320835b838110156158e7578154875295820195600191820191016158cb565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000825161592e818460208701615e4a565b9190910192915050565b6001600160a01b038a168152600061018060208084018c845b600281101561596e57815183529183019190830190600101615951565b50505050896060840152615986608084018a15159052565b6001600160a01b03881660a08401526001600160a01b03871660c08401526159b160e0840187615892565b841515610140840152806101608401526159cd818401856158b5565b9c9b505050505050505050505050565b6001600160a01b039a8b168152602081019990995260408901979097526060880195909552921515608087015290861660a0860152851660c085015260e084015215156101008301529091166101208201526101400190565b6020808252825182820181905260009190848201906040850190845b81811015615a6e57835183529284019291840191600101615a52565b50909695505050505050565b600060608252615a8e6060830187896158f2565b8281036020840152615aa18186886158f2565b9150508260408301529695505050505050565b6000602082528251806020840152615ad3816040850160208701615e4a565b601f01601f19169190910160400192915050565b60208082526003908201526224afa360e91b604082015260600190565b602080825260039082015262495f4160e81b604082015260600190565b602080825260039082015262555f4160e81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8b815260208082018c90526101206040830181905282018a9052600090610140906001600160fb1b038c1115615ba9578283fd5b808c02808e848701378401848103830160608601529182018a9052610160909101908a835b8b811015615bfc578135615be181615ebd565b6001600160a01b031684529282019290820190600101615bce565b5050509615156080830152506001600160a01b0394851660a082015292151560c0840152921660e082015261010001529695505050505050565b6000808335601e19843603018112615c4c578283fd5b83018035915067ffffffffffffffff821115615c66578283fd5b602001915036819003821315611a2957600080fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615ca457615ca4615ea7565b604052919050565b600067ffffffffffffffff821115615cc657615cc6615ea7565b5060200290565b60008219821115615ce057615ce0615e91565b500190565b600082615d0057634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611615d175750615d42565b818704821115615d2957615d29615e91565b80861615615d3657918102915b9490941c938002615d08565b94509492505050565b600061392a6000198484600082615d645750600161392a565b81615d715750600061392a565b8160018114615d875760028114615d9157615dbe565b600191505061392a565b60ff841115615da257615da2615e91565b6001841b915084821115615db857615db8615e91565b5061392a565b5060208310610133831016604e8410600b8410161715615dec575081810a838111156138ca576138ca615e91565b615df98484846001615d05565b808604821115615e0b57615e0b615e91565b02949350505050565b6000816000190483118215151615615e2e57615e2e615e91565b500290565b600082821015615e4557615e45615e91565b500390565b60005b83811015615e65578181015183820152602001615e4d565b838111156110db5750506000910152565b6000600019821415615e8a57615e8a615e91565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114615ed257600080fd5b50565b8015158114615ed257600080fdfea26469706673582212200cfee42f25c842bc542038b420322c17f0360a0476a4234f98b7ff706a0c0dfc64736f6c63430008020033"; ->>>>>>> 6bc7fc991f262d3896e10700cf04ee01a2d79f23 + "0x60806040523480156200001157600080fd5b506040516200605538038062006055833981016040819052620000349162000169565b6001600055620000448762000105565b50620000508662000105565b506200005c8562000105565b50620000688462000105565b50620000748362000105565b50620000808262000105565b50600280546001600160a01b03199081166001600160a01b03988916179091556001805482169888169890981790975560038054881695871695909517909455601680548716948616949094179093556012805486169285169290921790915560138054851691841691909117905560048054909316911617905546601155620001fd565b60006001600160a01b038216620001485760405162461bcd60e51b815260206004820152600360248201526220afbd60e91b604482015260640160405180910390fd5b5060015b919050565b80516001600160a01b03811681146200014c57600080fd5b600080600080600080600060e0888a03121562000184578283fd5b6200018f8862000151565b96506200019f6020890162000151565b9550620001af6040890162000151565b9450620001bf6060890162000151565b9350620001cf6080890162000151565b9250620001df60a0890162000151565b9150620001ef60c0890162000151565b905092959891949750929550565b615e48806200020d6000396000f3fe60806040526004361061023b5760003560e01c80638d47d1011161012e578063ba4559d5116100ab578063e06174e41161006f578063e06174e4146108c0578063e1d0ae9a146108e0578063f36dccf9146108f5578063f77c479114610978578063fd16ad90146109985761023b565b8063ba4559d51461082d578063bd66528a1461084d578063c5be53831461086d578063ce5d97461461088d578063d5f39488146108a05761023b565b8063aadab832116100f2578063aadab83214610771578063abb56897146107ac578063adf2cead146107e7578063b5e8c01414610807578063b8ce670d1461081a5761023b565b80638d47d101146105ed5780639a8a05921461060d578063a0aead4d14610631578063a8b5b8ed14610662578063aa5e4aa3146107445761023b565b80635c14b206116101bc5780636f6bfae3116101805780636f6bfae31461051b578063711ee04c1461054857806371726c921461057d578063751ba4921461059d5780637b103999146105cd5761023b565b80635c14b206146104545780635c975abb146104955780635d22448c146104c65780635e46bea5146104db5780636999b377146104fb5761023b565b80632481bb5c116102035780632481bb5c1461035e5780632d5ed912146103df578063334c1439146103ff5780634886f62c1461041f57806355a481d0146104345761023b565b8063040713db1461024057806307e6b636146102625780630d4de2a11461029f5780630dcc1484146102bf5780631ce818c6146102df575b600080fd5b34801561024c57600080fd5b5061026061025b3660046151e8565b6109b8565b005b34801561026e57600080fd5b5061028261027d36600461566d565b610c47565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102ab57600080fd5b506102606102ba36600461577c565b610c71565b3480156102cb57600080fd5b506102606102da36600461566d565b6110df565b3480156102eb57600080fd5b506103316102fa36600461566d565b600b6020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169160ff1684565b604080516001600160a01b0395861681529490931660208501529183015215156060820152608001610296565b34801561036a57600080fd5b50601654601554601354601454601854601954601a54604080516001600160a01b0398891681529688166020880152600160a01b860460ff1615159087015260608601939093526202a300608086015260a085019190915260c084015260e08301529190911661010082015261012001610296565b3480156103eb57600080fd5b506102606103fa36600461534b565b6111e0565b34801561040b57600080fd5b5061026061041a36600461519e565b6112fc565b34801561042b57600080fd5b506102606113ac565b34801561044057600080fd5b5061026061044f3660046155a6565b6114ac565b34801561046057600080fd5b5061028261046f366004615383565b600c6020908152600092835260408084209091529082529020546001600160a01b031681565b3480156104a157600080fd5b506004546104b690600160a01b900460ff1681565b6040519015158152602001610296565b3480156104d257600080fd5b50610260611937565b3480156104e757600080fd5b50600454610282906001600160a01b031681565b34801561050757600080fd5b50601354610282906001600160a01b031681565b34801561052757600080fd5b5061053b610536366004615166565b611961565b6040516102969190615965565b34801561055457600080fd5b5061056861056336600461534b565b6119ce565b60408051928352602083019190915201610296565b34801561058957600080fd5b50610260610598366004615166565b611a2e565b3480156105a957600080fd5b506104b66105b8366004615166565b60066020526000908152604090205460ff1681565b3480156105d957600080fd5b50600354610282906001600160a01b031681565b3480156105f957600080fd5b506102606106083660046153e4565b611afb565b34801561061957600080fd5b5061062360115481565b604051908152602001610296565b34801561063d57600080fd5b50601c54601b5460175460408051938452602084019290925290820152606001610296565b34801561066e57600080fd5b506106e461067d366004615166565b600a60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979596949593949293919260ff80841693610100900482169291821691600160a01b9004168a565b604080516001600160a01b039b8c168152602081019a909a528901979097526060880195909552608087019390935260a0860191909152151560c0850152841660e084015290921661010082015290151561012082015261014001610296565b34801561075057600080fd5b5061062361075f366004615166565b60096020526000908152604090205481565b34801561077d57600080fd5b506104b661078c366004615383565b600f60209081526000928352604080842090915290825290205460ff1681565b3480156107b857600080fd5b506104b66107c7366004615383565b600860209081526000928352604080842090915290825290205460ff1681565b3480156107f357600080fd5b5061026061080236600461566d565b612229565b610623610815366004615733565b6125bb565b6106236108283660046153ae565b61295d565b34801561083957600080fd5b5061026061084836600461534b565b612c08565b34801561085957600080fd5b5061026061086836600461566d565b612da5565b34801561087957600080fd5b506102606108883660046154d1565b61309e565b61026061089b366004615242565b613628565b3480156108ac57600080fd5b50601254610282906001600160a01b031681565b3480156108cc57600080fd5b50600254610282906001600160a01b031681565b3480156108ec57600080fd5b50610623601281565b34801561090157600080fd5b506106e4610910366004615166565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007909601546001600160a01b039586169794969395929493919260ff80841693610100900482169291821691600160a01b9004168a565b34801561098457600080fd5b50600154610282906001600160a01b031681565b3480156109a457600080fd5b506102826109b336600461566d565b613756565b6109c0613766565b506109ca846137af565b506109d4836137af565b506001600160a01b0385166000908152600a6020526040902060070154600160a01b900460ff1680610a2857506001600160a01b038516600090815260056020526040902060070154600160a01b900460ff165b8015610a3357508181115b610a585760405162461bcd60e51b8152600401610a4f90615a33565b60405180910390fd5b6000610a658660016137f5565b15610a7257506001610b11565b610a7d8660006137f5565b15610a8a57506000610b11565b610a926138c0565b506001600160a01b0386166000908152600a6020526040902060070154600160a01b900460ff1615610ac657506000610b11565b6001600160a01b038616600090815260056020526040902060070154600160a01b900460ff1615610af957506001610b11565b60405162461bcd60e51b8152600401610a4f90615a50565b8015610b77576001600160a01b038681166000908152600560205260409020600681018054610100600160a81b031916610100898516021790556007810180546001600160a01b0319169287169290921790915560018101849055600201829055610bd3565b6001600160a01b038681166000908152600a60205260409020600681018054610100600160a81b031916610100898516021790556007810180546001600160a01b03191692871692909217909155600181018490556002018290555b836001600160a01b0316856001600160a01b0316876001600160a01b03167fd16202366d5587c878fd5283ccc908ea1f5bb379ac191ad6781bbcb4974cec4b868686604051610c379392919092835260208301919091521515604082015260600190565b60405180910390a4505050505050565b601c8181548110610c5757600080fd5b6000918252602090912001546001600160a01b0316905081565b610c796138c0565b50601354600160a01b900460ff168015610ca357506202a30060145442610ca09190615d62565b10155b610cd75760405162461bcd60e51b81526020600482015260056024820152641397d657d560da1b6044820152606401610a4f565b6000808215610e3a5760175460195410610d1f5760405162461bcd60e51b815260206004820152600960248201526818dbdb5c1b195d195960ba1b6044820152606401610a4f565b601954601754909250610d328386615bfc565b1015610d3f575082610d52565b601954601754610d4f9190615d62565b90505b60005b81811015610e34576000600b81610d6c8487615bfc565b81526020810191909152604001600020600381015490915060ff1615610e21576015546001828101546002840154845460405163055a481d60e41b81526001600160a01b03958616956355a481d095610ddc9582169493600093849384938493849384939091169060040161590c565b600060405180830381600087803b158015610df657600080fd5b505af1158015610e0a573d6000803e3d6000fd5b505050506019546001610e1d9190615bfc565b6019555b5080610e2c81615da5565b915050610d55565b506110d9565b601b5460185410610e795760405162461bcd60e51b815260206004820152600960248201526818dbdb5c1b195d195960ba1b6044820152606401610a4f565b601854601b54909250610e8c8386615bfc565b1015610e99575082610eac565b601854601b54610ea99190615d62565b90505b60005b818110156110d7576000601b610ec58386615bfc565b81548110610ee357634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b03169150610f049082906111e0565b6001600160a01b038181166000818152600a6020908152604091829020825161014081018452815486168152600182015492810192909252600281015482840152600381015460608301526004808201546080840152600582015460a0840152600682015460ff808216151560c086015261010091829004881660e086015260079093015480881691850191909152600160a01b90049091161515610120830152601554925163f2fde38b60e01b8152929094169382019390935263f2fde38b90602401600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b505060155483516001600160a01b03818116600090815260096020908152604080832054828a0151828b015160c08c015160e08d01516101008e015160a08f01518f518b168a52600d90985286892054965163055a481d60e41b81529b8a169d506355a481d09c5061107e9b959994989397929691959094929392919091169060040161590c565b600060405180830381600087803b15801561109857600080fd5b505af11580156110ac573d6000803e3d6000fd5b5050505060185460016110bf9190615bfc565b601855508190506110cf81615da5565b915050610eaf565b505b50505050565b6110e76138c0565b50601354600160a01b900460ff16801561111157506202a3006014544261110e9190615d62565b10155b6111455760405162461bcd60e51b81526020600482015260056024820152641397d657d560da1b6044820152606401610a4f565b601a54601c5460009190819061115b9085615bfc565b10156111695782915061117c565b601a54601c546111799190615d62565b91505b60005b828110156110d9576111ce601c6111968385615bfc565b815481106111b457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316613978565b806111d881615da5565b91505061117f565b6000808215611208576001600160a01b03841660009081526005602052604090209150611223565b6001600160a01b0384166000908152600a6020526040902091505b600682015460ff161561125f5760038201541561125f57506003810180546000909155600782015461125f906001600160a01b03168583613c75565b6004820154156110d9575060048082018054600090915560025460408051632bdb901160e11b8152905192936110d9936001600160a01b03909316926357b72022928083019260209291829003018186803b1580156112bd57600080fd5b505afa1580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f59190615182565b8583613c75565b6113046138c0565b5061130e836137af565b50611318826137af565b50611322816137af565b50806001600160a01b0316826001600160a01b0316846001600160a01b03167f4233a6fa155f27e6a5fe881410a1cb3f6ee591b1adf0d4f8111520d43611ebfe60405160405180910390a4600280546001600160a01b039485166001600160a01b031991821617909155601380549385169382169390931790925560128054919093169116179055565b6113b46138c0565b50601354600160a01b900460ff1680156113d25750601b5460185410155b6114045760405162461bcd60e51b8152602060048201526003602482015262505f4d60e81b6044820152606401610a4f565b60035460155460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b15801561144d57600080fd5b505af1158015611461573d6000803e3d6000fd5b50506013805460ff60a01b1916905550506015546040516001600160a01b03909116907f917552ffe30574970b53b4e4d4c0a79ac1b3e6b6c2459457831cbf3b991fb70d90600090a2565b60025460405163df73eb5160e01b8152600481018b90526001600160a01b039091169063df73eb519060240160206040518083038186803b1580156114f057600080fd5b505afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190615651565b801561155857506001600160a01b0381166000908152600e602090815260408083208c845290915290205460ff16155b801561157757506016546001600160a01b0316336001600160a01b0316145b6115935760405162461bcd60e51b8152600401610a4f90615a50565b81156116d7576001600f6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060800160405280826001600160a01b031681526020018b6001600160a01b031681526020018a815260200160011515815250600b6000601754815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550905050601760008154809291906116cd90615da5565b9190505550611920565b6040518061014001604052808b6001600160a01b0316815260200189815260200188815260200160008152602001600081526020018481526020018715158152602001866001600160a01b03168152602001856001600160a01b0316815260200160011515815250600a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160070160146101000a81548160ff02191690831515021790555090505088600960008c6001600160a01b03166001600160a01b031681526020019081526020016000208190555080600d60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b8a9080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055505b61192b818a8c613ce3565b50505050505050505050565b61193f6138c0565b506004805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6001600160a01b0381166000908152600760209081526040918290208054835181840281018401909452808452606093928301828280156119c157602002820191906000526020600020905b8154815260200190600101908083116119ad575b505050505090505b919050565b6000808215611a015750506001600160a01b03821660009081526005602052604090206001810154600290910154611a27565b50506001600160a01b0382166000908152600a6020526040902060018101546002909101545b9250929050565b611a36613766565b50611a3f6138c0565b50611a49816137af565b50601354600160a01b900460ff1615611a8a5760405162461bcd60e51b8152602060048201526003602482015262505f4d60e81b6044820152606401610a4f565b601580546001600160a01b0319166001600160a01b03831690811790915560138054600160a01b60ff60a01b199182168117909255600480549091169091179055426014556040517fbf3aee0580cb96d1eb8ffba88fb8dc83e973b7cdf4a18be5a0d3cbb4e6ecb3d390600090a250565b6001546001600160a01b03166324d7806c336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611b4c57600080fd5b505afa158015611b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b849190615651565b80611c1357506001546001600160a01b031663d5db72eb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611bdb57600080fd5b505afa158015611bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c139190615651565b611c475760405162461bcd60e51b81526020600482015260056024820152642aafa0afb960d91b6044820152606401610a4f565b60025460405163df73eb5160e01b8152600481018d90526001600160a01b039091169063df73eb519060240160206040518083038186803b158015611c8b57600080fd5b505afa158015611c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc39190615651565b8015611cf357506001600160a01b038c166000908152600e602090815260408083208e845290915290205460ff16155b8015611cff5750600289145b8015611d0b5750600287145b611d445760405162461bcd60e51b815260206004820152600a6024820152691c9959da5cdd195c995960b21b6044820152606401610a4f565b60008215611e8d578190506001600f60008f6001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180608001604052808e6001600160a01b03168152602001826001600160a01b031681526020018d815260200160011515815250600b6000601754815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555090505060176000815480929190611e8390615da5565b919050555061220f565b6012546001600160a01b031663803ef2698a8a600081611ebd57634e487b7160e01b600052603260045260246000fd5b9050602002810190611ecf9190615b65565b8c8c6001818110611ef057634e487b7160e01b600052603260045260246000fd5b9050602002810190611f029190615b65565b896040518663ffffffff1660e01b8152600401611f239594939291906159a9565b602060405180830381600087803b158015611f3d57600080fd5b505af1158015611f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f759190615182565b9050604051806101400160405280826001600160a01b031681526020018c8c6000818110611fb357634e487b7160e01b600052603260045260246000fd5b9050602002013581526020018c8c6001818110611fe057634e487b7160e01b600052603260045260246000fd5b9050602002013581526020016000815260200160008152602001600081526020018815158152602001876001600160a01b03168152602001866001600160a01b0316815260200160011515815250600a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160070160146101000a81548160ff0219169083151502179055509050508b60096000836001600160a01b03166001600160a01b03168152602001908152602001600020819055508c600d6000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b819080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055505b61221a8d8d83613ce3565b50505050505050505050505050565b6002600054141561224c5760405162461bcd60e51b8152600401610a4f90615a6d565b6002600055612259613766565b50600354604051633600fb2960e11b8152600481018390526000916001600160a01b031690636c01f6529060240160c060405180830381600087803b1580156122a157600080fd5b505af11580156122b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d991906156a8565b6003546040516306a2b7bd60e01b8152600481018590529192506001600160a01b0316906306a2b7bd90602401602060405180830381600087803b15801561232057600080fd5b505af1158015612334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123589190615651565b801561236657508060a00151155b80156123eb575060035460405163105ac01b60e01b8152600481018490526001600160a01b039091169063105ac01b90602401602060405180830381600087803b1580156123b357600080fd5b505af11580156123c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123eb9190615651565b61241b5760405162461bcd60e51b81526020600482015260016024820152604d60f81b6044820152606401610a4f565b600061243782604001516124328460200151613d65565b613df7565b6020808401516001600160a01b03166000908152600f8252604080822086518352909252205490915060ff16156124e557600480546020840151606085015160405163507f596b60e01b81526001600160a01b03928316948101949094528116602484015260448301849052169063507f596b90606401600060405180830381600087803b1580156124c857600080fd5b505af11580156124dc573d6000803e3d6000fd5b50505050612552565b602082015160608301516040516340c10f1960e01b81526001600160a01b039182166004820152602481018490529116906340c10f1990604401600060405180830381600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050505b60035460405163aaff559b60e01b8152600481018590526001600160a01b039091169063aaff559b906024015b600060405180830381600087803b15801561259957600080fd5b505af11580156125ad573d6000803e3d6000fd5b505060016000555050505050565b6000600260005414156125e05760405162461bcd60e51b8152600401610a4f90615a6d565b60026000556125ed613766565b506001600160a01b03841660009081526006602052604090205460ff16801561263957506001600160a01b038416600090815260086020908152604080832088845290915290205460ff165b61266e5760405162461bcd60e51b8152600401610a4f90602080825260049082015263414c5f4560e01b604082015260600190565b612677826137af565b50600080612686868887613e19565b915091508180156126975750600081115b80156126be57506001600160a01b0386166000908152600560205260409020600101548110155b80156126e557506001600160a01b0386166000908152600560205260409020600201548111155b6127015760405162461bcd60e51b8152600401610a4f90615a16565b61270d868260016141fd565b6001600160a01b0387166000908152600f602090815260408083208b845290915290205490915060ff161561283c576001600160a01b0386166127b9576004805460405163d6f7ddf960e01b81526001600160a01b03898116938201939093526024810184905291169063d6f7ddf99083906044016000604051808303818588803b15801561279b57600080fd5b505af11580156127af573d6000803e3d6000fd5b505050505061283c565b6004546127d3906001600160a01b0388811691168361461f565b6004805460405163d6f7ddf960e01b81526001600160a01b03898116938201939093526024810184905291169063d6f7ddf990604401600060405180830381600087803b15801561282357600080fd5b505af1158015612837573d6000803e3d6000fd5b505050505b61284e8161284988613d65565b614776565b60035460405163f2e84dbd60e01b8152600481018a90526001600160a01b0389811660248301526044820184905287811660648301526000608483018190529394509091169063f2e84dbd9060a4016040805180830381600087803b1580156128b657600080fd5b505af11580156128ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ee9190615685565b60408051838152602081018c905290810185905260608101829052919550915033906001600160a01b0387811691908a16907f6eadb2b7a4982f73f1a7ebd22bd3841c236dfa73a50e818bb3fac34e236ff4159060800160405180910390a45050600160005550949350505050565b6000600260005414156129825760405162461bcd60e51b8152600401610a4f90615a6d565b600260005561298f613766565b506001600160a01b038416600090815260096020908152604080832054600a90925290912060070154600160a01b900460ff166129de5760405162461bcd60e51b8152600401610a4f90615a33565b6129e7836137af565b506000806129f6878488613e19565b91509150818015612a2257506001600160a01b0387166000908152600a60205260409020600101548110155b8015612a4957506001600160a01b0387166000908152600a60205260409020600201548111155b612a655760405162461bcd60e51b8152600401610a4f90615a16565b612a71878260006141fd565b604051630852cd8d60e31b8152600481018290529091506001600160a01b038816906342966c6890602401600060405180830381600087803b158015612ab657600080fd5b505af1158015612aca573d6000803e3d6000fd5b505050506001600160a01b038781166000908152600d602052604090205416612af6826128498a613d65565b60035460405163f2e84dbd60e01b8152600481018790526001600160a01b038481166024830152604482018490528981166064830152600160848301529294506000929091169063f2e84dbd9060a4016040805180830381600087803b158015612b5f57600080fd5b505af1158015612b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b979190615685565b604080518381526020810189905290810186905260608101829052919750915033906001600160a01b0389811691908516907f52458269afd71a8a53a86e1bebaa32e82a4946c52441cbf62e946b7591fcba4c9060800160405180910390a450506001600055509195945050505050565b6001600160a01b038216600090815260056020526040902060070154600160a01b900460ff168015612d5e57506001546001600160a01b03166324d7806c336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015612c8657600080fd5b505afa158015612c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbe9190615651565b80612d4d57506001546001600160a01b031663d5db72eb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015612d1557600080fd5b505afa158015612d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4d9190615651565b80612d5e5750612d5e8260016137f5565b612d7a5760405162461bcd60e51b8152600401610a4f90615a50565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60026000541415612dc85760405162461bcd60e51b8152600401610a4f90615a6d565b6002600055612dd5613766565b506003546040516375a28b8160e01b8152600481018390526000916001600160a01b0316906375a28b819060240160c060405180830381600087803b158015612e1d57600080fd5b505af1158015612e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5591906156a8565b90506000612e6e82604001516124328460200151613d65565b6003546040516303c5dd0560e11b8152600481018690529192506001600160a01b03169063078bba0a90602401602060405180830381600087803b158015612eb557600080fd5b505af1158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed9190615651565b8015612f9257506003546020830151835160405163071fdf5d60e51b815284936001600160a01b03169263e3fbeba092612f3d926004016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015612f5757600080fd5b505af1158015612f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8f919061571b565b10155b8015612fa057508160a00151155b8015613025575060035460405163105ac01b60e01b8152600481018590526001600160a01b039091169063105ac01b90602401602060405180830381600087803b158015612fed57600080fd5b505af1158015613001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130259190615651565b61305a5760405162461bcd60e51b8152600401610a4f90602080825260049082015263414c5f4560e01b604082015260600190565b61306d8260600151836020015183613c75565b60035460405163e3cce7f160e01b8152600481018590526001600160a01b039091169063e3cce7f19060240161257f565b6130a6613766565b50600154604051630935e01b60e21b81523360048201526000916001600160a01b0316906324d7806c9060240160206040518083038186803b1580156130eb57600080fd5b505afa1580156130ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131239190615651565b15613156576001600160a01b0383161580159061314857506001600160a01b03841615155b15613151575060015b613562565b5060025460408051631d43bac360e21b815290516001926001600160a01b03169163750eeb0c916004808301926020929190829003018186803b15801561319c57600080fd5b505afa1580156131b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d49190615651565b156133b5576001600160a01b038c1661328b5760025460405163702e9b0f60e11b81526001600160a01b038e811660048301523360248301529091169063e05d361e9060440160206040518083038186803b15801561323257600080fd5b505afa158015613246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326a9190615651565b6132865760405162461bcd60e51b8152600401610a4f90615a50565b6133b5565b8b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132c457600080fd5b505afa1580156132d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fc9190615182565b6001600160a01b0316336001600160a01b03161480613399575060025460405163702e9b0f60e11b81526001600160a01b038e811660048301523360248301529091169063e05d361e9060440160206040518083038186803b15801561336157600080fd5b505afa158015613375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133999190615651565b6133b55760405162461bcd60e51b8152600401610a4f90615a50565b60025460408051632ec88e8960e11b815290516000926001600160a01b031691635d911d12916004808301926020929190829003018186803b1580156133fa57600080fd5b505afa15801561340e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134329190615182565b905061356033600260009054906101000a90046001600160a01b03166001600160a01b03166357b720226040518163ffffffff1660e01b815260040160206040518083038186803b15801561348657600080fd5b505afa15801561349a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134be9190615182565b600260009054906101000a90046001600160a01b03166001600160a01b03166319b9cd6e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561350c57600080fd5b505afa158015613520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613544919061571b565b61354e908d615d43565b6001600160a01b038516929190614798565b505b6135b58c8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878e8e868a8a60006147d0565b826001600160a01b03168c6001600160a01b03167f5cefea613365c605e680542e6974e101c35c53536b5dc28944c793518093a3af8d8d8d8d8d8d8d6135f83390565b8b8f8e6040516136129b9a99989796959493929190615aa4565b60405180910390a3505050505050505050505050565b6001600160a01b038916600090815260056020526040902060070154600160a01b900460ff1615801561366e57506016546001600160a01b0316336001600160a01b0316145b61368a5760405162461bcd60e51b8152600401610a4f90615a50565b60008061369f8b828760016020020151613e19565b915091508180156136b4575060208501518110155b6136d05760405162461bcd60e51b8152600401610a4f90615a16565b895160208b01516136ec918d9186916000918d8c8e60016147d0565b84516001600160a01b038c166000908152600560208190526040918290206003810193909355908701516004830155018990558315613749576001600160a01b038b166000908152600660205260409020805460ff191660011790555b5050505050505050505050565b601b8181548110610c5757600080fd5b600454600090600160a01b900460ff16156137a95760405162461bcd60e51b81526020600482015260036024820152620425f560ec1b6044820152606401610a4f565b50600190565b60006001600160a01b0382166137ed5760405162461bcd60e51b815260206004820152600360248201526220afbd60e91b6044820152606401610a4f565b506001919050565b600080821561385e576001600160a01b038481166000908152600560205260409020600601546101009004163314801561385057506001600160a01b0384811660009081526005602052604090206006015461010090041615155b15613859575060015b6138b9565b6001600160a01b038481166000908152600a6020526040902060060154610100900416331480156138b057506001600160a01b038481166000908152600a602052604090206006015461010090041615155b156138b9575060015b9392505050565b6000336001600160a01b0316600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561391a57600080fd5b505afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139529190615182565b6001600160a01b0316146137a95760405162461bcd60e51b8152600401610a4f90615a50565b6001600160a01b03808216600081815260056020818152604080842081516101408101835281548816815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529182015460a0820152600682015460ff808216151560c084015261010091829004871660e084015260079093015495861690820152600160a01b90940416151561012084015290613af957506015546040805180820182526020808501518252848301518183015260a085015160c086015160e08701516101008801518651606080820189528a015181524781870181905260808b0151828a01526001600160a01b038c81166000908152600689528a81205460079099528a9020995163672ecba360e11b8152919a169863ce5d9746988b98613ac2988f9892979096929590949293909260ff90921691600401615867565b6000604051808303818588803b158015613adb57600080fd5b505af1158015613aef573d6000803e3d6000fd5b5050505050613c5f565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b158015613b3857600080fd5b505afa158015613b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b70919061571b565b601554909150613b8d906001600160a01b0385811691168361461f565b6015546040805180820182526020808601518252858301518183015260a086015160c087015160e08801516101008901518651606080820189528b015181528086018a905260808b0151818901526001600160a01b038c8116600090815260068852898120546007909852899020985163672ecba360e11b815299169863ce5d974698613c2c988e989097969594939260ff9091169190600401615867565b600060405180830381600087803b158015613c4657600080fd5b505af1158015613c5a573d6000803e3d6000fd5b505050505b601a54613c6d906001615bfc565b601a55505050565b613c7e836137af565b506001600160a01b038216613cc9576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015613cc3573d6000803e3d6000fd5b50613cde565b816110d96001600160a01b0382168584614dc2565b505050565b6001600160a01b038381166000818152600c60209081526040808320878452825280832080546001600160a01b0319169587169586179055838352600e8252808320878452909152808220805460ff19166001179055518592917f84b5fe2fe42763acbedf938c1c7830e25fda76024f508b006ed78c7d88ac232c91a4505050565b60006001600160a01b038216613d7d575060126119c9565b816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613db657600080fd5b505afa158015613dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dee91906157a0565b60ff1692915050565b6000613e04826012615d62565b613e0f90600a615c7a565b6138b99084615c14565b600254604051630aacb67760e11b815260048101849052600091829182916001600160a01b0316906315596cee9060240160206040518083038186803b158015613e6257600080fd5b505afa158015613e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e9a919061571b565b90506001600160a01b038616613f8057613eb48185615bfc565b3410613f73578060106000828254613ecc9190615bfc565b90915550508015613f5d576002546040805163726a866f60e01b81529051613f5d926001600160a01b03169163726a866f916004808301926020929190829003018186803b158015613f1d57600080fd5b505afa158015613f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f559190615182565b600083613c75565b6001613f698234615d62565b92509250506141f5565b60008092509250506141f5565b85846001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b158015613fd757600080fd5b505afa158015613feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061400f919061571b565b1015801561401d5750813410155b156141eb5734601060008282546140349190615bfc565b909155505081156140c5576002546040805163726a866f60e01b815290516140c5926001600160a01b03169163726a866f916004808301926020929190829003018186803b15801561408557600080fd5b505afa158015614099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140bd9190615182565b600034613c75565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561410757600080fd5b505afa15801561411b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413f919061571b565b90506141566001600160a01b038316333089614798565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561419857600080fd5b505afa1580156141ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d0919061571b565b905060016141de8383615d62565b95509550505050506141f5565b6000809350935050505b935093915050565b600080821561422457506001600160a01b038416600090815260056020526040902061423e565b506001600160a01b0384166000908152600a602052604090205b6007810154600160a01b900460ff166142695760405162461bcd60e51b8152600401610a4f90615a33565b600260009054906101000a90046001600160a01b03166001600160a01b0316636332d2566040518163ffffffff1660e01b815260040160206040518083038186803b1580156142b757600080fd5b505afa1580156142cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ef9190615651565b6142fc57839150506138b9565b601354604051635d4a93ff60e11b81523360048201526001600160a01b038781166024830152600092169063ba9527fe9060440160206040518083038186803b15801561434857600080fd5b505afa15801561435c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614380919061571b565b9050806143915784925050506138b9565b600260009054906101000a90046001600160a01b03166001600160a01b03166356212e486040518163ffffffff1660e01b815260040160206040518083038186803b1580156143df57600080fd5b505afa1580156143f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614417919061571b565b8111156144a757600260009054906101000a90046001600160a01b03166001600160a01b03166356212e486040518163ffffffff1660e01b815260040160206040518083038186803b15801561446c57600080fd5b505afa158015614480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a4919061571b565b90505b60006127106144b68388615d43565b6144c09190615c14565b600684015490915060ff16156145d55760006064600260009054906101000a90046001600160a01b03166001600160a01b031663f24356436040518163ffffffff1660e01b815260040160206040518083038186803b15801561452257600080fd5b505afa158015614536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061455a919061571b565b6145649084615d43565b61456e9190615c14565b9050600061457c8284615d62565b9050828560050160008282546145929190615bfc565b92505081905550818560030160008282546145ad9190615bfc565b92505081905550808560040160008282546145c89190615bfc565b9091555061460a92505050565b808360050160008282546145e99190615bfc565b92505081905550808360040160008282546146049190615bfc565b90915550505b6146148187615d62565b979650505050505050565b8015806146a85750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561466e57600080fd5b505afa158015614682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146a6919061571b565b155b6147135760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610a4f565b6040516001600160a01b038316602482015260448101829052613cde90849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614df2565b6000614783826012615d62565b61478e90600a615c7a565b6138b99084615d43565b6040516001600160a01b03808516602483015283166044820152606481018290526110d99085906323b872dd60e01b9060840161473f565b6001600160a01b03891660009081526005602052604090206007810154600160a01b900460ff1661490c5780546001600160a01b0319166001600160a01b038b1617815560018101879055600281018690558415614897576001600160a01b0384161580159061484857506001600160a01b03831615155b15614897576006810180546007830180546001600160a01b0319166001600160a01b038881169190911790915560ff19909116600117610100600160a81b031916610100918616919091021790555b60078101805460ff60a01b1916600160a01b1790556001600160a01b038a166000818152600660205260408120805460ff19169055601c805460018101825591527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b03191690911790555b8780156149955750600480546040516316b5b4db60e31b81526001600160a01b038d81169382019390935291169063b5ada6d89060240160206040518083038186803b15801561495b57600080fd5b505afa15801561496f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149939190615651565b155b15614a0357600480546040516312d3617160e01b81526001600160a01b038d811693820193909352602481018990529116906312d3617190604401600060405180830381600087803b1580156149ea57600080fd5b505af11580156149fe573d6000803e3d6000fd5b505050505b885160005b81811015614db4576002548b516001600160a01b039091169063df73eb51908d9084908110614a4757634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401614a6d91815260200190565b60206040518083038186803b158015614a8557600080fd5b505afa158015614a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614abd9190615651565b15614da2576001600160a01b038c1660009081526008602052604081208c519091908d9084908110614aff57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182528101919091526040016000205460ff16614da2576001600160a01b038c1660009081526008602052604081208c51600192908e9085908110614b5f57634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600760008d6001600160a01b03166001600160a01b031681526020019081526020016000208b8281518110614bd157634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018101845560009384529190922001558315614d30576016548b516001600160a01b039091169063aadab832908e908e9085908110614c2f57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401614c689291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015614c8257600080fd5b505af1158015614c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cba9190615651565b15614d2b576001600160a01b038c166000908152600f602052604081208c51600192908e9085908110614cfd57634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b614da2565b8915614da2576001600160a01b038c166000908152600f602052604081208c51600192908e9085908110614d7457634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80614dac81615da5565b915050614a08565b505050505050505050505050565b6040516001600160a01b038316602482015260448101829052613cde90849063a9059cbb60e01b9060640161473f565b6000614e47826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614ec49092919063ffffffff16565b805190915015613cde5780806020019051810190614e659190615651565b613cde5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a4f565b6060614ed38484600085614edb565b949350505050565b606082471015614f3c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a4f565b6001600160a01b0385163b614f935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a4f565b600080866001600160a01b03168587604051614faf919061584b565b60006040518083038185875af1925050503d8060008114614fec576040519150601f19603f3d011682016040523d82523d6000602084013e614ff1565b606091505b50915091506146148282866060831561500b5750816138b9565b82511561501b5782518084602001fd5b8160405162461bcd60e51b8152600401610a4f91906159e3565b80356119c981615dec565b60008083601f840112615051578182fd5b50813567ffffffffffffffff811115615068578182fd5b6020830191508360208083028501011115611a2757600080fd5b600082601f830112615092578081fd5b61509c6060615baa565b8083856060860111156150ad578384fd5b835b60038110156150ce5781358452602093840193909101906001016150af565b509095945050505050565b600082601f8301126150e9578081fd5b8135602067ffffffffffffffff82111561510557615105615dd6565b808202615113828201615baa565b83815282810190868401838801850189101561512d578687fd5b8693505b8584101561514f578035835260019390930192918401918401615131565b50979650505050505050565b80356119c981615e04565b600060208284031215615177578081fd5b81356138b981615dec565b600060208284031215615193578081fd5b81516138b981615dec565b6000806000606084860312156151b2578182fd5b83356151bd81615dec565b925060208401356151cd81615dec565b915060408401356151dd81615dec565b809150509250925092565b600080600080600060a086880312156151ff578081fd5b853561520a81615dec565b9450602086013561521a81615dec565b9350604086013561522a81615dec565b94979396509394606081013594506080013592915050565b60008060008060008060008060006101808a8c031215615260578687fd5b893561526b81615dec565b98506020603f8b018c1361527d578788fd5b61528f61528a6002615bdb565b615baa565b80828d0160608e018f8111156152a3578b8cfd5b8b5b60028110156152c2578235855293850193918501916001016152a5565b50919b50503598506152d991505060808b0161515b565b95506152e760a08b01615035565b94506152f560c08b01615035565b93506153048b60e08c01615082565b92506153136101408b0161515b565b91506101608a013567ffffffffffffffff81111561532f578182fd5b61533b8c828d016150d9565b9150509295985092959850929598565b6000806040838503121561535d578182fd5b823561536881615dec565b9150602083013561537881615e04565b809150509250929050565b60008060408385031215615395578182fd5b82356153a081615dec565b946020939093013593505050565b6000806000606084860312156153c2578081fd5b83356153cd81615dec565b92506020840135915060408401356151dd81615dec565b6000806000806000806000806000806000806101408d8f031215615406578586fd5b61540f8d615035565b9b5060208d01359a5067ffffffffffffffff60408e01351115615430578586fd5b6154408e60408f01358f01615040565b909a50985067ffffffffffffffff60608e0135111561545d578586fd5b61546d8e60608f01358f01615040565b909850965061547e60808e0161515b565b955061548c60a08e01615035565b945061549a60c08e01615035565b935060e08d013592506154b06101008e0161515b565b91506154bf6101208e01615035565b90509295989b509295989b509295989b565b60008060008060008060008060008060006101208c8e0312156154f2578485fd5b6154fc8c35615dec565b8b359a5060208c0135995060408c0135985067ffffffffffffffff8060608e01351115615527578586fd5b6155378e60608f01358f01615040565b909950975060808d013581101561554c578586fd5b5061555d8d60808e01358e01615040565b909650945060a08c013561557081615e04565b935061557e60c08d01615035565b925061558c60e08d01615035565b91506101008c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d0312156155c5578384fd5b8a356155d081615dec565b995060208b0135985060408b0135975060608b0135965060808b01356155f581615e04565b955060a08b013561560581615dec565b945060c08b013561561581615dec565b935060e08b013592506101008b013561562d81615e04565b91506101208b013561563e81615dec565b809150509295989b9194979a5092959850565b600060208284031215615662578081fd5b81516138b981615e04565b60006020828403121561567e578081fd5b5035919050565b60008060408385031215615697578182fd5b505080516020909101519092909150565b600060c082840312156156b9578081fd5b6156c360c0615baa565b8251815260208301516156d581615dec565b60208201526040838101519082015260608301516156f281615dec565b60608201526080838101519082015260a083015161570f81615e04565b60a08201529392505050565b60006020828403121561572c578081fd5b5051919050565b60008060008060808587031215615748578182fd5b84359350602085013561575a81615dec565b925060408501359150606085013561577181615dec565b939692955090935050565b6000806040838503121561578e578182fd5b82359150602083013561537881615e04565b6000602082840312156157b1578081fd5b815160ff811681146138b9578182fd5b8060005b60038110156110d95781518452602093840193909101906001016157c5565b6000815480845260208085019450838352808320835b83811015615816578154875295820195600191820191016157fa565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000825161585d818460208701615d79565b9190910192915050565b6001600160a01b038a168152600061018060208084018c845b600281101561589d57815183529183019190830190600101615880565b505050508960608401526158b5608084018a15159052565b6001600160a01b03881660a08401526001600160a01b03871660c08401526158e060e08401876157c1565b841515610140840152806101608401526158fc818401856157e4565b9c9b505050505050505050505050565b6001600160a01b039a8b168152602081019990995260408901979097526060880195909552921515608087015290861660a0860152851660c085015260e084015215156101008301529091166101208201526101400190565b6020808252825182820181905260009190848201906040850190845b8181101561599d57835183529284019291840191600101615981565b50909695505050505050565b6000606082526159bd606083018789615821565b82810360208401526159d0818688615821565b9150508260408301529695505050505050565b6000602082528251806020840152615a02816040850160208701615d79565b601f01601f19169190910160400192915050565b60208082526003908201526224afa360e91b604082015260600190565b602080825260039082015262495f4160e81b604082015260600190565b602080825260039082015262555f4160e81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8b815260208082018c90526101206040830181905282018a9052600090610140906001600160fb1b038c1115615ad8578283fd5b808c02808e848701378401848103830160608601529182018a9052610160909101908a835b8b811015615b2b578135615b1081615dec565b6001600160a01b031684529282019290820190600101615afd565b5050509615156080830152506001600160a01b0394851660a082015292151560c0840152921660e082015261010001529695505050505050565b6000808335601e19843603018112615b7b578283fd5b83018035915067ffffffffffffffff821115615b95578283fd5b602001915036819003821315611a2757600080fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615bd357615bd3615dd6565b604052919050565b600067ffffffffffffffff821115615bf557615bf5615dd6565b5060200290565b60008219821115615c0f57615c0f615dc0565b500190565b600082615c2f57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611615c465750615c71565b818704821115615c5857615c58615dc0565b80861615615c6557918102915b9490941c938002615c37565b94509492505050565b60006138b96000198484600082615c93575060016138b9565b81615ca0575060006138b9565b8160018114615cb65760028114615cc057615ced565b60019150506138b9565b60ff841115615cd157615cd1615dc0565b6001841b915084821115615ce757615ce7615dc0565b506138b9565b5060208310610133831016604e8410600b8410161715615d1b575081810a8381111561385957613859615dc0565b615d288484846001615c34565b808604821115615d3a57615d3a615dc0565b02949350505050565b6000816000190483118215151615615d5d57615d5d615dc0565b500290565b600082821015615d7457615d74615dc0565b500390565b60005b83811015615d94578181015183820152602001615d7c565b838111156110d95750506000910152565b6000600019821415615db957615db9615dc0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114615e0157600080fd5b50565b8015158114615e0157600080fdfea2646970667358221220282baa97430d7b64245c7a96139b96f5ff3b9aa3e8a7d30e5fbcb39c3d775d5c64736f6c63430008020033"; type BridgeConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/Registry__factory.ts b/typechain-types/factories/contracts/Registry__factory.ts index 73786cb..5034076 100644 --- a/typechain-types/factories/contracts/Registry__factory.ts +++ b/typechain-types/factories/contracts/Registry__factory.ts @@ -959,11 +959,7 @@ const _abi = [ ]; const _bytecode = -<<<<<<< HEAD "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612dbc806200007f6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80639664fc0a1161011a578063c223e41d116100ad578063e3fbeba01161007c578063e3fbeba0146105dd578063efbc7bac14610608578063f2e84dbd14610647578063f2fde38b1461066f578063fc4b3fe014610682576101fb565b8063c223e41d1461055c578063cd2d62b014610587578063dfcc3f67146105aa578063e3cce7f1146105ca576101fb565b8063a2c79c4b116100e9578063a2c79c4b146104e1578063a7bb58031461050f578063aaff559b14610540578063b9a6003814610553576101fb565b80639664fc0a1461049557806397aba7f9146104a8578063986283e2146104bb5780639e7d9347146104ce576101fb565b80636834e3a81161019257806375a28b811161016157806375a28b81146103e45780637de70c2a146104365780638da5cb5b14610461578063918a8f7914610472576101fb565b80636834e3a8146103495780636c01f65214610377578063715018a6146103c95780637352297c146103d1576101fb565b806310734c47116101ce57806310734c47146102835780632a5618fe1461029657806342e82816146102a9578063529415b414610336576101fb565b806306a2b7bd14610200578063078bba0a1461023857806307e7e0531461025b578063105ac01b14610270575b600080fd5b61022361020e36600461271a565b600a6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61022361024636600461271a565b60076020526000908152604090205460ff1681565b61026e610269366004612881565b6106d4565b005b61022361027e36600461271a565b610bda565b61026e610291366004612761565b610bf5565b61026e6102a436600461271a565b6116dc565b6102fb6102b736600461271a565b600b6020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492939091169160ff1686565b604080519687526001600160a01b039586166020880152860193909352921660608401526080830191909152151560a082015260c00161022f565b61026e610344366004612881565b611753565b610369610357366004612694565b60046020526000908152604090205481565b60405190815260200161022f565b6102fb61038536600461271a565b60096020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492939091169160ff1686565b61026e611a02565b61026e6103df36600461271a565b611a16565b6102fb6103f236600461271a565b60086020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492939091169160ff1686565b610449610444366004612a55565b611a8d565b6040516001600160a01b03909116815260200161022f565b6000546001600160a01b0316610449565b61022361048036600461271a565b60056020526000908152604090205460ff1681565b6104496104a3366004612860565b611ab7565b6104496104b636600461281b565b611aef565b6103696104c9366004612881565b611b6e565b6103696104dc366004612881565b611bf7565b6102236104ef366004612732565b600f60209081526000928352604080842090915290825290205460ff1681565b61052261051d3660046128de565b611c14565b60408051938452602084019290925260ff169082015260600161022f565b61026e61054e36600461271a565b611c88565b61036960105481565b61036961056a3660046126d3565b600260209081526000928352604080842090915290825290205481565b61022361059536600461271a565b600c6020526000908152604090205460ff1681565b6103696105b8366004612694565b60016020526000908152604090205481565b61026e6105d836600461271a565b611cff565b6103696105eb3660046126d3565b600360209081526000928352604080842090915290825290205481565b61063261061636600461271a565b600d602052600090815260409020805460019091015460ff1682565b6040805192835290151560208301520161022f565b61065a6106553660046129d1565b611de8565b6040805192835260208301919091520161022f565b61026e61067d366004612694565b61210d565b6102fb61069036600461271a565b60066020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492939091169160ff1686565b6000546001600160a01b03166001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b15801561071857600080fd5b505afa15801561072c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075091906126b7565b60405163a97e5c9360e01b81523360048201526001600160a01b03919091169063a97e5c939060240160206040518083038186803b15801561079157600080fd5b505afa1580156107a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c991906126fe565b6107ee5760405162461bcd60e51b81526004016107e590612b3e565b60405180910390fd5b6000868152600a602052604090205460ff161561083b5760405162461bcd60e51b815260206004820152600b60248201526a1c9959da5cdd195c9c995960aa1b60448201526064016107e5565b600080546001600160a01b0316604051632e0a590360e11b81526001600160a01b03878116600483015260248201899052919250600091831690635c14b2069060440160206040518083038186803b15801561089657600080fd5b505afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce91906126b7565b60405163556d5c1960e11b81526001600160a01b038881166004830152602482018a90529192509083169063aadab8329060440160206040518083038186803b15801561091a57600080fd5b505afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906126fe565b610acb5760405163a8b5b8ed60e01b81526001600160a01b0382811660048301526000919084169063a8b5b8ed906024016101406040518083038186803b15801561099c57600080fd5b505afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d49190612911565b9050806101200151610a145760405162461bcd60e51b815260206004820152600960248201526830b9b9b2ba2fb2b93960b91b60448201526064016107e5565b60405163aa5e4aa360e01b81526001600160a01b03838116600483015289919085169063aa5e4aa39060240160206040518083038186803b158015610a5857600080fd5b505afa158015610a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9091906129b9565b14610ac95760405162461bcd60e51b815260206004820152600960248201526831b430b4b72fb2b93960b91b60448201526064016107e5565b505b600087836001600160a01b0316639a8a05926040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0757600080fd5b505afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f91906129b9565b88888888604051602001610b5896959493929190612afd565b604051602081830303815290604052805190602001209050808914610bbf5760405162461bcd60e51b815260206004820152601e60248201527f6d696e743a206572726f722076616c69646174696f6e206d696e74204944000060448201526064016107e5565b610bcf8989848989896002612186565b505050505050505050565b6000818152600d602052604090206001015460ff165b919050565b6000546001600160a01b03166001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3957600080fd5b505afa158015610c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7191906126b7565b60405163facd743b60e01b81523360048201526001600160a01b03919091169063facd743b9060240160206040518083038186803b158015610cb257600080fd5b505afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea91906126fe565b610d065760405162461bcd60e51b81526004016107e590612b3e565b6000546001600160a01b03166001600160a01b031663e06174e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4a57600080fd5b505afa158015610d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8291906126b7565b6001600160a01b031663680038c76040518163ffffffff1660e01b815260040160206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df291906129b9565b610e315760405162461bcd60e51b815260206004820152601060248201526f36b4b73b30b634b230ba37b92fb2b93960811b60448201526064016107e5565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091528115611089576000848152600a602052604090205460ff16610eb45760405162461bcd60e51b815260206004820152600a60248201526936b4b73a24a22fb2b93960b11b60448201526064016107e5565b506000838152600960209081526040808320815160c081018352815480825260018301546001600160a01b03908116838701819052600285015484870152600385015482166060850152600480860154608086015260059095015460ff16151560a08501529654855163556d5c1960e11b8152948501979097526024840191909152925190949092169263aadab83292604480840193829003018186803b158015610f5e57600080fd5b505afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9691906126fe565b61108457600080546001600160a01b03166020830151604051631c47b81360e21b81526001600160a01b0391821660048201526000602482015291169063711ee04c90604401604080518083038186803b158015610ff357600080fd5b505afa158015611007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b9190612a32565b91505080611041836040015184602001516123a9565b11156110825760405162461bcd60e51b815260206004820152601060248201526f20b6b7bab73a2fb634b6b4ba2fa2b93960811b60448201526064016107e5565b505b611252565b60008481526007602052604090205460ff166110d45760405162461bcd60e51b815260206004820152600a60248201526931b0b4b6a4a22fb2b93960b11b60448201526064016107e5565b506000838152600860209081526040808320815160c081018352815481526001808301546001600160a01b03908116958301869052600284015483860152600384015481166060840152600480850154608085015260059094015460ff16151560a084015286548551631c47b81360e21b81529485019690965260248401919091528351919594169263711ee04c9260448082019391829003018186803b15801561117e57600080fd5b505afa158015611192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b69190612a32565b915050806111cc836040015184602001516123a9565b111580156112115750602080830180516001600160a01b03166000908152600383526040808220865183529093528290205491840151905161120e91906123a9565b11155b6112505760405162461bcd60e51b815260206004820152601060248201526f20b6b7bab73a2fb634b6b4ba2fa2b93960811b60448201526064016107e5565b505b8060a00151156112905760405162461bcd60e51b815260206004820152600960248201526818dbdb5c1b195d195960ba1b60448201526064016107e5565b6000805b84518110156114985760006112e946856000015186602001518760400151886060015189608001518c89815181106112dc57634e487b7160e01b600052603260045260246000fd5b6020026020010151611a8d565b90506112fd6000546001600160a01b031690565b6001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b15801561133557600080fd5b505afa158015611349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136d91906126b7565b60405163facd743b60e01b81526001600160a01b038381166004830152919091169063facd743b9060240160206040518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e891906126fe565b801561141757506000878152600f602090815260408083206001600160a01b038516845290915290205460ff16155b1561148557611427836001612bb9565b6000888152600e602090815260408083208054600180820183559185528385200180546001600160a01b0319166001600160a01b0388169081179091558c8552600f8452828520908552909252909120805460ff1916909117905592505b508061149081612d1c565b915050611294565b506000546001600160a01b03166001600160a01b031663e06174e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156114dd57600080fd5b505afa1580156114f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151591906126b7565b6001600160a01b031663680038c76040518163ffffffff1660e01b815260040160206040518083038186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158591906129b9565b8110156115ca5760405162461bcd60e51b8152602060048201526013602482015272696e737566696369656e745f7369676e65727360681b60448201526064016107e5565b6000858152600d60205260408082208381556001908101805460ff191690911790555186917f170aaa3cfe0784c59c2f4b41be301737ea03ba11c07c32b1c87f1b1c70cfa53691a2821561167b5760005460405163adf2cead60e01b8152600481018790526001600160a01b039091169063adf2cead90602401600060405180830381600087803b15801561165e57600080fd5b505af1158015611672573d6000803e3d6000fd5b505050506116d5565b600054604051635eb3294560e11b8152600481018790526001600160a01b039091169063bd66528a90602401600060405180830381600087803b1580156116c157600080fd5b505af1158015610bcf573d6000803e3d6000fd5b5050505050565b6000818152600c602052604090205460ff1661170a5760405162461bcd60e51b81526004016107e590612b5b565b60405181907fa837c918a33a11e463e7f93026a9bf6e0ac03cc271b2d76cba3b54b18f9ab42990600090a26000908152600b60205260409020600501805460ff19166001179055565b6000546001600160a01b03166001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b15801561179757600080fd5b505afa1580156117ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cf91906126b7565b60405163a97e5c9360e01b81523360048201526001600160a01b03919091169063a97e5c939060240160206040518083038186803b15801561181057600080fd5b505afa158015611824573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184891906126fe565b6118645760405162461bcd60e51b81526004016107e590612b3e565b60008681526007602052604090205460ff16156118b15760405162461bcd60e51b815260206004820152600b60248201526a1c9959da5cdd195c9c995960aa1b60448201526064016107e5565b6000546001600160a01b031660405163abb5689760e01b81526001600160a01b03868116600483015260248201889052919091169063abb568979060440160206040518083038186803b15801561190757600080fd5b505afa15801561191b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193f91906126fe565b6119775760405162461bcd60e51b815260206004820152600960248201526831b430b4b72fb2b93960b91b60448201526064016107e5565b600085468686868660405160200161199496959493929190612afd565b6040516020818303038152906040528051906020012090508087146119e95760405162461bcd60e51b815260206004820152600b60248201526a31b630b4b6b4b22fb2b93960a91b60448201526064016107e5565b6119f98787878787876003612186565b50505050505050565b611a0a61255e565b611a1460006125b8565b565b60008181526005602052604090205460ff16611a445760405162461bcd60e51b81526004016107e590612b5b565b60405181907f8374420a8ccd2de22fa6fe4a89be6e91652eedaa7f3d2e784484fb2a97776c5190600090a26000908152600660205260409020600501805460ff19166001179055565b600080611a9e898989898989611b6e565b9050611aaa8184611aef565b9998505050505050505050565b600e6020528160005260406000208181548110611ad357600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080600080611afe85611c14565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611b59573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6000868686868686604051602001611b8b96959493929190612afd565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c015b6040516020818303038152906040528051906020012090509695505050505050565b6000868686868686604051602001611bd596959493929190612afd565b60008060008351604114611c6a5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016107e5565b50505060208101516040820151606090920151909260009190911a90565b6000818152600a602052604090205460ff16611cb65760405162461bcd60e51b81526004016107e590612b5b565b60405181907ff2b8966fdb9bb47007290a17e759151a67efc09407c04b48e143a80754008cd490600090a26000908152600960205260409020600501805460ff19166001179055565b60008181526007602052604090205460ff16611d2d5760405162461bcd60e51b81526004016107e590612b5b565b60405181907f9a1003102d1990cc17fde390cbf6b5f1d19b7bcfcb6024a1e8e23e94b928928f90600090a260008181526008602052604090206002810154600190910154611d8491906001600160a01b03166123a9565b600082815260086020908152604080832060018101546001600160a01b03168452600383528184209054845290915281208054909190611dc5908490612d05565b90915550506000908152600860205260409020600501805460ff19166001179055565b600080611df361255e565b6000836003811115611e1557634e487b7160e01b600052602160045260246000fd5b1415611f7f57506001600160a01b038316600090815260046020526040902054468787878785604051602001611e5096959493929190612afd565b60408051601f19818403018152828252805160209182012060c0840183528a84526001600160a01b03808b168584019081528585018b81528a831660608801818152608089018a8152600060a08b0181815288825260068a528a82209b518c55955160018c81018054928a166001600160a01b0319938416179055955160028d0155925160038c0180549190981693169290921790955593516004808a019190915592516005988901805491151560ff1992831617905597865286842080549098169091179096559481529390915290822080549194509091611f3283612d1c565b9190505550611f4185876123a9565b6001600160a01b03871660009081526003602090815260408083208b845290915281208054909190611f74908490612bb9565b909155506120c59050565b6001836003811115611fa157634e487b7160e01b600052602160045260246000fd5b14156120c557506001600160a01b038316600090815260046020526040902054468787878785604051602001611fdc96959493929190612afd565b60408051601f19818403018152828252805160209182012060c0840183528a84526001600160a01b03808b168584019081528585018b81528a831660608801818152608089018a8152600060a08b01818152888252600b8a528a82209b518c55955160018c81018054928a166001600160a01b0319938416179055955160028d0155925160038c0180549190981693169290921790955593516004808a019190915592516005909801805498151560ff19998a16179055600c8652868420805490981690911790965594815293909152908220805491945090916120bf83612d1c565b91905055505b6001600160a01b03861660009081526001602052604081208054916120e983612d1c565b9091555050601080549060006120fe83612d1c565b91905055509550959350505050565b61211561255e565b6001600160a01b03811661217a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e5565b612183816125b8565b50565b60028160038111156121a857634e487b7160e01b600052602160045260246000fd5b14156122cf576040518060c00160405280878152602001866001600160a01b03168152602001858152602001846001600160a01b0316815260200183815260200160001515815250600960008981526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816004015560a08201518160050160006101000a81548160ff0219169083151502179055509050506001600a600089815260200190815260200160002060006101000a81548160ff0219169083151502179055506119f9565b60038160038111156122f157634e487b7160e01b600052602160045260246000fd5b14156119f957506040805160c0810182529586526001600160a01b0394851660208088019182528783019586529386166060880190815260808801938452600060a089018181529981526008865283812098518955915160018981018054928a166001600160a01b0319938416179055965160028a01559051600389018054919098169116179095559051600486015594516005909401805494151560ff199586161790556007905292902080549091169091179055565b6000806001600160a01b03831661243d576000546001600160a01b03166001600160a01b031663e1d0ae9a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123fe57600080fd5b505afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243691906129b9565b90506124b4565b826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561247657600080fd5b505afa15801561248a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ae9190612adc565b60ff1690505b806124c76000546001600160a01b031690565b6001600160a01b031663e1d0ae9a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124ff57600080fd5b505afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253791906129b9565b6125419190612d05565b61254c90600a612c37565b6125569085612bd1565b949350505050565b6000546001600160a01b03163314611a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051610bf081612d63565b8035610bf081612d78565b8051610bf081612d78565b600082601f830112612639578081fd5b813567ffffffffffffffff81111561265357612653612d4d565b612666601f8201601f1916602001612b88565b81815284602083860101111561267a578283fd5b816020850160208301379081016020019190915292915050565b6000602082840312156126a5578081fd5b81356126b081612d63565b9392505050565b6000602082840312156126c8578081fd5b81516126b081612d63565b600080604083850312156126e5578081fd5b82356126f081612d63565b946020939093013593505050565b60006020828403121561270f578081fd5b81516126b081612d78565b60006020828403121561272b578081fd5b5035919050565b60008060408385031215612744578182fd5b82359150602083013561275681612d63565b809150509250929050565b600080600060608486031215612775578081fd5b8335925060208085013567ffffffffffffffff80821115612794578384fd5b818701915087601f8301126127a7578384fd5b8135818111156127b9576127b9612d4d565b6127c68485830201612b88565b8181528481019250838501865b838110156127fc576127ea8c888435890101612629565b855293860193908601906001016127d3565b5050809650505050505061281260408501612613565b90509250925092565b6000806040838503121561282d578182fd5b82359150602083013567ffffffffffffffff81111561284a578182fd5b61285685828601612629565b9150509250929050565b60008060408385031215612872578182fd5b50508035926020909101359150565b60008060008060008060c08789031215612899578384fd5b863595506020870135945060408701356128b281612d63565b93506060870135925060808701356128c981612d63565b8092505060a087013590509295509295509295565b6000602082840312156128ef578081fd5b813567ffffffffffffffff811115612905578182fd5b61255684828501612629565b6000610140808385031215612924578182fd5b61292d81612b88565b905061293883612608565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261297860c0840161261e565b60c082015261298960e08401612608565b60e082015261010061299c818501612608565b908201526101206129ae84820161261e565b908201529392505050565b6000602082840312156129ca578081fd5b5051919050565b600080600080600060a086880312156129e8578283fd5b8535945060208601356129fa81612d63565b9350604086013592506060860135612a1181612d63565b9150608086013560048110612a24578182fd5b809150509295509295909350565b60008060408385031215612a44578182fd5b505080516020909101519092909150565b600080600080600080600060e0888a031215612a6f578485fd5b87359650602088013595506040880135612a8881612d63565b9450606088013593506080880135612a9f81612d63565b925060a0880135915060c088013567ffffffffffffffff811115612ac1578182fd5b612acd8a828b01612629565b91505092959891949750929550565b600060208284031215612aed578081fd5b815160ff811681146126b0578182fd5b95865260208601949094526bffffffffffffffffffffffff19606093841b81166040870152605486019290925290911b166074830152608882015260a80190565b602080825260039082015262555f4160e81b604082015260600190565b60208082526013908201527234b73b30b634b2102a3930b739b0b1ba34b7b760691b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bb157612bb1612d4d565b604052919050565b60008219821115612bcc57612bcc612d37565b500190565b600082612bec57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611612c035750612c2e565b818704821115612c1557612c15612d37565b80861615612c2257918102915b9490941c938002612bf4565b94509492505050565b60006126b06000198484600082612c50575060016126b0565b81612c5d575060006126b0565b8160018114612c735760028114612c7d57612caa565b60019150506126b0565b60ff841115612c8e57612c8e612d37565b6001841b915084821115612ca457612ca4612d37565b506126b0565b5060208310610133831016604e8410600b8410161715612cdd575081810a83811115612cd857612cd8612d37565b6126b0565b612cea8484846001612bf1565b808604821115612cfc57612cfc612d37565b02949350505050565b600082821015612d1757612d17612d37565b500390565b6000600019821415612d3057612d30612d37565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461218357600080fd5b801515811461218357600080fdfea2646970667358221220f872547f3d44012e8a84d2dff38d60e9f86023a70ecde3a4b1ff1b2ab40c7e3764736f6c63430008020033"; -======= - "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612dbc806200007f6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80639664fc0a1161011a578063c223e41d116100ad578063e3fbeba01161007c578063e3fbeba0146105dd578063efbc7bac14610608578063f2e84dbd14610647578063f2fde38b1461066f578063fc4b3fe014610682576101fb565b8063c223e41d1461055c578063cd2d62b014610587578063dfcc3f67146105aa578063e3cce7f1146105ca576101fb565b8063a2c79c4b116100e9578063a2c79c4b146104e1578063a7bb58031461050f578063aaff559b14610540578063b9a6003814610553576101fb565b80639664fc0a1461049557806397aba7f9146104a8578063986283e2146104bb5780639e7d9347146104ce576101fb565b80636834e3a81161019257806375a28b811161016157806375a28b81146103e45780637de70c2a146104365780638da5cb5b14610461578063918a8f7914610472576101fb565b80636834e3a8146103495780636c01f65214610377578063715018a6146103c95780637352297c146103d1576101fb565b806310734c47116101ce57806310734c47146102835780632a5618fe1461029657806342e82816146102a9578063529415b414610336576101fb565b806306a2b7bd14610200578063078bba0a1461023857806307e7e0531461025b578063105ac01b14610270575b600080fd5b61022361020e36600461271a565b600a6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61022361024636600461271a565b60076020526000908152604090205460ff1681565b61026e610269366004612881565b6106d4565b005b61022361027e36600461271a565b610bda565b61026e610291366004612761565b610bf5565b61026e6102a436600461271a565b6116dc565b6102fb6102b736600461271a565b600b6020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492939091169160ff1686565b604080519687526001600160a01b039586166020880152860193909352921660608401526080830191909152151560a082015260c00161022f565b61026e610344366004612881565b611753565b610369610357366004612694565b60046020526000908152604090205481565b60405190815260200161022f565b6102fb61038536600461271a565b60096020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492939091169160ff1686565b61026e611a02565b61026e6103df36600461271a565b611a16565b6102fb6103f236600461271a565b60086020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492939091169160ff1686565b610449610444366004612a55565b611a8d565b6040516001600160a01b03909116815260200161022f565b6000546001600160a01b0316610449565b61022361048036600461271a565b60056020526000908152604090205460ff1681565b6104496104a3366004612860565b611ab7565b6104496104b636600461281b565b611aef565b6103696104c9366004612881565b611b6e565b6103696104dc366004612881565b611bf7565b6102236104ef366004612732565b600f60209081526000928352604080842090915290825290205460ff1681565b61052261051d3660046128de565b611c14565b60408051938452602084019290925260ff169082015260600161022f565b61026e61054e36600461271a565b611c88565b61036960105481565b61036961056a3660046126d3565b600260209081526000928352604080842090915290825290205481565b61022361059536600461271a565b600c6020526000908152604090205460ff1681565b6103696105b8366004612694565b60016020526000908152604090205481565b61026e6105d836600461271a565b611cff565b6103696105eb3660046126d3565b600360209081526000928352604080842090915290825290205481565b61063261061636600461271a565b600d602052600090815260409020805460019091015460ff1682565b6040805192835290151560208301520161022f565b61065a6106553660046129d1565b611de8565b6040805192835260208301919091520161022f565b61026e61067d366004612694565b61210d565b6102fb61069036600461271a565b60066020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b039384169492939091169160ff1686565b6000546001600160a01b03166001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b15801561071857600080fd5b505afa15801561072c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075091906126b7565b60405163a97e5c9360e01b81523360048201526001600160a01b03919091169063a97e5c939060240160206040518083038186803b15801561079157600080fd5b505afa1580156107a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c991906126fe565b6107ee5760405162461bcd60e51b81526004016107e590612b3e565b60405180910390fd5b6000868152600a602052604090205460ff161561083b5760405162461bcd60e51b815260206004820152600b60248201526a1c9959da5cdd195c9c995960aa1b60448201526064016107e5565b600080546001600160a01b0316604051632e0a590360e11b81526001600160a01b03878116600483015260248201899052919250600091831690635c14b2069060440160206040518083038186803b15801561089657600080fd5b505afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce91906126b7565b60405163556d5c1960e11b81526001600160a01b038881166004830152602482018a90529192509083169063aadab8329060440160206040518083038186803b15801561091a57600080fd5b505afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906126fe565b610acb5760405163a8b5b8ed60e01b81526001600160a01b0382811660048301526000919084169063a8b5b8ed906024016101406040518083038186803b15801561099c57600080fd5b505afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d49190612911565b9050806101200151610a145760405162461bcd60e51b815260206004820152600960248201526830b9b9b2ba2fb2b93960b91b60448201526064016107e5565b60405163aa5e4aa360e01b81526001600160a01b03838116600483015289919085169063aa5e4aa39060240160206040518083038186803b158015610a5857600080fd5b505afa158015610a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9091906129b9565b14610ac95760405162461bcd60e51b815260206004820152600960248201526831b430b4b72fb2b93960b91b60448201526064016107e5565b505b600087836001600160a01b0316639a8a05926040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0757600080fd5b505afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f91906129b9565b88888888604051602001610b5896959493929190612afd565b604051602081830303815290604052805190602001209050808914610bbf5760405162461bcd60e51b815260206004820152601e60248201527f6d696e743a206572726f722076616c69646174696f6e206d696e74204944000060448201526064016107e5565b610bcf8989848989896002612186565b505050505050505050565b6000818152600d602052604090206001015460ff165b919050565b6000546001600160a01b03166001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3957600080fd5b505afa158015610c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7191906126b7565b60405163facd743b60e01b81523360048201526001600160a01b03919091169063facd743b9060240160206040518083038186803b158015610cb257600080fd5b505afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea91906126fe565b610d065760405162461bcd60e51b81526004016107e590612b3e565b6000546001600160a01b03166001600160a01b031663e06174e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4a57600080fd5b505afa158015610d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8291906126b7565b6001600160a01b031663680038c76040518163ffffffff1660e01b815260040160206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df291906129b9565b610e315760405162461bcd60e51b815260206004820152601060248201526f36b4b73b30b634b230ba37b92fb2b93960811b60448201526064016107e5565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091528115611089576000848152600a602052604090205460ff16610eb45760405162461bcd60e51b815260206004820152600a60248201526936b4b73a24a22fb2b93960b11b60448201526064016107e5565b506000838152600960209081526040808320815160c081018352815480825260018301546001600160a01b03908116838701819052600285015484870152600385015482166060850152600480860154608086015260059095015460ff16151560a08501529654855163556d5c1960e11b8152948501979097526024840191909152925190949092169263aadab83292604480840193829003018186803b158015610f5e57600080fd5b505afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9691906126fe565b61108457600080546001600160a01b03166020830151604051631c47b81360e21b81526001600160a01b0391821660048201526000602482015291169063711ee04c90604401604080518083038186803b158015610ff357600080fd5b505afa158015611007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b9190612a32565b91505080611041836040015184602001516123a9565b11156110825760405162461bcd60e51b815260206004820152601060248201526f20b6b7bab73a2fb634b6b4ba2fa2b93960811b60448201526064016107e5565b505b611252565b60008481526007602052604090205460ff166110d45760405162461bcd60e51b815260206004820152600a60248201526931b0b4b6a4a22fb2b93960b11b60448201526064016107e5565b506000838152600860209081526040808320815160c081018352815481526001808301546001600160a01b03908116958301869052600284015483860152600384015481166060840152600480850154608085015260059094015460ff16151560a084015286548551631c47b81360e21b81529485019690965260248401919091528351919594169263711ee04c9260448082019391829003018186803b15801561117e57600080fd5b505afa158015611192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b69190612a32565b915050806111cc836040015184602001516123a9565b111580156112115750602080830180516001600160a01b03166000908152600383526040808220865183529093528290205491840151905161120e91906123a9565b11155b6112505760405162461bcd60e51b815260206004820152601060248201526f20b6b7bab73a2fb634b6b4ba2fa2b93960811b60448201526064016107e5565b505b8060a00151156112905760405162461bcd60e51b815260206004820152600960248201526818dbdb5c1b195d195960ba1b60448201526064016107e5565b6000805b84518110156114985760006112e946856000015186602001518760400151886060015189608001518c89815181106112dc57634e487b7160e01b600052603260045260246000fd5b6020026020010151611a8d565b90506112fd6000546001600160a01b031690565b6001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b15801561133557600080fd5b505afa158015611349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136d91906126b7565b60405163facd743b60e01b81526001600160a01b038381166004830152919091169063facd743b9060240160206040518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e891906126fe565b801561141757506000878152600f602090815260408083206001600160a01b038516845290915290205460ff16155b1561148557611427836001612bb9565b6000888152600e602090815260408083208054600180820183559185528385200180546001600160a01b0319166001600160a01b0388169081179091558c8552600f8452828520908552909252909120805460ff1916909117905592505b508061149081612d1c565b915050611294565b506000546001600160a01b03166001600160a01b031663e06174e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156114dd57600080fd5b505afa1580156114f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151591906126b7565b6001600160a01b031663680038c76040518163ffffffff1660e01b815260040160206040518083038186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158591906129b9565b8110156115ca5760405162461bcd60e51b8152602060048201526013602482015272696e737566696369656e745f7369676e65727360681b60448201526064016107e5565b6000858152600d60205260408082208381556001908101805460ff191690911790555186917f170aaa3cfe0784c59c2f4b41be301737ea03ba11c07c32b1c87f1b1c70cfa53691a2821561167b5760005460405163adf2cead60e01b8152600481018790526001600160a01b039091169063adf2cead90602401600060405180830381600087803b15801561165e57600080fd5b505af1158015611672573d6000803e3d6000fd5b505050506116d5565b600054604051635eb3294560e11b8152600481018790526001600160a01b039091169063bd66528a90602401600060405180830381600087803b1580156116c157600080fd5b505af1158015610bcf573d6000803e3d6000fd5b5050505050565b6000818152600c602052604090205460ff1661170a5760405162461bcd60e51b81526004016107e590612b5b565b60405181907fa837c918a33a11e463e7f93026a9bf6e0ac03cc271b2d76cba3b54b18f9ab42990600090a26000908152600b60205260409020600501805460ff19166001179055565b6000546001600160a01b03166001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b15801561179757600080fd5b505afa1580156117ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cf91906126b7565b60405163a97e5c9360e01b81523360048201526001600160a01b03919091169063a97e5c939060240160206040518083038186803b15801561181057600080fd5b505afa158015611824573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184891906126fe565b6118645760405162461bcd60e51b81526004016107e590612b3e565b60008681526007602052604090205460ff16156118b15760405162461bcd60e51b815260206004820152600b60248201526a1c9959da5cdd195c9c995960aa1b60448201526064016107e5565b6000546001600160a01b031660405163abb5689760e01b81526001600160a01b03868116600483015260248201889052919091169063abb568979060440160206040518083038186803b15801561190757600080fd5b505afa15801561191b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193f91906126fe565b6119775760405162461bcd60e51b815260206004820152600960248201526831b430b4b72fb2b93960b91b60448201526064016107e5565b600085468686868660405160200161199496959493929190612afd565b6040516020818303038152906040528051906020012090508087146119e95760405162461bcd60e51b815260206004820152600b60248201526a31b630b4b6b4b22fb2b93960a91b60448201526064016107e5565b6119f98787878787876003612186565b50505050505050565b611a0a61255e565b611a1460006125b8565b565b60008181526005602052604090205460ff16611a445760405162461bcd60e51b81526004016107e590612b5b565b60405181907f8374420a8ccd2de22fa6fe4a89be6e91652eedaa7f3d2e784484fb2a97776c5190600090a26000908152600660205260409020600501805460ff19166001179055565b600080611a9e898989898989611b6e565b9050611aaa8184611aef565b9998505050505050505050565b600e6020528160005260406000208181548110611ad357600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080600080611afe85611c14565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611b59573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6000868686868686604051602001611b8b96959493929190612afd565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c015b6040516020818303038152906040528051906020012090509695505050505050565b6000868686868686604051602001611bd596959493929190612afd565b60008060008351604114611c6a5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016107e5565b50505060208101516040820151606090920151909260009190911a90565b6000818152600a602052604090205460ff16611cb65760405162461bcd60e51b81526004016107e590612b5b565b60405181907ff2b8966fdb9bb47007290a17e759151a67efc09407c04b48e143a80754008cd490600090a26000908152600960205260409020600501805460ff19166001179055565b60008181526007602052604090205460ff16611d2d5760405162461bcd60e51b81526004016107e590612b5b565b60405181907f9a1003102d1990cc17fde390cbf6b5f1d19b7bcfcb6024a1e8e23e94b928928f90600090a260008181526008602052604090206002810154600190910154611d8491906001600160a01b03166123a9565b600082815260086020908152604080832060018101546001600160a01b03168452600383528184209054845290915281208054909190611dc5908490612d05565b90915550506000908152600860205260409020600501805460ff19166001179055565b600080611df361255e565b6000836003811115611e1557634e487b7160e01b600052602160045260246000fd5b1415611f7f57506001600160a01b038316600090815260046020526040902054468787878785604051602001611e5096959493929190612afd565b60408051601f19818403018152828252805160209182012060c0840183528a84526001600160a01b03808b168584019081528585018b81528a831660608801818152608089018a8152600060a08b0181815288825260068a528a82209b518c55955160018c81018054928a166001600160a01b0319938416179055955160028d0155925160038c0180549190981693169290921790955593516004808a019190915592516005988901805491151560ff1992831617905597865286842080549098169091179096559481529390915290822080549194509091611f3283612d1c565b9190505550611f4185876123a9565b6001600160a01b03871660009081526003602090815260408083208b845290915281208054909190611f74908490612bb9565b909155506120c59050565b6001836003811115611fa157634e487b7160e01b600052602160045260246000fd5b14156120c557506001600160a01b038316600090815260046020526040902054468787878785604051602001611fdc96959493929190612afd565b60408051601f19818403018152828252805160209182012060c0840183528a84526001600160a01b03808b168584019081528585018b81528a831660608801818152608089018a8152600060a08b01818152888252600b8a528a82209b518c55955160018c81018054928a166001600160a01b0319938416179055955160028d0155925160038c0180549190981693169290921790955593516004808a019190915592516005909801805498151560ff19998a16179055600c8652868420805490981690911790965594815293909152908220805491945090916120bf83612d1c565b91905055505b6001600160a01b03861660009081526001602052604081208054916120e983612d1c565b9091555050601080549060006120fe83612d1c565b91905055509550959350505050565b61211561255e565b6001600160a01b03811661217a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e5565b612183816125b8565b50565b60028160038111156121a857634e487b7160e01b600052602160045260246000fd5b14156122cf576040518060c00160405280878152602001866001600160a01b03168152602001858152602001846001600160a01b0316815260200183815260200160001515815250600960008981526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816004015560a08201518160050160006101000a81548160ff0219169083151502179055509050506001600a600089815260200190815260200160002060006101000a81548160ff0219169083151502179055506119f9565b60038160038111156122f157634e487b7160e01b600052602160045260246000fd5b14156119f957506040805160c0810182529586526001600160a01b0394851660208088019182528783019586529386166060880190815260808801938452600060a089018181529981526008865283812098518955915160018981018054928a166001600160a01b0319938416179055965160028a01559051600389018054919098169116179095559051600486015594516005909401805494151560ff199586161790556007905292902080549091169091179055565b6000806001600160a01b03831661243d576000546001600160a01b03166001600160a01b031663e1d0ae9a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123fe57600080fd5b505afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243691906129b9565b90506124b4565b826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561247657600080fd5b505afa15801561248a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ae9190612adc565b60ff1690505b806124c76000546001600160a01b031690565b6001600160a01b031663e1d0ae9a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124ff57600080fd5b505afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253791906129b9565b6125419190612d05565b61254c90600a612c37565b6125569085612bd1565b949350505050565b6000546001600160a01b03163314611a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051610bf081612d63565b8035610bf081612d78565b8051610bf081612d78565b600082601f830112612639578081fd5b813567ffffffffffffffff81111561265357612653612d4d565b612666601f8201601f1916602001612b88565b81815284602083860101111561267a578283fd5b816020850160208301379081016020019190915292915050565b6000602082840312156126a5578081fd5b81356126b081612d63565b9392505050565b6000602082840312156126c8578081fd5b81516126b081612d63565b600080604083850312156126e5578081fd5b82356126f081612d63565b946020939093013593505050565b60006020828403121561270f578081fd5b81516126b081612d78565b60006020828403121561272b578081fd5b5035919050565b60008060408385031215612744578182fd5b82359150602083013561275681612d63565b809150509250929050565b600080600060608486031215612775578081fd5b8335925060208085013567ffffffffffffffff80821115612794578384fd5b818701915087601f8301126127a7578384fd5b8135818111156127b9576127b9612d4d565b6127c68485830201612b88565b8181528481019250838501865b838110156127fc576127ea8c888435890101612629565b855293860193908601906001016127d3565b5050809650505050505061281260408501612613565b90509250925092565b6000806040838503121561282d578182fd5b82359150602083013567ffffffffffffffff81111561284a578182fd5b61285685828601612629565b9150509250929050565b60008060408385031215612872578182fd5b50508035926020909101359150565b60008060008060008060c08789031215612899578384fd5b863595506020870135945060408701356128b281612d63565b93506060870135925060808701356128c981612d63565b8092505060a087013590509295509295509295565b6000602082840312156128ef578081fd5b813567ffffffffffffffff811115612905578182fd5b61255684828501612629565b6000610140808385031215612924578182fd5b61292d81612b88565b905061293883612608565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261297860c0840161261e565b60c082015261298960e08401612608565b60e082015261010061299c818501612608565b908201526101206129ae84820161261e565b908201529392505050565b6000602082840312156129ca578081fd5b5051919050565b600080600080600060a086880312156129e8578283fd5b8535945060208601356129fa81612d63565b9350604086013592506060860135612a1181612d63565b9150608086013560048110612a24578182fd5b809150509295509295909350565b60008060408385031215612a44578182fd5b505080516020909101519092909150565b600080600080600080600060e0888a031215612a6f578485fd5b87359650602088013595506040880135612a8881612d63565b9450606088013593506080880135612a9f81612d63565b925060a0880135915060c088013567ffffffffffffffff811115612ac1578182fd5b612acd8a828b01612629565b91505092959891949750929550565b600060208284031215612aed578081fd5b815160ff811681146126b0578182fd5b95865260208601949094526bffffffffffffffffffffffff19606093841b81166040870152605486019290925290911b166074830152608882015260a80190565b602080825260039082015262555f4160e81b604082015260600190565b60208082526013908201527234b73b30b634b2102a3930b739b0b1ba34b7b760691b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bb157612bb1612d4d565b604052919050565b60008219821115612bcc57612bcc612d37565b500190565b600082612bec57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611612c035750612c2e565b818704821115612c1557612c15612d37565b80861615612c2257918102915b9490941c938002612bf4565b94509492505050565b60006126b06000198484600082612c50575060016126b0565b81612c5d575060006126b0565b8160018114612c735760028114612c7d57612caa565b60019150506126b0565b60ff841115612c8e57612c8e612d37565b6001841b915084821115612ca457612ca4612d37565b506126b0565b5060208310610133831016604e8410600b8410161715612cdd575081810a83811115612cd857612cd8612d37565b6126b0565b612cea8484846001612bf1565b808604821115612cfc57612cfc612d37565b02949350505050565b600082821015612d1757612d17612d37565b500390565b6000600019821415612d3057612d30612d37565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461218357600080fd5b801515811461218357600080fdfea2646970667358221220a89e908dbfa6252ed49d074b2d12763c68e827d09ca459a3646d3bdd302a002664736f6c63430008020033"; ->>>>>>> 6bc7fc991f262d3896e10700cf04ee01a2d79f23 type RegistryConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/bridgeSocket.sol/BridgeSocket__factory.ts b/typechain-types/factories/contracts/bridgeSocket.sol/BridgeSocket__factory.ts index 0165712..90d12ca 100644 --- a/typechain-types/factories/contracts/bridgeSocket.sol/BridgeSocket__factory.ts +++ b/typechain-types/factories/contracts/bridgeSocket.sol/BridgeSocket__factory.ts @@ -617,11 +617,7 @@ const _abi = [ ]; const _bytecode = -<<<<<<< HEAD - "0x60806040523480156200001157600080fd5b506040516200243138038062002431833981016040819052620000349162000152565b6001600055620000443362000100565b6001600160a01b038116158015906200006557506001600160a01b03831615155b80156200007a57506001600160a01b03821615155b620000bd5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b604482015260640160405180910390fd5b600280546001600160a01b039485166001600160a01b031991821617909155600380549385169382169390931790925560048054919093169116179055620001be565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060006060848603121562000167578283fd5b83516200017481620001a5565b60208501519093506200018781620001a5565b60408501519092506200019a81620001a5565b809150509250925092565b6001600160a01b0381168114620001bb57600080fd5b50565b61226380620001ce6000396000f3fe60806040526004361061019c5760003560e01c80638da5cb5b116100ec578063cb4bf33b1161008a578063dfc7d48811610064578063dfc7d48814610480578063e06174e4146104a0578063e78cea92146104c0578063f2fde38b146104e05761019c565b8063cb4bf33b1461042d578063d351e66e1461044d578063dabc1cd6146104605761019c565b80639bff08d8116100c65780639bff08d8146103c0578063a001ecdd146103e2578063a6217e45146103f8578063bf654aac146104185761019c565b80638da5cb5b146103635780639012c4a814610381578063961a8d5e146103a15761019c565b80635c975abb11610159578063749a1e7311610133578063749a1e73146102f95780637a87b621146103195780637f9a79011461032e5780638bbd9d0e146103435761019c565b80635c975abb146102b357806369d52a61146102cd578063715018a6146102e25761019c565b806305e96863146101a15780631bdcd2b7146101d65780632014055d146101f957806330b8b2c61461022e5780635153d4671461025b57806357b720221461027b575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004611d42565b610500565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101eb6105aa565b6040519081526020016101cd565b34801561020557600080fd5b50610219610214366004611d42565b61062e565b604080519283526020830191909152016101cd565b34801561023a57600080fd5b5061024e610249366004611d42565b610785565b6040516101cd919061205f565b34801561026757600080fd5b506101c1610276366004611f60565b61093f565b34801561028757600080fd5b5060045461029b906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b3480156102bf57600080fd5b506006546101c19060ff1681565b3480156102d957600080fd5b506101eb6109c2565b3480156102ee57600080fd5b506102f7610a47565b005b34801561030557600080fd5b506101c1610314366004611d42565b610a5b565b34801561032557600080fd5b506101eb610b99565b34801561033a57600080fd5b506102f7610c1d565b34801561034f57600080fd5b506102f761035e366004611d42565b610c39565b34801561036f57600080fd5b506001546001600160a01b031661029b565b34801561038d57600080fd5b506102f761039c366004611f60565b610d6a565b3480156103ad57600080fd5b506006546101c190610100900460ff1681565b3480156103cc57600080fd5b506103d5610e1f565b6040516101cd9190611fc1565b3480156103ee57600080fd5b506101eb60055481565b34801561040457600080fd5b506101eb610413366004611f60565b610ea4565b34801561042457600080fd5b506101eb600a81565b34801561043957600080fd5b506102f7610448366004611e80565b610f21565b6102f761045b366004611d5e565b610fff565b34801561046c57600080fd5b506101c161047b366004611d42565b61133b565b34801561048c57600080fd5b506101eb61049b366004611f60565b611345565b3480156104ac57600080fd5b5060025461029b906001600160a01b031681565b3480156104cc57600080fd5b5060035461029b906001600160a01b031681565b3480156104ec57600080fd5b506102f76104fb366004611d42565b611385565b600061050a611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b15801561055057600080fd5b505afa158015610564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105889190611eb8565b90508061012001511561059f5760019150506105a5565b60009150505b919050565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b1580156105ef57600080fd5b505afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190611f78565b5092915050565b600080610639611cb5565b60035460405163f36dccf960e01b81526001600160a01b0386811660048301529091169063f36dccf9906024016101406040518083038186803b15801561067f57600080fd5b505afa158015610693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b79190611eb8565b9050806101200151156106d857806020015181604001519250925050610780565b60035460405163a8b5b8ed60e01b81526001600160a01b0386811660048301529091169063a8b5b8ed906024016101406040518083038186803b15801561071e57600080fd5b505afa158015610732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107569190611eb8565b90508061012001511561077757806020015181604001519250925050610780565b60008092509250505b915091565b61078d611cb5565b610795611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b1580156107db57600080fd5b505afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611eb8565b9050806101200151156108275790506105a5565b60035460405163a8b5b8ed60e01b81526001600160a01b0385811660048301529091169063a8b5b8ed906024016101406040518083038186803b15801561086d57600080fd5b505afa158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611eb8565b9050806101200151156108b95790506105a5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b1580156108ff57600080fd5b505afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109379190611eb8565b9150506105a5565b60025460405163df73eb5160e01b8152600481018390526000916001600160a01b03169063df73eb519060240160206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc9190611e4e565b92915050565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b158015610a0757600080fd5b505afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190611f78565b509092915050565b610a4f6113fe565b610a596000611458565b565b6000610a65611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae39190611eb8565b905080610120015115610afa5760019150506105a5565b60035460405163a8b5b8ed60e01b81526001600160a01b0385811660048301529091169063a8b5b8ed906024016101406040518083038186803b158015610b4057600080fd5b505afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190611eb8565b905080610120015115610b8f5760019150506105a5565b60009150506105a5565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b158015610bde57600080fd5b505afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611f78565b9392505050565b610c256113fe565b6006805460ff19811660ff90911615179055565b610c416113fe565b60065460ff1615610c6d5760405162461bcd60e51b8152600401610c6490612038565b60405180910390fd5b6004546001600160a01b0382811691161415610cb95760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610c64565b6001600160a01b038116610d015760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964204164647265737360881b6044820152606401610c64565b600454604080516001600160a01b03808516825290921660208301527f8ae7f019483f02a20195ce98e9905c37b4d7c17b49f012ef4a7b7d3ca04809b8910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b610d726113fe565b60065460ff1615610d955760405162461bcd60e51b8152600401610c6490612038565b600a811115610dde5760405162461bcd60e51b815260206004820152601560248201527456616c75652061626f7665206d61782076616c756560581b6044820152606401610c64565b60055460408051918252602082018390527fed28c14db89870da08d76b69e3f96d95cbb779778f62a9ea4d4d41dc082d088a910160405180910390a1600555565b6002546040805162608fd560e41b815290516060926001600160a01b031691630608fd50916004808301926000929190829003018186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e9f9190810190611da7565b905090565b600254604051630aacb67760e11b8152600481018390526000916001600160a01b0316906315596cee9060240160206040518083038186803b158015610ee957600080fd5b505afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc9190611e68565b610f296113fe565b6001600160a01b03821615801590610f4957506001600160a01b03811615155b610f875760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606401610c64565b600280546001600160a01b038481166001600160a01b03199283168117909355600380549185169190921681179091556006805460ff191690556040805192835260208301919091527f6d4f7d24cbb5a3f5b17a418633e18381b6f929734a52815f8848f31323637382910160405180910390a15050565b60065460ff16156110225760405162461bcd60e51b8152600401610c6490612038565b61102b84610a5b565b6110675760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908105cdcd95d609a1b6044820152606401610c64565b60008060006110778787876114aa565b92509250925082801561108a5750600082115b6110ca5760405162461bcd60e51b8152602060048201526011602482015270496e737566696369656e742066756e647360781b6044820152606401610c64565b6110d482886116f3565b915060006110e188610500565b15611237576001600160a01b03881661118b576003546001600160a01b031663b5e8c01461110f8585612152565b898b878a6040518663ffffffff1660e01b815260040161113294939291906120fa565b6020604051808303818588803b15801561114b57600080fd5b505af115801561115f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111849190611e68565b9050611232565b6003546111a5906001600160a01b038a81169116856117ef565b600354604051632d7a300560e21b81526001600160a01b039091169063b5e8c0149084906111dd908b908d9089908c906004016120fa565b6020604051808303818588803b1580156111f657600080fd5b505af115801561120a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061122f9190611e68565b90505b6112de565b600354611251906001600160a01b038a81169116856117ef565b600354604051630bf7be2160e41b81526001600160a01b039091169063bf7be210908490611289908b908d9089908c906004016120fa565b6020604051808303818588803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112db9190611e68565b90505b604080518281526020810189905290810184905233906001600160a01b0387811691908b16907f32a8648ca22f84caa583d7622bbdd854b46f886f98651514e2d331e455e4f0659060600160405180910390a45050505050505050565b6000610afa611cb5565b600060055460001480611356575081155b15611363575060006105a5565b61271082600554611374919061218a565b61137e919061216a565b90506105a5565b61138d6113fe565b6001600160a01b0381166113f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c64565b6113fb81611458565b50565b6001546001600160a01b03163314610a595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c64565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806000806114b986610ea4565b90506001600160a01b038716611514576114d38186612152565b34101580156114e25750600034115b156115035760006114f382346121a9565b6001955093509091506116ea9050565b6000806000935093509350506116ea565b86856001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a39190611e68565b101580156115b15750813410155b156116df576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b1580156115f857600080fd5b505afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116309190611e68565b90506116476001600160a01b03831633308a61194b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561168957600080fd5b505afa15801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c19190611e68565b905060016116cf83836121a9565b85965096509650505050506116ea565b506000935083925090505b93509350939050565b600080600260009054906101000a90046001600160a01b03166001600160a01b0316638375bb396040518163ffffffff1660e01b815260040160206040518083038186803b15801561174457600080fd5b505afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190611e68565b9050600061271061178d838761218a565b611797919061216a565b9050600061271060055483886117ad91906121a9565b6117b7919061218a565b6117c1919061216a565b6004549091506117db906001600160a01b03168683611989565b6117e581876121a9565b9695505050505050565b8015806118785750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561183e57600080fd5b505afa158015611852573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118769190611e68565b155b6118e35760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610c64565b6040516001600160a01b03831660248201526044810182905261194690849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a32565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526119839085906323b872dd60e01b9060840161190f565b50505050565b6001600160a01b0383166119d35760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610c64565b6001600160a01b038216611a1d576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611a17573d6000803e3d6000fd5b50611946565b816119836001600160a01b0382168584611b04565b6000611a87826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b349092919063ffffffff16565b8051909150156119465780806020019051810190611aa59190611e4e565b6119465760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c64565b6040516001600160a01b03831660248201526044810182905261194690849063a9059cbb60e01b9060640161190f565b6060611b438484600085611b4b565b949350505050565b606082471015611bac5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c64565b6001600160a01b0385163b611c035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c64565b600080866001600160a01b03168587604051611c1f9190611fa5565b60006040518083038185875af1925050503d8060008114611c5c576040519150601f19603f3d011682016040523d82523d6000602084013e611c61565b606091505b5091509150611c71828286611c7c565b979650505050505050565b60608315611c8b575081610c16565b825115611c9b5782518084602001fd5b8160405162461bcd60e51b8152600401610c649190612005565b60405180610140016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000151581525090565b80516105a581612218565b805180151581146105a557600080fd5b600060208284031215611d53578081fd5b8135610c1681612218565b60008060008060808587031215611d73578283fd5b8435611d7e81612218565b935060208501359250604085013591506060850135611d9c81612218565b939692955090935050565b60006020808385031215611db9578182fd5b825167ffffffffffffffff80821115611dd0578384fd5b818501915085601f830112611de3578384fd5b815181811115611df557611df5612202565b8381029150611e05848301612121565b8181528481019084860184860187018a1015611e1f578788fd5b8795505b83861015611e41578051835260019590950194918601918601611e23565b5098975050505050505050565b600060208284031215611e5f578081fd5b610c1682611d32565b600060208284031215611e79578081fd5b5051919050565b60008060408385031215611e92578182fd5b8235611e9d81612218565b91506020830135611ead81612218565b809150509250929050565b6000610140808385031215611ecb578182fd5b611ed481612121565b9050611edf83611d27565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a0820152611f1f60c08401611d32565b60c0820152611f3060e08401611d27565b60e0820152610100611f43818501611d27565b90820152610120611f55848201611d32565b908201529392505050565b600060208284031215611f71578081fd5b5035919050565b600080600060608486031215611f8c578283fd5b8351925060208401519150604084015190509250925092565b60008251611fb78184602087016121c0565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015611ff957835183529284019291840191600101611fdd565b50909695505050505050565b60006020825282518060208401526120248160408501602087016121c0565b601f01601f19169190910160400192915050565b6020808252600d908201526c14dbd8dad95d081c185d5cd959609a1b604082015260600190565b81516001600160a01b0316815261014081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c08301516120b660c084018215159052565b5060e08301516120d160e08401826001600160a01b03169052565b50610100838101516001600160a01b031690830152610120928301511515929091019190915290565b9384526001600160a01b039283166020850152604084019190915216606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561214a5761214a612202565b604052919050565b60008219821115612165576121656121ec565b500190565b60008261218557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156121a4576121a46121ec565b500290565b6000828210156121bb576121bb6121ec565b500390565b60005b838110156121db5781810151838201526020016121c3565b838111156119835750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113fb57600080fdfea264697066735822122045e9b9398a3f44016e1daa19e36a5cf44221482630eeaf17fb2a68de137b158c64736f6c63430008020033"; -======= - "0x60806040523480156200001157600080fd5b506040516200243138038062002431833981016040819052620000349162000152565b6001600055620000443362000100565b6001600160a01b038116158015906200006557506001600160a01b03831615155b80156200007a57506001600160a01b03821615155b620000bd5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b604482015260640160405180910390fd5b600280546001600160a01b039485166001600160a01b031991821617909155600380549385169382169390931790925560048054919093169116179055620001be565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060006060848603121562000167578283fd5b83516200017481620001a5565b60208501519093506200018781620001a5565b60408501519092506200019a81620001a5565b809150509250925092565b6001600160a01b0381168114620001bb57600080fd5b50565b61226380620001ce6000396000f3fe60806040526004361061019c5760003560e01c80638da5cb5b116100ec578063cb4bf33b1161008a578063dfc7d48811610064578063dfc7d48814610480578063e06174e4146104a0578063e78cea92146104c0578063f2fde38b146104e05761019c565b8063cb4bf33b1461042d578063d351e66e1461044d578063dabc1cd6146104605761019c565b80639bff08d8116100c65780639bff08d8146103c0578063a001ecdd146103e2578063a6217e45146103f8578063bf654aac146104185761019c565b80638da5cb5b146103635780639012c4a814610381578063961a8d5e146103a15761019c565b80635c975abb11610159578063749a1e7311610133578063749a1e73146102f95780637a87b621146103195780637f9a79011461032e5780638bbd9d0e146103435761019c565b80635c975abb146102b357806369d52a61146102cd578063715018a6146102e25761019c565b806305e96863146101a15780631bdcd2b7146101d65780632014055d146101f957806330b8b2c61461022e5780635153d4671461025b57806357b720221461027b575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004611d42565b610500565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101eb6105aa565b6040519081526020016101cd565b34801561020557600080fd5b50610219610214366004611d42565b61062e565b604080519283526020830191909152016101cd565b34801561023a57600080fd5b5061024e610249366004611d42565b610785565b6040516101cd919061205f565b34801561026757600080fd5b506101c1610276366004611f60565b61093f565b34801561028757600080fd5b5060045461029b906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b3480156102bf57600080fd5b506006546101c19060ff1681565b3480156102d957600080fd5b506101eb6109c2565b3480156102ee57600080fd5b506102f7610a47565b005b34801561030557600080fd5b506101c1610314366004611d42565b610a5b565b34801561032557600080fd5b506101eb610b99565b34801561033a57600080fd5b506102f7610c1d565b34801561034f57600080fd5b506102f761035e366004611d42565b610c39565b34801561036f57600080fd5b506001546001600160a01b031661029b565b34801561038d57600080fd5b506102f761039c366004611f60565b610d6a565b3480156103ad57600080fd5b506006546101c190610100900460ff1681565b3480156103cc57600080fd5b506103d5610e1f565b6040516101cd9190611fc1565b3480156103ee57600080fd5b506101eb60055481565b34801561040457600080fd5b506101eb610413366004611f60565b610ea4565b34801561042457600080fd5b506101eb600a81565b34801561043957600080fd5b506102f7610448366004611e80565b610f21565b6102f761045b366004611d5e565b610fff565b34801561046c57600080fd5b506101c161047b366004611d42565b61133b565b34801561048c57600080fd5b506101eb61049b366004611f60565b611345565b3480156104ac57600080fd5b5060025461029b906001600160a01b031681565b3480156104cc57600080fd5b5060035461029b906001600160a01b031681565b3480156104ec57600080fd5b506102f76104fb366004611d42565b611385565b600061050a611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b15801561055057600080fd5b505afa158015610564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105889190611eb8565b90508061012001511561059f5760019150506105a5565b60009150505b919050565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b1580156105ef57600080fd5b505afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190611f78565b5092915050565b600080610639611cb5565b60035460405163f36dccf960e01b81526001600160a01b0386811660048301529091169063f36dccf9906024016101406040518083038186803b15801561067f57600080fd5b505afa158015610693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b79190611eb8565b9050806101200151156106d857806020015181604001519250925050610780565b60035460405163a8b5b8ed60e01b81526001600160a01b0386811660048301529091169063a8b5b8ed906024016101406040518083038186803b15801561071e57600080fd5b505afa158015610732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107569190611eb8565b90508061012001511561077757806020015181604001519250925050610780565b60008092509250505b915091565b61078d611cb5565b610795611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b1580156107db57600080fd5b505afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611eb8565b9050806101200151156108275790506105a5565b60035460405163a8b5b8ed60e01b81526001600160a01b0385811660048301529091169063a8b5b8ed906024016101406040518083038186803b15801561086d57600080fd5b505afa158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611eb8565b9050806101200151156108b95790506105a5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b1580156108ff57600080fd5b505afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109379190611eb8565b9150506105a5565b60025460405163df73eb5160e01b8152600481018390526000916001600160a01b03169063df73eb519060240160206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc9190611e4e565b92915050565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b158015610a0757600080fd5b505afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190611f78565b509092915050565b610a4f6113fe565b610a596000611458565b565b6000610a65611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae39190611eb8565b905080610120015115610afa5760019150506105a5565b60035460405163a8b5b8ed60e01b81526001600160a01b0385811660048301529091169063a8b5b8ed906024016101406040518083038186803b158015610b4057600080fd5b505afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190611eb8565b905080610120015115610b8f5760019150506105a5565b60009150506105a5565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b158015610bde57600080fd5b505afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611f78565b9392505050565b610c256113fe565b6006805460ff19811660ff90911615179055565b610c416113fe565b60065460ff1615610c6d5760405162461bcd60e51b8152600401610c6490612038565b60405180910390fd5b6004546001600160a01b0382811691161415610cb95760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610c64565b6001600160a01b038116610d015760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964204164647265737360881b6044820152606401610c64565b600454604080516001600160a01b03808516825290921660208301527f8ae7f019483f02a20195ce98e9905c37b4d7c17b49f012ef4a7b7d3ca04809b8910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b610d726113fe565b60065460ff1615610d955760405162461bcd60e51b8152600401610c6490612038565b600a811115610dde5760405162461bcd60e51b815260206004820152601560248201527456616c75652061626f7665206d61782076616c756560581b6044820152606401610c64565b60055460408051918252602082018390527fed28c14db89870da08d76b69e3f96d95cbb779778f62a9ea4d4d41dc082d088a910160405180910390a1600555565b6002546040805162608fd560e41b815290516060926001600160a01b031691630608fd50916004808301926000929190829003018186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e9f9190810190611da7565b905090565b600254604051630aacb67760e11b8152600481018390526000916001600160a01b0316906315596cee9060240160206040518083038186803b158015610ee957600080fd5b505afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc9190611e68565b610f296113fe565b6001600160a01b03821615801590610f4957506001600160a01b03811615155b610f875760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606401610c64565b600280546001600160a01b038481166001600160a01b03199283168117909355600380549185169190921681179091556006805460ff191690556040805192835260208301919091527f6d4f7d24cbb5a3f5b17a418633e18381b6f929734a52815f8848f31323637382910160405180910390a15050565b60065460ff16156110225760405162461bcd60e51b8152600401610c6490612038565b61102b84610a5b565b6110675760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908105cdcd95d609a1b6044820152606401610c64565b60008060006110778787876114aa565b92509250925082801561108a5750600082115b6110ca5760405162461bcd60e51b8152602060048201526011602482015270496e737566696369656e742066756e647360781b6044820152606401610c64565b6110d482886116f3565b915060006110e188610500565b15611237576001600160a01b03881661118b576003546001600160a01b031663b5e8c01461110f8585612152565b898b878a6040518663ffffffff1660e01b815260040161113294939291906120fa565b6020604051808303818588803b15801561114b57600080fd5b505af115801561115f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111849190611e68565b9050611232565b6003546111a5906001600160a01b038a81169116856117ef565b600354604051632d7a300560e21b81526001600160a01b039091169063b5e8c0149084906111dd908b908d9089908c906004016120fa565b6020604051808303818588803b1580156111f657600080fd5b505af115801561120a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061122f9190611e68565b90505b6112de565b600354611251906001600160a01b038a81169116856117ef565b600354604051630bf7be2160e41b81526001600160a01b039091169063bf7be210908490611289908b908d9089908c906004016120fa565b6020604051808303818588803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112db9190611e68565b90505b604080518281526020810189905290810184905233906001600160a01b0387811691908b16907f32a8648ca22f84caa583d7622bbdd854b46f886f98651514e2d331e455e4f0659060600160405180910390a45050505050505050565b6000610afa611cb5565b600060055460001480611356575081155b15611363575060006105a5565b61271082600554611374919061218a565b61137e919061216a565b90506105a5565b61138d6113fe565b6001600160a01b0381166113f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c64565b6113fb81611458565b50565b6001546001600160a01b03163314610a595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c64565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806000806114b986610ea4565b90506001600160a01b038716611514576114d38186612152565b34101580156114e25750600034115b156115035760006114f382346121a9565b6001955093509091506116ea9050565b6000806000935093509350506116ea565b86856001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a39190611e68565b101580156115b15750813410155b156116df576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b1580156115f857600080fd5b505afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116309190611e68565b90506116476001600160a01b03831633308a61194b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561168957600080fd5b505afa15801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c19190611e68565b905060016116cf83836121a9565b85965096509650505050506116ea565b506000935083925090505b93509350939050565b600080600260009054906101000a90046001600160a01b03166001600160a01b0316638375bb396040518163ffffffff1660e01b815260040160206040518083038186803b15801561174457600080fd5b505afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190611e68565b9050600061271061178d838761218a565b611797919061216a565b9050600061271060055483886117ad91906121a9565b6117b7919061218a565b6117c1919061216a565b6004549091506117db906001600160a01b03168683611989565b6117e581876121a9565b9695505050505050565b8015806118785750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561183e57600080fd5b505afa158015611852573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118769190611e68565b155b6118e35760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610c64565b6040516001600160a01b03831660248201526044810182905261194690849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a32565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526119839085906323b872dd60e01b9060840161190f565b50505050565b6001600160a01b0383166119d35760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610c64565b6001600160a01b038216611a1d576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611a17573d6000803e3d6000fd5b50611946565b816119836001600160a01b0382168584611b04565b6000611a87826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b349092919063ffffffff16565b8051909150156119465780806020019051810190611aa59190611e4e565b6119465760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c64565b6040516001600160a01b03831660248201526044810182905261194690849063a9059cbb60e01b9060640161190f565b6060611b438484600085611b4b565b949350505050565b606082471015611bac5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c64565b6001600160a01b0385163b611c035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c64565b600080866001600160a01b03168587604051611c1f9190611fa5565b60006040518083038185875af1925050503d8060008114611c5c576040519150601f19603f3d011682016040523d82523d6000602084013e611c61565b606091505b5091509150611c71828286611c7c565b979650505050505050565b60608315611c8b575081610c16565b825115611c9b5782518084602001fd5b8160405162461bcd60e51b8152600401610c649190612005565b60405180610140016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000151581525090565b80516105a581612218565b805180151581146105a557600080fd5b600060208284031215611d53578081fd5b8135610c1681612218565b60008060008060808587031215611d73578283fd5b8435611d7e81612218565b935060208501359250604085013591506060850135611d9c81612218565b939692955090935050565b60006020808385031215611db9578182fd5b825167ffffffffffffffff80821115611dd0578384fd5b818501915085601f830112611de3578384fd5b815181811115611df557611df5612202565b8381029150611e05848301612121565b8181528481019084860184860187018a1015611e1f578788fd5b8795505b83861015611e41578051835260019590950194918601918601611e23565b5098975050505050505050565b600060208284031215611e5f578081fd5b610c1682611d32565b600060208284031215611e79578081fd5b5051919050565b60008060408385031215611e92578182fd5b8235611e9d81612218565b91506020830135611ead81612218565b809150509250929050565b6000610140808385031215611ecb578182fd5b611ed481612121565b9050611edf83611d27565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a0820152611f1f60c08401611d32565b60c0820152611f3060e08401611d27565b60e0820152610100611f43818501611d27565b90820152610120611f55848201611d32565b908201529392505050565b600060208284031215611f71578081fd5b5035919050565b600080600060608486031215611f8c578283fd5b8351925060208401519150604084015190509250925092565b60008251611fb78184602087016121c0565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015611ff957835183529284019291840191600101611fdd565b50909695505050505050565b60006020825282518060208401526120248160408501602087016121c0565b601f01601f19169190910160400192915050565b6020808252600d908201526c14dbd8dad95d081c185d5cd959609a1b604082015260600190565b81516001600160a01b0316815261014081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c08301516120b660c084018215159052565b5060e08301516120d160e08401826001600160a01b03169052565b50610100838101516001600160a01b031690830152610120928301511515929091019190915290565b9384526001600160a01b039283166020850152604084019190915216606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561214a5761214a612202565b604052919050565b60008219821115612165576121656121ec565b500190565b60008261218557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156121a4576121a46121ec565b500290565b6000828210156121bb576121bb6121ec565b500390565b60005b838110156121db5781810151838201526020016121c3565b838111156119835750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113fb57600080fdfea2646970667358221220969691fdbc9115e091bc61eda8658be3b7471baa627d33f86fc1d07bb1f82bc564736f6c63430008020033"; ->>>>>>> 6bc7fc991f262d3896e10700cf04ee01a2d79f23 + "0x60806040523480156200001157600080fd5b506040516200243138038062002431833981016040819052620000349162000152565b6001600055620000443362000100565b6001600160a01b038116158015906200006557506001600160a01b03831615155b80156200007a57506001600160a01b03821615155b620000bd5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b604482015260640160405180910390fd5b600280546001600160a01b039485166001600160a01b031991821617909155600380549385169382169390931790925560048054919093169116179055620001be565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060006060848603121562000167578283fd5b83516200017481620001a5565b60208501519093506200018781620001a5565b60408501519092506200019a81620001a5565b809150509250925092565b6001600160a01b0381168114620001bb57600080fd5b50565b61226380620001ce6000396000f3fe60806040526004361061019c5760003560e01c80638da5cb5b116100ec578063cb4bf33b1161008a578063dfc7d48811610064578063dfc7d48814610480578063e06174e4146104a0578063e78cea92146104c0578063f2fde38b146104e05761019c565b8063cb4bf33b1461042d578063d351e66e1461044d578063dabc1cd6146104605761019c565b80639bff08d8116100c65780639bff08d8146103c0578063a001ecdd146103e2578063a6217e45146103f8578063bf654aac146104185761019c565b80638da5cb5b146103635780639012c4a814610381578063961a8d5e146103a15761019c565b80635c975abb11610159578063749a1e7311610133578063749a1e73146102f95780637a87b621146103195780637f9a79011461032e5780638bbd9d0e146103435761019c565b80635c975abb146102b357806369d52a61146102cd578063715018a6146102e25761019c565b806305e96863146101a15780631bdcd2b7146101d65780632014055d146101f957806330b8b2c61461022e5780635153d4671461025b57806357b720221461027b575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004611d42565b610500565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101eb6105aa565b6040519081526020016101cd565b34801561020557600080fd5b50610219610214366004611d42565b61062e565b604080519283526020830191909152016101cd565b34801561023a57600080fd5b5061024e610249366004611d42565b610785565b6040516101cd919061205f565b34801561026757600080fd5b506101c1610276366004611f60565b61093f565b34801561028757600080fd5b5060045461029b906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b3480156102bf57600080fd5b506006546101c19060ff1681565b3480156102d957600080fd5b506101eb6109c2565b3480156102ee57600080fd5b506102f7610a47565b005b34801561030557600080fd5b506101c1610314366004611d42565b610a5b565b34801561032557600080fd5b506101eb610b99565b34801561033a57600080fd5b506102f7610c1d565b34801561034f57600080fd5b506102f761035e366004611d42565b610c39565b34801561036f57600080fd5b506001546001600160a01b031661029b565b34801561038d57600080fd5b506102f761039c366004611f60565b610d6a565b3480156103ad57600080fd5b506006546101c190610100900460ff1681565b3480156103cc57600080fd5b506103d5610e1f565b6040516101cd9190611fc1565b3480156103ee57600080fd5b506101eb60055481565b34801561040457600080fd5b506101eb610413366004611f60565b610ea4565b34801561042457600080fd5b506101eb600a81565b34801561043957600080fd5b506102f7610448366004611e80565b610f21565b6102f761045b366004611d5e565b610fff565b34801561046c57600080fd5b506101c161047b366004611d42565b61133b565b34801561048c57600080fd5b506101eb61049b366004611f60565b611345565b3480156104ac57600080fd5b5060025461029b906001600160a01b031681565b3480156104cc57600080fd5b5060035461029b906001600160a01b031681565b3480156104ec57600080fd5b506102f76104fb366004611d42565b611385565b600061050a611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b15801561055057600080fd5b505afa158015610564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105889190611eb8565b90508061012001511561059f5760019150506105a5565b60009150505b919050565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b1580156105ef57600080fd5b505afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190611f78565b5092915050565b600080610639611cb5565b60035460405163f36dccf960e01b81526001600160a01b0386811660048301529091169063f36dccf9906024016101406040518083038186803b15801561067f57600080fd5b505afa158015610693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b79190611eb8565b9050806101200151156106d857806020015181604001519250925050610780565b60035460405163a8b5b8ed60e01b81526001600160a01b0386811660048301529091169063a8b5b8ed906024016101406040518083038186803b15801561071e57600080fd5b505afa158015610732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107569190611eb8565b90508061012001511561077757806020015181604001519250925050610780565b60008092509250505b915091565b61078d611cb5565b610795611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b1580156107db57600080fd5b505afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611eb8565b9050806101200151156108275790506105a5565b60035460405163a8b5b8ed60e01b81526001600160a01b0385811660048301529091169063a8b5b8ed906024016101406040518083038186803b15801561086d57600080fd5b505afa158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611eb8565b9050806101200151156108b95790506105a5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b1580156108ff57600080fd5b505afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109379190611eb8565b9150506105a5565b60025460405163df73eb5160e01b8152600481018390526000916001600160a01b03169063df73eb519060240160206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc9190611e4e565b92915050565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b158015610a0757600080fd5b505afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190611f78565b509092915050565b610a4f6113fe565b610a596000611458565b565b6000610a65611cb5565b60035460405163f36dccf960e01b81526001600160a01b0385811660048301529091169063f36dccf9906024016101406040518083038186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae39190611eb8565b905080610120015115610afa5760019150506105a5565b60035460405163a8b5b8ed60e01b81526001600160a01b0385811660048301529091169063a8b5b8ed906024016101406040518083038186803b158015610b4057600080fd5b505afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190611eb8565b905080610120015115610b8f5760019150506105a5565b60009150506105a5565b6003546040805163a0aead4d60e01b815290516000926001600160a01b03169163a0aead4d916004808301926060929190829003018186803b158015610bde57600080fd5b505afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611f78565b9392505050565b610c256113fe565b6006805460ff19811660ff90911615179055565b610c416113fe565b60065460ff1615610c6d5760405162461bcd60e51b8152600401610c6490612038565b60405180910390fd5b6004546001600160a01b0382811691161415610cb95760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610c64565b6001600160a01b038116610d015760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964204164647265737360881b6044820152606401610c64565b600454604080516001600160a01b03808516825290921660208301527f8ae7f019483f02a20195ce98e9905c37b4d7c17b49f012ef4a7b7d3ca04809b8910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b610d726113fe565b60065460ff1615610d955760405162461bcd60e51b8152600401610c6490612038565b600a811115610dde5760405162461bcd60e51b815260206004820152601560248201527456616c75652061626f7665206d61782076616c756560581b6044820152606401610c64565b60055460408051918252602082018390527fed28c14db89870da08d76b69e3f96d95cbb779778f62a9ea4d4d41dc082d088a910160405180910390a1600555565b6002546040805162608fd560e41b815290516060926001600160a01b031691630608fd50916004808301926000929190829003018186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e9f9190810190611da7565b905090565b600254604051630aacb67760e11b8152600481018390526000916001600160a01b0316906315596cee9060240160206040518083038186803b158015610ee957600080fd5b505afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc9190611e68565b610f296113fe565b6001600160a01b03821615801590610f4957506001600160a01b03811615155b610f875760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606401610c64565b600280546001600160a01b038481166001600160a01b03199283168117909355600380549185169190921681179091556006805460ff191690556040805192835260208301919091527f6d4f7d24cbb5a3f5b17a418633e18381b6f929734a52815f8848f31323637382910160405180910390a15050565b60065460ff16156110225760405162461bcd60e51b8152600401610c6490612038565b61102b84610a5b565b6110675760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908105cdcd95d609a1b6044820152606401610c64565b60008060006110778787876114aa565b92509250925082801561108a5750600082115b6110ca5760405162461bcd60e51b8152602060048201526011602482015270496e737566696369656e742066756e647360781b6044820152606401610c64565b6110d482886116f3565b915060006110e188610500565b15611237576001600160a01b03881661118b576003546001600160a01b031663b5e8c01461110f8585612152565b898b878a6040518663ffffffff1660e01b815260040161113294939291906120fa565b6020604051808303818588803b15801561114b57600080fd5b505af115801561115f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111849190611e68565b9050611232565b6003546111a5906001600160a01b038a81169116856117ef565b600354604051632d7a300560e21b81526001600160a01b039091169063b5e8c0149084906111dd908b908d9089908c906004016120fa565b6020604051808303818588803b1580156111f657600080fd5b505af115801561120a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061122f9190611e68565b90505b6112de565b600354611251906001600160a01b038a81169116856117ef565b600354604051630bf7be2160e41b81526001600160a01b039091169063bf7be210908490611289908b908d9089908c906004016120fa565b6020604051808303818588803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112db9190611e68565b90505b604080518281526020810189905290810184905233906001600160a01b0387811691908b16907f32a8648ca22f84caa583d7622bbdd854b46f886f98651514e2d331e455e4f0659060600160405180910390a45050505050505050565b6000610afa611cb5565b600060055460001480611356575081155b15611363575060006105a5565b61271082600554611374919061218a565b61137e919061216a565b90506105a5565b61138d6113fe565b6001600160a01b0381166113f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c64565b6113fb81611458565b50565b6001546001600160a01b03163314610a595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c64565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806000806114b986610ea4565b90506001600160a01b038716611514576114d38186612152565b34101580156114e25750600034115b156115035760006114f382346121a9565b6001955093509091506116ea9050565b6000806000935093509350506116ea565b86856001600160a01b03821663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a39190611e68565b101580156115b15750813410155b156116df576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b1580156115f857600080fd5b505afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116309190611e68565b90506116476001600160a01b03831633308a61194b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561168957600080fd5b505afa15801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c19190611e68565b905060016116cf83836121a9565b85965096509650505050506116ea565b506000935083925090505b93509350939050565b600080600260009054906101000a90046001600160a01b03166001600160a01b0316638375bb396040518163ffffffff1660e01b815260040160206040518083038186803b15801561174457600080fd5b505afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190611e68565b9050600061271061178d838761218a565b611797919061216a565b9050600061271060055483886117ad91906121a9565b6117b7919061218a565b6117c1919061216a565b6004549091506117db906001600160a01b03168683611989565b6117e581876121a9565b9695505050505050565b8015806118785750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561183e57600080fd5b505afa158015611852573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118769190611e68565b155b6118e35760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610c64565b6040516001600160a01b03831660248201526044810182905261194690849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a32565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526119839085906323b872dd60e01b9060840161190f565b50505050565b6001600160a01b0383166119d35760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610c64565b6001600160a01b038216611a1d576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611a17573d6000803e3d6000fd5b50611946565b816119836001600160a01b0382168584611b04565b6000611a87826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b349092919063ffffffff16565b8051909150156119465780806020019051810190611aa59190611e4e565b6119465760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c64565b6040516001600160a01b03831660248201526044810182905261194690849063a9059cbb60e01b9060640161190f565b6060611b438484600085611b4b565b949350505050565b606082471015611bac5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c64565b6001600160a01b0385163b611c035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c64565b600080866001600160a01b03168587604051611c1f9190611fa5565b60006040518083038185875af1925050503d8060008114611c5c576040519150601f19603f3d011682016040523d82523d6000602084013e611c61565b606091505b5091509150611c71828286611c7c565b979650505050505050565b60608315611c8b575081610c16565b825115611c9b5782518084602001fd5b8160405162461bcd60e51b8152600401610c649190612005565b60405180610140016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000151581525090565b80516105a581612218565b805180151581146105a557600080fd5b600060208284031215611d53578081fd5b8135610c1681612218565b60008060008060808587031215611d73578283fd5b8435611d7e81612218565b935060208501359250604085013591506060850135611d9c81612218565b939692955090935050565b60006020808385031215611db9578182fd5b825167ffffffffffffffff80821115611dd0578384fd5b818501915085601f830112611de3578384fd5b815181811115611df557611df5612202565b8381029150611e05848301612121565b8181528481019084860184860187018a1015611e1f578788fd5b8795505b83861015611e41578051835260019590950194918601918601611e23565b5098975050505050505050565b600060208284031215611e5f578081fd5b610c1682611d32565b600060208284031215611e79578081fd5b5051919050565b60008060408385031215611e92578182fd5b8235611e9d81612218565b91506020830135611ead81612218565b809150509250929050565b6000610140808385031215611ecb578182fd5b611ed481612121565b9050611edf83611d27565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a0820152611f1f60c08401611d32565b60c0820152611f3060e08401611d27565b60e0820152610100611f43818501611d27565b90820152610120611f55848201611d32565b908201529392505050565b600060208284031215611f71578081fd5b5035919050565b600080600060608486031215611f8c578283fd5b8351925060208401519150604084015190509250925092565b60008251611fb78184602087016121c0565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015611ff957835183529284019291840191600101611fdd565b50909695505050505050565b60006020825282518060208401526120248160408501602087016121c0565b601f01601f19169190910160400192915050565b6020808252600d908201526c14dbd8dad95d081c185d5cd959609a1b604082015260600190565b81516001600160a01b0316815261014081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c08301516120b660c084018215159052565b5060e08301516120d160e08401826001600160a01b03169052565b50610100838101516001600160a01b031690830152610120928301511515929091019190915290565b9384526001600160a01b039283166020850152604084019190915216606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561214a5761214a612202565b604052919050565b60008219821115612165576121656121ec565b500190565b60008261218557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156121a4576121a46121ec565b500290565b6000828210156121bb576121bb6121ec565b500390565b60005b838110156121db5781810151838201526020016121c3565b838111156119835750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113fb57600080fdfea26469706673582212204f75288ce302e526fa85284d4eb826c6d33f0fdcec268bc4e6ff5d2e2f94744864736f6c63430008020033"; type BridgeSocketConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/index.ts b/typechain-types/factories/contracts/index.ts index 5746156..5b6497f 100644 --- a/typechain-types/factories/contracts/index.ts +++ b/typechain-types/factories/contracts/index.ts @@ -1,7 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as registrypendingSol from "./Registrypending.sol"; export * as bridgeSocketSol from "./bridgeSocket.sol"; export * as interface from "./interface"; export * as testTokenSol from "./testToken.sol"; diff --git a/typechain-types/hardhat.d.ts b/typechain-types/hardhat.d.ts index 19d061f..99c6b24 100644 --- a/typechain-types/hardhat.d.ts +++ b/typechain-types/hardhat.d.ts @@ -140,10 +140,6 @@ declare module "hardhat/types/runtime" { name: "Registry", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; - getContractFactory( - name: "Registry", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; getContractFactory( name: "Settings", signerOrOptions?: ethers.Signer | FactoryOptions @@ -369,11 +365,6 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; - getContractAt( - name: "Registry", - address: string, - signer?: ethers.Signer - ): Promise; getContractAt( name: "Settings", address: string,