diff --git a/packages/hardhat/contracts/Quest.sol b/packages/hardhat/contracts/Quest.sol index b2a7cfba..0c970c5d 100644 --- a/packages/hardhat/contracts/Quest.sol +++ b/packages/hardhat/contracts/Quest.sol @@ -7,6 +7,7 @@ import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "./libraries/Deposit.sol"; import "./libraries/Models.sol"; import "./libraries/IExecutable.sol"; +import "hardhat/console.sol"; contract Quest is IExecutable { using SafeMath for uint256; @@ -22,7 +23,7 @@ contract Quest is IExecutable { address public aragonGovernAddress; address payable public fundsRecoveryAddress; uint32 public maxPlayers; // 0 for unlimited players - + bool public isWhiteList; Models.Claim[] public claims; Models.Deposit public createDeposit; Models.Deposit public playDeposit; @@ -33,6 +34,14 @@ contract Quest is IExecutable { event QuestClaimed(bytes evidence, address player, uint256 amount); event QuestPlayed(address player, uint256 timestamp); event QuestUnplayed(address player, uint256 timestamp); + event WhiteListChanged(address[] whiteListPlayers, uint256 timestamp); + modifier OnlyCreator() { + require( + msg.sender == questCreator, + "Only creator can call this function" + ); + _; + } constructor( string memory _questTitle, @@ -44,8 +53,18 @@ contract Quest is IExecutable { Models.Deposit memory _createDeposit, Models.Deposit memory _playDeposit, address _questCreator, - uint32 _maxPlayers + uint32 _maxPlayers, + bool _isWhiteList ) { + // uint32 check = _isWhiteList ? 1 : 0; + // console.log("check:", check); + // console.log("Max players:", maxPlayers); + // console.log("Maxplayers * check = ", maxPlayers * check); + require( + !(_maxPlayers > 0 && _isWhiteList), + // _maxPlayers * check == 0, + "ERROR: Can't create a whiteListed quest with max players greater than 0 (infinity)" + ); questTitle = _questTitle; questDetailsRef = _questDetailsRef; rewardToken = _rewardToken; @@ -58,6 +77,7 @@ contract Quest is IExecutable { isCreateDepositReleased = false; maxPlayers = _maxPlayers; + isWhiteList = _isWhiteList; } /* @@ -169,6 +189,10 @@ contract Quest is IExecutable { * emit QuestPlayed with player and timestamp */ function play(address _player) external { + require( + isWhiteList == false, + "ERROR: Can't self register and play a whitelisted Quest" + ); require( msg.sender == _player || msg.sender == questCreator, "ERROR: Sender not player nor creator" @@ -187,6 +211,15 @@ contract Quest is IExecutable { emit QuestPlayed(_player, block.timestamp); } + function setWhiteList(address[] memory _players) external OnlyCreator { + require( + isWhiteList == true, + "ERROR: Can't set the white list to a non-whitelisted contract" + ); + playerList = _players; + emit WhiteListChanged(_players, block.timestamp); + } + /** * Unregister a player from the quest. (sender could be the player or quest creator) * @param _player Player address. @@ -197,6 +230,10 @@ contract Quest is IExecutable { * emit QuestUnplayed with player and timestamp */ function unplay(address _player) external { + require( + isWhiteList == false, + "ERROR: can't unplay a whitelisted quest" + ); require( msg.sender == _player || msg.sender == questCreator, "ERROR: Sender not player nor creator" diff --git a/packages/hardhat/contracts/QuestFactory.sol b/packages/hardhat/contracts/QuestFactory.sol index 8ff88372..b457ae65 100644 --- a/packages/hardhat/contracts/QuestFactory.sol +++ b/packages/hardhat/contracts/QuestFactory.sol @@ -27,7 +27,8 @@ contract QuestFactory is Ownable { address playDepositToken, uint256 playDepositAmount, address creator, - uint32 maxPlayers + uint32 maxPlayers, + bool isWhiteList ); event CreateDepositChanged( @@ -94,7 +95,8 @@ contract QuestFactory is Ownable { IERC20 _rewardToken, uint256 _expireTime, address payable _fundsRecoveryAddress, - uint32 _maxPlayers + uint32 _maxPlayers, + bool _isWhiteList ) external returns (address) { Quest quest = new Quest( _questTitle, @@ -106,7 +108,8 @@ contract QuestFactory is Ownable { Models.Deposit(createDeposit.token, createDeposit.amount), Models.Deposit(playDeposit.token, playDeposit.amount), msg.sender, - _maxPlayers + _maxPlayers, + _isWhiteList ); // Collect deposit from quest creator and send it to quest @@ -124,7 +127,8 @@ contract QuestFactory is Ownable { address(playDeposit.token), playDeposit.amount, msg.sender, - _maxPlayers + _maxPlayers, + _isWhiteList ); return address(quest); diff --git a/packages/hardhat/test/Quest.test.ts b/packages/hardhat/test/Quest.test.ts index fa1ff278..1f836fa7 100644 --- a/packages/hardhat/test/Quest.test.ts +++ b/packages/hardhat/test/Quest.test.ts @@ -734,6 +734,39 @@ describe("[Contract] Quest", function () { // Assert await expect(act()).to.be.revertedWith("ERROR: Player already exists"); }); + it("SHOULD revert if it's a whitelisted quest", async () => { + // Arrange + const quest = await deployQuest( + "fakeTitle", + "0x", + rewardToken, + epochNow + 3600, // in 1 hour + govern.address, + creator.address, + fromNumber(0), + createDepositToken, + depositAmount, + playDepositToken, + depositAmount, + creator, + 0, + true + ); + const playerInitialBalance = fromNumber(1000); + await playDepositToken + .connect(player) + .mint(player.address, playerInitialBalance); + await playDepositToken + .connect(player) + .approve(quest.address, depositAmount); + // Act + const act = () => quest.connect(player).play(player.address); + + // Assert + await expect(act()).to.be.revertedWith( + "ERROR: Can't self register and play a whitelisted Quest" + ); + }); }); describe("unplay()", () => { @@ -869,6 +902,128 @@ describe("[Contract] Quest", function () { // Assert await expect(act()).to.be.revertedWith("ERROR: player not in list"); }); + it("SHOULD revert WHEN quest is whitelisted", async () => { + // Arrange + const quest = await deployQuest( + "fakeTitle", + "0x", + rewardToken, + epochNow + 3600, // in 1 hour + govern.address, + creator.address, + fromNumber(0), + createDepositToken, + depositAmount, + playDepositToken, + depositAmount, + creator, + 0, + true + ); + const playerInitialBalance = fromNumber(1000); + await playDepositToken + .connect(player) + .mint(player.address, playerInitialBalance); + await playDepositToken + .connect(player) + .approve(quest.address, depositAmount); + + // Act + const act = () => quest.connect(player).unplay(player.address); + + // Assert + await expect(act()).to.be.revertedWith( + "ERROR: can't unplay a whitelisted quest" + ); + }); + }); + describe.only("constructor()", () => { + it("SHOULD revert if max players greater than 0 and isWhiteList", async () => { + //Arrange + const maxPlayers = 3; + + //Act + const act = () => + deployQuest( + "fakeTitle", + "0x", + rewardToken, + epochNow + 3600, // in 1 hour + govern.address, + creator.address, + fromNumber(0), + createDepositToken, + depositAmount, + playDepositToken, + depositAmount, + creator, + maxPlayers, + true + ); + //Assert + await expect(act()).to.be.revertedWith( + "ERROR: Can't create a whiteListed quest with max players greater than 0 (infinity)" + ); + }); + }); + describe("setWhiteList()", () => { + it("SHOULD set the player list to the one in the parameters", async () => { + const quest = await deployQuest( + "fakeTitle", + "0x", + rewardToken, + epochNow + 3600, // in 1 hour + govern.address, + creator.address, + fromNumber(0), + createDepositToken, + depositAmount, + playDepositToken, + depositAmount, + creator, + 0, + true + ); + const act = () => + quest.connect(creator).setWhiteList([player.address, other.address]); + await expect(act()).to.emit(quest, "WhiteListChanged"); + expect(await quest.getPlayers()).to.deep.eq([ + player.address, + other.address, + ]); + expect(await quest.canExecute(player.address)).to.eq(true); + expect(await quest.canExecute(other.address)).to.eq(true); + }); + it("SHOULD revert if it's not a whitelisted quest", async () => { + const quest = await deployQuest( + "fakeTitle", + "0x", + rewardToken, + epochNow + 3600, // in 1 hour + govern.address, + creator.address, + fromNumber(0), + createDepositToken, + depositAmount, + playDepositToken, + depositAmount, + creator, + 0, + false + ); + // const act = () => + // quest + // .connect(govern) + // .claim(evidence, player.address, claimAmount, false); + + // // Assert + // await expect(act()).to.be.revertedWith("ERROR: No evidence"); + const act = () => + quest.connect(creator).setWhiteList([player.address, other.address]); + await expect(act()).to.be.revertedWith( + "ERROR: Can't set the white list to a non-whitelisted contract" + ); + }); }); describe("getPlayers()", () => { diff --git a/packages/hardhat/test/QuestFactory.test.ts b/packages/hardhat/test/QuestFactory.test.ts index b14a815d..06c93f99 100644 --- a/packages/hardhat/test/QuestFactory.test.ts +++ b/packages/hardhat/test/QuestFactory.test.ts @@ -78,6 +78,7 @@ describe("[Contract] QuestFactory", function () { const detailIPFS = "0x"; const expireTime = 0; // Unix Epoch 0 const maxPlayers = 1; + const isWhiteList = false; await createDepositToken .connect(owner) .approve(questFactoryContract.address, depositAmount); @@ -91,7 +92,8 @@ describe("[Contract] QuestFactory", function () { rewardToken.address, expireTime, owner.address, - maxPlayers + maxPlayers, + isWhiteList ) ).to.emit(questFactoryContract, "QuestCreated"); }); @@ -102,6 +104,7 @@ describe("[Contract] QuestFactory", function () { const detailIPFS = "0x"; const expireTime = 0; // Unix Epoch 0 const maxPlayers = 1; + const isWhiteList = false; await createDepositToken .connect(owner) @@ -115,7 +118,8 @@ describe("[Contract] QuestFactory", function () { rewardToken.address, expireTime, owner.address, - maxPlayers + maxPlayers, + isWhiteList ) ); @@ -131,6 +135,7 @@ describe("[Contract] QuestFactory", function () { const detailIPFS = "0x"; const expireTime = 0; // Unix Epoch 0 const maxPlayers = 1; + const isWhiteList = false; await createDepositToken .connect(owner) @@ -143,7 +148,8 @@ describe("[Contract] QuestFactory", function () { rewardToken.address, expireTime, owner.address, - maxPlayers + maxPlayers, + isWhiteList ); // Assert @@ -183,6 +189,7 @@ describe("[Contract] QuestFactory", function () { it("already created quests SHOULD keep old deposit WHEN change deposit", async () => { // Arrange const maxPlayers = 1; + const isWhiteList = false; await createDepositToken .connect(owner) .approve(questFactoryContract.address, depositAmount); @@ -195,7 +202,8 @@ describe("[Contract] QuestFactory", function () { rewardToken.address, 0, owner.address, - maxPlayers + maxPlayers, + isWhiteList ) ); const quest = new Quest__factory(owner).attach(questAddress); @@ -243,6 +251,7 @@ describe("[Contract] QuestFactory", function () { it("already created quests SHOULD keep old deposit WHEN change deposit", async () => { // Arrange const maxPlayers = 1; + const isWhiteList = false; await createDepositToken .connect(owner) .approve(questFactoryContract.address, depositAmount); @@ -255,7 +264,8 @@ describe("[Contract] QuestFactory", function () { rewardToken.address, 0, owner.address, - maxPlayers + maxPlayers, + isWhiteList ) ); const quest = new Quest__factory(owner).attach(questAddress); diff --git a/packages/hardhat/test/test-helper.ts b/packages/hardhat/test/test-helper.ts index c26b5b6a..85ddb44f 100644 --- a/packages/hardhat/test/test-helper.ts +++ b/packages/hardhat/test/test-helper.ts @@ -21,7 +21,8 @@ export const deployQuest = async ( playDepositToken: TokenMock, playDepositAmount: BigNumber, creator: SignerWithAddress, - maxPlayers: number = 0 + maxPlayers: number = 0, + isWhiteList: boolean = false ) => { const quest = await new Quest__factory(creator).deploy( title, @@ -33,7 +34,8 @@ export const deployQuest = async ( { token: createDepositToken.address, amount: createDepositAmount }, { token: playDepositToken.address, amount: playDepositAmount }, creator.address, - maxPlayers + maxPlayers, + isWhiteList ); await quest.deployed(); await rewardToken.connect(quest.signer).mint(quest.address, initialBalance); diff --git a/packages/hardhat/typechain/Quest.d.ts b/packages/hardhat/typechain/Quest.d.ts index df774282..4ce1d4a3 100644 --- a/packages/hardhat/typechain/Quest.d.ts +++ b/packages/hardhat/typechain/Quest.d.ts @@ -31,6 +31,7 @@ interface QuestInterface extends ethers.utils.Interface { "fundsRecoveryAddress()": FunctionFragment; "getPlayers()": FunctionFragment; "isCreateDepositReleased()": FunctionFragment; + "isWhiteList()": FunctionFragment; "maxPlayers()": FunctionFragment; "play(address)": FunctionFragment; "playDeposit()": FunctionFragment; @@ -39,6 +40,7 @@ interface QuestInterface extends ethers.utils.Interface { "questTitle()": FunctionFragment; "recoverFundsAndDeposit()": FunctionFragment; "rewardToken()": FunctionFragment; + "setWhiteList(address[])": FunctionFragment; "unplay(address)": FunctionFragment; }; @@ -75,6 +77,10 @@ interface QuestInterface extends ethers.utils.Interface { functionFragment: "isCreateDepositReleased", values?: undefined ): string; + encodeFunctionData( + functionFragment: "isWhiteList", + values?: undefined + ): string; encodeFunctionData( functionFragment: "maxPlayers", values?: undefined @@ -104,6 +110,10 @@ interface QuestInterface extends ethers.utils.Interface { functionFragment: "rewardToken", values?: undefined ): string; + encodeFunctionData( + functionFragment: "setWhiteList", + values: [string[]] + ): string; encodeFunctionData(functionFragment: "unplay", values: [string]): string; decodeFunctionResult( @@ -127,6 +137,10 @@ interface QuestInterface extends ethers.utils.Interface { functionFragment: "isCreateDepositReleased", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "isWhiteList", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "maxPlayers", data: BytesLike): Result; decodeFunctionResult(functionFragment: "play", data: BytesLike): Result; decodeFunctionResult( @@ -150,17 +164,23 @@ interface QuestInterface extends ethers.utils.Interface { functionFragment: "rewardToken", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "setWhiteList", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "unplay", data: BytesLike): Result; events: { "QuestClaimed(bytes,address,uint256)": EventFragment; "QuestPlayed(address,uint256)": EventFragment; "QuestUnplayed(address,uint256)": EventFragment; + "WhiteListChanged(address[],uint256)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "QuestClaimed"): EventFragment; getEvent(nameOrSignatureOrTopic: "QuestPlayed"): EventFragment; getEvent(nameOrSignatureOrTopic: "QuestUnplayed"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WhiteListChanged"): EventFragment; } export class Quest extends Contract { @@ -250,6 +270,10 @@ export class Quest extends Contract { "isCreateDepositReleased()"(overrides?: CallOverrides): Promise<[boolean]>; + isWhiteList(overrides?: CallOverrides): Promise<[boolean]>; + + "isWhiteList()"(overrides?: CallOverrides): Promise<[boolean]>; + maxPlayers(overrides?: CallOverrides): Promise<[number]>; "maxPlayers()"(overrides?: CallOverrides): Promise<[number]>; @@ -291,6 +315,16 @@ export class Quest extends Contract { "rewardToken()"(overrides?: CallOverrides): Promise<[string]>; + setWhiteList( + _players: string[], + overrides?: Overrides + ): Promise; + + "setWhiteList(address[])"( + _players: string[], + overrides?: Overrides + ): Promise; + unplay( _player: string, overrides?: Overrides @@ -375,6 +409,10 @@ export class Quest extends Contract { "isCreateDepositReleased()"(overrides?: CallOverrides): Promise; + isWhiteList(overrides?: CallOverrides): Promise; + + "isWhiteList()"(overrides?: CallOverrides): Promise; + maxPlayers(overrides?: CallOverrides): Promise; "maxPlayers()"(overrides?: CallOverrides): Promise; @@ -416,6 +454,16 @@ export class Quest extends Contract { "rewardToken()"(overrides?: CallOverrides): Promise; + setWhiteList( + _players: string[], + overrides?: Overrides + ): Promise; + + "setWhiteList(address[])"( + _players: string[], + overrides?: Overrides + ): Promise; + unplay(_player: string, overrides?: Overrides): Promise; "unplay(address)"( @@ -497,6 +545,10 @@ export class Quest extends Contract { "isCreateDepositReleased()"(overrides?: CallOverrides): Promise; + isWhiteList(overrides?: CallOverrides): Promise; + + "isWhiteList()"(overrides?: CallOverrides): Promise; + maxPlayers(overrides?: CallOverrides): Promise; "maxPlayers()"(overrides?: CallOverrides): Promise; @@ -533,6 +585,13 @@ export class Quest extends Contract { "rewardToken()"(overrides?: CallOverrides): Promise; + setWhiteList(_players: string[], overrides?: CallOverrides): Promise; + + "setWhiteList(address[])"( + _players: string[], + overrides?: CallOverrides + ): Promise; + unplay(_player: string, overrides?: CallOverrides): Promise; "unplay(address)"( @@ -547,6 +606,8 @@ export class Quest extends Contract { QuestPlayed(player: null, timestamp: null): EventFilter; QuestUnplayed(player: null, timestamp: null): EventFilter; + + WhiteListChanged(whiteListPlayers: null, timestamp: null): EventFilter; }; estimateGas: { @@ -604,6 +665,10 @@ export class Quest extends Contract { "isCreateDepositReleased()"(overrides?: CallOverrides): Promise; + isWhiteList(overrides?: CallOverrides): Promise; + + "isWhiteList()"(overrides?: CallOverrides): Promise; + maxPlayers(overrides?: CallOverrides): Promise; "maxPlayers()"(overrides?: CallOverrides): Promise; @@ -636,6 +701,13 @@ export class Quest extends Contract { "rewardToken()"(overrides?: CallOverrides): Promise; + setWhiteList(_players: string[], overrides?: Overrides): Promise; + + "setWhiteList(address[])"( + _players: string[], + overrides?: Overrides + ): Promise; + unplay(_player: string, overrides?: Overrides): Promise; "unplay(address)"( @@ -717,6 +789,10 @@ export class Quest extends Contract { overrides?: CallOverrides ): Promise; + isWhiteList(overrides?: CallOverrides): Promise; + + "isWhiteList()"(overrides?: CallOverrides): Promise; + maxPlayers(overrides?: CallOverrides): Promise; "maxPlayers()"(overrides?: CallOverrides): Promise; @@ -758,6 +834,16 @@ export class Quest extends Contract { "rewardToken()"(overrides?: CallOverrides): Promise; + setWhiteList( + _players: string[], + overrides?: Overrides + ): Promise; + + "setWhiteList(address[])"( + _players: string[], + overrides?: Overrides + ): Promise; + unplay( _player: string, overrides?: Overrides diff --git a/packages/hardhat/typechain/QuestFactory.d.ts b/packages/hardhat/typechain/QuestFactory.d.ts index 0427223f..7a676876 100644 --- a/packages/hardhat/typechain/QuestFactory.d.ts +++ b/packages/hardhat/typechain/QuestFactory.d.ts @@ -24,7 +24,7 @@ interface QuestFactoryInterface extends ethers.utils.Interface { functions: { "aragonGovernAddress()": FunctionFragment; "createDeposit()": FunctionFragment; - "createQuest(string,bytes,address,uint256,address,uint32)": FunctionFragment; + "createQuest(string,bytes,address,uint256,address,uint32,bool)": FunctionFragment; "owner()": FunctionFragment; "playDeposit()": FunctionFragment; "renounceOwnership()": FunctionFragment; @@ -44,7 +44,15 @@ interface QuestFactoryInterface extends ethers.utils.Interface { ): string; encodeFunctionData( functionFragment: "createQuest", - values: [string, BytesLike, string, BigNumberish, string, BigNumberish] + values: [ + string, + BytesLike, + string, + BigNumberish, + string, + BigNumberish, + boolean + ] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( @@ -114,7 +122,7 @@ interface QuestFactoryInterface extends ethers.utils.Interface { "CreateDepositChanged(uint256,address,uint256)": EventFragment; "OwnershipTransferred(address,address)": EventFragment; "PlayDepositChanged(uint256,address,uint256)": EventFragment; - "QuestCreated(address,string,bytes,address,uint256,address,address,uint256,address,uint256,address,uint32)": EventFragment; + "QuestCreated(address,string,bytes,address,uint256,address,address,uint256,address,uint256,address,uint32,bool)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "CreateDepositChanged"): EventFragment; @@ -156,16 +164,18 @@ export class QuestFactory extends Contract { _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise; - "createQuest(string,bytes,address,uint256,address,uint32)"( + "createQuest(string,bytes,address,uint256,address,uint32,bool)"( _questTitle: string, _questDetailsRef: BytesLike, _rewardToken: string, _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise; @@ -249,16 +259,18 @@ export class QuestFactory extends Contract { _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise; - "createQuest(string,bytes,address,uint256,address,uint32)"( + "createQuest(string,bytes,address,uint256,address,uint32,bool)"( _questTitle: string, _questDetailsRef: BytesLike, _rewardToken: string, _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise; @@ -342,16 +354,18 @@ export class QuestFactory extends Contract { _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: CallOverrides ): Promise; - "createQuest(string,bytes,address,uint256,address,uint32)"( + "createQuest(string,bytes,address,uint256,address,uint32,bool)"( _questTitle: string, _questDetailsRef: BytesLike, _rewardToken: string, _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: CallOverrides ): Promise; @@ -442,7 +456,8 @@ export class QuestFactory extends Contract { playDepositToken: null, playDepositAmount: null, creator: null, - maxPlayers: null + maxPlayers: null, + isWhiteList: null ): EventFilter; }; @@ -462,16 +477,18 @@ export class QuestFactory extends Contract { _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise; - "createQuest(string,bytes,address,uint256,address,uint32)"( + "createQuest(string,bytes,address,uint256,address,uint32,bool)"( _questTitle: string, _questDetailsRef: BytesLike, _rewardToken: string, _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise; @@ -552,16 +569,18 @@ export class QuestFactory extends Contract { _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise; - "createQuest(string,bytes,address,uint256,address,uint32)"( + "createQuest(string,bytes,address,uint256,address,uint32,bool)"( _questTitle: string, _questDetailsRef: BytesLike, _rewardToken: string, _expireTime: BigNumberish, _fundsRecoveryAddress: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise; diff --git a/packages/hardhat/typechain/factories/OwnableCeleste__factory.ts b/packages/hardhat/typechain/factories/OwnableCeleste__factory.ts index bf4e594c..dc62a5ef 100644 --- a/packages/hardhat/typechain/factories/OwnableCeleste__factory.ts +++ b/packages/hardhat/typechain/factories/OwnableCeleste__factory.ts @@ -334,4 +334,4 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b506040516040806111bf8339810180604052604081101561003057600080fd5b81019080805190602001909291908051906020019092919050505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018190555050506110db806100e46000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637e9adccf11610097578063db18af6c11610066578063db18af6c1461051d578063db9bee4614610592578063e00dd161146105dc578063e55156b5146105fa576100f5565b80637e9adccf1461038b5780638da5cb5b146103b9578063bd881e5314610403578063c13517e114610486576100f5565b8063647846a5116100d3578063647846a5146101fc57806369e15404146102465780637b751b9e146102645780637cb57c64146102e8576100f5565b806313af4035146100fa5780631da213f21461013e578063564a565d14610179575b600080fd5b61013c6004803603602081101561011057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610648565b005b6101776004803603604081101561015457600080fd5b8101908080359060200190929190803560ff16906020019092919050505061074f565b005b6101a56004803603602081101561018f57600080fd5b81019080803590602001909291905050506109a0565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260048111156101e757fe5b60ff1681526020019250505060405180910390f35b6102046109f1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61024e610a16565b6040518082815260200191505060405180910390f35b61026c610a1c565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b610389600480360360608110156102fe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561034557600080fd5b82018360208201111561035757600080fd5b8035906020019184600183028401116401000000008311171561037957600080fd5b9091929391929390505050610a52565b005b6103b7600480360360208110156103a157600080fd5b8101908080359060200190929190505050610a58565b005b6103c1610a5b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61042f6004803603602081101561041957600080fd5b8101908080359060200190929190505050610a81565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600481111561047157fe5b60ff1681526020019250505060405180910390f35b6105076004803603604081101561049c57600080fd5b8101908080359060200190929190803590602001906401000000008111156104c357600080fd5b8201836020820111156104d557600080fd5b803590602001918460018302840111640100000000831117156104f757600080fd5b9091929391929390505050610adc565b6040518082815260200191505060405180910390f35b6105496004803603602081101561053357600080fd5b8101908080359060200190929190505050610c80565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b61059a610e2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e4610e37565b6040518082815260200191505060405180910390f35b6106466004803603604081101561061057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e3d565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552523a4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552523a4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600481111561081f57fe5b81600481111561082b57fe5b1415801561085057506001600481111561084157fe5b81600481111561084d57fe5b14155b6108c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4552523a4f5554434f4d455f4e4f545f41535349474e41424c4500000000000081525060200191505060405180910390fd5b6000600460008481526020019081526020016000209050600160048111156108e657fe5b8160000160149054906101000a900460ff16600481111561090357fe5b14610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552523a4e4f545f44495350555445440000000000000000000000000000000081525060200191505060405180910390fd5b818160000160146101000a81548160ff0219169083600481111561099657fe5b0217905550505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b6000806000306000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154925092509250909192565b50505050565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006004600085815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508060000160149054906101000a900460ff16915050915091565b600080600254905060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160016004811115610b1857fe5b8152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690836004811115610b9957fe5b0217905550905050600260008154809291906001019190505550610c0333306001546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f4b909392919063ffffffff16565b610c75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552523a4445504f5349545f4641494c4544000000000000000000000000000081525060200191505060405180910390fd5b809150509392505050565b600080600060046000858152602001908152602001600020905060036004811115610ca757fe5b8160000160149054906101000a900460ff166004811115610cc457fe5b1415610cfb578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660039250925050610e2a565b600480811115610d0757fe5b8160000160149054906101000a900460ff166004811115610d2457fe5b1415610d5b578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660049250925050610e2a565b60026004811115610d6857fe5b8160000160149054906101000a900460ff166004811115610d8557fe5b1415610dbc578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660009250925050610e2a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f554e45585045435445445f53544154450000000000000000000000000000000081525060200191505060405180910390fd5b915091565b600030905090565b60025481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552523a4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b80600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050611052868261105d565b915050949350505050565b6000806040516020818551602087016000895af160008111156110a3573d600081146110905760208114611099576110a1565b600193506110a1565b600183511493505b505b5050809150509291505056fea165627a7a72305820bd4a295db9bcaba2a85d13d7982dc2f3a1586e33fa938dd46dc0ba2833ca42570029"; + "0x608060405234801561001057600080fd5b506040516040806111bf8339810180604052604081101561003057600080fd5b81019080805190602001909291908051906020019092919050505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018190555050506110db806100e46000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637e9adccf11610097578063db18af6c11610066578063db18af6c1461051d578063db9bee4614610592578063e00dd161146105dc578063e55156b5146105fa576100f5565b80637e9adccf1461038b5780638da5cb5b146103b9578063bd881e5314610403578063c13517e114610486576100f5565b8063647846a5116100d3578063647846a5146101fc57806369e15404146102465780637b751b9e146102645780637cb57c64146102e8576100f5565b806313af4035146100fa5780631da213f21461013e578063564a565d14610179575b600080fd5b61013c6004803603602081101561011057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610648565b005b6101776004803603604081101561015457600080fd5b8101908080359060200190929190803560ff16906020019092919050505061074f565b005b6101a56004803603602081101561018f57600080fd5b81019080803590602001909291905050506109a0565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260048111156101e757fe5b60ff1681526020019250505060405180910390f35b6102046109f1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61024e610a16565b6040518082815260200191505060405180910390f35b61026c610a1c565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b610389600480360360608110156102fe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561034557600080fd5b82018360208201111561035757600080fd5b8035906020019184600183028401116401000000008311171561037957600080fd5b9091929391929390505050610a52565b005b6103b7600480360360208110156103a157600080fd5b8101908080359060200190929190505050610a58565b005b6103c1610a5b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61042f6004803603602081101561041957600080fd5b8101908080359060200190929190505050610a81565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600481111561047157fe5b60ff1681526020019250505060405180910390f35b6105076004803603604081101561049c57600080fd5b8101908080359060200190929190803590602001906401000000008111156104c357600080fd5b8201836020820111156104d557600080fd5b803590602001918460018302840111640100000000831117156104f757600080fd5b9091929391929390505050610adc565b6040518082815260200191505060405180910390f35b6105496004803603602081101561053357600080fd5b8101908080359060200190929190505050610c80565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b61059a610e2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e4610e37565b6040518082815260200191505060405180910390f35b6106466004803603604081101561061057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e3d565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552523a4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552523a4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600481111561081f57fe5b81600481111561082b57fe5b1415801561085057506001600481111561084157fe5b81600481111561084d57fe5b14155b6108c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4552523a4f5554434f4d455f4e4f545f41535349474e41424c4500000000000081525060200191505060405180910390fd5b6000600460008481526020019081526020016000209050600160048111156108e657fe5b8160000160149054906101000a900460ff16600481111561090357fe5b14610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552523a4e4f545f44495350555445440000000000000000000000000000000081525060200191505060405180910390fd5b818160000160146101000a81548160ff0219169083600481111561099657fe5b0217905550505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b6000806000306000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154925092509250909192565b50505050565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006004600085815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508060000160149054906101000a900460ff16915050915091565b600080600254905060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160016004811115610b1857fe5b8152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690836004811115610b9957fe5b0217905550905050600260008154809291906001019190505550610c0333306001546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f4b909392919063ffffffff16565b610c75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552523a4445504f5349545f4641494c4544000000000000000000000000000081525060200191505060405180910390fd5b809150509392505050565b600080600060046000858152602001908152602001600020905060036004811115610ca757fe5b8160000160149054906101000a900460ff166004811115610cc457fe5b1415610cfb578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660039250925050610e2a565b600480811115610d0757fe5b8160000160149054906101000a900460ff166004811115610d2457fe5b1415610d5b578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660049250925050610e2a565b60026004811115610d6857fe5b8160000160149054906101000a900460ff166004811115610d8557fe5b1415610dbc578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660009250925050610e2a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f554e45585045435445445f53544154450000000000000000000000000000000081525060200191505060405180910390fd5b915091565b600030905090565b60025481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552523a4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b80600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050611052868261105d565b915050949350505050565b6000806040516020818551602087016000895af160008111156110a3573d600081146110905760208114611099576110a1565b600193506110a1565b600183511493505b505b5050809150509291505056fea165627a7a72305820ad706482d862b24b604114b56550301559baa2df856f323030b18cdf6d3b49e00029"; diff --git a/packages/hardhat/typechain/factories/QuestFactory__factory.ts b/packages/hardhat/typechain/factories/QuestFactory__factory.ts index d678bb96..eeb412c0 100644 --- a/packages/hardhat/typechain/factories/QuestFactory__factory.ts +++ b/packages/hardhat/typechain/factories/QuestFactory__factory.ts @@ -246,6 +246,12 @@ const _abi = [ name: "maxPlayers", type: "uint32", }, + { + indexed: false, + internalType: "bool", + name: "isWhiteList", + type: "bool", + }, ], name: "QuestCreated", type: "event", @@ -313,6 +319,11 @@ const _abi = [ name: "_maxPlayers", type: "uint32", }, + { + internalType: "bool", + name: "_isWhiteList", + type: "bool", + }, ], name: "createQuest", outputs: [ @@ -428,4 +439,4 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200396b3803806200396b83398101604081905262000034916200028c565b6200004862000042620000a3565b620000a7565b600180546001600160a01b0319166001600160a01b0388161790556200006f8585620000f7565b6200007b838362000177565b6001600160a01b038116331462000097576200009781620001eb565b505050505050620003b7565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200010162000235565b6040805180820182526001600160a01b0384168082526020909101839052600280546001600160a01b03191690911790556003829055517f35c5e8a6f8bed2c61a2eb1996d117b1b96192314c0d4ca7cd96360f250920079906200016b9042908590859062000382565b60405180910390a15050565b6200018162000235565b6040805180820182526001600160a01b0384168082526020909101839052600480546001600160a01b03191690911790556005829055517f013c800b1a136f9798a25e471501a7b824156d1e9cba8439821c5a41adf2fb89906200016b9042908590859062000382565b620001f562000235565b6001600160a01b038116620002275760405162461bcd60e51b81526004016200021e9062000307565b60405180910390fd5b6200023281620000a7565b50565b6200023f620000a3565b6001600160a01b0316620002526200027d565b6001600160a01b0316146200027b5760405162461bcd60e51b81526004016200021e906200034d565b565b6000546001600160a01b031690565b60008060008060008060c08789031215620002a5578182fd5b8651620002b281620003a1565b6020880151909650620002c581620003a1565b604088015160608901519196509450620002df81620003a1565b608088015160a08901519194509250620002f981620003a1565b809150509295509295509295565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b9283526001600160a01b03919091166020830152604082015260600190565b6001600160a01b03811681146200023257600080fd5b6135a480620003c76000396000f3fe60806040523480156200001157600080fd5b5060043610620000cf5760003560e01c8063b0a87ac11162000081578063e87fae211162000063578063e87fae21146200015e578063edeecdd31462000175578063f2fde38b146200018c57620000cf565b8063b0a87ac1146200014a578063d03ffefb146200015457620000cf565b80638c43b41111620000b75780638c43b41114620000f75780638c53c9bd146200010e5780638da5cb5b146200013157620000cf565b8062732e3014620000d4578063715018a614620000ed575b600080fd5b620000eb620000e536600462000c39565b620001a3565b005b620000eb620001f4565b620000eb6200010836600462000c7a565b6200020c565b62000118620002b1565b6040516200012892919062000f50565b60405180910390f35b6200013b620002d3565b60405162000128919062000e2d565b6200013b620002ef565b620001186200030b565b6200013b6200016f36600462000ca8565b6200032d565b620000eb6200018636600462000c7a565b620004be565b620000eb6200019d36600462000c39565b62000557565b620001ad620005c8565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b620001fe620005c8565b6200020a600062000642565b565b62000216620005c8565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff84168082526020909101839052600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790556005829055517f013c800b1a136f9798a25e471501a7b824156d1e9cba8439821c5a41adf2fb8990620002a590429085908590620011ec565b60405180910390a15050565b60045460055473ffffffffffffffffffffffffffffffffffffffff9091169082565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60025460035473ffffffffffffffffffffffffffffffffffffffff9091169082565b60015460408051808201825260025473ffffffffffffffffffffffffffffffffffffffff9081168252600354602080840191909152835180850185526004548316815260055491810191909152925160009485948c948c948c948c9491909116928b929133908c90620003a09062000b6e565b620003b59a9998979695949392919062000f8b565b604051809103906000f080158015620003d2573d6000803e3d6000fd5b506040805180820190915260025473ffffffffffffffffffffffffffffffffffffffff168152600354602082015290915062000410903383620006b7565b7f6b2fd076e791d7e0318fa62bf6e275ebe9ff601badea3d9bfdc43c02317d1119818989898989600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260010154600460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460010154338e604051620004ab9c9b9a9998979695949392919062000ea6565b60405180910390a1979650505050505050565b620004c8620005c8565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff84168082526020909101839052600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790556003829055517f35c5e8a6f8bed2c61a2eb1996d117b1b96192314c0d4ca7cd96360f25092007990620002a590429085908590620011ec565b62000561620005c8565b73ffffffffffffffffffffffffffffffffffffffff8116620005ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b19062001032565b60405180910390fd5b620005c58162000642565b50565b620005d2620006d4565b73ffffffffffffffffffffffffffffffffffffffff16620005f2620002d3565b73ffffffffffffffffffffffffffffffffffffffff16146200020a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b190620010ec565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620006c38383620006d8565b620006cf838262000807565b505050565b3390565b602082015115620008035781516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff169063dd62ed3e906200073d908590309060040162000e4e565b60206040518083038186803b1580156200075657600080fd5b505afa1580156200076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000791919062000d7b565b90508260200151811015620007d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b19062001121565b60208301518351620006cf9173ffffffffffffffffffffffffffffffffffffffff90911690849030906200083f565b5050565b602082015115620008035760208201518251620008039173ffffffffffffffffffffffffffffffffffffffff909116908390620008ec565b620008e6846323b872dd60e01b858585604051602401620008639392919062000e75565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200090e565b50505050565b620006cf8363a9059cbb60e01b84846040516024016200086392919062000f50565b600062000972826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620009cc9092919063ffffffff16565b805190915015620006cf578080602001905181019062000993919062000c58565b620006cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b1906200118f565b6060620009dd8484600085620009e7565b90505b9392505050565b60608247101562000a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b1906200108f565b62000a318562000af6565b62000a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b19062001158565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162000a95919062000e0f565b60006040518083038185875af1925050503d806000811462000ad4576040519150601f19603f3d011682016040523d82523d6000602084013e62000ad9565b606091505b509150915062000aeb82828662000b16565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b15155b919050565b6060831562000b27575081620009e0565b82511562000b385782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b1919062000f76565b6122d5806200129a83390190565b600067ffffffffffffffff8084111562000b9a5762000b9a62001247565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562000be35762000be362001247565b8160405280935085815286868601111562000bfd57600080fd5b858560208301376000602087830101525050509392505050565b803562000b118162001276565b803563ffffffff8116811462000b1157600080fd5b60006020828403121562000c4b578081fd5b8135620009e08162001276565b60006020828403121562000c6a578081fd5b81518015158114620009e0578182fd5b6000806040838503121562000c8d578081fd5b823562000c9a8162001276565b946020939093013593505050565b60008060008060008060c0878903121562000cc1578182fd5b863567ffffffffffffffff8082111562000cd9578384fd5b818901915089601f83011262000ced578384fd5b62000cfe8a83356020850162000b7c565b9750602089013591508082111562000d14578384fd5b508701601f8101891362000d26578283fd5b62000d378982356020840162000b7c565b95505062000d486040880162000c17565b93506060870135925062000d5f6080880162000c17565b915062000d6f60a0880162000c24565b90509295509295509295565b60006020828403121562000d8d578081fd5b5051919050565b6000815180845262000dae81602086016020860162001218565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b63ffffffff169052565b6000825162000e2381846020870162001218565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff808f168352610180602084015262000eda61018084018f62000d94565b838103604085015262000eee818f62000d94565b925050808c1660608401528a6080840152808a1660a084015280891660c08401528760e0840152808716610100840152856101208401528085166101408401525062000f3f61016083018462000e05565b9d9c50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060208252620009e0602083018462000d94565b600061018080835262000fa18184018e62000d94565b9050828103602084015262000fb7818d62000d94565b91505073ffffffffffffffffffffffffffffffffffffffff808b166040840152896060840152808916608084015280881660a084015262000ffc60c084018862000de0565b6200100c61010084018762000de0565b8085166101408401525063ffffffff83166101608301529b9a5050505050505050505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60408201527f722063616c6c0000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f4552524f52203a204465706f7369742062616420616c6c6f77616e6365000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b92835273ffffffffffffffffffffffffffffffffffffffff919091166020830152604082015260600190565b60005b83811015620012355781810151838201526020016200121b565b83811115620008e65750506000910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114620005c557600080fdfe60806040523480156200001157600080fd5b50604051620022d5380380620022d58339810160408190526200003491620002b7565b8951620000499060019060208d019062000118565b5088516200005f9060029060208c019062000118565b50600380546001600160a01b03199081166001600160a01b039a8b16179091556004979097556005805488169689169690961790955560068054600080548916938a16939093179092558351600880548916918a169190911790556020938401516009558251600a80548916918a169190911790559190920151600b55600c805460ff19169055931693169290921763ffffffff60a01b1916600160a01b63ffffffff90931692909202919091179055506200044e9050565b8280546200012690620003e2565b90600052602060002090601f0160209004810192826200014a576000855562000195565b82601f106200016557805160ff191683800117855562000195565b8280016001018555821562000195579182015b828111156200019557825182559160200191906001019062000178565b50620001a3929150620001a7565b5090565b5b80821115620001a35760008155600101620001a8565b8051620001cb8162000435565b919050565b600082601f830112620001e1578081fd5b81516001600160401b03811115620001fd57620001fd6200041f565b602062000213601f8301601f19168201620003af565b828152858284870101111562000227578384fd5b835b838110156200024657858101830151828201840152820162000229565b838111156200025757848385840101525b5095945050505050565b60006040828403121562000273578081fd5b6200027f6040620003af565b905081516200028e8162000435565b808252506020820151602082015292915050565b805163ffffffff81168114620001cb57600080fd5b6000806000806000806000806000806101808b8d031215620002d7578586fd5b8a516001600160401b0380821115620002ee578788fd5b620002fc8e838f01620001d0565b9b5060208d015191508082111562000312578788fd5b50620003218d828e01620001d0565b9950506200033260408c01620001be565b975060608b015196506200034960808c01620001be565b95506200035960a08c01620001be565b94506200036a8c60c08d0162000261565b93506200037c8c6101008d0162000261565b92506200038d6101408c01620001be565b91506200039e6101608c01620002a2565b90509295989b9194979a5092959850565b604051601f8201601f191681016001600160401b0381118282101715620003da57620003da6200041f565b604052919050565b600281046001821680620003f757607f821691505b602082108114156200041957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200044b57600080fd5b50565b611e77806200045e6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638c53c9bd116100b2578063d03ffefb11610081578063e492814f11610066578063e492814f14610255578063f294cf3814610268578063f7c618c11461027057610136565b8063d03ffefb14610238578063e0c234231461024057610136565b80638c53c9bd146101e5578063a888c2cd146101fb578063b0a87ac11461021d578063b434151c1461022557610136565b8063579ca2c9116101095780637ceae310116100ee5780637ceae310146101b557806385c99e2b146101bd5780638b5b9ccc146101d057610136565b8063579ca2c9146101985780636c3a4cce146101a057610136565b8063151dfb061461013b578063310a1ee31461015057806348d6cb531461016e5780634c2412a214610183575b600080fd5b61014e610149366004611638565b610278565b005b610158610553565b6040516101659190611cae565b60405180910390f35b610176610559565b60405161016591906118f2565b61018b610562565b6040516101659190611cb7565b61014e610586565b6101a861074f565b60405161016591906117f9565b6101a861076b565b6101766101cb366004611638565b610787565b6101d86107bd565b6040516101659190611898565b6101ed61082c565b604051610165929190611872565b61020e610209366004611763565b61084e565b60405161016593929190611910565b6101a8610927565b61014e61023336600461166e565b610943565b6101ed610cc0565b610248610ce2565b60405161016591906118fd565b61014e610263366004611638565b610d70565b610248610fe1565b6101a8610fee565b3373ffffffffffffffffffffffffffffffffffffffff821614806102b3575060005473ffffffffffffffffffffffffffffffffffffffff1633145b6102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611c51565b60405180910390fd5b60006102fd8261100a565b9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1415610359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e9906119df565b600d805461036990600190611d05565b815481106103a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260209091200154600d805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610400577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d805480610480577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082815260209081902082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560408051808201909152600a5473ffffffffffffffffffffffffffffffffffffffff168152600b549181019190915261051690836110d2565b7fc4a67a0877d477de99d765a3d9f48abfbe6181dff4727d68c3cb6071555541758242604051610547929190611872565b60405180910390a15050565b60045481565b600c5460ff1681565b60065474010000000000000000000000000000000000000000900463ffffffff1681565b6004544210156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611a73565b600c5460ff16610634576000546040805180820190915260085473ffffffffffffffffffffffffffffffffffffffff9081168252600954602083015261060892166110d2565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319061068b9030906004016117f9565b60206040518083038186803b1580156106a357600080fd5b505afa1580156106b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106db919061177b565b600a5460035491925073ffffffffffffffffffffffffffffffffffffffff9182169116141561072257600d54600b5461071e9161071791611cc8565b829061110b565b9150505b60065460035461074c9173ffffffffffffffffffffffffffffffffffffffff918216911683611131565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60006107928261100a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141590505b919050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561082257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116107f7575b5050505050905090565b600a54600b5473ffffffffffffffffffffffffffffffffffffffff9091169082565b6007818154811061085e57600080fd5b906000526020600020906003020160009150905080600001805461088190611d48565b80601f01602080910402602001604051908101604052809291908181526020018280546108ad90611d48565b80156108fa5780601f106108cf576101008083540402835291602001916108fa565b820191906000526020600020905b8154815290600101906020018083116108dd57829003601f168201915b505050506001830154600290930154919273ffffffffffffffffffffffffffffffffffffffff1691905083565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314610994576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611ae1565b83516109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611b86565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610a239030906004016117f9565b60206040518083038186803b158015610a3b57600080fd5b505afa158015610a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a73919061177b565b90508115610b095760085460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610abc57600954600090610ab290839061110b565b9450610ac0915050565b8092505b600a5460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610b0957600d54600b54600091610b0491610afd9190611cc8565b859061110b565b945050505b60085460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610b7f576000610b3b828561110b565b915050600860010154811015610b7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611982565b505b8215610ba957600354610ba99073ffffffffffffffffffffffffffffffffffffffff168585611131565b6040805160608101825286815273ffffffffffffffffffffffffffffffffffffffff86166020808301919091529181018590526007805460018101825560009190915281518051929360039092027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880192610c279284920190611570565b5060208201516001820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604091820151600290910155517fa1c3b325aa2c115e4b244062eba2515bc5585ae5b41556be8fef399ae9fde11b90610cb190879087908790611910565b60405180910390a15050505050565b60085460095473ffffffffffffffffffffffffffffffffffffffff9091169082565b60028054610cef90611d48565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1b90611d48565b8015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff82161480610dab575060005473ffffffffffffffffffffffffffffffffffffffff1633145b610de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611c51565b60065474010000000000000000000000000000000000000000900463ffffffff161580610e305750600654600d547401000000000000000000000000000000000000000090910463ffffffff16115b610e66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611aaa565b6004544210610ea1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e99061194b565b6000610eac8261100a565b9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610f07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611bbd565b60408051808201909152600a5473ffffffffffffffffffffffffffffffffffffffff168152600b546020820152610f3f9033306111d7565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040517f35ec60f951b4abc8b287ab5148caf98524052482927d42e86a720cc71b8a76a1906105479084904290611872565b60018054610cef90611d48565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6000805b600d548110156110aa578273ffffffffffffffffffffffffffffffffffffffff16600d8281548110611069577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156110985790506107b8565b806110a281611d9c565b91505061100e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b60208201511561110757602082015182516111079173ffffffffffffffffffffffffffffffffffffffff909116908390611131565b5050565b600080838311156111215750600090508061112a565b50600190508183035b9250929050565b6111d28363a9059cbb60e01b8484604051602401611150929190611872565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111eb565b505050565b6111e183836112a1565b6111d283826110d2565b600061124d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166113c09092919063ffffffff16565b8051909150156111d2578080602001905181019061126b9190611652565b6111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611bf4565b6020820151156111075781516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff169063dd62ed3e90611303908590309060040161181a565b60206040518083038186803b15801561131b57600080fd5b505afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611353919061177b565b90508260200151811015611393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611b18565b602083015183516111d29173ffffffffffffffffffffffffffffffffffffffff90911690849030906113d9565b60606113cf8484600085611400565b90505b9392505050565b6113fa846323b872dd60e01b85858560405160240161115093929190611841565b50505050565b60608247101561143c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611a16565b61144585611501565b61147b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611b4f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516114a491906117dd565b60006040518083038185875af1925050503d80600081146114e1576040519150601f19603f3d011682016040523d82523d6000602084013e6114e6565b606091505b50915091506114f682828661151d565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060831561152c5750816113d2565b82511561153c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e991906118fd565b82805461157c90611d48565b90600052602060002090601f01602090048101928261159e57600085556115e4565b82601f106115b757805160ff19168380011785556115e4565b828001600101855582156115e4579182015b828111156115e45782518255916020019190600101906115c9565b506115f09291506115f4565b5090565b5b808211156115f057600081556001016115f5565b803573ffffffffffffffffffffffffffffffffffffffff811681146107b857600080fd5b80356107b881611e33565b600060208284031215611649578081fd5b6113d282611609565b600060208284031215611663578081fd5b81516113d281611e33565b60008060008060808587031215611683578283fd5b843567ffffffffffffffff8082111561169a578485fd5b818701915087601f8301126116ad578485fd5b8135818111156116bf576116bf611e04565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561170557611705611e04565b816040528281528a602084870101111561171d578788fd5b826020860160208301378760208483010152809850505050505061174360208601611609565b9250604085013591506117586060860161162d565b905092959194509250565b600060208284031215611774578081fd5b5035919050565b60006020828403121561178c578081fd5b5051919050565b600081518084526117ab816020860160208601611d1c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516117ef818460208701611d1c565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156118e657835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016118b4565b50909695505050505050565b901515815260200190565b6000602082526113d26020830184611793565b6000606082526119236060830186611793565b73ffffffffffffffffffffffffffffffffffffffff9490941660208301525060400152919050565b60208082526014908201527f4552524f523a2051756573742065787069726564000000000000000000000000604082015260600190565b60208082526027908201527f4552524f523a2053686f756c64206e6f742065786365656420616c6c6f77656460408201527f20626f756e747900000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4552524f523a20706c61796572206e6f7420696e206c69737400000000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60408201527f722063616c6c0000000000000000000000000000000000000000000000000000606082015260800190565b60208082526012908201527f4552524f523a204e6f7420657870697265640000000000000000000000000000604082015260600190565b6020808252601a908201527f4552524f523a204d617820706c61796572732072656163686564000000000000604082015260600190565b60208082526018908201527f4552524f523a2053656e646572206e6f7420676f7665726e0000000000000000604082015260600190565b6020808252601d908201527f4552524f52203a204465706f7369742062616420616c6c6f77616e6365000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526012908201527f4552524f523a204e6f2065766964656e63650000000000000000000000000000604082015260600190565b6020808252601c908201527f4552524f523a20506c6179657220616c72656164792065786973747300000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4552524f523a2053656e646572206e6f7420706c61796572206e6f722063726560408201527f61746f7200000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b63ffffffff91909116815260200190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d0057611d00611dd5565b500290565b600082821015611d1757611d17611dd5565b500390565b60005b83811015611d37578181015183820152602001611d1f565b838111156113fa5750506000910152565b600281046001821680611d5c57607f821691505b60208210811415611d96577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611dce57611dce611dd5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b801515811461074c57600080fdfea2646970667358221220001ecc7e3a56a6e8ceba0a2f6f0020ef13bacde460faf1b1cca5699bfd12ab1764736f6c63430008010033a264697066735822122006ddcb5ccdb8532fd391ece411b1311d2d44d237eb8d1044c11f2c762c9eb08564736f6c63430008010033"; + "0x60806040523480156200001157600080fd5b50604051620040373803806200403783398101604081905262000034916200028c565b6200004862000042620000a3565b620000a7565b600180546001600160a01b0319166001600160a01b0388161790556200006f8585620000f7565b6200007b838362000177565b6001600160a01b038116331462000097576200009781620001eb565b505050505050620003b7565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200010162000235565b6040805180820182526001600160a01b0384168082526020909101839052600280546001600160a01b03191690911790556003829055517f35c5e8a6f8bed2c61a2eb1996d117b1b96192314c0d4ca7cd96360f250920079906200016b9042908590859062000382565b60405180910390a15050565b6200018162000235565b6040805180820182526001600160a01b0384168082526020909101839052600480546001600160a01b03191690911790556005829055517f013c800b1a136f9798a25e471501a7b824156d1e9cba8439821c5a41adf2fb89906200016b9042908590859062000382565b620001f562000235565b6001600160a01b038116620002275760405162461bcd60e51b81526004016200021e9062000307565b60405180910390fd5b6200023281620000a7565b50565b6200023f620000a3565b6001600160a01b0316620002526200027d565b6001600160a01b0316146200027b5760405162461bcd60e51b81526004016200021e906200034d565b565b6000546001600160a01b031690565b60008060008060008060c08789031215620002a5578182fd5b8651620002b281620003a1565b6020880151909650620002c581620003a1565b604088015160608901519196509450620002df81620003a1565b608088015160a08901519194509250620002f981620003a1565b809150509295509295509295565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b9283526001600160a01b03919091166020830152604082015260600190565b6001600160a01b03811681146200023257600080fd5b613c7080620003c76000396000f3fe60806040523480156200001157600080fd5b5060043610620000cf5760003560e01c8063b0a87ac11162000081578063d03ffefb1162000063578063d03ffefb146200016b578063edeecdd31462000175578063f2fde38b146200018c57620000cf565b8063b0a87ac1146200014a578063b628a33f146200015457620000cf565b80638c43b41111620000b75780638c43b41114620000f75780638c53c9bd146200010e5780638da5cb5b146200013157620000cf565b8062732e3014620000d4578063715018a614620000ed575b600080fd5b620000eb620000e536600462000c6e565b620001a3565b005b620000eb620001f4565b620000eb6200010836600462000cac565b6200020c565b62000118620002b1565b6040516200012892919062000fee565b60405180910390f35b6200013b620002d3565b60405162000128919062000e7f565b6200013b620002ef565b6200013b6200016536600462000cda565b6200030b565b62000118620004a2565b620000eb6200018636600462000cac565b620004c4565b620000eb6200019d36600462000c6e565b6200055d565b620001ad620005ce565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b620001fe620005ce565b6200020a600062000648565b565b62000216620005ce565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff84168082526020909101839052600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790556005829055517f013c800b1a136f9798a25e471501a7b824156d1e9cba8439821c5a41adf2fb8990620002a59042908590859062001292565b60405180910390a15050565b60045460055473ffffffffffffffffffffffffffffffffffffffff9091169082565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60015460408051808201825260025473ffffffffffffffffffffffffffffffffffffffff9081168252600354602080840191909152835180850185526004548316815260055491810191909152925160009485948d948d948d948d9491909116928c929133908d908d90620003809062000b74565b620003969b9a9998979695949392919062001029565b604051809103906000f080158015620003b3573d6000803e3d6000fd5b506040805180820190915260025473ffffffffffffffffffffffffffffffffffffffff1681526003546020820152909150620003f1903383620006bd565b7f9e202812de1e0ca985481ca3d9e552f82bda863f1dc4c73713de12983b2147b5818a8a8a8a8a600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260010154600460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460010154338f8f6040516200048e9d9c9b9a9998979695949392919062000ef8565b60405180910390a198975050505050505050565b60025460035473ffffffffffffffffffffffffffffffffffffffff9091169082565b620004ce620005ce565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff84168082526020909101839052600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790556003829055517f35c5e8a6f8bed2c61a2eb1996d117b1b96192314c0d4ca7cd96360f25092007990620002a59042908590859062001292565b62000567620005ce565b73ffffffffffffffffffffffffffffffffffffffff8116620005c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b790620010d8565b60405180910390fd5b620005cb8162000648565b50565b620005d8620006da565b73ffffffffffffffffffffffffffffffffffffffff16620005f8620002d3565b73ffffffffffffffffffffffffffffffffffffffff16146200020a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b79062001192565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620006c98383620006de565b620006d583826200080d565b505050565b3390565b602082015115620008095781516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff169063dd62ed3e9062000743908590309060040162000ea0565b60206040518083038186803b1580156200075c57600080fd5b505afa15801562000771573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000797919062000dad565b90508260200151811015620007da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b790620011c7565b60208301518351620006d59173ffffffffffffffffffffffffffffffffffffffff909116908490309062000845565b5050565b602082015115620008095760208201518251620008099173ffffffffffffffffffffffffffffffffffffffff909116908390620008f2565b620008ec846323b872dd60e01b858585604051602401620008699392919062000ec7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262000914565b50505050565b620006d58363a9059cbb60e01b84846040516024016200086992919062000fee565b600062000978826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620009d29092919063ffffffff16565b805190915015620006d5578080602001905181019062000999919062000c8d565b620006d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b79062001235565b6060620009e38484600085620009ed565b90505b9392505050565b60608247101562000a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b79062001135565b62000a378562000afc565b62000a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b790620011fe565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162000a9b919062000e61565b60006040518083038185875af1925050503d806000811462000ada576040519150601f19603f3d011682016040523d82523d6000602084013e62000adf565b606091505b509150915062000af182828662000b1c565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b15155b919050565b6060831562000b2d575081620009e6565b82511562000b3e5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b7919062001014565b6128ec806200134f83390190565b600067ffffffffffffffff8084111562000ba05762000ba0620012ed565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562000be95762000be9620012ed565b8160405280935085815286868601111562000c0357600080fd5b858560208301376000602087830101525050509392505050565b803562000b17816200131c565b803562000b17816200133f565b600082601f83011262000c48578081fd5b620009e68383356020850162000b82565b803563ffffffff8116811462000b1757600080fd5b60006020828403121562000c80578081fd5b8135620009e6816200131c565b60006020828403121562000c9f578081fd5b8151620009e6816200133f565b6000806040838503121562000cbf578081fd5b823562000ccc816200131c565b946020939093013593505050565b600080600080600080600060e0888a03121562000cf5578283fd5b873567ffffffffffffffff8082111562000d0d578485fd5b818a0191508a601f83011262000d21578485fd5b62000d328b83356020850162000b82565b985060208a013591508082111562000d48578485fd5b5062000d578a828b0162000c37565b96505062000d686040890162000c1d565b94506060880135935062000d7f6080890162000c1d565b925062000d8f60a0890162000c59565b915062000d9f60c0890162000c2a565b905092959891949750929550565b60006020828403121562000dbf578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff169052565b15159052565b6000815180845262000e00816020860160208601620012be565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b63ffffffff169052565b6000825162000e75818460208701620012be565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8f1682526101a0602083015262000f2b6101a083018f62000de6565b828103604084015262000f3f818f62000de6565b91505073ffffffffffffffffffffffffffffffffffffffff8c1660608301528a608083015273ffffffffffffffffffffffffffffffffffffffff8a1660a083015262000f8f60c083018a62000dc6565b8760e083015262000fa561010083018862000dc6565b8561012083015262000fbc61014083018662000dc6565b62000fcc61016083018562000e57565b62000fdc61018083018462000de0565b9e9d5050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060208252620009e6602083018462000de6565b60006101a08083526200103f8184018f62000de6565b9050828103602084015262001055818e62000de6565b91505073ffffffffffffffffffffffffffffffffffffffff808c1660408401528a6060840152808a16608084015280891660a08401526200109a60c084018962000e32565b620010aa61010084018862000e32565b9490941661014082015263ffffffff9290921661016083015215156101809091015298975050505050505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60408201527f722063616c6c0000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f4552524f52203a204465706f7369742062616420616c6c6f77616e6365000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b92835273ffffffffffffffffffffffffffffffffffffffff919091166020830152604082015260600190565b60005b83811015620012db578181015183820152602001620012c1565b83811115620008ec5750506000910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114620005cb57600080fd5b8015158114620005cb57600080fdfe60806040523480156200001157600080fd5b50604051620028ec380380620028ec83398101604081905262000034916200031c565b60008263ffffffff16118015620000485750805b15620000715760405162461bcd60e51b815260040162000068906200042e565b60405180910390fd5b8a51620000869060019060208e01906200016c565b5089516200009c9060029060208d01906200016c565b50600380546001600160a01b03199081166001600160a01b039b8c1617909155600498909855600580548916978a169790971790965560068054600080548a16948b16949094179093558451600880548a16918b169190911790556020948501516009558351600a80548a16918b169190911790559290930151600b55600c805460ff19169055909416919094161763ffffffff60a01b1916600160a01b63ffffffff909416939093029290921760ff60c01b1916600160c01b9215159290920291909117905550620005459050565b8280546200017a90620004d9565b90600052602060002090601f0160209004810192826200019e5760008555620001e9565b82601f10620001b957805160ff1916838001178555620001e9565b82800160010185558215620001e9579182015b82811115620001e9578251825591602001919060010190620001cc565b50620001f7929150620001fb565b5090565b5b80821115620001f75760008155600101620001fc565b80516200021f816200052c565b919050565b805180151581146200021f57600080fd5b600082601f83011262000246578081fd5b81516001600160401b0381111562000262576200026262000516565b602062000278601f8301601f19168201620004a6565b82815285828487010111156200028c578384fd5b835b83811015620002ab5785810183015182820184015282016200028e565b83811115620002bc57848385840101525b5095945050505050565b600060408284031215620002d8578081fd5b620002e46040620004a6565b90508151620002f3816200052c565b808252506020820151602082015292915050565b805163ffffffff811681146200021f57600080fd5b60008060008060008060008060008060006101a08c8e0312156200033e578687fd5b8b516001600160401b0381111562000354578788fd5b620003628e828f0162000235565b60208e0151909c5090506001600160401b0381111562000380578788fd5b6200038e8e828f0162000235565b9a50506200039f60408d0162000212565b985060608c01519750620003b660808d0162000212565b9650620003c660a08d0162000212565b9550620003d78d60c08e01620002c6565b9450620003e98d6101008e01620002c6565b9350620003fa6101408d0162000212565b92506200040b6101608d0162000307565b91506200041c6101808d0162000224565b90509295989b509295989b9093969950565b60208082526052908201527f4552524f523a2043616e27742063726561746520612077686974654c6973746560408201527f642071756573742077697468206d617820706c61796572732067726561746572606082015271207468616e20302028696e66696e6974792960701b608082015260a00190565b604051601f8201601f191681016001600160401b0381118282101715620004d157620004d162000516565b604052919050565b600281046001821680620004ee57607f821691505b602082108114156200051057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200054257600080fd5b50565b61239780620005556000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80638b5b9ccc116100cd578063d03ffefb11610081578063e492814f11610066578063e492814f146102a6578063f294cf38146102b9578063f7c618c1146102c15761016c565b8063d03ffefb14610289578063e0c23423146102915761016c565b8063a888c2cd116100b2578063a888c2cd1461024c578063b0a87ac11461026e578063b434151c146102765761016c565b80638b5b9ccc146102215780638c53c9bd146102365761016c565b8063579ca2c911610124578063775b9c1311610109578063775b9c13146101f35780637ceae3101461020657806385c99e2b1461020e5761016c565b8063579ca2c9146101d65780636c3a4cce146101de5761016c565b8063310a1ee311610155578063310a1ee3146101a457806348d6cb53146101b95780634c2412a2146101c15761016c565b8063151dfb06146101715780632f17b18214610186575b600080fd5b61018461017f3660046118d8565b6102c9565b005b61018e6105fd565b60405161019b9190611c4f565b60405180910390f35b6101ac610622565b60405161019b919061217f565b61018e610628565b6101c9610631565b60405161019b9190612188565b610184610655565b6101e661081e565b60405161019b9190611b7b565b6101846102013660046118f2565b61083a565b6101e6610938565b61018e61021c3660046118d8565b610954565b61022961098a565b60405161019b9190611c1a565b61023e6109f9565b60405161019b929190611bf4565b61025f61025a366004611a95565b610a1b565b60405161019b93929190611c6d565b6101e6610af4565b6101846102843660046119bc565b610b10565b61023e610e8d565b610299610eaf565b60405161019b9190611c5a565b6101846102b43660046118d8565b610f3d565b610299611207565b6101e6611214565b6006547801000000000000000000000000000000000000000000000000900460ff161561032b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611dd0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610366575060005473ffffffffffffffffffffffffffffffffffffffff1633145b61039c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290612122565b60006103a782611230565b9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1415610403576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611d99565b600d805461041390600190612225565b8154811061044a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260209091200154600d805473ffffffffffffffffffffffffffffffffffffffff90921691839081106104aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d80548061052a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082815260209081902082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560408051808201909152600a5473ffffffffffffffffffffffffffffffffffffffff168152600b54918101919091526105c090836112f8565b7fc4a67a0877d477de99d765a3d9f48abfbe6181dff4727d68c3cb60715555417582426040516105f1929190611bf4565b60405180910390a15050565b6006547801000000000000000000000000000000000000000000000000900460ff1681565b60045481565b600c5460ff1681565b60065474010000000000000000000000000000000000000000900463ffffffff1681565b600454421015610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611e8a565b600c5460ff16610703576000546040805180820190915260085473ffffffffffffffffffffffffffffffffffffffff908116825260095460208301526106d792166112f8565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319061075a903090600401611b7b565b60206040518083038186803b15801561077257600080fd5b505afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa9190611aad565b600a5460035491925073ffffffffffffffffffffffffffffffffffffffff918216911614156107f157600d54600b546107ed916107e6916121e8565b8290611331565b9150505b60065460035461081b9173ffffffffffffffffffffffffffffffffffffffff918216911683611357565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611f1e565b6006547801000000000000000000000000000000000000000000000000900460ff1615156001146108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611ca8565b80516108fb90600d906020840190611796565b507ff13454c9f44194d5e5e96ac708639b22a3cadb91d2a4ea97870cf94b5dbd5bad814260405161092d929190611c2d565b60405180910390a150565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b600061095f82611230565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141590505b919050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156109ef57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116109c4575b5050505050905090565b600a54600b5473ffffffffffffffffffffffffffffffffffffffff9091169082565b60078181548110610a2b57600080fd5b9060005260206000209060030201600091509050806000018054610a4e90612268565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90612268565b8015610ac75780601f10610a9c57610100808354040283529160200191610ac7565b820191906000526020600020905b815481529060010190602001808311610aaa57829003601f168201915b505050506001830154600290930154919273ffffffffffffffffffffffffffffffffffffffff1691905083565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314610b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611fb2565b8351610b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290612057565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610bf0903090600401611b7b565b60206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c409190611aad565b90508115610cd65760085460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610c8957600954600090610c7f908390611331565b9450610c8d915050565b8092505b600a5460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610cd657600d54600b54600091610cd191610cca91906121e8565b8590611331565b945050505b60085460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610d4c576000610d088285611331565b915050600860010154811015610d4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611d3c565b505b8215610d7657600354610d769073ffffffffffffffffffffffffffffffffffffffff168585611357565b6040805160608101825286815273ffffffffffffffffffffffffffffffffffffffff86166020808301919091529181018590526007805460018101825560009190915281518051929360039092027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880192610df49284920190611820565b5060208201516001820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604091820151600290910155517fa1c3b325aa2c115e4b244062eba2515bc5585ae5b41556be8fef399ae9fde11b90610e7e90879087908790611c6d565b60405180910390a15050505050565b60085460095473ffffffffffffffffffffffffffffffffffffffff9091169082565b60028054610ebc90612268565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890612268565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b505050505081565b6006547801000000000000000000000000000000000000000000000000900460ff1615610f96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611ec1565b3373ffffffffffffffffffffffffffffffffffffffff82161480610fd1575060005473ffffffffffffffffffffffffffffffffffffffff1633145b611007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290612122565b60065474010000000000000000000000000000000000000000900463ffffffff1615806110565750600654600d547401000000000000000000000000000000000000000090910463ffffffff16115b61108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611f7b565b60045442106110c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611d05565b60006110d282611230565b9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461112d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103229061208e565b60408051808201909152600a5473ffffffffffffffffffffffffffffffffffffffff168152600b5460208201526111659033306113fd565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040517f35ec60f951b4abc8b287ab5148caf98524052482927d42e86a720cc71b8a76a1906105f19084904290611bf4565b60018054610ebc90612268565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6000805b600d548110156112d0578273ffffffffffffffffffffffffffffffffffffffff16600d828154811061128f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156112be579050610985565b806112c8816122bc565b915050611234565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b60208201511561132d576020820151825161132d9173ffffffffffffffffffffffffffffffffffffffff909116908390611357565b5050565b6000808383111561134757506000905080611350565b50600190508183035b9250929050565b6113f88363a9059cbb60e01b8484604051602401611376929190611bf4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611411565b505050565b61140783836114c7565b6113f883826112f8565b6000611473826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166115e69092919063ffffffff16565b8051909150156113f8578080602001905181019061149191906119a0565b6113f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610322906120c5565b60208201511561132d5781516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff169063dd62ed3e906115299085903090600401611b9c565b60206040518083038186803b15801561154157600080fd5b505afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115799190611aad565b905082602001518110156115b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611fe9565b602083015183516113f89173ffffffffffffffffffffffffffffffffffffffff90911690849030906115ff565b60606115f58484600085611626565b90505b9392505050565b611620846323b872dd60e01b85858560405160240161137693929190611bc3565b50505050565b606082471015611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611e2d565b61166b85611727565b6116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290612020565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116ca9190611b5f565b60006040518083038185875af1925050503d8060008114611707576040519150601f19603f3d011682016040523d82523d6000602084013e61170c565b606091505b509150915061171c828286611743565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b606083156117525750816115f8565b8251156117625782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103229190611c5a565b828054828255906000526020600020908101928215611810579160200282015b8281111561181057825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906117b6565b5061181c929150611894565b5090565b82805461182c90612268565b90600052602060002090601f01602090048101928261184e5760008555611810565b82601f1061186757805160ff1916838001178555611810565b82800160010185558215611810579182015b82811115611810578251825591602001919060010190611879565b5b8082111561181c5760008155600101611895565b803573ffffffffffffffffffffffffffffffffffffffff8116811461098557600080fd5b803561098581612353565b6000602082840312156118e9578081fd5b6115f8826118a9565b60006020808385031215611904578182fd5b823567ffffffffffffffff8082111561191b578384fd5b818501915085601f83011261192e578384fd5b81358181111561194057611940612324565b8381029150611950848301612199565b8181528481019084860184860187018a101561196a578788fd5b8795505b838610156119935761197f816118a9565b83526001959095019491860191860161196e565b5098975050505050505050565b6000602082840312156119b1578081fd5b81516115f881612353565b600080600080608085870312156119d1578283fd5b843567ffffffffffffffff808211156119e8578485fd5b818701915087601f8301126119fb578485fd5b8135602082821115611a0f57611a0f612324565b611a3f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612199565b92508183528981838601011115611a54578687fd5b818185018285013786818385010152829750611a71818a016118a9565b96505050505060408501359150611a8a606086016118cd565b905092959194509250565b600060208284031215611aa6578081fd5b5035919050565b600060208284031215611abe578081fd5b5051919050565b6000815180845260208085019450808401835b83811015611b0a57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ad8565b509495945050505050565b60008151808452611b2d81602086016020860161223c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008251611b7181846020870161223c565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602082526115f86020830184611ac5565b600060408252611c406040830185611ac5565b90508260208301529392505050565b901515815260200190565b6000602082526115f86020830184611b15565b600060608252611c806060830186611b15565b73ffffffffffffffffffffffffffffffffffffffff9490941660208301525060400152919050565b6020808252603d908201527f4552524f523a2043616e27742073657420746865207768697465206c6973742060408201527f746f2061206e6f6e2d77686974656c697374656420636f6e7472616374000000606082015260800190565b60208082526014908201527f4552524f523a2051756573742065787069726564000000000000000000000000604082015260600190565b60208082526027908201527f4552524f523a2053686f756c64206e6f742065786365656420616c6c6f77656460408201527f20626f756e747900000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4552524f523a20706c61796572206e6f7420696e206c69737400000000000000604082015260600190565b60208082526027908201527f4552524f523a2063616e277420756e706c617920612077686974656c6973746560408201527f6420717565737400000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60408201527f722063616c6c0000000000000000000000000000000000000000000000000000606082015260800190565b60208082526012908201527f4552524f523a204e6f7420657870697265640000000000000000000000000000604082015260600190565b60208082526037908201527f4552524f523a2043616e27742073656c6620726567697374657220616e64207060408201527f6c617920612077686974656c6973746564205175657374000000000000000000606082015260800190565b60208082526023908201527f4f6e6c792063726561746f722063616e2063616c6c20746869732066756e637460408201527f696f6e0000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601a908201527f4552524f523a204d617820706c61796572732072656163686564000000000000604082015260600190565b60208082526018908201527f4552524f523a2053656e646572206e6f7420676f7665726e0000000000000000604082015260600190565b6020808252601d908201527f4552524f52203a204465706f7369742062616420616c6c6f77616e6365000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526012908201527f4552524f523a204e6f2065766964656e63650000000000000000000000000000604082015260600190565b6020808252601c908201527f4552524f523a20506c6179657220616c72656164792065786973747300000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4552524f523a2053656e646572206e6f7420706c61796572206e6f722063726560408201527f61746f7200000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b63ffffffff91909116815260200190565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156121e0576121e0612324565b604052919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612220576122206122f5565b500290565b600082821015612237576122376122f5565b500390565b60005b8381101561225757818101518382015260200161223f565b838111156116205750506000910152565b60028104600182168061227c57607f821691505b602082108114156122b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156122ee576122ee6122f5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b801515811461081b57600080fdfea2646970667358221220c5b6392a692b81a7395464b5a6d89cbbf464e1fc06f690c87eb711d649b3214364736f6c63430008010033a26469706673582212201d63ac4ea23a0edaa311d7dd3d5cb84fdf845fe1013263d851bc5f1429bfa78564736f6c63430008010033"; diff --git a/packages/hardhat/typechain/factories/Quest__factory.ts b/packages/hardhat/typechain/factories/Quest__factory.ts index cc62bee4..f1d50901 100644 --- a/packages/hardhat/typechain/factories/Quest__factory.ts +++ b/packages/hardhat/typechain/factories/Quest__factory.ts @@ -24,6 +24,7 @@ export class Quest__factory extends ContractFactory { _playDeposit: { token: string; amount: BigNumberish }, _questCreator: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): Promise { return super.deploy( @@ -37,6 +38,7 @@ export class Quest__factory extends ContractFactory { _playDeposit, _questCreator, _maxPlayers, + _isWhiteList, overrides || {} ) as Promise; } @@ -51,6 +53,7 @@ export class Quest__factory extends ContractFactory { _playDeposit: { token: string; amount: BigNumberish }, _questCreator: string, _maxPlayers: BigNumberish, + _isWhiteList: boolean, overrides?: Overrides ): TransactionRequest { return super.getDeployTransaction( @@ -64,6 +67,7 @@ export class Quest__factory extends ContractFactory { _playDeposit, _questCreator, _maxPlayers, + _isWhiteList, overrides || {} ); } @@ -155,6 +159,11 @@ const _abi = [ name: "_maxPlayers", type: "uint32", }, + { + internalType: "bool", + name: "_isWhiteList", + type: "bool", + }, ], stateMutability: "nonpayable", type: "constructor", @@ -222,6 +231,25 @@ const _abi = [ name: "QuestUnplayed", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address[]", + name: "whiteListPlayers", + type: "address[]", + }, + { + indexed: false, + internalType: "uint256", + name: "timestamp", + type: "uint256", + }, + ], + name: "WhiteListChanged", + type: "event", + }, { inputs: [], name: "aragonGovernAddress", @@ -381,6 +409,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "isWhiteList", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [], name: "maxPlayers", @@ -484,6 +525,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "address[]", + name: "_players", + type: "address[]", + }, + ], + name: "setWhiteList", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [ { @@ -500,4 +554,4 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b50604051620022d5380380620022d58339810160408190526200003491620002b7565b8951620000499060019060208d019062000118565b5088516200005f9060029060208c019062000118565b50600380546001600160a01b03199081166001600160a01b039a8b16179091556004979097556005805488169689169690961790955560068054600080548916938a16939093179092558351600880548916918a169190911790556020938401516009558251600a80548916918a169190911790559190920151600b55600c805460ff19169055931693169290921763ffffffff60a01b1916600160a01b63ffffffff90931692909202919091179055506200044e9050565b8280546200012690620003e2565b90600052602060002090601f0160209004810192826200014a576000855562000195565b82601f106200016557805160ff191683800117855562000195565b8280016001018555821562000195579182015b828111156200019557825182559160200191906001019062000178565b50620001a3929150620001a7565b5090565b5b80821115620001a35760008155600101620001a8565b8051620001cb8162000435565b919050565b600082601f830112620001e1578081fd5b81516001600160401b03811115620001fd57620001fd6200041f565b602062000213601f8301601f19168201620003af565b828152858284870101111562000227578384fd5b835b838110156200024657858101830151828201840152820162000229565b838111156200025757848385840101525b5095945050505050565b60006040828403121562000273578081fd5b6200027f6040620003af565b905081516200028e8162000435565b808252506020820151602082015292915050565b805163ffffffff81168114620001cb57600080fd5b6000806000806000806000806000806101808b8d031215620002d7578586fd5b8a516001600160401b0380821115620002ee578788fd5b620002fc8e838f01620001d0565b9b5060208d015191508082111562000312578788fd5b50620003218d828e01620001d0565b9950506200033260408c01620001be565b975060608b015196506200034960808c01620001be565b95506200035960a08c01620001be565b94506200036a8c60c08d0162000261565b93506200037c8c6101008d0162000261565b92506200038d6101408c01620001be565b91506200039e6101608c01620002a2565b90509295989b9194979a5092959850565b604051601f8201601f191681016001600160401b0381118282101715620003da57620003da6200041f565b604052919050565b600281046001821680620003f757607f821691505b602082108114156200041957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200044b57600080fd5b50565b611e77806200045e6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638c53c9bd116100b2578063d03ffefb11610081578063e492814f11610066578063e492814f14610255578063f294cf3814610268578063f7c618c11461027057610136565b8063d03ffefb14610238578063e0c234231461024057610136565b80638c53c9bd146101e5578063a888c2cd146101fb578063b0a87ac11461021d578063b434151c1461022557610136565b8063579ca2c9116101095780637ceae310116100ee5780637ceae310146101b557806385c99e2b146101bd5780638b5b9ccc146101d057610136565b8063579ca2c9146101985780636c3a4cce146101a057610136565b8063151dfb061461013b578063310a1ee31461015057806348d6cb531461016e5780634c2412a214610183575b600080fd5b61014e610149366004611638565b610278565b005b610158610553565b6040516101659190611cae565b60405180910390f35b610176610559565b60405161016591906118f2565b61018b610562565b6040516101659190611cb7565b61014e610586565b6101a861074f565b60405161016591906117f9565b6101a861076b565b6101766101cb366004611638565b610787565b6101d86107bd565b6040516101659190611898565b6101ed61082c565b604051610165929190611872565b61020e610209366004611763565b61084e565b60405161016593929190611910565b6101a8610927565b61014e61023336600461166e565b610943565b6101ed610cc0565b610248610ce2565b60405161016591906118fd565b61014e610263366004611638565b610d70565b610248610fe1565b6101a8610fee565b3373ffffffffffffffffffffffffffffffffffffffff821614806102b3575060005473ffffffffffffffffffffffffffffffffffffffff1633145b6102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611c51565b60405180910390fd5b60006102fd8261100a565b9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1415610359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e9906119df565b600d805461036990600190611d05565b815481106103a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260209091200154600d805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610400577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d805480610480577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082815260209081902082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560408051808201909152600a5473ffffffffffffffffffffffffffffffffffffffff168152600b549181019190915261051690836110d2565b7fc4a67a0877d477de99d765a3d9f48abfbe6181dff4727d68c3cb6071555541758242604051610547929190611872565b60405180910390a15050565b60045481565b600c5460ff1681565b60065474010000000000000000000000000000000000000000900463ffffffff1681565b6004544210156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611a73565b600c5460ff16610634576000546040805180820190915260085473ffffffffffffffffffffffffffffffffffffffff9081168252600954602083015261060892166110d2565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319061068b9030906004016117f9565b60206040518083038186803b1580156106a357600080fd5b505afa1580156106b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106db919061177b565b600a5460035491925073ffffffffffffffffffffffffffffffffffffffff9182169116141561072257600d54600b5461071e9161071791611cc8565b829061110b565b9150505b60065460035461074c9173ffffffffffffffffffffffffffffffffffffffff918216911683611131565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60006107928261100a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141590505b919050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561082257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116107f7575b5050505050905090565b600a54600b5473ffffffffffffffffffffffffffffffffffffffff9091169082565b6007818154811061085e57600080fd5b906000526020600020906003020160009150905080600001805461088190611d48565b80601f01602080910402602001604051908101604052809291908181526020018280546108ad90611d48565b80156108fa5780601f106108cf576101008083540402835291602001916108fa565b820191906000526020600020905b8154815290600101906020018083116108dd57829003601f168201915b505050506001830154600290930154919273ffffffffffffffffffffffffffffffffffffffff1691905083565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314610994576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611ae1565b83516109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611b86565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610a239030906004016117f9565b60206040518083038186803b158015610a3b57600080fd5b505afa158015610a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a73919061177b565b90508115610b095760085460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610abc57600954600090610ab290839061110b565b9450610ac0915050565b8092505b600a5460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610b0957600d54600b54600091610b0491610afd9190611cc8565b859061110b565b945050505b60085460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610b7f576000610b3b828561110b565b915050600860010154811015610b7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611982565b505b8215610ba957600354610ba99073ffffffffffffffffffffffffffffffffffffffff168585611131565b6040805160608101825286815273ffffffffffffffffffffffffffffffffffffffff86166020808301919091529181018590526007805460018101825560009190915281518051929360039092027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880192610c279284920190611570565b5060208201516001820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604091820151600290910155517fa1c3b325aa2c115e4b244062eba2515bc5585ae5b41556be8fef399ae9fde11b90610cb190879087908790611910565b60405180910390a15050505050565b60085460095473ffffffffffffffffffffffffffffffffffffffff9091169082565b60028054610cef90611d48565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1b90611d48565b8015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff82161480610dab575060005473ffffffffffffffffffffffffffffffffffffffff1633145b610de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611c51565b60065474010000000000000000000000000000000000000000900463ffffffff161580610e305750600654600d547401000000000000000000000000000000000000000090910463ffffffff16115b610e66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611aaa565b6004544210610ea1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e99061194b565b6000610eac8261100a565b9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610f07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611bbd565b60408051808201909152600a5473ffffffffffffffffffffffffffffffffffffffff168152600b546020820152610f3f9033306111d7565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040517f35ec60f951b4abc8b287ab5148caf98524052482927d42e86a720cc71b8a76a1906105479084904290611872565b60018054610cef90611d48565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6000805b600d548110156110aa578273ffffffffffffffffffffffffffffffffffffffff16600d8281548110611069577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156110985790506107b8565b806110a281611d9c565b91505061100e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b60208201511561110757602082015182516111079173ffffffffffffffffffffffffffffffffffffffff909116908390611131565b5050565b600080838311156111215750600090508061112a565b50600190508183035b9250929050565b6111d28363a9059cbb60e01b8484604051602401611150929190611872565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111eb565b505050565b6111e183836112a1565b6111d283826110d2565b600061124d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166113c09092919063ffffffff16565b8051909150156111d2578080602001905181019061126b9190611652565b6111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611bf4565b6020820151156111075781516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff169063dd62ed3e90611303908590309060040161181a565b60206040518083038186803b15801561131b57600080fd5b505afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611353919061177b565b90508260200151811015611393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611b18565b602083015183516111d29173ffffffffffffffffffffffffffffffffffffffff90911690849030906113d9565b60606113cf8484600085611400565b90505b9392505050565b6113fa846323b872dd60e01b85858560405160240161115093929190611841565b50505050565b60608247101561143c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611a16565b61144585611501565b61147b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611b4f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516114a491906117dd565b60006040518083038185875af1925050503d80600081146114e1576040519150601f19603f3d011682016040523d82523d6000602084013e6114e6565b606091505b50915091506114f682828661151d565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060831561152c5750816113d2565b82511561153c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e991906118fd565b82805461157c90611d48565b90600052602060002090601f01602090048101928261159e57600085556115e4565b82601f106115b757805160ff19168380011785556115e4565b828001600101855582156115e4579182015b828111156115e45782518255916020019190600101906115c9565b506115f09291506115f4565b5090565b5b808211156115f057600081556001016115f5565b803573ffffffffffffffffffffffffffffffffffffffff811681146107b857600080fd5b80356107b881611e33565b600060208284031215611649578081fd5b6113d282611609565b600060208284031215611663578081fd5b81516113d281611e33565b60008060008060808587031215611683578283fd5b843567ffffffffffffffff8082111561169a578485fd5b818701915087601f8301126116ad578485fd5b8135818111156116bf576116bf611e04565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561170557611705611e04565b816040528281528a602084870101111561171d578788fd5b826020860160208301378760208483010152809850505050505061174360208601611609565b9250604085013591506117586060860161162d565b905092959194509250565b600060208284031215611774578081fd5b5035919050565b60006020828403121561178c578081fd5b5051919050565b600081518084526117ab816020860160208601611d1c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516117ef818460208701611d1c565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156118e657835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016118b4565b50909695505050505050565b901515815260200190565b6000602082526113d26020830184611793565b6000606082526119236060830186611793565b73ffffffffffffffffffffffffffffffffffffffff9490941660208301525060400152919050565b60208082526014908201527f4552524f523a2051756573742065787069726564000000000000000000000000604082015260600190565b60208082526027908201527f4552524f523a2053686f756c64206e6f742065786365656420616c6c6f77656460408201527f20626f756e747900000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4552524f523a20706c61796572206e6f7420696e206c69737400000000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60408201527f722063616c6c0000000000000000000000000000000000000000000000000000606082015260800190565b60208082526012908201527f4552524f523a204e6f7420657870697265640000000000000000000000000000604082015260600190565b6020808252601a908201527f4552524f523a204d617820706c61796572732072656163686564000000000000604082015260600190565b60208082526018908201527f4552524f523a2053656e646572206e6f7420676f7665726e0000000000000000604082015260600190565b6020808252601d908201527f4552524f52203a204465706f7369742062616420616c6c6f77616e6365000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526012908201527f4552524f523a204e6f2065766964656e63650000000000000000000000000000604082015260600190565b6020808252601c908201527f4552524f523a20506c6179657220616c72656164792065786973747300000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4552524f523a2053656e646572206e6f7420706c61796572206e6f722063726560408201527f61746f7200000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b63ffffffff91909116815260200190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d0057611d00611dd5565b500290565b600082821015611d1757611d17611dd5565b500390565b60005b83811015611d37578181015183820152602001611d1f565b838111156113fa5750506000910152565b600281046001821680611d5c57607f821691505b60208210811415611d96577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611dce57611dce611dd5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b801515811461074c57600080fdfea2646970667358221220001ecc7e3a56a6e8ceba0a2f6f0020ef13bacde460faf1b1cca5699bfd12ab1764736f6c63430008010033"; + "0x60806040523480156200001157600080fd5b50604051620028ec380380620028ec83398101604081905262000034916200031c565b60008263ffffffff16118015620000485750805b15620000715760405162461bcd60e51b815260040162000068906200042e565b60405180910390fd5b8a51620000869060019060208e01906200016c565b5089516200009c9060029060208d01906200016c565b50600380546001600160a01b03199081166001600160a01b039b8c1617909155600498909855600580548916978a169790971790965560068054600080548a16948b16949094179093558451600880548a16918b169190911790556020948501516009558351600a80548a16918b169190911790559290930151600b55600c805460ff19169055909416919094161763ffffffff60a01b1916600160a01b63ffffffff909416939093029290921760ff60c01b1916600160c01b9215159290920291909117905550620005459050565b8280546200017a90620004d9565b90600052602060002090601f0160209004810192826200019e5760008555620001e9565b82601f10620001b957805160ff1916838001178555620001e9565b82800160010185558215620001e9579182015b82811115620001e9578251825591602001919060010190620001cc565b50620001f7929150620001fb565b5090565b5b80821115620001f75760008155600101620001fc565b80516200021f816200052c565b919050565b805180151581146200021f57600080fd5b600082601f83011262000246578081fd5b81516001600160401b0381111562000262576200026262000516565b602062000278601f8301601f19168201620004a6565b82815285828487010111156200028c578384fd5b835b83811015620002ab5785810183015182820184015282016200028e565b83811115620002bc57848385840101525b5095945050505050565b600060408284031215620002d8578081fd5b620002e46040620004a6565b90508151620002f3816200052c565b808252506020820151602082015292915050565b805163ffffffff811681146200021f57600080fd5b60008060008060008060008060008060006101a08c8e0312156200033e578687fd5b8b516001600160401b0381111562000354578788fd5b620003628e828f0162000235565b60208e0151909c5090506001600160401b0381111562000380578788fd5b6200038e8e828f0162000235565b9a50506200039f60408d0162000212565b985060608c01519750620003b660808d0162000212565b9650620003c660a08d0162000212565b9550620003d78d60c08e01620002c6565b9450620003e98d6101008e01620002c6565b9350620003fa6101408d0162000212565b92506200040b6101608d0162000307565b91506200041c6101808d0162000224565b90509295989b509295989b9093969950565b60208082526052908201527f4552524f523a2043616e27742063726561746520612077686974654c6973746560408201527f642071756573742077697468206d617820706c61796572732067726561746572606082015271207468616e20302028696e66696e6974792960701b608082015260a00190565b604051601f8201601f191681016001600160401b0381118282101715620004d157620004d162000516565b604052919050565b600281046001821680620004ee57607f821691505b602082108114156200051057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200054257600080fd5b50565b61239780620005556000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80638b5b9ccc116100cd578063d03ffefb11610081578063e492814f11610066578063e492814f146102a6578063f294cf38146102b9578063f7c618c1146102c15761016c565b8063d03ffefb14610289578063e0c23423146102915761016c565b8063a888c2cd116100b2578063a888c2cd1461024c578063b0a87ac11461026e578063b434151c146102765761016c565b80638b5b9ccc146102215780638c53c9bd146102365761016c565b8063579ca2c911610124578063775b9c1311610109578063775b9c13146101f35780637ceae3101461020657806385c99e2b1461020e5761016c565b8063579ca2c9146101d65780636c3a4cce146101de5761016c565b8063310a1ee311610155578063310a1ee3146101a457806348d6cb53146101b95780634c2412a2146101c15761016c565b8063151dfb06146101715780632f17b18214610186575b600080fd5b61018461017f3660046118d8565b6102c9565b005b61018e6105fd565b60405161019b9190611c4f565b60405180910390f35b6101ac610622565b60405161019b919061217f565b61018e610628565b6101c9610631565b60405161019b9190612188565b610184610655565b6101e661081e565b60405161019b9190611b7b565b6101846102013660046118f2565b61083a565b6101e6610938565b61018e61021c3660046118d8565b610954565b61022961098a565b60405161019b9190611c1a565b61023e6109f9565b60405161019b929190611bf4565b61025f61025a366004611a95565b610a1b565b60405161019b93929190611c6d565b6101e6610af4565b6101846102843660046119bc565b610b10565b61023e610e8d565b610299610eaf565b60405161019b9190611c5a565b6101846102b43660046118d8565b610f3d565b610299611207565b6101e6611214565b6006547801000000000000000000000000000000000000000000000000900460ff161561032b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611dd0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610366575060005473ffffffffffffffffffffffffffffffffffffffff1633145b61039c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290612122565b60006103a782611230565b9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1415610403576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611d99565b600d805461041390600190612225565b8154811061044a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260209091200154600d805473ffffffffffffffffffffffffffffffffffffffff90921691839081106104aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d80548061052a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082815260209081902082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560408051808201909152600a5473ffffffffffffffffffffffffffffffffffffffff168152600b54918101919091526105c090836112f8565b7fc4a67a0877d477de99d765a3d9f48abfbe6181dff4727d68c3cb60715555417582426040516105f1929190611bf4565b60405180910390a15050565b6006547801000000000000000000000000000000000000000000000000900460ff1681565b60045481565b600c5460ff1681565b60065474010000000000000000000000000000000000000000900463ffffffff1681565b600454421015610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611e8a565b600c5460ff16610703576000546040805180820190915260085473ffffffffffffffffffffffffffffffffffffffff908116825260095460208301526106d792166112f8565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319061075a903090600401611b7b565b60206040518083038186803b15801561077257600080fd5b505afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa9190611aad565b600a5460035491925073ffffffffffffffffffffffffffffffffffffffff918216911614156107f157600d54600b546107ed916107e6916121e8565b8290611331565b9150505b60065460035461081b9173ffffffffffffffffffffffffffffffffffffffff918216911683611357565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611f1e565b6006547801000000000000000000000000000000000000000000000000900460ff1615156001146108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611ca8565b80516108fb90600d906020840190611796565b507ff13454c9f44194d5e5e96ac708639b22a3cadb91d2a4ea97870cf94b5dbd5bad814260405161092d929190611c2d565b60405180910390a150565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b600061095f82611230565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141590505b919050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156109ef57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116109c4575b5050505050905090565b600a54600b5473ffffffffffffffffffffffffffffffffffffffff9091169082565b60078181548110610a2b57600080fd5b9060005260206000209060030201600091509050806000018054610a4e90612268565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90612268565b8015610ac75780601f10610a9c57610100808354040283529160200191610ac7565b820191906000526020600020905b815481529060010190602001808311610aaa57829003601f168201915b505050506001830154600290930154919273ffffffffffffffffffffffffffffffffffffffff1691905083565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314610b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611fb2565b8351610b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290612057565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610bf0903090600401611b7b565b60206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c409190611aad565b90508115610cd65760085460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610c8957600954600090610c7f908390611331565b9450610c8d915050565b8092505b600a5460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610cd657600d54600b54600091610cd191610cca91906121e8565b8590611331565b945050505b60085460035473ffffffffffffffffffffffffffffffffffffffff90811691161415610d4c576000610d088285611331565b915050600860010154811015610d4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611d3c565b505b8215610d7657600354610d769073ffffffffffffffffffffffffffffffffffffffff168585611357565b6040805160608101825286815273ffffffffffffffffffffffffffffffffffffffff86166020808301919091529181018590526007805460018101825560009190915281518051929360039092027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880192610df49284920190611820565b5060208201516001820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604091820151600290910155517fa1c3b325aa2c115e4b244062eba2515bc5585ae5b41556be8fef399ae9fde11b90610e7e90879087908790611c6d565b60405180910390a15050505050565b60085460095473ffffffffffffffffffffffffffffffffffffffff9091169082565b60028054610ebc90612268565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890612268565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b505050505081565b6006547801000000000000000000000000000000000000000000000000900460ff1615610f96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611ec1565b3373ffffffffffffffffffffffffffffffffffffffff82161480610fd1575060005473ffffffffffffffffffffffffffffffffffffffff1633145b611007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290612122565b60065474010000000000000000000000000000000000000000900463ffffffff1615806110565750600654600d547401000000000000000000000000000000000000000090910463ffffffff16115b61108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611f7b565b60045442106110c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611d05565b60006110d282611230565b9050807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461112d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103229061208e565b60408051808201909152600a5473ffffffffffffffffffffffffffffffffffffffff168152600b5460208201526111659033306113fd565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040517f35ec60f951b4abc8b287ab5148caf98524052482927d42e86a720cc71b8a76a1906105f19084904290611bf4565b60018054610ebc90612268565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6000805b600d548110156112d0578273ffffffffffffffffffffffffffffffffffffffff16600d828154811061128f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156112be579050610985565b806112c8816122bc565b915050611234565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b60208201511561132d576020820151825161132d9173ffffffffffffffffffffffffffffffffffffffff909116908390611357565b5050565b6000808383111561134757506000905080611350565b50600190508183035b9250929050565b6113f88363a9059cbb60e01b8484604051602401611376929190611bf4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611411565b505050565b61140783836114c7565b6113f883826112f8565b6000611473826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166115e69092919063ffffffff16565b8051909150156113f8578080602001905181019061149191906119a0565b6113f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610322906120c5565b60208201511561132d5781516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff169063dd62ed3e906115299085903090600401611b9c565b60206040518083038186803b15801561154157600080fd5b505afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115799190611aad565b905082602001518110156115b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611fe9565b602083015183516113f89173ffffffffffffffffffffffffffffffffffffffff90911690849030906115ff565b60606115f58484600085611626565b90505b9392505050565b611620846323b872dd60e01b85858560405160240161137693929190611bc3565b50505050565b606082471015611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290611e2d565b61166b85611727565b6116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032290612020565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116ca9190611b5f565b60006040518083038185875af1925050503d8060008114611707576040519150601f19603f3d011682016040523d82523d6000602084013e61170c565b606091505b509150915061171c828286611743565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b606083156117525750816115f8565b8251156117625782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103229190611c5a565b828054828255906000526020600020908101928215611810579160200282015b8281111561181057825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906117b6565b5061181c929150611894565b5090565b82805461182c90612268565b90600052602060002090601f01602090048101928261184e5760008555611810565b82601f1061186757805160ff1916838001178555611810565b82800160010185558215611810579182015b82811115611810578251825591602001919060010190611879565b5b8082111561181c5760008155600101611895565b803573ffffffffffffffffffffffffffffffffffffffff8116811461098557600080fd5b803561098581612353565b6000602082840312156118e9578081fd5b6115f8826118a9565b60006020808385031215611904578182fd5b823567ffffffffffffffff8082111561191b578384fd5b818501915085601f83011261192e578384fd5b81358181111561194057611940612324565b8381029150611950848301612199565b8181528481019084860184860187018a101561196a578788fd5b8795505b838610156119935761197f816118a9565b83526001959095019491860191860161196e565b5098975050505050505050565b6000602082840312156119b1578081fd5b81516115f881612353565b600080600080608085870312156119d1578283fd5b843567ffffffffffffffff808211156119e8578485fd5b818701915087601f8301126119fb578485fd5b8135602082821115611a0f57611a0f612324565b611a3f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612199565b92508183528981838601011115611a54578687fd5b818185018285013786818385010152829750611a71818a016118a9565b96505050505060408501359150611a8a606086016118cd565b905092959194509250565b600060208284031215611aa6578081fd5b5035919050565b600060208284031215611abe578081fd5b5051919050565b6000815180845260208085019450808401835b83811015611b0a57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ad8565b509495945050505050565b60008151808452611b2d81602086016020860161223c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008251611b7181846020870161223c565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602082526115f86020830184611ac5565b600060408252611c406040830185611ac5565b90508260208301529392505050565b901515815260200190565b6000602082526115f86020830184611b15565b600060608252611c806060830186611b15565b73ffffffffffffffffffffffffffffffffffffffff9490941660208301525060400152919050565b6020808252603d908201527f4552524f523a2043616e27742073657420746865207768697465206c6973742060408201527f746f2061206e6f6e2d77686974656c697374656420636f6e7472616374000000606082015260800190565b60208082526014908201527f4552524f523a2051756573742065787069726564000000000000000000000000604082015260600190565b60208082526027908201527f4552524f523a2053686f756c64206e6f742065786365656420616c6c6f77656460408201527f20626f756e747900000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4552524f523a20706c61796572206e6f7420696e206c69737400000000000000604082015260600190565b60208082526027908201527f4552524f523a2063616e277420756e706c617920612077686974656c6973746560408201527f6420717565737400000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60408201527f722063616c6c0000000000000000000000000000000000000000000000000000606082015260800190565b60208082526012908201527f4552524f523a204e6f7420657870697265640000000000000000000000000000604082015260600190565b60208082526037908201527f4552524f523a2043616e27742073656c6620726567697374657220616e64207060408201527f6c617920612077686974656c6973746564205175657374000000000000000000606082015260800190565b60208082526023908201527f4f6e6c792063726561746f722063616e2063616c6c20746869732066756e637460408201527f696f6e0000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601a908201527f4552524f523a204d617820706c61796572732072656163686564000000000000604082015260600190565b60208082526018908201527f4552524f523a2053656e646572206e6f7420676f7665726e0000000000000000604082015260600190565b6020808252601d908201527f4552524f52203a204465706f7369742062616420616c6c6f77616e6365000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526012908201527f4552524f523a204e6f2065766964656e63650000000000000000000000000000604082015260600190565b6020808252601c908201527f4552524f523a20506c6179657220616c72656164792065786973747300000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4552524f523a2053656e646572206e6f7420706c61796572206e6f722063726560408201527f61746f7200000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b63ffffffff91909116815260200190565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156121e0576121e0612324565b604052919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612220576122206122f5565b500290565b600082821015612237576122376122f5565b500390565b60005b8381101561225757818101518382015260200161223f565b838111156116205750506000910152565b60028104600182168061227c57607f821691505b602082108114156122b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156122ee576122ee6122f5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b801515811461081b57600080fdfea2646970667358221220c5b6392a692b81a7395464b5a6d89cbbf464e1fc06f690c87eb711d649b3214364736f6c63430008010033"; diff --git a/packages/hardhat/typechain/factories/TokenMock__factory.ts b/packages/hardhat/typechain/factories/TokenMock__factory.ts index a55b1b89..9cab3351 100644 --- a/packages/hardhat/typechain/factories/TokenMock__factory.ts +++ b/packages/hardhat/typechain/factories/TokenMock__factory.ts @@ -353,4 +353,4 @@ const _abi = [ ]; const _bytecode = - "0x608060405260405162000fa038038062000fa08339810160408190526200002691620001b9565b8151829082906200003f90600390602085019062000060565b5080516200005590600490602084019062000060565b505050505062000273565b8280546200006e9062000220565b90600052602060002090601f016020900481019282620000925760008555620000dd565b82601f10620000ad57805160ff1916838001178555620000dd565b82800160010185558215620000dd579182015b82811115620000dd578251825591602001919060010190620000c0565b50620000eb929150620000ef565b5090565b5b80821115620000eb5760008155600101620000f0565b600082601f83011262000117578081fd5b81516001600160401b03808211156200013457620001346200025d565b604051601f8301601f19908116603f011681019082821181831017156200015f576200015f6200025d565b816040528381526020925086838588010111156200017b578485fd5b8491505b838210156200019e57858201830151818301840152908201906200017f565b83821115620001af57848385830101525b9695505050505050565b60008060408385031215620001cc578182fd5b82516001600160401b0380821115620001e3578384fd5b620001f18683870162000106565b9350602085015191508082111562000207578283fd5b50620002168582860162000106565b9150509250929050565b6002810460018216806200023557607f821691505b602082108114156200025757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b610d1d80620002836000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806340c10f1911610081578063a457c2d71161005b578063a457c2d714610197578063a9059cbb146101aa578063dd62ed3e146101bd576100d4565b806340c10f191461016757806370a082311461017c57806395d89b411461018f576100d4565b806323b872dd116100b257806323b872dd1461012c578063313ce5671461013f5780633950935114610154576100d4565b806306fdde03146100d9578063095ea7b3146100f757806318160ddd14610117575b600080fd5b6100e16101d0565b6040516100ee9190610932565b60405180910390f35b61010a6101053660046108fe565b610262565b6040516100ee9190610927565b61011f610284565b6040516100ee9190610c3f565b61010a61013a3660046108c3565b61028a565b6101476102b8565b6040516100ee9190610c48565b61010a6101623660046108fe565b6102bd565b61017a6101753660046108fe565b6102e9565b005b61011f61018a366004610870565b6102f7565b6100e1610323565b61010a6101a53660046108fe565b610332565b61010a6101b83660046108fe565b61039d565b61011f6101cb366004610891565b6103b5565b6060600380546101df90610c93565b80601f016020809104026020016040519081016040528092919081815260200182805461020b90610c93565b80156102585780601f1061022d57610100808354040283529160200191610258565b820191906000526020600020905b81548152906001019060200180831161023b57829003601f168201915b5050505050905090565b60008061026d6103ed565b905061027a8185856103f1565b5060019392505050565b60025490565b6000806102956103ed565b90506102a2858285610500565b6102ad858585610582565b506001949350505050565b601290565b6000806102c86103ed565b905061027a8185856102da85896103b5565b6102e49190610c56565b6103f1565b6102f38282610742565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b6060600480546101df90610c93565b60008061033d6103ed565b9050600061034b82866103b5565b905083811015610390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610bab565b60405180910390fd5b6102ad82868684036103f1565b6000806103a86103ed565b905061027a818585610582565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b3390565b73ffffffffffffffffffffffffffffffffffffffff831661043e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610b4e565b73ffffffffffffffffffffffffffffffffffffffff821661048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610a00565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104f3908590610c3f565b60405180910390a3505050565b600061050c84846103b5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461057c578181101561056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610a5d565b61057c84848484036103f1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166105cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610af1565b73ffffffffffffffffffffffffffffffffffffffff821661061c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610387906109a3565b610627838383610847565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610a94565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906106cb908490610c56565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161072f9190610c3f565b60405180910390a361057c848484610847565b73ffffffffffffffffffffffffffffffffffffffff821661078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610c08565b61079b60008383610847565b80600260008282546107ad9190610c56565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906107e7908490610c56565b909155505060405173ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610837908590610c3f565b60405180910390a36102f3600083835b505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461031e57600080fd5b600060208284031215610881578081fd5b61088a8261084c565b9392505050565b600080604083850312156108a3578081fd5b6108ac8361084c565b91506108ba6020840161084c565b90509250929050565b6000806000606084860312156108d7578081fd5b6108e08461084c565b92506108ee6020850161084c565b9150604084013590509250925092565b60008060408385031215610910578182fd5b6109198361084c565b946020939093013593505050565b901515815260200190565b6000602080835283518082850152825b8181101561095e57858101830151858201604001528201610942565b8181111561096f5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260408201527f616c616e63650000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760408201527f207a65726f000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60ff91909116815260200190565b60008219821115610c8e577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b500190565b600281046001821680610ca757607f821691505b60208210811415610ce1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220a4b54a7a2f37c82415ec22d08b2dc27e1757a12d2bc3dd51bf2ca56dc3ca377a64736f6c63430008010033"; + "0x608060405260405162000fa038038062000fa08339810160408190526200002691620001b9565b8151829082906200003f90600390602085019062000060565b5080516200005590600490602084019062000060565b505050505062000273565b8280546200006e9062000220565b90600052602060002090601f016020900481019282620000925760008555620000dd565b82601f10620000ad57805160ff1916838001178555620000dd565b82800160010185558215620000dd579182015b82811115620000dd578251825591602001919060010190620000c0565b50620000eb929150620000ef565b5090565b5b80821115620000eb5760008155600101620000f0565b600082601f83011262000117578081fd5b81516001600160401b03808211156200013457620001346200025d565b604051601f8301601f19908116603f011681019082821181831017156200015f576200015f6200025d565b816040528381526020925086838588010111156200017b578485fd5b8491505b838210156200019e57858201830151818301840152908201906200017f565b83821115620001af57848385830101525b9695505050505050565b60008060408385031215620001cc578182fd5b82516001600160401b0380821115620001e3578384fd5b620001f18683870162000106565b9350602085015191508082111562000207578283fd5b50620002168582860162000106565b9150509250929050565b6002810460018216806200023557607f821691505b602082108114156200025757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b610d1d80620002836000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806340c10f1911610081578063a457c2d71161005b578063a457c2d714610197578063a9059cbb146101aa578063dd62ed3e146101bd576100d4565b806340c10f191461016757806370a082311461017c57806395d89b411461018f576100d4565b806323b872dd116100b257806323b872dd1461012c578063313ce5671461013f5780633950935114610154576100d4565b806306fdde03146100d9578063095ea7b3146100f757806318160ddd14610117575b600080fd5b6100e16101d0565b6040516100ee9190610932565b60405180910390f35b61010a6101053660046108fe565b610262565b6040516100ee9190610927565b61011f610284565b6040516100ee9190610c3f565b61010a61013a3660046108c3565b61028a565b6101476102b8565b6040516100ee9190610c48565b61010a6101623660046108fe565b6102bd565b61017a6101753660046108fe565b6102e9565b005b61011f61018a366004610870565b6102f7565b6100e1610323565b61010a6101a53660046108fe565b610332565b61010a6101b83660046108fe565b61039d565b61011f6101cb366004610891565b6103b5565b6060600380546101df90610c93565b80601f016020809104026020016040519081016040528092919081815260200182805461020b90610c93565b80156102585780601f1061022d57610100808354040283529160200191610258565b820191906000526020600020905b81548152906001019060200180831161023b57829003601f168201915b5050505050905090565b60008061026d6103ed565b905061027a8185856103f1565b5060019392505050565b60025490565b6000806102956103ed565b90506102a2858285610500565b6102ad858585610582565b506001949350505050565b601290565b6000806102c86103ed565b905061027a8185856102da85896103b5565b6102e49190610c56565b6103f1565b6102f38282610742565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b6060600480546101df90610c93565b60008061033d6103ed565b9050600061034b82866103b5565b905083811015610390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610bab565b60405180910390fd5b6102ad82868684036103f1565b6000806103a86103ed565b905061027a818585610582565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b3390565b73ffffffffffffffffffffffffffffffffffffffff831661043e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610b4e565b73ffffffffffffffffffffffffffffffffffffffff821661048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610a00565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104f3908590610c3f565b60405180910390a3505050565b600061050c84846103b5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461057c578181101561056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610a5d565b61057c84848484036103f1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166105cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610af1565b73ffffffffffffffffffffffffffffffffffffffff821661061c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610387906109a3565b610627838383610847565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610a94565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906106cb908490610c56565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161072f9190610c3f565b60405180910390a361057c848484610847565b73ffffffffffffffffffffffffffffffffffffffff821661078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038790610c08565b61079b60008383610847565b80600260008282546107ad9190610c56565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906107e7908490610c56565b909155505060405173ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610837908590610c3f565b60405180910390a36102f3600083835b505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461031e57600080fd5b600060208284031215610881578081fd5b61088a8261084c565b9392505050565b600080604083850312156108a3578081fd5b6108ac8361084c565b91506108ba6020840161084c565b90509250929050565b6000806000606084860312156108d7578081fd5b6108e08461084c565b92506108ee6020850161084c565b9150604084013590509250925092565b60008060408385031215610910578182fd5b6109198361084c565b946020939093013593505050565b901515815260200190565b6000602080835283518082850152825b8181101561095e57858101830151858201604001528201610942565b8181111561096f5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260408201527f616c616e63650000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760408201527f207a65726f000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60ff91909116815260200190565b60008219821115610c8e577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b500190565b600281046001821680610ca757607f821691505b60208210811415610ce1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea26469706673582212209580393756d31d73d138880e21819c5ac29d9d6bc74da890a74dd36eb581e3c764736f6c63430008010033";