From 419672e2e0244d7cc879e8c0122f644da8eabc45 Mon Sep 17 00:00:00 2001 From: Charles Crain Date: Tue, 31 Mar 2020 18:59:54 -0700 Subject: [PATCH 1/6] SuperRareLegacy contract --- contracts/v4/build/CryptoPunksMarket.json | 2 +- contracts/v4/build/ERC20CappedMetadata.json | 2 +- contracts/v4/build/ERC20Metadata.json | 2 +- contracts/v4/build/ERC20MintableMetadata.json | 2 +- contracts/v4/build/ERC721Market.json | 2 +- contracts/v4/build/ERC721Old.json | 2 +- contracts/v4/build/IERC721Creator.json | 2 +- contracts/v4/build/ISuperRare.json | 2 +- contracts/v4/build/Operated.json | 2 +- contracts/v4/build/PixuraNFT.json | 2 +- .../v4/build/PixuraNFTContractGenerator.json | 2 +- contracts/v4/build/SupeRare.json | 2 +- .../v4/build/SuperRareMarketAuction.json | 2 +- contracts/v4/build/SuperRareV2.json | 2 +- contracts/v4/build/Whitelist.json | 2 +- contracts/v5/build/MaybeSendValue.json | 2 +- contracts/v5/build/SendValueOrEscrow.json | 6 +- contracts/v5/build/SuperRareLegacy.json | 627 ++++++++++++++++++ .../v5/build/SuperRareMarketAuctionV2.json | 82 ++- contracts/v5/build/TestAssertFailOnPay.json | 6 +- contracts/v5/build/TestExpensiveWallet.json | 6 +- contracts/v5/build/TestRequireFailOnPay.json | 6 +- contracts/v5/build/TestRevertOnPay.json | 6 +- contracts/v5/chanterelle.json | 9 +- contracts/v5/src/IERC721Creator.sol | 11 +- contracts/v5/src/ISupeRare.sol | 52 ++ contracts/v5/src/SuperRareLegacy.sol | 151 +++++ contracts/v5/src/SuperRareMarketAuctionV2.sol | 300 +++++---- package.json | 1 + .../src/Contracts/V5/SuperRareLegacy.purs | 439 ++++++++++++ .../V5/SuperRareMarketAuctionV2.purs | 60 +- .../src/Deploy/Contracts/SuperRareLegacy.purs | 37 ++ purs-contracts/test/Main.purs | 4 +- .../test/Spec/Contracts/SupeRare.purs | 16 +- .../test/Spec/Contracts/SuperRareLegacy.purs | 110 +++ .../Contracts/SuperRareLegacy/Actions.purs | 113 ++++ .../SuperRareMarkAuctionV2/Actions.purs | 56 +- .../Contracts/SuperRareMarketAuctionV2.purs | 38 +- .../test/Spec/Contracts/SuperRareV2.purs | 14 +- purs-contracts/test/Spec/Contracts/Utils.purs | 20 +- yarn.lock | 8 +- 41 files changed, 1968 insertions(+), 242 deletions(-) create mode 100644 contracts/v5/build/SuperRareLegacy.json create mode 100644 contracts/v5/src/ISupeRare.sol create mode 100644 contracts/v5/src/SuperRareLegacy.sol create mode 100644 purs-contracts/src/Contracts/V5/SuperRareLegacy.purs create mode 100644 purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs create mode 100644 purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs create mode 100644 purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs diff --git a/contracts/v4/build/CryptoPunksMarket.json b/contracts/v4/build/CryptoPunksMarket.json index e214fe0..8526217 100644 --- a/contracts/v4/build/CryptoPunksMarket.json +++ b/contracts/v4/build/CryptoPunksMarket.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036527608, + "lastModified": 1585681876635, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20CappedMetadata.json b/contracts/v4/build/ERC20CappedMetadata.json index e4c6ecf..d83beec 100644 --- a/contracts/v4/build/ERC20CappedMetadata.json +++ b/contracts/v4/build/ERC20CappedMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036528978, + "lastModified": 1585681878016, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20Metadata.json b/contracts/v4/build/ERC20Metadata.json index 476e2cd..b9b97ac 100644 --- a/contracts/v4/build/ERC20Metadata.json +++ b/contracts/v4/build/ERC20Metadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036529286, + "lastModified": 1585681878313, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20MintableMetadata.json b/contracts/v4/build/ERC20MintableMetadata.json index 207aa0d..df6c8b8 100644 --- a/contracts/v4/build/ERC20MintableMetadata.json +++ b/contracts/v4/build/ERC20MintableMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036530031, + "lastModified": 1585681879058, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Market.json b/contracts/v4/build/ERC721Market.json index 68a210c..af6affd 100644 --- a/contracts/v4/build/ERC721Market.json +++ b/contracts/v4/build/ERC721Market.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036530200, + "lastModified": 1585681879231, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Old.json b/contracts/v4/build/ERC721Old.json index ad99f47..a14e417 100644 --- a/contracts/v4/build/ERC721Old.json +++ b/contracts/v4/build/ERC721Old.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036530209, + "lastModified": 1585681879240, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/IERC721Creator.json b/contracts/v4/build/IERC721Creator.json index fd03c07..2b04762 100644 --- a/contracts/v4/build/IERC721Creator.json +++ b/contracts/v4/build/IERC721Creator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036530226, + "lastModified": 1585681879257, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ISuperRare.json b/contracts/v4/build/ISuperRare.json index 7d16ef6..7104e9e 100644 --- a/contracts/v4/build/ISuperRare.json +++ b/contracts/v4/build/ISuperRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036530234, + "lastModified": 1585681879266, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Operated.json b/contracts/v4/build/Operated.json index 1c40a11..d9fbc18 100644 --- a/contracts/v4/build/Operated.json +++ b/contracts/v4/build/Operated.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036530318, + "lastModified": 1585681879350, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFT.json b/contracts/v4/build/PixuraNFT.json index 2580934..1c17e5c 100644 --- a/contracts/v4/build/PixuraNFT.json +++ b/contracts/v4/build/PixuraNFT.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036532193, + "lastModified": 1585681881243, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFTContractGenerator.json b/contracts/v4/build/PixuraNFTContractGenerator.json index dc5994d..5f128fd 100644 --- a/contracts/v4/build/PixuraNFTContractGenerator.json +++ b/contracts/v4/build/PixuraNFTContractGenerator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036535095, + "lastModified": 1585681884147, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SupeRare.json b/contracts/v4/build/SupeRare.json index 6dc2159..fa26da5 100644 --- a/contracts/v4/build/SupeRare.json +++ b/contracts/v4/build/SupeRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036535690, + "lastModified": 1585681884783, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareMarketAuction.json b/contracts/v4/build/SuperRareMarketAuction.json index 9d7c4cf..e3548cd 100644 --- a/contracts/v4/build/SuperRareMarketAuction.json +++ b/contracts/v4/build/SuperRareMarketAuction.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036536345, + "lastModified": 1585681885447, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareV2.json b/contracts/v4/build/SuperRareV2.json index 43a2308..1a38493 100644 --- a/contracts/v4/build/SuperRareV2.json +++ b/contracts/v4/build/SuperRareV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036537691, + "lastModified": 1585681886822, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Whitelist.json b/contracts/v4/build/Whitelist.json index 133cb8f..bb02564 100644 --- a/contracts/v4/build/Whitelist.json +++ b/contracts/v4/build/Whitelist.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584036537729, + "lastModified": 1585681886861, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/MaybeSendValue.json b/contracts/v5/build/MaybeSendValue.json index 0a6d5c9..0e7203d 100644 --- a/contracts/v5/build/MaybeSendValue.json +++ b/contracts/v5/build/MaybeSendValue.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1584045258298, + "lastModified": 1585703490966, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SendValueOrEscrow.json b/contracts/v5/build/SendValueOrEscrow.json index e31e257..aa8c61f 100644 --- a/contracts/v5/build/SendValueOrEscrow.json +++ b/contracts/v5/build/SendValueOrEscrow.json @@ -1,14 +1,14 @@ { "networks": {}, - "lastModified": 1584045258938, + "lastModified": 1585703491645, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146101145780638f32d59b1461015e578063e2982c2114610180578063f2fde38b146101d85761007d565b806331b3eb9414610082578063653cfa59146100c6578063715018a61461010a575b600080fd5b6100c46004803603602081101561009857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061021c565b005b610108600480360360208110156100dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102d8565b005b610112610394565b005b61011c6104cd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101666104f6565b604051808215151515815260200191505060405180910390f35b6101c26004803603602081101561019657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610554565b6040518082815260200191505060405180910390f35b61021a600480360360208110156101ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610637565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b5050505050565b61039c6104f6565b61040e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105386106bd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156105f557600080fd5b505afa158015610609573d6000803e3d6000fd5b505050506040513d602081101561061f57600080fd5b81019080805190602001909291905050509050919050565b61063f6104f6565b6106b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6106ba816106c5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561074b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061080a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820622882d163f04e214d712bce3b804b2375229e5dae0846821e3bec8b0b00e2c364736f6c63430005100032" + "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146101145780638f32d59b1461015e578063e2982c2114610180578063f2fde38b146101d85761007d565b806331b3eb9414610082578063653cfa59146100c6578063715018a61461010a575b600080fd5b6100c46004803603602081101561009857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061021c565b005b610108600480360360208110156100dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102d8565b005b610112610394565b005b61011c6104cd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101666104f6565b604051808215151515815260200191505060405180910390f35b6101c26004803603602081101561019657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610554565b6040518082815260200191505060405180910390f35b61021a600480360360208110156101ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610637565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b5050505050565b61039c6104f6565b61040e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105386106bd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156105f557600080fd5b505afa158015610609573d6000803e3d6000fd5b505050506040513d602081101561061f57600080fd5b81019080805190602001909291905050509050919050565b61063f6104f6565b6106b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6106ba816106c5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561074b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061080a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820122cb78bae814a1856770eaa7102db2052e641954f3632afd01dbcdb6591c41164736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600061002161019660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040516100cb9061019e565b604051809103906000f0801580156100e7573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051610134906101aa565b604051809103906000f080158015610150573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101b7565b600033905090565b60ff80610a2a83390190565b610d1280610b2983390190565b610864806101c66000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146101145780638f32d59b1461015e578063e2982c2114610180578063f2fde38b146101d85761007d565b806331b3eb9414610082578063653cfa59146100c6578063715018a61461010a575b600080fd5b6100c46004803603602081101561009857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061021c565b005b610108600480360360208110156100dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102d8565b005b610112610394565b005b61011c6104cd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101666104f6565b604051808215151515815260200191505060405180910390f35b6101c26004803603602081101561019657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610554565b6040518082815260200191505060405180910390f35b61021a600480360360208110156101ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610637565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b5050505050565b61039c6104f6565b61040e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105386106bd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156105f557600080fd5b505afa158015610609573d6000803e3d6000fd5b505050506040513d602081101561061f57600080fd5b81019080805190602001909291905050509050919050565b61063f6104f6565b6106b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6106ba816106c5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561074b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061080a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820622882d163f04e214d712bce3b804b2375229e5dae0846821e3bec8b0b00e2c364736f6c63430005100032608060405234801561001057600080fd5b5060e08061001f6000396000f3fe608060405260043610601c5760003560e01c80637d286e48146021575b600080fd5b606060048036036020811015603557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506062565b005b8073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801560a7573d6000803e3d6000fd5b505056fea265627a7a723158205d7667304735b4604dd66baaee33e5adfdc6fe964bb2cc14a05c0d0efce9ac2864736f6c63430005100032608060405260006100146100bf60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1506100c7565b600033905090565b610c3c806100d66000396000f3fe6080604052600436106100555760003560e01c80632348238c1461005a57806351cff8d9146100ab5780636809691a146100fc578063c6dbdf611461014d578063e3a9db1a146101a4578063f340fa0114610209575b600080fd5b34801561006657600080fd5b506100a96004803603602081101561007d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061024d565b005b3480156100b757600080fd5b506100fa600480360360208110156100ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610425565b005b34801561010857600080fd5b5061014b6004803603602081101561011f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f3565b005b34801561015957600080fd5b506101626107a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101b057600080fd5b506101f3600480360360208110156101c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107cc565b6040518082815260200191505060405180910390f35b61024b6004803603602081101561021f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610815565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661028d6109ad565b73ffffffffffffffffffffffffffffffffffffffff16146102f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561037f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180610bb2602a913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166104656109ad565b73ffffffffffffffffffffffffffffffffffffffff16146104d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105a0573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106336109ad565b73ffffffffffffffffffffffffffffffffffffffff161461069f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610751818373ffffffffffffffffffffffffffffffffffffffff166109b590919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108556109ad565b73ffffffffffffffffffffffffffffffffffffffff16146108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600034905061091881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aef90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040518082815260200191505060405180910390a25050565b600033905090565b80471015610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114610a8b576040519150601f19603f3d011682016040523d82523d6000602084013e610a90565b606091505b5050905080610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180610b78603a913960400191505060405180910390fd5b505050565b600080828401905083811015610b6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465645365636f6e646172793a206e6577207072696d61727920697320746865207a65726f20616464726573735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e74a265627a7a72315820328b856d5ece0e8a3c055db02989742d5929fd541848547e6075aeeaa77f9be364736f6c63430005100032" + "object": "608060405234801561001057600080fd5b50600061002161019660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040516100cb9061019e565b604051809103906000f0801580156100e7573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051610134906101aa565b604051809103906000f080158015610150573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101b7565b600033905090565b60ff80610a2a83390190565b610d1280610b2983390190565b610864806101c66000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146101145780638f32d59b1461015e578063e2982c2114610180578063f2fde38b146101d85761007d565b806331b3eb9414610082578063653cfa59146100c6578063715018a61461010a575b600080fd5b6100c46004803603602081101561009857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061021c565b005b610108600480360360208110156100dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102d8565b005b610112610394565b005b61011c6104cd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101666104f6565b604051808215151515815260200191505060405180910390f35b6101c26004803603602081101561019657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610554565b6040518082815260200191505060405180910390f35b61021a600480360360208110156101ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610637565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b5050505050565b61039c6104f6565b61040e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105386106bd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156105f557600080fd5b505afa158015610609573d6000803e3d6000fd5b505050506040513d602081101561061f57600080fd5b81019080805190602001909291905050509050919050565b61063f6104f6565b6106b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6106ba816106c5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561074b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061080a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820122cb78bae814a1856770eaa7102db2052e641954f3632afd01dbcdb6591c41164736f6c63430005100032608060405234801561001057600080fd5b5060e08061001f6000396000f3fe608060405260043610601c5760003560e01c80637d286e48146021575b600080fd5b606060048036036020811015603557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506062565b005b8073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801560a7573d6000803e3d6000fd5b505056fea265627a7a7231582058651cbb7ef7dc5665669cdd8b7bff1262c848fb43a81cde07565597e1473a3364736f6c63430005100032608060405260006100146100bf60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1506100c7565b600033905090565b610c3c806100d66000396000f3fe6080604052600436106100555760003560e01c80632348238c1461005a57806351cff8d9146100ab5780636809691a146100fc578063c6dbdf611461014d578063e3a9db1a146101a4578063f340fa0114610209575b600080fd5b34801561006657600080fd5b506100a96004803603602081101561007d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061024d565b005b3480156100b757600080fd5b506100fa600480360360208110156100ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610425565b005b34801561010857600080fd5b5061014b6004803603602081101561011f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f3565b005b34801561015957600080fd5b506101626107a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101b057600080fd5b506101f3600480360360208110156101c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107cc565b6040518082815260200191505060405180910390f35b61024b6004803603602081101561021f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610815565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661028d6109ad565b73ffffffffffffffffffffffffffffffffffffffff16146102f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561037f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180610bb2602a913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166104656109ad565b73ffffffffffffffffffffffffffffffffffffffff16146104d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105a0573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106336109ad565b73ffffffffffffffffffffffffffffffffffffffff161461069f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610751818373ffffffffffffffffffffffffffffffffffffffff166109b590919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108556109ad565b73ffffffffffffffffffffffffffffffffffffffff16146108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600034905061091881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aef90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040518082815260200191505060405180910390a25050565b600033905090565b80471015610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114610a8b576040519150601f19603f3d011682016040523d82523d6000602084013e610a90565b606091505b5050905080610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180610b78603a913960400191505060405180910390fd5b505050565b600080828401905083811015610b6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465645365636f6e646172793a206e6577207072696d61727920697320746865207a65726f20616464726573735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e74a265627a7a7231582072043145efdfdd04eb2b15d94b169da92539f1062a7acc7e91bd2c81803e643364736f6c63430005100032" } }, "abi": [ diff --git a/contracts/v5/build/SuperRareLegacy.json b/contracts/v5/build/SuperRareLegacy.json new file mode 100644 index 0000000..b5b0368 --- /dev/null +++ b/contracts/v5/build/SuperRareLegacy.json @@ -0,0 +1,627 @@ +{ + "networks": {}, + "lastModified": 1585703501687, + "code": { + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101735760003560e01c80636c0360eb116100de57806395d89b4111610097578063c0b41dfa11610071578063c0b41dfa14610933578063c87b56dd146109a1578063e985e9c514610a48578063f2fde38b14610ac457610173565b806395d89b411461075b578063a22cb465146107de578063b88d4fde1461082e57610173565b80636c0360eb146105c457806370a0823114610647578063715018a61461069f57806382f11a1a146106a95780638da5cb5b146106ef5780638f32d59b1461073957610173565b80632f745c59116101305780632f745c59146103a857806340c1a0641461040a57806342842e0e146104785780634f6ccce7146104e65780636352211e14610528578063651bd4bb1461059657610173565b806301ffc9a71461017857806306fdde03146101dd578063081812fc14610260578063095ea7b3146102ce57806318160ddd1461031c57806323b872dd1461033a575b600080fd5b6101c36004803603602081101561018e57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b08565b604051808215151515815260200191505060405180910390f35b6101e5610b6f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022557808201518184015260208101905061020a565b50505050905090810190601f1680156102525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61028c6004803603602081101561027657600080fd5b8101908080359060200190929190505050610c11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031a600480360360408110156102e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cac565b005b610324610e93565b6040518082815260200191505060405180910390f35b6103a66004803603606081101561035057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ea0565b005b6103f4600480360360408110156103be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f16565b6040518082815260200191505060405180910390f35b6104366004803603602081101561042057600080fd5b8101908080359060200190929190505050610fd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e46004803603606081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108c565b005b610512600480360360208110156104fc57600080fd5b81019080803590602001909291905050506110ac565b6040518082815260200191505060405180910390f35b6105546004803603602081101561053e57600080fd5b810190808035906020019092919050505061112c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c2600480360360208110156105ac57600080fd5b810190808035906020019092919050505061120f565b005b6105cc611403565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060c5780820151818401526020810190506105f1565b50505050905090810190601f1680156106395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106896004803603602081101561065d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a5565b6040518082815260200191505060405180910390f35b6106a761157a565b005b6106d5600480360360208110156106bf57600080fd5b81019080803590602001909291905050506116b5565b604051808215151515815260200191505060405180910390f35b6106f761179f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107416117c9565b604051808215151515815260200191505060405180910390f35b610763611828565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107a3578082015181840152602081019050610788565b50505050905090810190601f1680156107d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61082c600480360360408110156107f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506118ca565b005b6109316004803603608081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611a82565b005b61095f6004803603602081101561094957600080fd5b8101908080359060200190929190505050611afa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109cd600480360360208110156109b757600080fd5b8101908080359060200190929190505050611bf5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0d5780820151818401526020810190506109f2565b50505050905090810190601f168015610a3a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aaa60048036036040811015610a5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df7565b604051808215151515815260200191505060405180910390f35b610b0660048036036020811015610ada57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8b565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050505050905090565b6000610c1c82611f11565b610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806131c4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cb78261112c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132486021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d5d611f83565b73ffffffffffffffffffffffffffffffffffffffff161480610d8c5750610d8b81610d86611f83565b611df7565b5b610de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806131396038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b610eb1610eab611f83565b82611f8b565b610f06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132696031913960400191505060405180910390fd5b610f1183838361207f565b505050565b6000610f21836114a5565b8210610f78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612f87602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610fc257fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561104a57600080fd5b505afa15801561105e573d6000803e3d6000fd5b505050506040513d602081101561107457600080fd5b81019080805190602001909291905050509050919050565b6110a783838360405180602001604052806000815250611a82565b505050565b60006110b6610e93565b821061110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061329a602c913960400191505060405180910390fd5b6007828154811061111a57fe5b90600052602060002001549050919050565b6000806111a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f77696c6c20616c77617973206661696c0000000000000000000000000000000081525060200191505060405180910390fd5b6111aa826116b5565b6111ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180612fe46033913960400191505060405180910390fd5b611208826120a3565b9050919050565b611218816116b5565b1561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061308d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156112e357600080fd5b505afa1580156112f7573d6000803e3d6000fd5b505050506040513d602081101561130d57600080fd5b8101908080519060200190929190505050905061132982611afa565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806130be603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561149b5780601f106114705761010080835404028352916020019161149b565b820191906000526020600020905b81548152906001019060200180831161147e57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613171602a913960400191505060405180910390fd5b611573600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061216b565b9050919050565b6115826117c9565b6115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d602081101561175557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661180c611f83565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118c05780601f10611895576101008083540402835291602001916118c0565b820191906000526020600020905b8154815290600101906020018083116118a357829003601f168201915b5050505050905090565b6118d2611f83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611973576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611980611f83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a2d611f83565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611a93611a8d611f83565b83611f8b565b611ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132696031913960400191505060405180910390fd5b611af484848484612179565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806130fb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611c0082611f11565b611c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613219602f913960400191505060405180910390fd5b6060600c60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cfe5780601f10611cd357610100808354040283529160200191611cfe565b820191906000526020600020905b815481529060010190602001808311611ce157829003601f168201915b50505050509050600081511415611d275760405180602001604052806000815250915050611df2565b600b816040516020018083805460018160011615610100020316600290048015611d885780601f10611d66576101008083540402835291820191611d88565b820191906000526020600020905b815481529060010190602001808311611d74575b505082805190602001908083835b60208310611db95780518252602082019150602081019050602083039250611d96565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e936117c9565b611f05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611f0e816121eb565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000611f9682611f11565b611feb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613061602c913960400191505060405180910390fd5b6000611ff68361112c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061206557508373ffffffffffffffffffffffffffffffffffffffff1661204d84610c11565b73ffffffffffffffffffffffffffffffffffffffff16145b8061207657506120758185611df7565b5b91505092915050565b61208a838383612331565b612094838261258c565b61209e828261272a565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061319b6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b61218484848461207f565b612190848484846127f1565b6121e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fb26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130176026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff166123518261112c565b73ffffffffffffffffffffffffffffffffffffffff16146123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131f06029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061303d6024913960400191505060405180910390fd5b61244c81612b2d565b612493600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612beb565b6124da600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0e565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006125e46001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612c2490919063ffffffff16565b90506000600660008481526020019081526020016000205490508181146126d1576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061265157fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106126a957fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036127239190612d79565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b60006128128473ffffffffffffffffffffffffffffffffffffffff16612c6e565b61281f5760019050612b25565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612863611f83565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156129135780820151818401526020810190506128f8565b50505050905090810190601f1680156129405780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106129d857805182526020820191506020810190506020830392506129b5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a3a576040519150601f19603f3d011682016040523d82523d6000602084013e612a3f565b606091505b509150915081612aad57600081511115612a5c5780518082602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fb26032913960400191505060405180910390fd5b6000818060200190516020811015612ac457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612be85760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b612c0360018260000154612c2490919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000612c6683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cb9565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015612cb057506000801b8214155b92505050919050565b6000838311158290612d66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d2b578082015181840152602081019050612d10565b50505050905090810190601f168015612d585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b815481835581811115612da057818360005260206000209182019101612d9f9190612da5565b5b505050565b612dc791905b80821115612dc3576000816000905550600101612dab565b5090565b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612e7681611f11565b15612ee9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f82600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0e565b505056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820d5c86d8d847b50bf319a8f778ef92f9ec1722f078d8ddd8f33f35ac8b2b6988d64736f6c63430005100032" + }, + "bytecode": { + "linkReferences": {}, + "object": "60806040523480156200001157600080fd5b5060405162003f7238038062003f72833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291908051906020019092919050505083838181620001e86301ffc9a760e01b6200039160201b60201c565b620002006380ac58cd60e01b6200039160201b60201c565b6200021863780e9d6360e01b6200039160201b60201c565b81600990805190602001906200023092919062000b8d565b5080600a90805190602001906200024992919062000b8d565b5062000262635b5e139f60e01b6200039160201b60201c565b505050506000620002786200049a60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600190505b81811162000386576200037881620004a260201b60201c565b80806001019150506200035f565b505050505062000c3c565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200042e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156200051857600080fd5b505afa1580156200052d573d6000803e3d6000fd5b505050506040513d60208110156200054457600080fd5b810190808051906020019092919050505090506060600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015620005cd57600080fd5b505afa158015620005e2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156200060d57600080fd5b81019080805160405193929190846401000000008211156200062e57600080fd5b838201915060208201858111156200064557600080fd5b82518660018202830111640100000000821117156200066357600080fd5b8083526020830192505050908051906020019080838360005b83811015620006995780820151818401526020810190506200067c565b50505050905090810190601f168015620006c75780820380516001836020036101000a031916815260200191505b506040525050509050620006e282846200074b60201b60201c565b620006f483826200078960201b60201c565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6200076282826200081f60201b62002dca1760201c565b620007748282620009f260201b60201c565b620007858162000ab960201b60201c565b5050565b6200079a8262000b0560201b60201c565b620007f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018062003f46602c913960400191505060405180910390fd5b80600c600084815260200190815260200160002090805190602001906200081a92919062000b8d565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b620008d48162000b0560201b60201c565b1562000948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620009ee600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002062000b7760201b62002c0e1760201c565b5050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6001816000016000828254019250508190555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000bd057805160ff191683800117855562000c01565b8280016001018555821562000c01579182015b8281111562000c0057825182559160200191906001019062000be3565b5b50905062000c10919062000c14565b5090565b62000c3991905b8082111562000c3557600081600090555060010162000c1b565b5090565b90565b6132fa8062000c4c6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636c0360eb116100de57806395d89b4111610097578063c0b41dfa11610071578063c0b41dfa14610933578063c87b56dd146109a1578063e985e9c514610a48578063f2fde38b14610ac457610173565b806395d89b411461075b578063a22cb465146107de578063b88d4fde1461082e57610173565b80636c0360eb146105c457806370a0823114610647578063715018a61461069f57806382f11a1a146106a95780638da5cb5b146106ef5780638f32d59b1461073957610173565b80632f745c59116101305780632f745c59146103a857806340c1a0641461040a57806342842e0e146104785780634f6ccce7146104e65780636352211e14610528578063651bd4bb1461059657610173565b806301ffc9a71461017857806306fdde03146101dd578063081812fc14610260578063095ea7b3146102ce57806318160ddd1461031c57806323b872dd1461033a575b600080fd5b6101c36004803603602081101561018e57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b08565b604051808215151515815260200191505060405180910390f35b6101e5610b6f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022557808201518184015260208101905061020a565b50505050905090810190601f1680156102525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61028c6004803603602081101561027657600080fd5b8101908080359060200190929190505050610c11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031a600480360360408110156102e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cac565b005b610324610e93565b6040518082815260200191505060405180910390f35b6103a66004803603606081101561035057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ea0565b005b6103f4600480360360408110156103be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f16565b6040518082815260200191505060405180910390f35b6104366004803603602081101561042057600080fd5b8101908080359060200190929190505050610fd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e46004803603606081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108c565b005b610512600480360360208110156104fc57600080fd5b81019080803590602001909291905050506110ac565b6040518082815260200191505060405180910390f35b6105546004803603602081101561053e57600080fd5b810190808035906020019092919050505061112c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c2600480360360208110156105ac57600080fd5b810190808035906020019092919050505061120f565b005b6105cc611403565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060c5780820151818401526020810190506105f1565b50505050905090810190601f1680156106395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106896004803603602081101561065d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a5565b6040518082815260200191505060405180910390f35b6106a761157a565b005b6106d5600480360360208110156106bf57600080fd5b81019080803590602001909291905050506116b5565b604051808215151515815260200191505060405180910390f35b6106f761179f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107416117c9565b604051808215151515815260200191505060405180910390f35b610763611828565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107a3578082015181840152602081019050610788565b50505050905090810190601f1680156107d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61082c600480360360408110156107f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506118ca565b005b6109316004803603608081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611a82565b005b61095f6004803603602081101561094957600080fd5b8101908080359060200190929190505050611afa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109cd600480360360208110156109b757600080fd5b8101908080359060200190929190505050611bf5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0d5780820151818401526020810190506109f2565b50505050905090810190601f168015610a3a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aaa60048036036040811015610a5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df7565b604051808215151515815260200191505060405180910390f35b610b0660048036036020811015610ada57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8b565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050505050905090565b6000610c1c82611f11565b610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806131c4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cb78261112c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132486021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d5d611f83565b73ffffffffffffffffffffffffffffffffffffffff161480610d8c5750610d8b81610d86611f83565b611df7565b5b610de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806131396038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b610eb1610eab611f83565b82611f8b565b610f06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132696031913960400191505060405180910390fd5b610f1183838361207f565b505050565b6000610f21836114a5565b8210610f78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612f87602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610fc257fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561104a57600080fd5b505afa15801561105e573d6000803e3d6000fd5b505050506040513d602081101561107457600080fd5b81019080805190602001909291905050509050919050565b6110a783838360405180602001604052806000815250611a82565b505050565b60006110b6610e93565b821061110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061329a602c913960400191505060405180910390fd5b6007828154811061111a57fe5b90600052602060002001549050919050565b6000806111a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f77696c6c20616c77617973206661696c0000000000000000000000000000000081525060200191505060405180910390fd5b6111aa826116b5565b6111ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180612fe46033913960400191505060405180910390fd5b611208826120a3565b9050919050565b611218816116b5565b1561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061308d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156112e357600080fd5b505afa1580156112f7573d6000803e3d6000fd5b505050506040513d602081101561130d57600080fd5b8101908080519060200190929190505050905061132982611afa565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806130be603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561149b5780601f106114705761010080835404028352916020019161149b565b820191906000526020600020905b81548152906001019060200180831161147e57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613171602a913960400191505060405180910390fd5b611573600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061216b565b9050919050565b6115826117c9565b6115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d602081101561175557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661180c611f83565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118c05780601f10611895576101008083540402835291602001916118c0565b820191906000526020600020905b8154815290600101906020018083116118a357829003601f168201915b5050505050905090565b6118d2611f83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611973576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611980611f83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a2d611f83565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611a93611a8d611f83565b83611f8b565b611ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132696031913960400191505060405180910390fd5b611af484848484612179565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806130fb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611c0082611f11565b611c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613219602f913960400191505060405180910390fd5b6060600c60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cfe5780601f10611cd357610100808354040283529160200191611cfe565b820191906000526020600020905b815481529060010190602001808311611ce157829003601f168201915b50505050509050600081511415611d275760405180602001604052806000815250915050611df2565b600b816040516020018083805460018160011615610100020316600290048015611d885780601f10611d66576101008083540402835291820191611d88565b820191906000526020600020905b815481529060010190602001808311611d74575b505082805190602001908083835b60208310611db95780518252602082019150602081019050602083039250611d96565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e936117c9565b611f05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611f0e816121eb565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000611f9682611f11565b611feb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613061602c913960400191505060405180910390fd5b6000611ff68361112c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061206557508373ffffffffffffffffffffffffffffffffffffffff1661204d84610c11565b73ffffffffffffffffffffffffffffffffffffffff16145b8061207657506120758185611df7565b5b91505092915050565b61208a838383612331565b612094838261258c565b61209e828261272a565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061319b6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b61218484848461207f565b612190848484846127f1565b6121e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fb26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130176026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff166123518261112c565b73ffffffffffffffffffffffffffffffffffffffff16146123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131f06029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061303d6024913960400191505060405180910390fd5b61244c81612b2d565b612493600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612beb565b6124da600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0e565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006125e46001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612c2490919063ffffffff16565b90506000600660008481526020019081526020016000205490508181146126d1576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061265157fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106126a957fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036127239190612d79565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b60006128128473ffffffffffffffffffffffffffffffffffffffff16612c6e565b61281f5760019050612b25565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612863611f83565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156129135780820151818401526020810190506128f8565b50505050905090810190601f1680156129405780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106129d857805182526020820191506020810190506020830392506129b5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a3a576040519150601f19603f3d011682016040523d82523d6000602084013e612a3f565b606091505b509150915081612aad57600081511115612a5c5780518082602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fb26032913960400191505060405180910390fd5b6000818060200190516020811015612ac457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612be85760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b612c0360018260000154612c2490919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000612c6683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cb9565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015612cb057506000801b8214155b92505050919050565b6000838311158290612d66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d2b578082015181840152602081019050612d10565b50505050905090810190601f168015612d585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b815481835581811115612da057818360005260206000209182019101612d9f9190612da5565b5b505050565b612dc791905b80821115612dc3576000816000905550600101612dab565b5090565b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612e7681611f11565b15612ee9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f82600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0e565b505056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820d5c86d8d847b50bf319a8f778ef92f9ec1722f078d8ddd8f33f35ac8b2b6988d64736f6c634300051000324552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e" + } + }, + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "address", + "name": "_oldSuperRare", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_lastTokenId", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isOwner", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "isUpgraded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "preUpgradeOwnerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "refreshPreUpgradeOwnerOf", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "tokenCreator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/v5/build/SuperRareMarketAuctionV2.json b/contracts/v5/build/SuperRareMarketAuctionV2.json index 786e52b..91a93f8 100644 --- a/contracts/v5/build/SuperRareMarketAuctionV2.json +++ b/contracts/v5/build/SuperRareMarketAuctionV2.json @@ -1,29 +1,14 @@ { - "networks": { - "3": { - "transactionHash": "0x5671e95681b7bb972c1727a94f3ecf01c5861cbab1455ece94bbd04a14dd0b4d", - "deployedBytecode": { - "linkReferences": {}, - "object": "6080604052600436106101405760003560e01c80638f32d59b116100b6578063b8997a971161006f578063b8997a9714610714578063c0f4ed311461073f578063cce7ec1314610797578063d637ecfb146107e5578063e2982c2114610810578063f2fde38b1461087557610140565b80638f32d59b146104fe578063916c03ba1461052d57806393d10cea1461059c5780639407ea981461060b578063955a5a7614610646578063a81db972146106a157610140565b80634ee9e616116101085780634ee9e61614610374578063508c1dbd146103af578063653cfa59146104145780636a16696414610465578063715018a6146104905780638da5cb5b146104a757610140565b806314df85e9146101455780632b702b5f146101e757806331b3eb941461028d57806339b6b1e5146102de5780633e4086e514610339575b600080fd5b34801561015157600080fd5b5061019e6004803603604081101561016857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108c6565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156101f357600080fd5b5061028b6004803603604081101561020a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561024757600080fd5b82018360208201111561025957600080fd5b8035906020019184602083028401116401000000008311171561027b57600080fd5b9091929391929390505050610996565b005b34801561029957600080fd5b506102dc600480360360208110156102b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aaf565b005b3480156102ea57600080fd5b506103376004803603604081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b6b565b005b34801561034557600080fd5b506103726004803603602081101561035c57600080fd5b8101908080359060200190929190505050610ca2565b005b34801561038057600080fd5b506103ad6004803603602081101561039757600080fd5b8101908080359060200190929190505050610d26565b005b3480156103bb57600080fd5b50610412600480360360608110156103d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610daa565b005b34801561042057600080fd5b506104636004803603602081101561043757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111fb565b005b34801561047157600080fd5b5061047a6112b7565b6040518082815260200191505060405180910390f35b34801561049c57600080fd5b506104a56112bd565b005b3480156104b357600080fd5b506104bc6113f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050a57600080fd5b5061051361141f565b604051808215151515815260200191505060405180910390f35b34801561053957600080fd5b506105866004803603604081101561055057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061147d565b6040518082815260200191505060405180910390f35b3480156105a857600080fd5b506105f5600480360360408110156105bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114f1565b6040518082815260200191505060405180910390f35b34801561061757600080fd5b506106446004803603602081101561062e57600080fd5b81019080803590602001909291905050506115cf565b005b34801561065257600080fd5b5061069f6004803603604081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611653565b005b3480156106ad57600080fd5b506106fa600480360360408110156106c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b62565b604051808215151515815260200191505060405180910390f35b34801561072057600080fd5b50610729611bca565b6040518082815260200191505060405180910390f35b6107956004803603606081101561075557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bd0565b005b6107e3600480360360408110156107ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f23565b005b3480156107f157600080fd5b506107fa6124aa565b6040518082815260200191505060405180910390f35b34801561081c57600080fd5b5061085f6004803603602081101561083357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b0565b6040518082815260200191505060405180910390f35b34801561088157600080fd5b506108c46004803603602081101561089857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612593565b005b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509250929050565b61099e61141f565b610a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82829050811015610aa9576001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858585818110610a7057fe5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610a16565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610b5057600080fd5b505af1158015610b64573d6000803e3d6000fd5b5050505050565b6000339050610b7b818484612619565b610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806138df602e913960400191505060405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050610c2f84846126c3565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f99a3761c98d7a0c3980cbeb3d8009b315a463f8020b43ca1e6901611b06547f98386604051808381526020018281526020019250505060405180910390a350505050565b610caa61141f565b610d1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b610d2e61141f565b610da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b8282600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610e0457600080fd5b505afa158015610e18573d6000803e3d6000fd5b505050506040513d6020811015610e2e57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b8101908080519060200190929190505050610f82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b868660008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000208190555033600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508973ffffffffffffffffffffffffffffffffffffffff167fb0b0e4adf2724af8f1646eae3a16f45d696c9334594729d09bf192da1f783871898b604051808381526020018281526020019250505060405180910390a250505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b5050505050565b60085481565b6112c561141f565b611337576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114616127fd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60006114898383612805565b156114e657600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205490506114eb565b600090505b92915050565b60006114fd8383612805565b156115c4576115bd61155e600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461294a565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461297b90919063ffffffff16565b90506115c9565b600090505b92915050565b6115d761141f565b611649576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060088190555050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116ad57600080fd5b505afa1580156116c1573d6000803e3d6000fd5b505050506040513d60208110156116d757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b810190808051906020019092919050505061182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b858560008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561189a57600080fd5b505afa1580156118ae573d6000803e3d6000fd5b505050506040513d60208110156118c457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461195e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b6119688989612a03565b6119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806138b86027913960400191505060405180910390fd5b6000806119ca8b8b6108c6565b915091506119da82338d8d612aad565b60008b90508073ffffffffffffffffffffffffffffffffffffffff166342842e0e33848e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611a9a57600080fd5b505af1158015611aae573d6000803e3d6000fd5b50505050611abc8c8c612c4e565b611ac68c8c612d38565b611ad08c8c612e22565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f2a9d06eec42acd217a17785dbec90b8b4f01a93ecd8c127edd36bfccf239f8b6868f604051808381526020018281526020019250505060405180910390a4505050505050505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b60095481565b60008311611c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74206269642030205765692e00000000000000000000000000000081525060200191505060405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020549050808411611cf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806139a16028913960400191505060405180910390fd5b6000611cfe8561294a565b85019050348114611d5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061390d602e913960400191505060405180910390fd5b600084905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611db257600080fd5b505afa158015611dc6573d6000803e3d6000fd5b505050506040513d6020811015611ddc57600080fd5b8101908080519060200190929190505050905060003390508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4269646465722063616e6e6f74206265206f776e65722e00000000000000000081525060200191505060405180910390fd5b611ea087876126c3565b611eac88828989612ef8565b8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd21fbaad97462831ad0c216f300fefb33a10b03bb18bb70ed668562e88d15d538a89604051808381526020018281526020019250505060405180910390a35050505050505050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f7d57600080fd5b505afa158015611f91573d6000803e3d6000fd5b505050506040513d6020811015611fa757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561206b57600080fd5b505afa15801561207f573d6000803e3d6000fd5b505050506040513d602081101561209557600080fd5b81019080805190602001909291905050506120fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b6121058686612805565b61215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806138256040913960400191505060405180910390fd5b6000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054905060008111612208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061397d6024913960400191505060405180910390fd5b60006122138261294a565b8201905034811461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613865602d913960400191505060405180910390fd5b600088905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e8a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d60208110156122f157600080fd5b810190808051906020019092919050505090506123188461231183613085565b8c8c612aad565b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e82338c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156123d357600080fd5b505af11580156123e7573d6000803e3d6000fd5b505050506123f58a8a612c4e565b612400338b8b612619565b156124105761240f8a8a6126c3565b5b61241a8a8a612e22565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f5764dbcef91eb6f946584f4ea671217c686fa7e858ce4f9f42d08422b86556a9878d604051808381526020018281526020019250505060405180910390a450505050505050505050565b600a5481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561255157600080fd5b505afa158015612565573d6000803e3d6000fd5b505050506040513d602081101561257b57600080fd5b81019080805190602001909291905050509050919050565b61259b61141f565b61260d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6126168161308f565b50565b60008373ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490509392505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905060006127988261294a565b82019050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127d9575050506127f9565b6127e38585612d38565b6127f56127ef84613085565b826131d3565b5050505b5050565b600033905090565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561285e57600080fd5b505afa158015612872573d6000803e3d6000fd5b505050506040513d602081101561288857600080fd5b810190808051906020019092919050505090506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614935050505092915050565b60006129746064612966600854856131f690919063ffffffff16565b61327c90919063ffffffff16565b9050919050565b6000808284019050838110156129f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612af557600080fd5b505afa158015612b09573d6000803e3d6000fd5b505050506040513d6020811015612b1f57600080fd5b8101908080519060200190929190505050905060008373ffffffffffffffffffffffffffffffffffffffff166340c1a064846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b8557600080fd5b505afa158015612b99573d6000803e3d6000fd5b505050506040513d6020811015612baf57600080fd5b810190808051906020019092919050505090506000612bcf8786866132c6565b90506000612bde888787613383565b90506000612bed898888613443565b90506000831115612c0b57612c0a612c0486613085565b846131d3565b5b6000821115612c2757612c26612c2089613085565b836131d3565b5b6000811115612c4357612c42612c3c85613085565b826131d3565b5b505050505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615612e8a57612ef4565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4269646465722063616e6e6f74206265203020616464726573732e000000000081525060200191505060405180910390fd5b82600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555050505050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138926026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006131df83836134ea565b9050806131f1576131f083836136a0565b5b505050565b6000808314156132095760009050613276565b600082840290508284828161321a57fe5b0414613271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061393b6021913960400191505060405180910390fd5b809150505b92915050565b60006132be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061375e565b905092915050565b6000806132d28561294a565b90506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff1615905080156133765760006133676064613359600a548a6131f690919063ffffffff16565b61327c90919063ffffffff16565b9050808301935050505061337c565b81925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156134255760006134176064613409600a54896131f690919063ffffffff16565b61327c90919063ffffffff16565b90508086039250505061343c565b6000613432868686613443565b9050808603925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156134b75760009150506134e3565b6134df60646134d1600954886131f690919063ffffffff16565b61327c90919063ffffffff16565b9150505b9392505050565b6000806060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168486604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f7d286e48000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061361657805182526020820191506020810190506020830392506135f3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613678576040519150601f19603f3d011682016040523d82523d6000602084013e61367d565b606091505b509150915081156136935760019250505061369a565b6000925050505b92915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b15801561374157600080fd5b505af1158015613755573d6000803e3d6000fd5b50505050505050565b6000808311829061380a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137cf5780820151818401526020810190506137b4565b50505050905090810190601f1680156137fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161381657fe5b04905080915050939250505056fe43757272656e7420746f6b656e206f776e6572206d7573742062652074686520706572736f6e20746f206861766520746865206c61746573742070726963652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e6e6f7420616363657074206120626964207768656e207468657265206973206e6f6e652e43616e6e6f742063616e63656c2061206269642069662073656e646572206861736e2774206d616465206f6e652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776f776e6572206d757374206861766520617070726f76656420636f6e7472616374546f6b656e7320707269636564206174203020617265206e6f7420666f722073616c652e4d75737420706c6163652068696768657220626964207468616e206578697374696e67206269642ea265627a7a723158200b8a00616a13b4b9c3c6d595e7e6c0d06f0ccd42a1c1992da8c10fda37d695ad64736f6c63430005100032" - }, - "bytecode": { - "linkReferences": {}, - "object": "608060405260036008556003600955600f600a55600062000025620001a160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350604051620000d190620001a9565b604051809103906000f080158015620000ee573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040516200013d90620001b6565b604051809103906000f0801580156200015a573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001c4565b600033905090565b60ff8062003bd183390190565b610d128062003cd083390190565b6139fd80620001d46000396000f3fe6080604052600436106101405760003560e01c80638f32d59b116100b6578063b8997a971161006f578063b8997a9714610714578063c0f4ed311461073f578063cce7ec1314610797578063d637ecfb146107e5578063e2982c2114610810578063f2fde38b1461087557610140565b80638f32d59b146104fe578063916c03ba1461052d57806393d10cea1461059c5780639407ea981461060b578063955a5a7614610646578063a81db972146106a157610140565b80634ee9e616116101085780634ee9e61614610374578063508c1dbd146103af578063653cfa59146104145780636a16696414610465578063715018a6146104905780638da5cb5b146104a757610140565b806314df85e9146101455780632b702b5f146101e757806331b3eb941461028d57806339b6b1e5146102de5780633e4086e514610339575b600080fd5b34801561015157600080fd5b5061019e6004803603604081101561016857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108c6565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156101f357600080fd5b5061028b6004803603604081101561020a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561024757600080fd5b82018360208201111561025957600080fd5b8035906020019184602083028401116401000000008311171561027b57600080fd5b9091929391929390505050610996565b005b34801561029957600080fd5b506102dc600480360360208110156102b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aaf565b005b3480156102ea57600080fd5b506103376004803603604081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b6b565b005b34801561034557600080fd5b506103726004803603602081101561035c57600080fd5b8101908080359060200190929190505050610ca2565b005b34801561038057600080fd5b506103ad6004803603602081101561039757600080fd5b8101908080359060200190929190505050610d26565b005b3480156103bb57600080fd5b50610412600480360360608110156103d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610daa565b005b34801561042057600080fd5b506104636004803603602081101561043757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111fb565b005b34801561047157600080fd5b5061047a6112b7565b6040518082815260200191505060405180910390f35b34801561049c57600080fd5b506104a56112bd565b005b3480156104b357600080fd5b506104bc6113f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050a57600080fd5b5061051361141f565b604051808215151515815260200191505060405180910390f35b34801561053957600080fd5b506105866004803603604081101561055057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061147d565b6040518082815260200191505060405180910390f35b3480156105a857600080fd5b506105f5600480360360408110156105bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114f1565b6040518082815260200191505060405180910390f35b34801561061757600080fd5b506106446004803603602081101561062e57600080fd5b81019080803590602001909291905050506115cf565b005b34801561065257600080fd5b5061069f6004803603604081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611653565b005b3480156106ad57600080fd5b506106fa600480360360408110156106c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b62565b604051808215151515815260200191505060405180910390f35b34801561072057600080fd5b50610729611bca565b6040518082815260200191505060405180910390f35b6107956004803603606081101561075557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bd0565b005b6107e3600480360360408110156107ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f23565b005b3480156107f157600080fd5b506107fa6124aa565b6040518082815260200191505060405180910390f35b34801561081c57600080fd5b5061085f6004803603602081101561083357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b0565b6040518082815260200191505060405180910390f35b34801561088157600080fd5b506108c46004803603602081101561089857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612593565b005b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509250929050565b61099e61141f565b610a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82829050811015610aa9576001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858585818110610a7057fe5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610a16565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610b5057600080fd5b505af1158015610b64573d6000803e3d6000fd5b5050505050565b6000339050610b7b818484612619565b610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806138df602e913960400191505060405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050610c2f84846126c3565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f99a3761c98d7a0c3980cbeb3d8009b315a463f8020b43ca1e6901611b06547f98386604051808381526020018281526020019250505060405180910390a350505050565b610caa61141f565b610d1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b610d2e61141f565b610da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b8282600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610e0457600080fd5b505afa158015610e18573d6000803e3d6000fd5b505050506040513d6020811015610e2e57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b8101908080519060200190929190505050610f82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b868660008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000208190555033600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508973ffffffffffffffffffffffffffffffffffffffff167fb0b0e4adf2724af8f1646eae3a16f45d696c9334594729d09bf192da1f783871898b604051808381526020018281526020019250505060405180910390a250505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b5050505050565b60085481565b6112c561141f565b611337576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114616127fd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60006114898383612805565b156114e657600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205490506114eb565b600090505b92915050565b60006114fd8383612805565b156115c4576115bd61155e600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461294a565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461297b90919063ffffffff16565b90506115c9565b600090505b92915050565b6115d761141f565b611649576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060088190555050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116ad57600080fd5b505afa1580156116c1573d6000803e3d6000fd5b505050506040513d60208110156116d757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b810190808051906020019092919050505061182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b858560008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561189a57600080fd5b505afa1580156118ae573d6000803e3d6000fd5b505050506040513d60208110156118c457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461195e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b6119688989612a03565b6119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806138b86027913960400191505060405180910390fd5b6000806119ca8b8b6108c6565b915091506119da82338d8d612aad565b60008b90508073ffffffffffffffffffffffffffffffffffffffff166342842e0e33848e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611a9a57600080fd5b505af1158015611aae573d6000803e3d6000fd5b50505050611abc8c8c612c4e565b611ac68c8c612d38565b611ad08c8c612e22565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f2a9d06eec42acd217a17785dbec90b8b4f01a93ecd8c127edd36bfccf239f8b6868f604051808381526020018281526020019250505060405180910390a4505050505050505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b60095481565b60008311611c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74206269642030205765692e00000000000000000000000000000081525060200191505060405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020549050808411611cf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806139a16028913960400191505060405180910390fd5b6000611cfe8561294a565b85019050348114611d5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061390d602e913960400191505060405180910390fd5b600084905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611db257600080fd5b505afa158015611dc6573d6000803e3d6000fd5b505050506040513d6020811015611ddc57600080fd5b8101908080519060200190929190505050905060003390508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4269646465722063616e6e6f74206265206f776e65722e00000000000000000081525060200191505060405180910390fd5b611ea087876126c3565b611eac88828989612ef8565b8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd21fbaad97462831ad0c216f300fefb33a10b03bb18bb70ed668562e88d15d538a89604051808381526020018281526020019250505060405180910390a35050505050505050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f7d57600080fd5b505afa158015611f91573d6000803e3d6000fd5b505050506040513d6020811015611fa757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561206b57600080fd5b505afa15801561207f573d6000803e3d6000fd5b505050506040513d602081101561209557600080fd5b81019080805190602001909291905050506120fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b6121058686612805565b61215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806138256040913960400191505060405180910390fd5b6000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054905060008111612208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061397d6024913960400191505060405180910390fd5b60006122138261294a565b8201905034811461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613865602d913960400191505060405180910390fd5b600088905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e8a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d60208110156122f157600080fd5b810190808051906020019092919050505090506123188461231183613085565b8c8c612aad565b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e82338c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156123d357600080fd5b505af11580156123e7573d6000803e3d6000fd5b505050506123f58a8a612c4e565b612400338b8b612619565b156124105761240f8a8a6126c3565b5b61241a8a8a612e22565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f5764dbcef91eb6f946584f4ea671217c686fa7e858ce4f9f42d08422b86556a9878d604051808381526020018281526020019250505060405180910390a450505050505050505050565b600a5481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561255157600080fd5b505afa158015612565573d6000803e3d6000fd5b505050506040513d602081101561257b57600080fd5b81019080805190602001909291905050509050919050565b61259b61141f565b61260d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6126168161308f565b50565b60008373ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490509392505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905060006127988261294a565b82019050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127d9575050506127f9565b6127e38585612d38565b6127f56127ef84613085565b826131d3565b5050505b5050565b600033905090565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561285e57600080fd5b505afa158015612872573d6000803e3d6000fd5b505050506040513d602081101561288857600080fd5b810190808051906020019092919050505090506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614935050505092915050565b60006129746064612966600854856131f690919063ffffffff16565b61327c90919063ffffffff16565b9050919050565b6000808284019050838110156129f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612af557600080fd5b505afa158015612b09573d6000803e3d6000fd5b505050506040513d6020811015612b1f57600080fd5b8101908080519060200190929190505050905060008373ffffffffffffffffffffffffffffffffffffffff166340c1a064846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b8557600080fd5b505afa158015612b99573d6000803e3d6000fd5b505050506040513d6020811015612baf57600080fd5b810190808051906020019092919050505090506000612bcf8786866132c6565b90506000612bde888787613383565b90506000612bed898888613443565b90506000831115612c0b57612c0a612c0486613085565b846131d3565b5b6000821115612c2757612c26612c2089613085565b836131d3565b5b6000811115612c4357612c42612c3c85613085565b826131d3565b5b505050505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615612e8a57612ef4565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4269646465722063616e6e6f74206265203020616464726573732e000000000081525060200191505060405180910390fd5b82600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555050505050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138926026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006131df83836134ea565b9050806131f1576131f083836136a0565b5b505050565b6000808314156132095760009050613276565b600082840290508284828161321a57fe5b0414613271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061393b6021913960400191505060405180910390fd5b809150505b92915050565b60006132be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061375e565b905092915050565b6000806132d28561294a565b90506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff1615905080156133765760006133676064613359600a548a6131f690919063ffffffff16565b61327c90919063ffffffff16565b9050808301935050505061337c565b81925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156134255760006134176064613409600a54896131f690919063ffffffff16565b61327c90919063ffffffff16565b90508086039250505061343c565b6000613432868686613443565b9050808603925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156134b75760009150506134e3565b6134df60646134d1600954886131f690919063ffffffff16565b61327c90919063ffffffff16565b9150505b9392505050565b6000806060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168486604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f7d286e48000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061361657805182526020820191506020810190506020830392506135f3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613678576040519150601f19603f3d011682016040523d82523d6000602084013e61367d565b606091505b509150915081156136935760019250505061369a565b6000925050505b92915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b15801561374157600080fd5b505af1158015613755573d6000803e3d6000fd5b50505050505050565b6000808311829061380a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137cf5780820151818401526020810190506137b4565b50505050905090810190601f1680156137fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161381657fe5b04905080915050939250505056fe43757272656e7420746f6b656e206f776e6572206d7573742062652074686520706572736f6e20746f206861766520746865206c61746573742070726963652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e6e6f7420616363657074206120626964207768656e207468657265206973206e6f6e652e43616e6e6f742063616e63656c2061206269642069662073656e646572206861736e2774206d616465206f6e652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776f776e6572206d757374206861766520617070726f76656420636f6e7472616374546f6b656e7320707269636564206174203020617265206e6f7420666f722073616c652e4d75737420706c6163652068696768657220626964207468616e206578697374696e67206269642ea265627a7a723158200b8a00616a13b4b9c3c6d595e7e6c0d06f0ccd42a1c1992da8c10fda37d695ad64736f6c63430005100032608060405234801561001057600080fd5b5060e08061001f6000396000f3fe608060405260043610601c5760003560e01c80637d286e48146021575b600080fd5b606060048036036020811015603557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506062565b005b8073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801560a7573d6000803e3d6000fd5b505056fea265627a7a723158205d7667304735b4604dd66baaee33e5adfdc6fe964bb2cc14a05c0d0efce9ac2864736f6c63430005100032608060405260006100146100bf60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1506100c7565b600033905090565b610c3c806100d66000396000f3fe6080604052600436106100555760003560e01c80632348238c1461005a57806351cff8d9146100ab5780636809691a146100fc578063c6dbdf611461014d578063e3a9db1a146101a4578063f340fa0114610209575b600080fd5b34801561006657600080fd5b506100a96004803603602081101561007d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061024d565b005b3480156100b757600080fd5b506100fa600480360360208110156100ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610425565b005b34801561010857600080fd5b5061014b6004803603602081101561011f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f3565b005b34801561015957600080fd5b506101626107a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101b057600080fd5b506101f3600480360360208110156101c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107cc565b6040518082815260200191505060405180910390f35b61024b6004803603602081101561021f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610815565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661028d6109ad565b73ffffffffffffffffffffffffffffffffffffffff16146102f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561037f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180610bb2602a913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166104656109ad565b73ffffffffffffffffffffffffffffffffffffffff16146104d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105a0573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106336109ad565b73ffffffffffffffffffffffffffffffffffffffff161461069f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610751818373ffffffffffffffffffffffffffffffffffffffff166109b590919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108556109ad565b73ffffffffffffffffffffffffffffffffffffffff16146108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600034905061091881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aef90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040518082815260200191505060405180910390a25050565b600033905090565b80471015610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114610a8b576040519150601f19603f3d011682016040523d82523d6000602084013e610a90565b606091505b5050905080610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180610b78603a913960400191505060405180910390fd5b505050565b600080828401905083811015610b6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465645365636f6e646172793a206e6577207072696d61727920697320746865207a65726f20616464726573735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e74a265627a7a72315820328b856d5ece0e8a3c055db02989742d5929fd541848547e6075aeeaa77f9be364736f6c63430005100032" - }, - "blockNumber": "0x72eb45", - "blockHash": "0x15b79d45581d83e7f5aaa40a9fac51c13d1824f188869207948c050fc4ded8ae", - "address": "0x17d0234dc57ef236cdfc4fda76b0810265f44e1f" - } - }, - "lastModified": 1584377588069, + "networks": {}, + "lastModified": 1585703493349, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "6080604052600436106101405760003560e01c80638f32d59b116100b6578063b8997a971161006f578063b8997a9714610714578063c0f4ed311461073f578063cce7ec1314610797578063d637ecfb146107e5578063e2982c2114610810578063f2fde38b1461087557610140565b80638f32d59b146104fe578063916c03ba1461052d57806393d10cea1461059c5780639407ea981461060b578063955a5a7614610646578063a81db972146106a157610140565b80634ee9e616116101085780634ee9e61614610374578063508c1dbd146103af578063653cfa59146104145780636a16696414610465578063715018a6146104905780638da5cb5b146104a757610140565b806314df85e9146101455780632b702b5f146101e757806331b3eb941461028d57806339b6b1e5146102de5780633e4086e514610339575b600080fd5b34801561015157600080fd5b5061019e6004803603604081101561016857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108c6565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156101f357600080fd5b5061028b6004803603604081101561020a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561024757600080fd5b82018360208201111561025957600080fd5b8035906020019184602083028401116401000000008311171561027b57600080fd5b9091929391929390505050610996565b005b34801561029957600080fd5b506102dc600480360360208110156102b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aaf565b005b3480156102ea57600080fd5b506103376004803603604081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b6b565b005b34801561034557600080fd5b506103726004803603602081101561035c57600080fd5b8101908080359060200190929190505050610ca2565b005b34801561038057600080fd5b506103ad6004803603602081101561039757600080fd5b8101908080359060200190929190505050610d26565b005b3480156103bb57600080fd5b50610412600480360360608110156103d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610daa565b005b34801561042057600080fd5b506104636004803603602081101561043757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111fb565b005b34801561047157600080fd5b5061047a6112b7565b6040518082815260200191505060405180910390f35b34801561049c57600080fd5b506104a56112bd565b005b3480156104b357600080fd5b506104bc6113f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050a57600080fd5b5061051361141f565b604051808215151515815260200191505060405180910390f35b34801561053957600080fd5b506105866004803603604081101561055057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061147d565b6040518082815260200191505060405180910390f35b3480156105a857600080fd5b506105f5600480360360408110156105bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114f1565b6040518082815260200191505060405180910390f35b34801561061757600080fd5b506106446004803603602081101561062e57600080fd5b81019080803590602001909291905050506115cf565b005b34801561065257600080fd5b5061069f6004803603604081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611653565b005b3480156106ad57600080fd5b506106fa600480360360408110156106c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b62565b604051808215151515815260200191505060405180910390f35b34801561072057600080fd5b50610729611bca565b6040518082815260200191505060405180910390f35b6107956004803603606081101561075557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bd0565b005b6107e3600480360360408110156107ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f23565b005b3480156107f157600080fd5b506107fa6124aa565b6040518082815260200191505060405180910390f35b34801561081c57600080fd5b5061085f6004803603602081101561083357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b0565b6040518082815260200191505060405180910390f35b34801561088157600080fd5b506108c46004803603602081101561089857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612593565b005b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509250929050565b61099e61141f565b610a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82829050811015610aa9576001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858585818110610a7057fe5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610a16565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610b5057600080fd5b505af1158015610b64573d6000803e3d6000fd5b5050505050565b6000339050610b7b818484612619565b610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806138df602e913960400191505060405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050610c2f84846126c3565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f99a3761c98d7a0c3980cbeb3d8009b315a463f8020b43ca1e6901611b06547f98386604051808381526020018281526020019250505060405180910390a350505050565b610caa61141f565b610d1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b610d2e61141f565b610da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b8282600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610e0457600080fd5b505afa158015610e18573d6000803e3d6000fd5b505050506040513d6020811015610e2e57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b8101908080519060200190929190505050610f82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b868660008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000208190555033600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508973ffffffffffffffffffffffffffffffffffffffff167fb0b0e4adf2724af8f1646eae3a16f45d696c9334594729d09bf192da1f783871898b604051808381526020018281526020019250505060405180910390a250505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b5050505050565b60085481565b6112c561141f565b611337576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114616127fd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60006114898383612805565b156114e657600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205490506114eb565b600090505b92915050565b60006114fd8383612805565b156115c4576115bd61155e600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461294a565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461297b90919063ffffffff16565b90506115c9565b600090505b92915050565b6115d761141f565b611649576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060088190555050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116ad57600080fd5b505afa1580156116c1573d6000803e3d6000fd5b505050506040513d60208110156116d757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b810190808051906020019092919050505061182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b858560008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561189a57600080fd5b505afa1580156118ae573d6000803e3d6000fd5b505050506040513d60208110156118c457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461195e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b6119688989612a03565b6119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806138b86027913960400191505060405180910390fd5b6000806119ca8b8b6108c6565b915091506119da82338d8d612aad565b60008b90508073ffffffffffffffffffffffffffffffffffffffff166342842e0e33848e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611a9a57600080fd5b505af1158015611aae573d6000803e3d6000fd5b50505050611abc8c8c612c4e565b611ac68c8c612d38565b611ad08c8c612e22565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f2a9d06eec42acd217a17785dbec90b8b4f01a93ecd8c127edd36bfccf239f8b6868f604051808381526020018281526020019250505060405180910390a4505050505050505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b60095481565b60008311611c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74206269642030205765692e00000000000000000000000000000081525060200191505060405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020549050808411611cf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806139a16028913960400191505060405180910390fd5b6000611cfe8561294a565b85019050348114611d5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061390d602e913960400191505060405180910390fd5b600084905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611db257600080fd5b505afa158015611dc6573d6000803e3d6000fd5b505050506040513d6020811015611ddc57600080fd5b8101908080519060200190929190505050905060003390508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4269646465722063616e6e6f74206265206f776e65722e00000000000000000081525060200191505060405180910390fd5b611ea087876126c3565b611eac88828989612ef8565b8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd21fbaad97462831ad0c216f300fefb33a10b03bb18bb70ed668562e88d15d538a89604051808381526020018281526020019250505060405180910390a35050505050505050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f7d57600080fd5b505afa158015611f91573d6000803e3d6000fd5b505050506040513d6020811015611fa757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561206b57600080fd5b505afa15801561207f573d6000803e3d6000fd5b505050506040513d602081101561209557600080fd5b81019080805190602001909291905050506120fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b6121058686612805565b61215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806138256040913960400191505060405180910390fd5b6000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054905060008111612208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061397d6024913960400191505060405180910390fd5b60006122138261294a565b8201905034811461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613865602d913960400191505060405180910390fd5b600088905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e8a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d60208110156122f157600080fd5b810190808051906020019092919050505090506123188461231183613085565b8c8c612aad565b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e82338c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156123d357600080fd5b505af11580156123e7573d6000803e3d6000fd5b505050506123f58a8a612c4e565b612400338b8b612619565b156124105761240f8a8a6126c3565b5b61241a8a8a612e22565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f5764dbcef91eb6f946584f4ea671217c686fa7e858ce4f9f42d08422b86556a9878d604051808381526020018281526020019250505060405180910390a450505050505050505050565b600a5481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561255157600080fd5b505afa158015612565573d6000803e3d6000fd5b505050506040513d602081101561257b57600080fd5b81019080805190602001909291905050509050919050565b61259b61141f565b61260d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6126168161308f565b50565b60008373ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490509392505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905060006127988261294a565b82019050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127d9575050506127f9565b6127e38585612d38565b6127f56127ef84613085565b826131d3565b5050505b5050565b600033905090565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561285e57600080fd5b505afa158015612872573d6000803e3d6000fd5b505050506040513d602081101561288857600080fd5b810190808051906020019092919050505090506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614935050505092915050565b60006129746064612966600854856131f690919063ffffffff16565b61327c90919063ffffffff16565b9050919050565b6000808284019050838110156129f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612af557600080fd5b505afa158015612b09573d6000803e3d6000fd5b505050506040513d6020811015612b1f57600080fd5b8101908080519060200190929190505050905060008373ffffffffffffffffffffffffffffffffffffffff166340c1a064846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b8557600080fd5b505afa158015612b99573d6000803e3d6000fd5b505050506040513d6020811015612baf57600080fd5b810190808051906020019092919050505090506000612bcf8786866132c6565b90506000612bde888787613383565b90506000612bed898888613443565b90506000831115612c0b57612c0a612c0486613085565b846131d3565b5b6000821115612c2757612c26612c2089613085565b836131d3565b5b6000811115612c4357612c42612c3c85613085565b826131d3565b5b505050505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615612e8a57612ef4565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4269646465722063616e6e6f74206265203020616464726573732e000000000081525060200191505060405180910390fd5b82600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555050505050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138926026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006131df83836134ea565b9050806131f1576131f083836136a0565b5b505050565b6000808314156132095760009050613276565b600082840290508284828161321a57fe5b0414613271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061393b6021913960400191505060405180910390fd5b809150505b92915050565b60006132be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061375e565b905092915050565b6000806132d28561294a565b90506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff1615905080156133765760006133676064613359600a548a6131f690919063ffffffff16565b61327c90919063ffffffff16565b9050808301935050505061337c565b81925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156134255760006134176064613409600a54896131f690919063ffffffff16565b61327c90919063ffffffff16565b90508086039250505061343c565b6000613432868686613443565b9050808603925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156134b75760009150506134e3565b6134df60646134d1600954886131f690919063ffffffff16565b61327c90919063ffffffff16565b9150505b9392505050565b6000806060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168486604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f7d286e48000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061361657805182526020820191506020810190506020830392506135f3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613678576040519150601f19603f3d011682016040523d82523d6000602084013e61367d565b606091505b509150915081156136935760019250505061369a565b6000925050505b92915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b15801561374157600080fd5b505af1158015613755573d6000803e3d6000fd5b50505050505050565b6000808311829061380a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137cf5780820151818401526020810190506137b4565b50505050905090810190601f1680156137fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161381657fe5b04905080915050939250505056fe43757272656e7420746f6b656e206f776e6572206d7573742062652074686520706572736f6e20746f206861766520746865206c61746573742070726963652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e6e6f7420616363657074206120626964207768656e207468657265206973206e6f6e652e43616e6e6f742063616e63656c2061206269642069662073656e646572206861736e2774206d616465206f6e652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776f776e6572206d757374206861766520617070726f76656420636f6e7472616374546f6b656e7320707269636564206174203020617265206e6f7420666f722073616c652e4d75737420706c6163652068696768657220626964207468616e206578697374696e67206269642ea265627a7a723158200b8a00616a13b4b9c3c6d595e7e6c0d06f0ccd42a1c1992da8c10fda37d695ad64736f6c63430005100032" + "object": "6080604052600436106101655760003560e01c80638f32d59b116100d1578063c0f4ed311161008a578063d7a8602d11610064578063d7a8602d1461088f578063e2982c21146108ba578063f2fde38b1461091f578063fe37158a1461097057610165565b8063c0f4ed31146107be578063cce7ec1314610816578063d637ecfb1461086457610165565b80638f32d59b146105a8578063916c03ba146105d757806393d10cea146106465780639407ea98146106b5578063955a5a76146106f0578063a81db9721461074b57610165565b80634ee9e616116101235780634ee9e6161461041e578063508c1dbd14610459578063653cfa59146104be5780636a1669641461050f578063715018a61461053a5780638da5cb5b1461055157610165565b8062ecb91b1461016a57806314df85e9146101cf5780632b702b5f1461027157806331b3eb941461031757806339b6b1e5146103685780633e63bf0e146103c3575b600080fd5b34801561017657600080fd5b506101b96004803603602081101561018d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109ab565b6040518082815260200191505060405180910390f35b3480156101db57600080fd5b50610228600480360360408110156101f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a0e565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b34801561027d57600080fd5b506103156004803603604081101561029457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102d157600080fd5b8201836020820111156102e357600080fd5b8035906020019184602083028401116401000000008311171561030557600080fd5b9091929391929390505050610ade565b005b34801561032357600080fd5b506103666004803603602081101561033a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bf7565b005b34801561037457600080fd5b506103c16004803603604081101561038b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cb3565b005b3480156103cf57600080fd5b5061041c600480360360408110156103e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dea565b005b34801561042a57600080fd5b506104576004803603602081101561044157600080fd5b8101908080359060200190929190505050610eac565b005b34801561046557600080fd5b506104bc6004803603606081101561047c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610f30565b005b3480156104ca57600080fd5b5061050d600480360360208110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611381565b005b34801561051b57600080fd5b5061052461143d565b6040518082815260200191505060405180910390f35b34801561054657600080fd5b5061054f611443565b005b34801561055d57600080fd5b5061056661157c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105b457600080fd5b506105bd6115a5565b604051808215151515815260200191505060405180910390f35b3480156105e357600080fd5b50610630600480360360408110156105fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611603565b6040518082815260200191505060405180910390f35b34801561065257600080fd5b5061069f6004803603604081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611677565b6040518082815260200191505060405180910390f35b3480156106c157600080fd5b506106ee600480360360208110156106d857600080fd5b8101908080359060200190929190505050611755565b005b3480156106fc57600080fd5b506107496004803603604081101561071357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117d9565b005b34801561075757600080fd5b506107a46004803603604081101561076e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ce8565b604051808215151515815260200191505060405180910390f35b610814600480360360608110156107d457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d50565b005b6108626004803603604081101561082c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120a3565b005b34801561087057600080fd5b5061087961262a565b6040518082815260200191505060405180910390f35b34801561089b57600080fd5b506108a4612630565b6040518082815260200191505060405180910390f35b3480156108c657600080fd5b50610909600480360360208110156108dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612636565b6040518082815260200191505060405180910390f35b34801561092b57600080fd5b5061096e6004803603602081101561094257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612719565b005b34801561097c57600080fd5b506109a96004803603602081101561099357600080fd5b810190808035906020019092919050505061279f565b005b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610a025780915050610a09565b600a549150505b919050565b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509250929050565b610ae66115a5565b610b58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82829050811015610bf1576001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858585818110610bb857fe5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610b5e565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610c9857600080fd5b505af1158015610cac573d6000803e3d6000fd5b5050505050565b6000339050610cc3818484612823565b610d18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613af5602e913960400191505060405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050610d7784846128cd565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f99a3761c98d7a0c3980cbeb3d8009b315a463f8020b43ca1e6901611b06547f98386604051808381526020018281526020019250505060405180910390a350505050565b610df26115a5565b610e64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610eb46115a5565b610f26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b8190555050565b8282600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f8a57600080fd5b505afa158015610f9e573d6000803e3d6000fd5b505050506040513d6020811015610fb457600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561107857600080fd5b505afa15801561108c573d6000803e3d6000fd5b505050506040513d60208110156110a257600080fd5b8101908080519060200190929190505050611108576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b726021913960400191505060405180910390fd5b868660008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561117757600080fd5b505afa15801561118b573d6000803e3d6000fd5b505050506040513d60208110156111a157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000208190555033600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508973ffffffffffffffffffffffffffffffffffffffff167fb0b0e4adf2724af8f1646eae3a16f45d696c9334594729d09bf192da1f783871898b604051808381526020018281526020019250505060405180910390a250505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561142257600080fd5b505af1158015611436573d6000803e3d6000fd5b5050505050565b60095481565b61144b6115a5565b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115e7612a07565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600061160f8383612a0f565b1561166c57600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020549050611671565b600090505b92915050565b60006116838383612a0f565b1561174a576117436116e4600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002054612b54565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002054612b8590919063ffffffff16565b905061174f565b600090505b92915050565b61175d6115a5565b6117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561183357600080fd5b505afa158015611847573d6000803e3d6000fd5b505050506040513d602081101561185d57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561192157600080fd5b505afa158015611935573d6000803e3d6000fd5b505050506040513d602081101561194b57600080fd5b81019080805190602001909291905050506119b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b726021913960400191505060405180910390fd5b858560008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611a2057600080fd5b505afa158015611a34573d6000803e3d6000fd5b505050506040513d6020811015611a4a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b611aee8989612c0d565b611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ace6027913960400191505060405180910390fd5b600080611b508b8b610a0e565b91509150611b6082338d8d612cb7565b60008b90508073ffffffffffffffffffffffffffffffffffffffff166342842e0e33848e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611c2057600080fd5b505af1158015611c34573d6000803e3d6000fd5b50505050611c428c8c612e58565b611c4c8c8c612f42565b611c568c8c61302c565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f2a9d06eec42acd217a17785dbec90b8b4f01a93ecd8c127edd36bfccf239f8b6868f604051808381526020018281526020019250505060405180910390a4505050505050505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b60008311611dc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74206269642030205765692e00000000000000000000000000000081525060200191505060405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020549050808411611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613bb76028913960400191505060405180910390fd5b6000611e7e85612b54565b85019050348114611eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613b23602e913960400191505060405180910390fd5b600084905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f3257600080fd5b505afa158015611f46573d6000803e3d6000fd5b505050506040513d6020811015611f5c57600080fd5b8101908080519060200190929190505050905060003390508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612016576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4269646465722063616e6e6f74206265206f776e65722e00000000000000000081525060200191505060405180910390fd5b61202087876128cd565b61202c88828989613102565b8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd21fbaad97462831ad0c216f300fefb33a10b03bb18bb70ed668562e88d15d538a89604051808381526020018281526020019250505060405180910390a35050505050505050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156120fd57600080fd5b505afa158015612111573d6000803e3d6000fd5b505050506040513d602081101561212757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156121eb57600080fd5b505afa1580156121ff573d6000803e3d6000fd5b505050506040513d602081101561221557600080fd5b810190808051906020019092919050505061227b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b726021913960400191505060405180910390fd5b6122858686612a0f565b6122da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180613a3b6040913960400191505060405180910390fd5b6000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054905060008111612388576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613b936024913960400191505060405180910390fd5b600061239382612b54565b820190503481146123ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613a7b602d913960400191505060405180910390fd5b600088905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e8a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561244757600080fd5b505afa15801561245b573d6000803e3d6000fd5b505050506040513d602081101561247157600080fd5b81019080805190602001909291905050509050612498846124918361328f565b8c8c612cb7565b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e82338c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561255357600080fd5b505af1158015612567573d6000803e3d6000fd5b505050506125758a8a612e58565b612580338b8b612823565b156125905761258f8a8a6128cd565b5b61259a8a8a61302c565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f5764dbcef91eb6f946584f4ea671217c686fa7e858ce4f9f42d08422b86556a9878d604051808381526020018281526020019250505060405180910390a450505050505050505050565b600b5481565b600a5481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126d757600080fd5b505afa1580156126eb573d6000803e3d6000fd5b505050506040513d602081101561270157600080fd5b81019080805190602001909291905050509050919050565b6127216115a5565b612793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61279c81613299565b50565b6127a76115a5565b612819576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b60008373ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490509392505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905060006129a282612b54565b82019050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e357505050612a03565b6129ed8585612f42565b6129ff6129f98461328f565b826133dd565b5050505b5050565b600033905090565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612a6857600080fd5b505afa158015612a7c573d6000803e3d6000fd5b505050506040513d6020811015612a9257600080fd5b810190808051906020019092919050505090506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614935050505092915050565b6000612b7e6064612b706009548561340090919063ffffffff16565b61348690919063ffffffff16565b9050919050565b600080828401905083811015612c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cff57600080fd5b505afa158015612d13573d6000803e3d6000fd5b505050506040513d6020811015612d2957600080fd5b8101908080519060200190929190505050905060008373ffffffffffffffffffffffffffffffffffffffff166340c1a064846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612d8f57600080fd5b505afa158015612da3573d6000803e3d6000fd5b505050506040513d6020811015612db957600080fd5b810190808051906020019092919050505090506000612dd98786866134d0565b90506000612de888878761358d565b90506000612df789888861364d565b90506000831115612e1557612e14612e0e8661328f565b846133dd565b5b6000821115612e3157612e30612e2a8961328f565b836133dd565b5b6000811115612e4d57612e4c612e468561328f565b826133dd565b5b505050505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615613094576130fe565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4269646465722063616e6e6f74206265203020616464726573732e000000000081525060200191505060405180910390fd5b82600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555050505050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561331f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613aa86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006133e98383613700565b9050806133fb576133fa83836138b6565b5b505050565b6000808314156134135760009050613480565b600082840290508284828161342457fe5b041461347b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b516021913960400191505060405180910390fd5b809150505b92915050565b60006134c883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613974565b905092915050565b6000806134dc85612b54565b90506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff1615905080156135805760006135716064613563600b548a61340090919063ffffffff16565b61348690919063ffffffff16565b90508083019350505050613586565b81925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff16159050801561362f5760006136216064613613600b548961340090919063ffffffff16565b61348690919063ffffffff16565b905080860392505050613646565b600061363c86868661364d565b9050808603925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156136c15760009150506136f9565b60006136cc856109ab565b90506136f460646136e6838961340090919063ffffffff16565b61348690919063ffffffff16565b925050505b9392505050565b6000806060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168486604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f7d286e48000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061382c5780518252602082019150602081019050602083039250613809565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461388e576040519150601f19603f3d011682016040523d82523d6000602084013e613893565b606091505b509150915081156138a9576001925050506138b0565b6000925050505b92915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b15801561395757600080fd5b505af115801561396b573d6000803e3d6000fd5b50505050505050565b60008083118290613a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139e55780820151818401526020810190506139ca565b50505050905090810190601f168015613a125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a2c57fe5b04905080915050939250505056fe43757272656e7420746f6b656e206f776e6572206d7573742062652074686520706572736f6e20746f206861766520746865206c61746573742070726963652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e6e6f7420616363657074206120626964207768656e207468657265206973206e6f6e652e43616e6e6f742063616e63656c2061206269642069662073656e646572206861736e2774206d616465206f6e652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776f776e6572206d757374206861766520617070726f76656420636f6e7472616374546f6b656e7320707269636564206174203020617265206e6f7420666f722073616c652e4d75737420706c6163652068696768657220626964207468616e206578697374696e67206269642ea265627a7a72315820ff1020fe286239b500e3311cc7a584a84f5b17da030055a74c4de6ca28fb599764736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "608060405260036008556003600955600f600a55600062000025620001a160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350604051620000d190620001a9565b604051809103906000f080158015620000ee573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040516200013d90620001b6565b604051809103906000f0801580156200015a573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001c4565b600033905090565b60ff8062003bd183390190565b610d128062003cd083390190565b6139fd80620001d46000396000f3fe6080604052600436106101405760003560e01c80638f32d59b116100b6578063b8997a971161006f578063b8997a9714610714578063c0f4ed311461073f578063cce7ec1314610797578063d637ecfb146107e5578063e2982c2114610810578063f2fde38b1461087557610140565b80638f32d59b146104fe578063916c03ba1461052d57806393d10cea1461059c5780639407ea981461060b578063955a5a7614610646578063a81db972146106a157610140565b80634ee9e616116101085780634ee9e61614610374578063508c1dbd146103af578063653cfa59146104145780636a16696414610465578063715018a6146104905780638da5cb5b146104a757610140565b806314df85e9146101455780632b702b5f146101e757806331b3eb941461028d57806339b6b1e5146102de5780633e4086e514610339575b600080fd5b34801561015157600080fd5b5061019e6004803603604081101561016857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108c6565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b3480156101f357600080fd5b5061028b6004803603604081101561020a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561024757600080fd5b82018360208201111561025957600080fd5b8035906020019184602083028401116401000000008311171561027b57600080fd5b9091929391929390505050610996565b005b34801561029957600080fd5b506102dc600480360360208110156102b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aaf565b005b3480156102ea57600080fd5b506103376004803603604081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b6b565b005b34801561034557600080fd5b506103726004803603602081101561035c57600080fd5b8101908080359060200190929190505050610ca2565b005b34801561038057600080fd5b506103ad6004803603602081101561039757600080fd5b8101908080359060200190929190505050610d26565b005b3480156103bb57600080fd5b50610412600480360360608110156103d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610daa565b005b34801561042057600080fd5b506104636004803603602081101561043757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111fb565b005b34801561047157600080fd5b5061047a6112b7565b6040518082815260200191505060405180910390f35b34801561049c57600080fd5b506104a56112bd565b005b3480156104b357600080fd5b506104bc6113f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050a57600080fd5b5061051361141f565b604051808215151515815260200191505060405180910390f35b34801561053957600080fd5b506105866004803603604081101561055057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061147d565b6040518082815260200191505060405180910390f35b3480156105a857600080fd5b506105f5600480360360408110156105bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114f1565b6040518082815260200191505060405180910390f35b34801561061757600080fd5b506106446004803603602081101561062e57600080fd5b81019080803590602001909291905050506115cf565b005b34801561065257600080fd5b5061069f6004803603604081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611653565b005b3480156106ad57600080fd5b506106fa600480360360408110156106c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b62565b604051808215151515815260200191505060405180910390f35b34801561072057600080fd5b50610729611bca565b6040518082815260200191505060405180910390f35b6107956004803603606081101561075557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bd0565b005b6107e3600480360360408110156107ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f23565b005b3480156107f157600080fd5b506107fa6124aa565b6040518082815260200191505060405180910390f35b34801561081c57600080fd5b5061085f6004803603602081101561083357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b0565b6040518082815260200191505060405180910390f35b34801561088157600080fd5b506108c46004803603602081101561089857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612593565b005b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509250929050565b61099e61141f565b610a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82829050811015610aa9576001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858585818110610a7057fe5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610a16565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610b5057600080fd5b505af1158015610b64573d6000803e3d6000fd5b5050505050565b6000339050610b7b818484612619565b610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806138df602e913960400191505060405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050610c2f84846126c3565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f99a3761c98d7a0c3980cbeb3d8009b315a463f8020b43ca1e6901611b06547f98386604051808381526020018281526020019250505060405180910390a350505050565b610caa61141f565b610d1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b610d2e61141f565b610da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b8282600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610e0457600080fd5b505afa158015610e18573d6000803e3d6000fd5b505050506040513d6020811015610e2e57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b8101908080519060200190929190505050610f82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b868660008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000208190555033600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508973ffffffffffffffffffffffffffffffffffffffff167fb0b0e4adf2724af8f1646eae3a16f45d696c9334594729d09bf192da1f783871898b604051808381526020018281526020019250505060405180910390a250505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b5050505050565b60085481565b6112c561141f565b611337576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114616127fd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60006114898383612805565b156114e657600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205490506114eb565b600090505b92915050565b60006114fd8383612805565b156115c4576115bd61155e600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461294a565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461297b90919063ffffffff16565b90506115c9565b600090505b92915050565b6115d761141f565b611649576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060088190555050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116ad57600080fd5b505afa1580156116c1573d6000803e3d6000fd5b505050506040513d60208110156116d757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b810190808051906020019092919050505061182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b858560008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561189a57600080fd5b505afa1580156118ae573d6000803e3d6000fd5b505050506040513d60208110156118c457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461195e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b6119688989612a03565b6119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806138b86027913960400191505060405180910390fd5b6000806119ca8b8b6108c6565b915091506119da82338d8d612aad565b60008b90508073ffffffffffffffffffffffffffffffffffffffff166342842e0e33848e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611a9a57600080fd5b505af1158015611aae573d6000803e3d6000fd5b50505050611abc8c8c612c4e565b611ac68c8c612d38565b611ad08c8c612e22565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f2a9d06eec42acd217a17785dbec90b8b4f01a93ecd8c127edd36bfccf239f8b6868f604051808381526020018281526020019250505060405180910390a4505050505050505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b60095481565b60008311611c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74206269642030205765692e00000000000000000000000000000081525060200191505060405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020549050808411611cf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806139a16028913960400191505060405180910390fd5b6000611cfe8561294a565b85019050348114611d5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061390d602e913960400191505060405180910390fd5b600084905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611db257600080fd5b505afa158015611dc6573d6000803e3d6000fd5b505050506040513d6020811015611ddc57600080fd5b8101908080519060200190929190505050905060003390508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4269646465722063616e6e6f74206265206f776e65722e00000000000000000081525060200191505060405180910390fd5b611ea087876126c3565b611eac88828989612ef8565b8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd21fbaad97462831ad0c216f300fefb33a10b03bb18bb70ed668562e88d15d538a89604051808381526020018281526020019250505060405180910390a35050505050505050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f7d57600080fd5b505afa158015611f91573d6000803e3d6000fd5b505050506040513d6020811015611fa757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561206b57600080fd5b505afa15801561207f573d6000803e3d6000fd5b505050506040513d602081101561209557600080fd5b81019080805190602001909291905050506120fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061395c6021913960400191505060405180910390fd5b6121058686612805565b61215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806138256040913960400191505060405180910390fd5b6000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054905060008111612208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061397d6024913960400191505060405180910390fd5b60006122138261294a565b8201905034811461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613865602d913960400191505060405180910390fd5b600088905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e8a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d60208110156122f157600080fd5b810190808051906020019092919050505090506123188461231183613085565b8c8c612aad565b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e82338c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156123d357600080fd5b505af11580156123e7573d6000803e3d6000fd5b505050506123f58a8a612c4e565b612400338b8b612619565b156124105761240f8a8a6126c3565b5b61241a8a8a612e22565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f5764dbcef91eb6f946584f4ea671217c686fa7e858ce4f9f42d08422b86556a9878d604051808381526020018281526020019250505060405180910390a450505050505050505050565b600a5481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561255157600080fd5b505afa158015612565573d6000803e3d6000fd5b505050506040513d602081101561257b57600080fd5b81019080805190602001909291905050509050919050565b61259b61141f565b61260d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6126168161308f565b50565b60008373ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490509392505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905060006127988261294a565b82019050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127d9575050506127f9565b6127e38585612d38565b6127f56127ef84613085565b826131d3565b5050505b5050565b600033905090565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561285e57600080fd5b505afa158015612872573d6000803e3d6000fd5b505050506040513d602081101561288857600080fd5b810190808051906020019092919050505090506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614935050505092915050565b60006129746064612966600854856131f690919063ffffffff16565b61327c90919063ffffffff16565b9050919050565b6000808284019050838110156129f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612af557600080fd5b505afa158015612b09573d6000803e3d6000fd5b505050506040513d6020811015612b1f57600080fd5b8101908080519060200190929190505050905060008373ffffffffffffffffffffffffffffffffffffffff166340c1a064846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b8557600080fd5b505afa158015612b99573d6000803e3d6000fd5b505050506040513d6020811015612baf57600080fd5b810190808051906020019092919050505090506000612bcf8786866132c6565b90506000612bde888787613383565b90506000612bed898888613443565b90506000831115612c0b57612c0a612c0486613085565b846131d3565b5b6000821115612c2757612c26612c2089613085565b836131d3565b5b6000811115612c4357612c42612c3c85613085565b826131d3565b5b505050505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615612e8a57612ef4565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4269646465722063616e6e6f74206265203020616464726573732e000000000081525060200191505060405180910390fd5b82600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555050505050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138926026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006131df83836134ea565b9050806131f1576131f083836136a0565b5b505050565b6000808314156132095760009050613276565b600082840290508284828161321a57fe5b0414613271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061393b6021913960400191505060405180910390fd5b809150505b92915050565b60006132be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061375e565b905092915050565b6000806132d28561294a565b90506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff1615905080156133765760006133676064613359600a548a6131f690919063ffffffff16565b61327c90919063ffffffff16565b9050808301935050505061337c565b81925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156134255760006134176064613409600a54896131f690919063ffffffff16565b61327c90919063ffffffff16565b90508086039250505061343c565b6000613432868686613443565b9050808603925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156134b75760009150506134e3565b6134df60646134d1600954886131f690919063ffffffff16565b61327c90919063ffffffff16565b9150505b9392505050565b6000806060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168486604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f7d286e48000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061361657805182526020820191506020810190506020830392506135f3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613678576040519150601f19603f3d011682016040523d82523d6000602084013e61367d565b606091505b509150915081156136935760019250505061369a565b6000925050505b92915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b15801561374157600080fd5b505af1158015613755573d6000803e3d6000fd5b50505050505050565b6000808311829061380a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137cf5780820151818401526020810190506137b4565b50505050905090810190601f1680156137fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161381657fe5b04905080915050939250505056fe43757272656e7420746f6b656e206f776e6572206d7573742062652074686520706572736f6e20746f206861766520746865206c61746573742070726963652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e6e6f7420616363657074206120626964207768656e207468657265206973206e6f6e652e43616e6e6f742063616e63656c2061206269642069662073656e646572206861736e2774206d616465206f6e652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776f776e6572206d757374206861766520617070726f76656420636f6e7472616374546f6b656e7320707269636564206174203020617265206e6f7420666f722073616c652e4d75737420706c6163652068696768657220626964207468616e206578697374696e67206269642ea265627a7a723158200b8a00616a13b4b9c3c6d595e7e6c0d06f0ccd42a1c1992da8c10fda37d695ad64736f6c63430005100032608060405234801561001057600080fd5b5060e08061001f6000396000f3fe608060405260043610601c5760003560e01c80637d286e48146021575b600080fd5b606060048036036020811015603557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506062565b005b8073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801560a7573d6000803e3d6000fd5b505056fea265627a7a723158205d7667304735b4604dd66baaee33e5adfdc6fe964bb2cc14a05c0d0efce9ac2864736f6c63430005100032608060405260006100146100bf60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1506100c7565b600033905090565b610c3c806100d66000396000f3fe6080604052600436106100555760003560e01c80632348238c1461005a57806351cff8d9146100ab5780636809691a146100fc578063c6dbdf611461014d578063e3a9db1a146101a4578063f340fa0114610209575b600080fd5b34801561006657600080fd5b506100a96004803603602081101561007d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061024d565b005b3480156100b757600080fd5b506100fa600480360360208110156100ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610425565b005b34801561010857600080fd5b5061014b6004803603602081101561011f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f3565b005b34801561015957600080fd5b506101626107a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101b057600080fd5b506101f3600480360360208110156101c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107cc565b6040518082815260200191505060405180910390f35b61024b6004803603602081101561021f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610815565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661028d6109ad565b73ffffffffffffffffffffffffffffffffffffffff16146102f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561037f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180610bb2602a913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166104656109ad565b73ffffffffffffffffffffffffffffffffffffffff16146104d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105a0573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106336109ad565b73ffffffffffffffffffffffffffffffffffffffff161461069f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610751818373ffffffffffffffffffffffffffffffffffffffff166109b590919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108556109ad565b73ffffffffffffffffffffffffffffffffffffffff16146108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600034905061091881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aef90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040518082815260200191505060405180910390a25050565b600033905090565b80471015610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114610a8b576040519150601f19603f3d011682016040523d82523d6000602084013e610a90565b606091505b5050905080610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180610b78603a913960400191505060405180910390fd5b505050565b600080828401905083811015610b6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465645365636f6e646172793a206e6577207072696d61727920697320746865207a65726f20616464726573735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e74a265627a7a72315820328b856d5ece0e8a3c055db02989742d5929fd541848547e6075aeeaa77f9be364736f6c63430005100032" + "object": "608060405260036009556005600a55600f600b55600062000025620001a160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350604051620000d190620001a9565b604051809103906000f080158015620000ee573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040516200013d90620001b6565b604051809103906000f0801580156200015a573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001c4565b600033905090565b60ff8062003de783390190565b610d128062003ee683390190565b613c1380620001d46000396000f3fe6080604052600436106101655760003560e01c80638f32d59b116100d1578063c0f4ed311161008a578063d7a8602d11610064578063d7a8602d1461088f578063e2982c21146108ba578063f2fde38b1461091f578063fe37158a1461097057610165565b8063c0f4ed31146107be578063cce7ec1314610816578063d637ecfb1461086457610165565b80638f32d59b146105a8578063916c03ba146105d757806393d10cea146106465780639407ea98146106b5578063955a5a76146106f0578063a81db9721461074b57610165565b80634ee9e616116101235780634ee9e6161461041e578063508c1dbd14610459578063653cfa59146104be5780636a1669641461050f578063715018a61461053a5780638da5cb5b1461055157610165565b8062ecb91b1461016a57806314df85e9146101cf5780632b702b5f1461027157806331b3eb941461031757806339b6b1e5146103685780633e63bf0e146103c3575b600080fd5b34801561017657600080fd5b506101b96004803603602081101561018d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109ab565b6040518082815260200191505060405180910390f35b3480156101db57600080fd5b50610228600480360360408110156101f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a0e565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b34801561027d57600080fd5b506103156004803603604081101561029457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102d157600080fd5b8201836020820111156102e357600080fd5b8035906020019184602083028401116401000000008311171561030557600080fd5b9091929391929390505050610ade565b005b34801561032357600080fd5b506103666004803603602081101561033a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bf7565b005b34801561037457600080fd5b506103c16004803603604081101561038b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cb3565b005b3480156103cf57600080fd5b5061041c600480360360408110156103e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dea565b005b34801561042a57600080fd5b506104576004803603602081101561044157600080fd5b8101908080359060200190929190505050610eac565b005b34801561046557600080fd5b506104bc6004803603606081101561047c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610f30565b005b3480156104ca57600080fd5b5061050d600480360360208110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611381565b005b34801561051b57600080fd5b5061052461143d565b6040518082815260200191505060405180910390f35b34801561054657600080fd5b5061054f611443565b005b34801561055d57600080fd5b5061056661157c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105b457600080fd5b506105bd6115a5565b604051808215151515815260200191505060405180910390f35b3480156105e357600080fd5b50610630600480360360408110156105fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611603565b6040518082815260200191505060405180910390f35b34801561065257600080fd5b5061069f6004803603604081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611677565b6040518082815260200191505060405180910390f35b3480156106c157600080fd5b506106ee600480360360208110156106d857600080fd5b8101908080359060200190929190505050611755565b005b3480156106fc57600080fd5b506107496004803603604081101561071357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117d9565b005b34801561075757600080fd5b506107a46004803603604081101561076e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ce8565b604051808215151515815260200191505060405180910390f35b610814600480360360608110156107d457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d50565b005b6108626004803603604081101561082c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120a3565b005b34801561087057600080fd5b5061087961262a565b6040518082815260200191505060405180910390f35b34801561089b57600080fd5b506108a4612630565b6040518082815260200191505060405180910390f35b3480156108c657600080fd5b50610909600480360360208110156108dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612636565b6040518082815260200191505060405180910390f35b34801561092b57600080fd5b5061096e6004803603602081101561094257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612719565b005b34801561097c57600080fd5b506109a96004803603602081101561099357600080fd5b810190808035906020019092919050505061279f565b005b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610a025780915050610a09565b600a549150505b919050565b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509250929050565b610ae66115a5565b610b58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82829050811015610bf1576001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858585818110610bb857fe5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610b5e565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610c9857600080fd5b505af1158015610cac573d6000803e3d6000fd5b5050505050565b6000339050610cc3818484612823565b610d18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613af5602e913960400191505060405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050610d7784846128cd565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f99a3761c98d7a0c3980cbeb3d8009b315a463f8020b43ca1e6901611b06547f98386604051808381526020018281526020019250505060405180910390a350505050565b610df26115a5565b610e64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610eb46115a5565b610f26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b8190555050565b8282600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f8a57600080fd5b505afa158015610f9e573d6000803e3d6000fd5b505050506040513d6020811015610fb457600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561107857600080fd5b505afa15801561108c573d6000803e3d6000fd5b505050506040513d60208110156110a257600080fd5b8101908080519060200190929190505050611108576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b726021913960400191505060405180910390fd5b868660008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561117757600080fd5b505afa15801561118b573d6000803e3d6000fd5b505050506040513d60208110156111a157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000208190555033600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508973ffffffffffffffffffffffffffffffffffffffff167fb0b0e4adf2724af8f1646eae3a16f45d696c9334594729d09bf192da1f783871898b604051808381526020018281526020019250505060405180910390a250505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636809691a826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561142257600080fd5b505af1158015611436573d6000803e3d6000fd5b5050505050565b60095481565b61144b6115a5565b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115e7612a07565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600061160f8383612a0f565b1561166c57600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020549050611671565b600090505b92915050565b60006116838383612a0f565b1561174a576117436116e4600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002054612b54565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002054612b8590919063ffffffff16565b905061174f565b600090505b92915050565b61175d6115a5565b6117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561183357600080fd5b505afa158015611847573d6000803e3d6000fd5b505050506040513d602081101561185d57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561192157600080fd5b505afa158015611935573d6000803e3d6000fd5b505050506040513d602081101561194b57600080fd5b81019080805190602001909291905050506119b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b726021913960400191505060405180910390fd5b858560008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611a2057600080fd5b505afa158015611a34573d6000803e3d6000fd5b505050506040513d6020811015611a4a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73656e646572206d7573742062652074686520746f6b656e206f776e6572000081525060200191505060405180910390fd5b611aee8989612c0d565b611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ace6027913960400191505060405180910390fd5b600080611b508b8b610a0e565b91509150611b6082338d8d612cb7565b60008b90508073ffffffffffffffffffffffffffffffffffffffff166342842e0e33848e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611c2057600080fd5b505af1158015611c34573d6000803e3d6000fd5b50505050611c428c8c612e58565b611c4c8c8c612f42565b611c568c8c61302c565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f2a9d06eec42acd217a17785dbec90b8b4f01a93ecd8c127edd36bfccf239f8b6868f604051808381526020018281526020019250505060405180910390a4505050505050505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b60008311611dc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74206269642030205765692e00000000000000000000000000000081525060200191505060405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020549050808411611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613bb76028913960400191505060405180910390fd5b6000611e7e85612b54565b85019050348114611eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613b23602e913960400191505060405180910390fd5b600084905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f3257600080fd5b505afa158015611f46573d6000803e3d6000fd5b505050506040513d6020811015611f5c57600080fd5b8101908080519060200190929190505050905060003390508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612016576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4269646465722063616e6e6f74206265206f776e65722e00000000000000000081525060200191505060405180910390fd5b61202087876128cd565b61202c88828989613102565b8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd21fbaad97462831ad0c216f300fefb33a10b03bb18bb70ed668562e88d15d538a89604051808381526020018281526020019250505060405180910390a35050505050505050565b8181600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156120fd57600080fd5b505afa158015612111573d6000803e3d6000fd5b505050506040513d602081101561212757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663e985e9c582306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156121eb57600080fd5b505afa1580156121ff573d6000803e3d6000fd5b505050506040513d602081101561221557600080fd5b810190808051906020019092919050505061227b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b726021913960400191505060405180910390fd5b6122858686612a0f565b6122da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180613a3b6040913960400191505060405180910390fd5b6000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054905060008111612388576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613b936024913960400191505060405180910390fd5b600061239382612b54565b820190503481146123ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613a7b602d913960400191505060405180910390fd5b600088905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e8a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561244757600080fd5b505afa15801561245b573d6000803e3d6000fd5b505050506040513d602081101561247157600080fd5b81019080805190602001909291905050509050612498846124918361328f565b8c8c612cb7565b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e82338c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561255357600080fd5b505af1158015612567573d6000803e3d6000fd5b505050506125758a8a612e58565b612580338b8b612823565b156125905761258f8a8a6128cd565b5b61259a8a8a61302c565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f5764dbcef91eb6f946584f4ea671217c686fa7e858ce4f9f42d08422b86556a9878d604051808381526020018281526020019250505060405180910390a450505050505050505050565b600b5481565b600a5481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126d757600080fd5b505afa1580156126eb573d6000803e3d6000fd5b505050506040513d602081101561270157600080fd5b81019080805190602001909291905050509050919050565b6127216115a5565b612793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61279c81613299565b50565b6127a76115a5565b612819576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b60008373ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490509392505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905060006129a282612b54565b82019050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e357505050612a03565b6129ed8585612f42565b6129ff6129f98461328f565b826133dd565b5050505b5050565b600033905090565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612a6857600080fd5b505afa158015612a7c573d6000803e3d6000fd5b505050506040513d6020811015612a9257600080fd5b810190808051906020019092919050505090506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614935050505092915050565b6000612b7e6064612b706009548561340090919063ffffffff16565b61348690919063ffffffff16565b9050919050565b600080828401905083811015612c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cff57600080fd5b505afa158015612d13573d6000803e3d6000fd5b505050506040513d6020811015612d2957600080fd5b8101908080519060200190929190505050905060008373ffffffffffffffffffffffffffffffffffffffff166340c1a064846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612d8f57600080fd5b505afa158015612da3573d6000803e3d6000fd5b505050506040513d6020811015612db957600080fd5b810190808051906020019092919050505090506000612dd98786866134d0565b90506000612de888878761358d565b90506000612df789888861364d565b90506000831115612e1557612e14612e0e8661328f565b846133dd565b5b6000821115612e3157612e30612e2a8961328f565b836133dd565b5b6000811115612e4d57612e4c612e468561328f565b826133dd565b5b505050505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615613094576130fe565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4269646465722063616e6e6f74206265203020616464726573732e000000000081525060200191505060405180910390fd5b82600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555050505050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561331f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613aa86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006133e98383613700565b9050806133fb576133fa83836138b6565b5b505050565b6000808314156134135760009050613480565b600082840290508284828161342457fe5b041461347b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b516021913960400191505060405180910390fd5b809150505b92915050565b60006134c883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613974565b905092915050565b6000806134dc85612b54565b90506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff1615905080156135805760006135716064613563600b548a61340090919063ffffffff16565b61348690919063ffffffff16565b90508083019350505050613586565b81925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff16159050801561362f5760006136216064613613600b548961340090919063ffffffff16565b61348690919063ffffffff16565b905080860392505050613646565b600061363c86868661364d565b9050808603925050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615905080156136c15760009150506136f9565b60006136cc856109ab565b90506136f460646136e6838961340090919063ffffffff16565b61348690919063ffffffff16565b925050505b9392505050565b6000806060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168486604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f7d286e48000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061382c5780518252602082019150602081019050602083039250613809565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461388e576040519150601f19603f3d011682016040523d82523d6000602084013e613893565b606091505b509150915081156138a9576001925050506138b0565b6000925050505b92915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b15801561395757600080fd5b505af115801561396b573d6000803e3d6000fd5b50505050505050565b60008083118290613a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139e55780820151818401526020810190506139ca565b50505050905090810190601f168015613a125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a2c57fe5b04905080915050939250505056fe43757272656e7420746f6b656e206f776e6572206d7573742062652074686520706572736f6e20746f206861766520746865206c61746573742070726963652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e6e6f7420616363657074206120626964207768656e207468657265206973206e6f6e652e43616e6e6f742063616e63656c2061206269642069662073656e646572206861736e2774206d616465206f6e652e4d7573742070757263686173652074686520746f6b656e20666f722074686520636f72726563742070726963652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776f776e6572206d757374206861766520617070726f76656420636f6e7472616374546f6b656e7320707269636564206174203020617265206e6f7420666f722073616c652e4d75737420706c6163652068696768657220626964207468616e206578697374696e67206269642ea265627a7a72315820ff1020fe286239b500e3311cc7a584a84f5b17da030055a74c4de6ca28fb599764736f6c63430005100032608060405234801561001057600080fd5b5060e08061001f6000396000f3fe608060405260043610601c5760003560e01c80637d286e48146021575b600080fd5b606060048036036020811015603557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506062565b005b8073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801560a7573d6000803e3d6000fd5b505056fea265627a7a7231582058651cbb7ef7dc5665669cdd8b7bff1262c848fb43a81cde07565597e1473a3364736f6c63430005100032608060405260006100146100bf60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1506100c7565b600033905090565b610c3c806100d66000396000f3fe6080604052600436106100555760003560e01c80632348238c1461005a57806351cff8d9146100ab5780636809691a146100fc578063c6dbdf611461014d578063e3a9db1a146101a4578063f340fa0114610209575b600080fd5b34801561006657600080fd5b506100a96004803603602081101561007d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061024d565b005b3480156100b757600080fd5b506100fa600480360360208110156100ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610425565b005b34801561010857600080fd5b5061014b6004803603602081101561011f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f3565b005b34801561015957600080fd5b506101626107a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101b057600080fd5b506101f3600480360360208110156101c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107cc565b6040518082815260200191505060405180910390f35b61024b6004803603602081101561021f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610815565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661028d6109ad565b73ffffffffffffffffffffffffffffffffffffffff16146102f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561037f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180610bb2602a913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166104656109ad565b73ffffffffffffffffffffffffffffffffffffffff16146104d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105a0573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106336109ad565b73ffffffffffffffffffffffffffffffffffffffff161461069f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610751818373ffffffffffffffffffffffffffffffffffffffff166109b590919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108556109ad565b73ffffffffffffffffffffffffffffffffffffffff16146108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180610bdc602c913960400191505060405180910390fd5b600034905061091881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aef90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040518082815260200191505060405180910390a25050565b600033905090565b80471015610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114610a8b576040519150601f19603f3d011682016040523d82523d6000602084013e610a90565b606091505b5050905080610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180610b78603a913960400191505060405180910390fd5b505050565b600080828401905083811015610b6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465645365636f6e646172793a206e6577207072696d61727920697320746865207a65726f20616464726573735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e74a265627a7a7231582072043145efdfdd04eb2b15d94b169da92539f1062a7acc7e91bd2c81803e643364736f6c63430005100032" } }, "abi": [ @@ -323,6 +308,42 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "defaultRoyaltyFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "_originContract", + "type": "address" + } + ], + "name": "getERC721ContractRoyaltyFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [ @@ -460,30 +481,35 @@ "type": "function" }, { - "constant": true, - "inputs": [], - "name": "royaltyFee", - "outputs": [ + "constant": false, + "inputs": [ { "internalType": "uint256", - "name": "", + "name": "_percentage", "type": "uint256" } ], + "name": "setDefaultRoyaltyFee", + "outputs": [], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ + { + "internalType": "address", + "name": "_originContract", + "type": "address" + }, { "internalType": "uint256", "name": "_percentage", "type": "uint256" } ], - "name": "setMarketplaceFee", + "name": "setERC721ContractRoyaltyFee", "outputs": [], "payable": false, "stateMutability": "nonpayable", @@ -498,7 +524,7 @@ "type": "uint256" } ], - "name": "setPrimarySaleFee", + "name": "setMarketplaceFee", "outputs": [], "payable": false, "stateMutability": "nonpayable", @@ -513,7 +539,7 @@ "type": "uint256" } ], - "name": "setRoyaltyFee", + "name": "setPrimarySaleFee", "outputs": [], "payable": false, "stateMutability": "nonpayable", diff --git a/contracts/v5/build/TestAssertFailOnPay.json b/contracts/v5/build/TestAssertFailOnPay.json index fc442b3..f5f9cd7 100644 --- a/contracts/v5/build/TestAssertFailOnPay.json +++ b/contracts/v5/build/TestAssertFailOnPay.json @@ -1,14 +1,14 @@ { "networks": {}, - "lastModified": 1584045203313, + "lastModified": 1585703494876, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "60806040526004361061001e5760003560e01c80634da00aea14610028575b600061002657fe5b005b61009e6004803603608081101561003e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100a0565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561012f57600080fd5b505af1158015610143573d6000803e3d6000fd5b50505050505050505056fea265627a7a7231582032269c9cee04c7d922f02e54ec6591ae86dad8c7efc061f61f444805e971446264736f6c63430005100032" + "object": "60806040526004361061001e5760003560e01c80634da00aea14610028575b600061002657fe5b005b61009e6004803603608081101561003e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100a0565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561012f57600080fd5b505af1158015610143573d6000803e3d6000fd5b50505050505050505056fea265627a7a7231582039acde23ed6c74ada63b286d8fc989bfd8e77c66ea92ae8653817ef5e912570664736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50610183806100206000396000f3fe60806040526004361061001e5760003560e01c80634da00aea14610028575b600061002657fe5b005b61009e6004803603608081101561003e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100a0565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561012f57600080fd5b505af1158015610143573d6000803e3d6000fd5b50505050505050505056fea265627a7a7231582032269c9cee04c7d922f02e54ec6591ae86dad8c7efc061f61f444805e971446264736f6c63430005100032" + "object": "608060405234801561001057600080fd5b50610183806100206000396000f3fe60806040526004361061001e5760003560e01c80634da00aea14610028575b600061002657fe5b005b61009e6004803603608081101561003e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100a0565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561012f57600080fd5b505af1158015610143573d6000803e3d6000fd5b50505050505050505056fea265627a7a7231582039acde23ed6c74ada63b286d8fc989bfd8e77c66ea92ae8653817ef5e912570664736f6c63430005100032" } }, "abi": [ diff --git a/contracts/v5/build/TestExpensiveWallet.json b/contracts/v5/build/TestExpensiveWallet.json index 6cc1ef7..84d0e2a 100644 --- a/contracts/v5/build/TestExpensiveWallet.json +++ b/contracts/v5/build/TestExpensiveWallet.json @@ -1,14 +1,14 @@ { "networks": {}, - "lastModified": 1584045206097, + "lastModified": 1585703497875, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "6080604052600436106100555760003560e01c80634da00aea146100ca578063501f22ed14610142578063715018a6146101935780638da5cb5b146101aa5780638f32d59b14610201578063f2fde38b14610230575b60008090505b6216e3608110156100715760018101905061005b565b61008161007c610281565b6102aa565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156100c6573d6000803e3d6000fd5b5050005b610140600480360360808110156100e057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102b4565b005b34801561014e57600080fd5b506101916004803603602081101561016557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610362565b005b34801561019f57600080fd5b506101a861047e565b005b3480156101b657600080fd5b506101bf610281565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020d57600080fd5b506102166105b7565b604051808215151515815260200191505060405180910390f35b34801561023c57600080fd5b5061027f6004803603602081101561025357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610615565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b505050505050505050565b61036a6105b7565b6103dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663653cfa59610401306102aa565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561046357600080fd5b505af1158015610477573d6000803e3d6000fd5b5050505050565b6104866105b7565b6104f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105f961069b565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b61061d6105b7565b61068f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610698816106a3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806107e86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820d166aa7c838a2ef939192a6f7378d4310d756d33324e0edca9ba537fd499950d64736f6c63430005100032" + "object": "6080604052600436106100555760003560e01c80634da00aea146100ca578063501f22ed14610142578063715018a6146101935780638da5cb5b146101aa5780638f32d59b14610201578063f2fde38b14610230575b60008090505b6216e3608110156100715760018101905061005b565b61008161007c610281565b6102aa565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156100c6573d6000803e3d6000fd5b5050005b610140600480360360808110156100e057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102b4565b005b34801561014e57600080fd5b506101916004803603602081101561016557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610362565b005b34801561019f57600080fd5b506101a861047e565b005b3480156101b657600080fd5b506101bf610281565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020d57600080fd5b506102166105b7565b604051808215151515815260200191505060405180910390f35b34801561023c57600080fd5b5061027f6004803603602081101561025357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610615565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b505050505050505050565b61036a6105b7565b6103dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663653cfa59610401306102aa565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561046357600080fd5b505af1158015610477573d6000803e3d6000fd5b5050505050565b6104866105b7565b6104f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105f961069b565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b61061d6105b7565b61068f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610698816106a3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806107e86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820597f0cae3a27fd5e44aca4cf5a0eacf626d0214856accc2e7057729b7c7818ae64736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "608060405260006100146100b760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506100bf565b600033905090565b610842806100ce6000396000f3fe6080604052600436106100555760003560e01c80634da00aea146100ca578063501f22ed14610142578063715018a6146101935780638da5cb5b146101aa5780638f32d59b14610201578063f2fde38b14610230575b60008090505b6216e3608110156100715760018101905061005b565b61008161007c610281565b6102aa565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156100c6573d6000803e3d6000fd5b5050005b610140600480360360808110156100e057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102b4565b005b34801561014e57600080fd5b506101916004803603602081101561016557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610362565b005b34801561019f57600080fd5b506101a861047e565b005b3480156101b657600080fd5b506101bf610281565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020d57600080fd5b506102166105b7565b604051808215151515815260200191505060405180910390f35b34801561023c57600080fd5b5061027f6004803603602081101561025357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610615565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b505050505050505050565b61036a6105b7565b6103dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663653cfa59610401306102aa565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561046357600080fd5b505af1158015610477573d6000803e3d6000fd5b5050505050565b6104866105b7565b6104f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105f961069b565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b61061d6105b7565b61068f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610698816106a3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806107e86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820d166aa7c838a2ef939192a6f7378d4310d756d33324e0edca9ba537fd499950d64736f6c63430005100032" + "object": "608060405260006100146100b760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506100bf565b600033905090565b610842806100ce6000396000f3fe6080604052600436106100555760003560e01c80634da00aea146100ca578063501f22ed14610142578063715018a6146101935780638da5cb5b146101aa5780638f32d59b14610201578063f2fde38b14610230575b60008090505b6216e3608110156100715760018101905061005b565b61008161007c610281565b6102aa565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156100c6573d6000803e3d6000fd5b5050005b610140600480360360808110156100e057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102b4565b005b34801561014e57600080fd5b506101916004803603602081101561016557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610362565b005b34801561019f57600080fd5b506101a861047e565b005b3480156101b657600080fd5b506101bf610281565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020d57600080fd5b506102166105b7565b604051808215151515815260200191505060405180910390f35b34801561023c57600080fd5b5061027f6004803603602081101561025357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610615565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b505050505050505050565b61036a6105b7565b6103dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663653cfa59610401306102aa565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561046357600080fd5b505af1158015610477573d6000803e3d6000fd5b5050505050565b6104866105b7565b6104f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105f961069b565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b61061d6105b7565b61068f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610698816106a3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806107e86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820597f0cae3a27fd5e44aca4cf5a0eacf626d0214856accc2e7057729b7c7818ae64736f6c63430005100032" } }, "abi": [ diff --git a/contracts/v5/build/TestRequireFailOnPay.json b/contracts/v5/build/TestRequireFailOnPay.json index e9a05df..5047bd1 100644 --- a/contracts/v5/build/TestRequireFailOnPay.json +++ b/contracts/v5/build/TestRequireFailOnPay.json @@ -1,14 +1,14 @@ { "networks": {}, - "lastModified": 1584045204680, + "lastModified": 1585703496377, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "60806040526004361061001e5760003560e01c80634da00aea14610094575b6000610092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f726561647920746f206661696c2121210000000000000000000000000000000081525060200191505060405180910390fd5b005b61010a600480360360808110156100aa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061010c565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561019b57600080fd5b505af11580156101af573d6000803e3d6000fd5b50505050505050505056fea265627a7a72315820e070124edee6d461093a0382c720f7b2ca141327f9900d79f93b9f9f5f2b667564736f6c63430005100032" + "object": "60806040526004361061001e5760003560e01c80634da00aea14610094575b6000610092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f726561647920746f206661696c2121210000000000000000000000000000000081525060200191505060405180910390fd5b005b61010a600480360360808110156100aa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061010c565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561019b57600080fd5b505af11580156101af573d6000803e3d6000fd5b50505050505050505056fea265627a7a7231582030394203c5604c6f1df40324d232dbb9a95ac921287c67ec2576710ce388e66a64736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506101ef806100206000396000f3fe60806040526004361061001e5760003560e01c80634da00aea14610094575b6000610092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f726561647920746f206661696c2121210000000000000000000000000000000081525060200191505060405180910390fd5b005b61010a600480360360808110156100aa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061010c565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561019b57600080fd5b505af11580156101af573d6000803e3d6000fd5b50505050505050505056fea265627a7a72315820e070124edee6d461093a0382c720f7b2ca141327f9900d79f93b9f9f5f2b667564736f6c63430005100032" + "object": "608060405234801561001057600080fd5b506101ef806100206000396000f3fe60806040526004361061001e5760003560e01c80634da00aea14610094575b6000610092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f726561647920746f206661696c2121210000000000000000000000000000000081525060200191505060405180910390fd5b005b61010a600480360360808110156100aa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061010c565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561019b57600080fd5b505af11580156101af573d6000803e3d6000fd5b50505050505050505056fea265627a7a7231582030394203c5604c6f1df40324d232dbb9a95ac921287c67ec2576710ce388e66a64736f6c63430005100032" } }, "abi": [ diff --git a/contracts/v5/build/TestRevertOnPay.json b/contracts/v5/build/TestRevertOnPay.json index 5f60aab..20bf2dc 100644 --- a/contracts/v5/build/TestRevertOnPay.json +++ b/contracts/v5/build/TestRevertOnPay.json @@ -1,14 +1,14 @@ { "networks": {}, - "lastModified": 1584045207450, + "lastModified": 1585703499298, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "60806040526004361061001e5760003560e01c80634da00aea1461006f575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806101966026913960400191505060405180910390fd5b6100e56004803603608081101561008557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100e7565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561017657600080fd5b505af115801561018a573d6000803e3d6000fd5b50505050505050505056fe49276c6c206661696c20796f7572207472616e736665722e2e2e6d7561616861686168616861a265627a7a723158208be66096f88589d4bf5091de679728022328e5ecf937f0675ba0ba4de87c6bbc64736f6c63430005100032" + "object": "60806040526004361061001e5760003560e01c80634da00aea1461006f575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806101966026913960400191505060405180910390fd5b6100e56004803603608081101561008557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100e7565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561017657600080fd5b505af115801561018a573d6000803e3d6000fd5b50505050505050505056fe49276c6c206661696c20796f7572207472616e736665722e2e2e6d7561616861686168616861a265627a7a723158201ba180b394f32852d31a0a1157b3baaae461c45d2e039d225e80f670c789a24f64736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506101f0806100206000396000f3fe60806040526004361061001e5760003560e01c80634da00aea1461006f575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806101966026913960400191505060405180910390fd5b6100e56004803603608081101561008557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100e7565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561017657600080fd5b505af115801561018a573d6000803e3d6000fd5b50505050505050505056fe49276c6c206661696c20796f7572207472616e736665722e2e2e6d7561616861686168616861a265627a7a723158208be66096f88589d4bf5091de679728022328e5ecf937f0675ba0ba4de87c6bbc64736f6c63430005100032" + "object": "608060405234801561001057600080fd5b506101f0806100206000396000f3fe60806040526004361061001e5760003560e01c80634da00aea1461006f575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806101966026913960400191505060405180910390fd5b6100e56004803603608081101561008557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100e7565b005b8073ffffffffffffffffffffffffffffffffffffffff1663c0f4ed31348686866040518563ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303818588803b15801561017657600080fd5b505af115801561018a573d6000803e3d6000fd5b50505050505050505056fe49276c6c206661696c20796f7572207472616e736665722e2e2e6d7561616861686168616861a265627a7a723158201ba180b394f32852d31a0a1157b3baaae461c45d2e039d225e80f670c789a24f64736f6c63430005100032" } }, "abi": [ diff --git a/contracts/v5/chanterelle.json b/contracts/v5/chanterelle.json index 6c96abe..b75bbbc 100644 --- a/contracts/v5/chanterelle.json +++ b/contracts/v5/chanterelle.json @@ -10,9 +10,14 @@ "TestAssertFailOnPay", "TestRequireFailOnPay", "TestExpensiveWallet", - "TestRevertOnPay" + "TestRevertOnPay", + "SuperRareLegacy" + ], + "dependencies": [ + "zeppelin-solidity", + "openzeppelin-solidity", + "openzepplin-solidity-pixura" ], - "dependencies": ["zeppelin-solidity", "openzeppelin-solidity"], "libraries": {}, "networks": {}, "solc-output-selection": [], diff --git a/contracts/v5/src/IERC721Creator.sol b/contracts/v5/src/IERC721Creator.sol index f6a888a..2b17c7e 100644 --- a/contracts/v5/src/IERC721Creator.sol +++ b/contracts/v5/src/IERC721Creator.sol @@ -1,15 +1,14 @@ pragma solidity ^0.5.0; -import "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol"; /** * @title IERC721 Non-Fungible Token Creator basic interface */ -contract IERC721Creator is IERC721 { +contract IERC721Creator { /** - * @dev Gets the creator of the token - * @param _tokenId uint256 ID of the token - * @return address of the creator - */ + * @dev Gets the creator of the token + * @param _tokenId uint256 ID of the token + * @return address of the creator + */ function tokenCreator(uint256 _tokenId) external view returns (address); } diff --git a/contracts/v5/src/ISupeRare.sol b/contracts/v5/src/ISupeRare.sol new file mode 100644 index 0000000..240c1bc --- /dev/null +++ b/contracts/v5/src/ISupeRare.sol @@ -0,0 +1,52 @@ +pragma solidity ^0.5.0; + + +/** + * @dev Interface for interacting with the SupeRare contract that holds SuperRare beta tokens. + */ +interface ISupeRare { + /** + * @notice A descriptive name for a collection of NFTs in this contract + */ + function name() external pure returns (string memory _name); + + /** + * @notice An abbreviated name for NFTs in this contract + */ + function symbol() external pure returns (string memory _symbol); + + /** + * @dev Returns whether the creator is whitelisted + * @param _creator address to check + * @return bool + */ + function isWhitelisted(address _creator) external view returns (bool); + + /** + * @notice A distinct Uniform Resource Identifier (URI) for a given asset. + * @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC + * 3986. The URI may point to a JSON file that conforms to the "ERC721 + * Metadata JSON Schema". + */ + function tokenURI(uint256 _tokenId) external view returns (string memory); + + /** + * @dev Gets the creator of the token + * @param _tokenId uint256 ID of the token + * @return address of the creator + */ + function creatorOfToken(uint256 _tokenId) external view returns (address); + + /** + * @dev Gets the total amount of tokens stored by the contract + * @return uint256 representing the total amount of tokens + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Gets the owner of the specified token ID + * @param _tokenId uint256 ID of the token to query the owner of + * @return owner address currently marked as the owner of the given token ID + */ + function ownerOf(uint256 _tokenId) external view returns (address); +} diff --git a/contracts/v5/src/SuperRareLegacy.sol b/contracts/v5/src/SuperRareLegacy.sol new file mode 100644 index 0000000..f271afb --- /dev/null +++ b/contracts/v5/src/SuperRareLegacy.sol @@ -0,0 +1,151 @@ +pragma solidity ^0.5.0; + +import "openzeppelin-solidity-pixura/contracts/token/ERC721/ERC721.sol"; +import "openzeppelin-solidity-pixura/contracts/ownership/Ownable.sol"; +import "openzeppelin-solidity-pixura/contracts/math/SafeMath.sol"; +import "openzeppelin-solidity-pixura/contracts/token/ERC721/ERC721Full.sol"; +import "./ISupeRare.sol"; +import "./IERC721Creator.sol"; + + +/** + * @title SuperRare Legacy Tokens + * @dev This contract acts the new SuperRare Legacy contract (formerly known as SupeRare). + * It is used to upgrade SupeRare tokens to make them fully ERC721 compliant. + * + */ +contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { + using SafeMath for uint256; + + ///////////////////////////////////////////////////////////////////////// + // State Variables + ///////////////////////////////////////////////////////////////////////// + + // Old SuperRare contract to look up token details. + ISupeRare private oldSuperRare; + + // Mapping from token ID to the pre upgrade token owner. + mapping(uint256 => address) private _tokenOwnerPreUpgrade; + + ///////////////////////////////////////////////////////////////////////// + // Constructor + ///////////////////////////////////////////////////////////////////////// + constructor( + string memory _name, + string memory _symbol, + address _oldSuperRare, + uint256 _lastTokenId + ) public ERC721Full(_name, _symbol) { + // Set old SuperRare. + oldSuperRare = ISupeRare(_oldSuperRare); + + // Mint the legacy tokens. + for (uint256 i = 1; i <= _lastTokenId; i++) { + _createLegacyToken(i); + } + } + + ///////////////////////////////////////////////////////////////////////// + // Public Methods + ///////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////// + // ownerOf + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Returns the owner of the NFT specified by `tokenId` + * @param _tokenId uint256 token id to get the owner of. + * @return address of the token owner. + */ + function ownerOf(uint256 _tokenId) public view returns (address owner) { + require(false, "will always fail"); + require( + isUpgraded(_tokenId), + "SuperRareLegacy: owner query for non-upgraded token" + ); + return ERC721.ownerOf(_tokenId); + } + + ///////////////////////////////////////////////////////////////////////// + // preUpgradeOwnerOf + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Returns the pre-upgrade token owner of the NFT specified by `tokenId`. This owner will become the owner of the upgrade legacy token. Throws if + * @param _tokenId uint256 token id to get the pre-upgrade owner of. + * @return address of the token pre-upgrade owner. + */ + function preUpgradeOwnerOf(uint256 _tokenId) public view returns (address) { + address preUpgradeOwner = _tokenOwnerPreUpgrade[_tokenId]; + require( + preUpgradeOwner != address(0), + "SuperRareLegacy: pre-upgrade owner query for nonexistent token" + ); + return _tokenOwnerPreUpgrade[_tokenId]; + } + + ///////////////////////////////////////////////////////////////////////// + // isUpgraded + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Returns whether the token has been upgraded. + * @param _tokenId uint256 token id to get the owner of. + * @return bool of whether the token has been upgraded. + */ + function isUpgraded(uint256 _tokenId) public view returns (bool) { + address ownerOnOldSuperRare = oldSuperRare.ownerOf(_tokenId); + return address(this) == ownerOnOldSuperRare; + } + + ///////////////////////////////////////////////////////////////////////// + // refreshPreUpgradeOwnerOf + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Refreshes the pre-upgrade token owner. Useful in the event of a non-upgraded token transferring ownership. Throws if token has upgraded or if there is nothing to refresh. + * @param _tokenId uint256 token id to refresh the pre-upgrade token owner. + * @return address of the token pre-upgrade owner. + */ + function refreshPreUpgradeOwnerOf(uint256 _tokenId) public { + require( + !isUpgraded(_tokenId), + "SuperRareLegacy: cannot refresh an upgraded token" + ); + address ownerOnOldSuperRare = oldSuperRare.ownerOf(_tokenId); + require( + ownerOnOldSuperRare != preUpgradeOwnerOf(_tokenId), + "SuperRareLegacy: cannot refresh when pre-upgrade owners match" + ); + _tokenOwnerPreUpgrade[_tokenId] = ownerOnOldSuperRare; + } + + ///////////////////////////////////////////////////////////////////////// + // tokenCreator + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Refreshes the pre-upgrade token owner. Useful in the event of a non-upgraded token transferring ownership. Throws if token has upgraded or if there is nothing to refresh. + * @param _tokenId uint256 token id to refresh the pre-upgrade token owner. + * @return address of the token pre-upgrade owner. + */ + function tokenCreator(uint256 _tokenId) public view returns (address) { + return oldSuperRare.creatorOfToken(_tokenId); + } + + ///////////////////////////////////////////////////////////////////////// + // Internal Methods + ///////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////// + // _createLegacyToken + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Mints a legacy token with the appropriate metadata and owner. + * @param _tokenId uint256 token id to get the owner of. + * @return bool of whether the token has been upgraded. + */ + function _createLegacyToken(uint256 _tokenId) internal { + address ownerOnOldSuperRare = oldSuperRare.ownerOf(_tokenId); + string memory tokenURI = oldSuperRare.tokenURI(_tokenId); + _mintWithNoEvent(ownerOnOldSuperRare, _tokenId); + _setTokenURI(_tokenId, tokenURI); + _tokenOwnerPreUpgrade[_tokenId] = ownerOnOldSuperRare; + } +} diff --git a/contracts/v5/src/SuperRareMarketAuctionV2.sol b/contracts/v5/src/SuperRareMarketAuctionV2.sol index cd68cd5..fc8b612 100644 --- a/contracts/v5/src/SuperRareMarketAuctionV2.sol +++ b/contracts/v5/src/SuperRareMarketAuctionV2.sol @@ -6,6 +6,7 @@ import "./SendValueOrEscrow.sol"; import "openzeppelin-solidity/contracts/math/SafeMath.sol"; import "openzeppelin-solidity/contracts/ownership/Ownable.sol"; + contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { using SafeMath for uint256; @@ -27,11 +28,14 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // Mapping of ERC721 contract to mapping of token ID to the current bidder. mapping(address => mapping(uint256 => address)) private tokenCurrentBidders; + // Mapping of ERC721 contract to creator royalty fee + mapping(address => uint256) private originContractRoyalty; + // Marketplace fee paid to the owner of the contract. uint256 public marketplaceFee = 3; // 3 % // Royalty fee paid to the creator of a token on secondary sales. - uint256 public royaltyFee = 5; // 5 % + uint256 public defaultRoyaltyFee = 5; // 5 % // Primary sale fee split. uint256 public primarySaleFee = 15; // 15 % @@ -79,10 +83,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // Modifiers ///////////////////////////////////////////////////////////////////////// /** - * @dev Checks that the token owner is approved for the ERC721Market - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token - */ + * @dev Checks that the token owner is approved for the ERC721Market + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token + */ modifier ownerMustHaveMarketplaceApproved( address _originContract, uint256 _tokenId @@ -97,10 +101,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { } /** - * @dev Checks that the token is owned by the sender - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token - */ + * @dev Checks that the token is owned by the sender + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token + */ modifier senderMustBeTokenOwner(address _originContract, uint256 _tokenId) { IERC721 erc721 = IERC721(_originContract); require( @@ -114,11 +118,11 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // setSalePrice ///////////////////////////////////////////////////////////////////////// /** - * @dev Set the token for sale - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token - * @param _amount uint256 wei value that the item is for sale - */ + * @dev Set the token for sale + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token + * @param _amount uint256 wei value that the item is for sale + */ function setSalePrice( address _originContract, uint256 _tokenId, @@ -137,10 +141,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // buy ///////////////////////////////////////////////////////////////////////// /** - * @dev Purchases the token if it is for sale. - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token. - */ + * @dev Purchases the token if it is for sale. + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token. + */ function buy(address _originContract, uint256 _tokenId) public payable @@ -202,11 +206,11 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // tokenPrice ///////////////////////////////////////////////////////////////////////// /** - * @dev Gets the sale price of the token - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token - * @return sale price of the token - */ + * @dev Gets the sale price of the token + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token + * @return sale price of the token + */ function tokenPrice(address _originContract, uint256 _tokenId) public view @@ -222,11 +226,11 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // tokenPriceFeeIncluded ///////////////////////////////////////////////////////////////////////// /** - * @dev Gets the sale price of the token including the fee. - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token - * @return sale price of the token including the fee. - */ + * @dev Gets the sale price of the token including the fee. + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token + * @return sale price of the token including the fee. + */ function tokenPriceFeeIncluded(address _originContract, uint256 _tokenId) public view @@ -245,11 +249,11 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // bid ///////////////////////////////////////////////////////////////////////// /** - * @dev Bids on the token, replacing the bid if the bid is higher than the current bid. You cannot bid on a token you already own. - * @param _newBidAmount uint256 value in wei to bid, plus marketplace fee. - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token - */ + * @dev Bids on the token, replacing the bid if the bid is higher than the current bid. You cannot bid on a token you already own. + * @param _newBidAmount uint256 value in wei to bid, plus marketplace fee. + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token + */ function bid( uint256 _newBidAmount, address _originContract, @@ -292,10 +296,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // acceptBid ///////////////////////////////////////////////////////////////////////// /** - * @dev Accept the bid on the token. - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token - */ + * @dev Accept the bid on the token. + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token + */ function acceptBid(address _originContract, uint256 _tokenId) public ownerMustHaveMarketplaceApproved(_originContract, _tokenId) @@ -338,10 +342,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // cancelBid ///////////////////////////////////////////////////////////////////////// /** - * @dev Cancel the bid on the token. - * @param _originContract address of the contract storing the token. - * @param _tokenId uint256 ID of the token. - */ + * @dev Cancel the bid on the token. + * @param _originContract address of the contract storing the token. + * @param _tokenId uint256 ID of the token. + */ function cancelBid(address _originContract, uint256 _tokenId) public { // Check that sender has a current bid. address bidder = msg.sender; @@ -361,10 +365,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // currentBidDetailsOfToken ///////////////////////////////////////////////////////////////////////// /** - * @dev Function to get current bid and bidder of a token. - * @param _originContract address of ERC721 contract. - * @param _tokenId uin256 id of the token. - */ + * @dev Function to get current bid and bidder of a token. + * @param _originContract address of ERC721 contract. + * @param _tokenId uin256 id of the token. + */ function currentBidDetailsOfToken(address _originContract, uint256 _tokenId) public view @@ -380,10 +384,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // hasTokenBeenSold ///////////////////////////////////////////////////////////////////////// /** - * @dev Function to find whether the token has had a primary sale - * @param _originContract address of ERC721 contract. - * @param _tokenId uint256 id of the token. - */ + * @dev Function to find whether the token has had a primary sale + * @param _originContract address of ERC721 contract. + * @param _tokenId uint256 id of the token. + */ function hasTokenBeenSold(address _originContract, uint256 _tokenId) public view @@ -396,31 +400,65 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // setMarketplaceFee ///////////////////////////////////////////////////////////////////////// /** - * @dev Function to set the marketplace fee percentage. - * @param _percentage uint256 fee to take from purchases. - */ + * @dev Function to set the marketplace fee percentage. + * @param _percentage uint256 fee to take from purchases. + */ function setMarketplaceFee(uint256 _percentage) public onlyOwner { marketplaceFee = _percentage; } ///////////////////////////////////////////////////////////////////////// - // setRoyaltyFee + // setDefaultRoyaltyFee ///////////////////////////////////////////////////////////////////////// /** - * @dev Function to set the royalty fee percentage. - * @param _percentage uint256 royalty fee to take split between seller and creator. - */ - function setRoyaltyFee(uint256 _percentage) public onlyOwner { - royaltyFee = _percentage; + * @dev Function to set the default royalty fee percentage. + * @param _percentage uint256 royalty fee to take split between seller and creator. + */ + function setDefaultRoyaltyFee(uint256 _percentage) public onlyOwner { + defaultRoyaltyFee = _percentage; + } + + ///////////////////////////////////////////////////////////////////////// + // setERC721ContractRoyaltyFee + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Function to set the royalty fee percentage. + * @param _originContract address of the ERC721 tokens + * @param _percentage uint256 royalty fee to take split between seller and creator. + */ + function setERC721ContractRoyaltyFee( + address _originContract, + uint256 _percentage + ) public onlyOwner { + originContractRoyalty[_originContract] = _percentage; + } + + ///////////////////////////////////////////////////////////////////////// + // getERC721ContractRoyaltyFee + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Function to get the royalty fee percentage for an origin contract. + * @param _originContract address of the ERC721 tokens + */ + function getERC721ContractRoyaltyFee(address _originContract) + public + view + returns (uint256) + { + uint256 percentage = originContractRoyalty[_originContract]; + if (percentage > 0) { + return percentage; + } + return defaultRoyaltyFee; } ///////////////////////////////////////////////////////////////////////// // setPrimarySaleFee ///////////////////////////////////////////////////////////////////////// /** - * @dev Function to set the primary sale fee percentage. - * @param _percentage uint256 fee to take from purchases. - */ + * @dev Function to set the primary sale fee percentage. + * @param _percentage uint256 fee to take from purchases. + */ function setPrimarySaleFee(uint256 _percentage) public onlyOwner { primarySaleFee = _percentage; } @@ -429,10 +467,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // markTokensAsSold ///////////////////////////////////////////////////////////////////////// /** - * @dev Function to set an array of tokens for a contract as sold. - * @param _originContract address of ERC721 contract. - * @param _tokenIds uin256[] array of token ids. - */ + * @dev Function to set an array of tokens for a contract as sold. + * @param _originContract address of ERC721 contract. + * @param _tokenIds uin256[] array of token ids. + */ function markTokensAsSold( address _originContract, uint256[] calldata _tokenIds @@ -447,10 +485,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _priceSetterStillOwnsTheToken ///////////////////////////////////////////////////////////////////////// /** - * @dev Checks that the token is owned by the same person who set the sale price. - * @param _originContract address of the contract storing the token. - * @param _tokenId address of the contract storing the token. - */ + * @dev Checks that the token is owned by the same person who set the sale price. + * @param _originContract address of the contract storing the token. + * @param _tokenId address of the contract storing the token. + */ function _priceSetterStillOwnsTheToken( address _originContract, uint256 _tokenId @@ -465,12 +503,12 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _payout ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to pay the seller, creator, and maintainer. - * @param _amount uint256 value to be split. - * @param _seller address seller of the token. - * @param _originContract address of the token contract. - * @param _tokenId uint256 ID of the token. - */ + * @dev Internal function to pay the seller, creator, and maintainer. + * @param _amount uint256 value to be split. + * @param _seller address seller of the token. + * @param _originContract address of the token contract. + * @param _tokenId uint256 ID of the token. + */ function _payout( uint256 _amount, address payable _seller, @@ -538,13 +576,13 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _calcRoyaltyPayment ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to calculate royalty payment. - * If primary sale: 0 - * otherwise: artist royalty. - * @param _amount uint256 value to be split - * @param _originContract address of the token contract - * @param _tokenId id of the token - */ + * @dev Internal function to calculate royalty payment. + * If primary sale: 0 + * otherwise: artist royalty. + * @param _amount uint256 value to be split + * @param _originContract address of the token contract + * @param _tokenId id of the token + */ function _calcRoyaltyPayment( uint256 _amount, address _originContract, @@ -554,6 +592,7 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { if (isPrimarySale) { return 0; } + uint256 royaltyFee = getERC721ContractRoyaltyFee(_originContract); return _amount.mul(royaltyFee).div(100); } @@ -561,13 +600,13 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _calcSellerPayment ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to calculate seller payment. - * If primary sale: _amount - split with marketplace, - * otherwise: _amount - artist royalty. - * @param _amount uint256 value to be split - * @param _originContract address of the token contract - * @param _tokenId id of the token - */ + * @dev Internal function to calculate seller payment. + * If primary sale: _amount - split with marketplace, + * otherwise: _amount - artist royalty. + * @param _amount uint256 value to be split + * @param _originContract address of the token contract + * @param _tokenId id of the token + */ function _calcSellerPayment( uint256 _amount, address _originContract, @@ -590,10 +629,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _calcMarketplaceFee ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function calculate marketplace fee for a given amount. - * f(_amount) = _amount * (fee % / 100) - * @param _amount uint256 value to be split. - */ + * @dev Internal function calculate marketplace fee for a given amount. + * f(_amount) = _amount * (fee % / 100) + * @param _amount uint256 value to be split. + */ function _calcMarketplaceFee(uint256 _amount) internal view @@ -606,10 +645,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _setTokenAsSold ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to set a token as sold. - * @param _originContract address of ERC721 contract. - * @param _tokenId uin256 id of the token. - */ + * @dev Internal function to set a token as sold. + * @param _originContract address of ERC721 contract. + * @param _tokenId uin256 id of the token. + */ function _setTokenAsSold(address _originContract, uint256 _tokenId) internal { @@ -623,10 +662,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _resetTokenPrice ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to set token price to 0 for a give contract. - * @param _originContract address of ERC721 contract. - * @param _tokenId uin256 id of the token. - */ + * @dev Internal function to set token price to 0 for a give contract. + * @param _originContract address of ERC721 contract. + * @param _tokenId uin256 id of the token. + */ function _resetTokenPrice(address _originContract, uint256 _tokenId) internal { @@ -638,11 +677,11 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _addressHasBidOnToken ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function see if the given address has an existing bid on a token. - * @param _bidder address that may have a current bid. - * @param _originContract address of ERC721 contract. - * @param _tokenId uin256 id of the token. - */ + * @dev Internal function see if the given address has an existing bid on a token. + * @param _bidder address that may have a current bid. + * @param _originContract address of ERC721 contract. + * @param _tokenId uin256 id of the token. + */ function _addressHasBidOnToken( address _bidder, address _originContract, @@ -655,10 +694,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _tokenHasBid ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function see if the token has an existing bid. - * @param _originContract address of ERC721 contract. - * @param _tokenId uin256 id of the token. - */ + * @dev Internal function see if the token has an existing bid. + * @param _originContract address of ERC721 contract. + * @param _tokenId uin256 id of the token. + */ function _tokenHasBid(address _originContract, uint256 _tokenId) internal view @@ -671,11 +710,11 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _refundBid ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to return an existing bid on a token to the - * bidder and reset bid. - * @param _originContract address of ERC721 contract. - * @param _tokenId uin256 id of the token. - */ + * @dev Internal function to return an existing bid on a token to the + * bidder and reset bid. + * @param _originContract address of ERC721 contract. + * @param _tokenId uin256 id of the token. + */ function _refundBid(address _originContract, uint256 _tokenId) internal { address currentBidder = tokenCurrentBidders[_originContract][_tokenId]; uint256 currentBid = tokenCurrentBids[_originContract][_tokenId]; @@ -691,10 +730,10 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _resetBid ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to reset bid by setting bidder and bid to 0. - * @param _originContract address of ERC721 contract. - * @param _tokenId uin256 id of the token. - */ + * @dev Internal function to reset bid by setting bidder and bid to 0. + * @param _originContract address of ERC721 contract. + * @param _tokenId uin256 id of the token. + */ function _resetBid(address _originContract, uint256 _tokenId) internal { tokenCurrentBidders[_originContract][_tokenId] = address(0); tokenCurrentBids[_originContract][_tokenId] = 0; @@ -704,12 +743,12 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _setBid ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to set a bid. - * @param _amount uint256 value in wei to bid. Does not include marketplace fee. - * @param _bidder address of the bidder. - * @param _originContract address of ERC721 contract. - * @param _tokenId uin256 id of the token. - */ + * @dev Internal function to set a bid. + * @param _amount uint256 value in wei to bid. Does not include marketplace fee. + * @param _bidder address of the bidder. + * @param _originContract address of ERC721 contract. + * @param _tokenId uin256 id of the token. + */ function _setBid( uint256 _amount, address _bidder, @@ -728,16 +767,15 @@ contract SuperRareMarketAuctionV2 is Ownable, SendValueOrEscrow { // _makePayable ///////////////////////////////////////////////////////////////////////// /** - * @dev Internal function to set a bid. - * @param _address non-payable address - * @return payable address - */ + * @dev Internal function to set a bid. + * @param _address non-payable address + * @return payable address + */ function _makePayable(address _address) internal - view + pure returns (address payable) { return address(uint160(_address)); } - } diff --git a/package.json b/package.json index 213b98a..1b06aa9 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "dependencies": { "openzeppelin-solidity": "2.5.0", "openzeppelin-solidity-solc4": "https://github.com/OpenZeppelin/openzeppelin-contracts#v2.0.0", + "openzeppelin-solidity-pixura": "https://github.com/Pixura/openzeppelin-contracts#ec0e22b8060fb39ba7deced72bc745c4bdfafdec", "rlp": "^2.2.4", "secp256k1": "^4.0.0", "zeppelin-solidity": "1.6.0", diff --git a/purs-contracts/src/Contracts/V5/SuperRareLegacy.purs b/purs-contracts/src/Contracts/V5/SuperRareLegacy.purs new file mode 100644 index 0000000..810da12 --- /dev/null +++ b/purs-contracts/src/Contracts/V5/SuperRareLegacy.purs @@ -0,0 +1,439 @@ +-------------------------------------------------------------------------------- +-- | SuperRareLegacy +-------------------------------------------------------------------------------- + +module Contracts.V5.SuperRareLegacy where + +import Prelude + +import Data.Either (Either) +import Data.Functor.Tagged (Tagged, tagged) +import Data.Generic.Rep (class Generic) +import Data.Generic.Rep.Eq (genericEq) +import Data.Generic.Rep.Show (genericShow) +import Data.Lens ((.~)) +import Data.Maybe (Maybe(..), fromJust) +import Data.Newtype (class Newtype) +import Data.Symbol (SProxy) +import Network.Ethereum.Web3 (_address, _topics, call, class EventFilter, deployContract, sendTx) +import Network.Ethereum.Web3.Contract.Internal (uncurryFields) +import Network.Ethereum.Web3.Solidity (ByteString, BytesN, D2, D4, D5, D6, DOne, Tuple0(..), Tuple1(..), Tuple2(..), Tuple3(..), Tuple4(..), UIntN, class IndexedEvent, unTuple1) +import Network.Ethereum.Web3.Solidity.Size (type (:&)) +import Network.Ethereum.Web3.Types (Address, CallError, ChainCursor, HexString, NoPay, TransactionOptions, Web3, defaultFilter, mkHexString) +import Partial.Unsafe (unsafePartial) +-------------------------------------------------------------------------------- +-- | ConstructorFn +-------------------------------------------------------------------------------- + + +type ConstructorFn = Tagged (SProxy "constructor(string,string,address,uint256)") (Tuple4 (Tagged (SProxy "_name") String) (Tagged (SProxy "_symbol") String) (Tagged (SProxy "_oldSuperRare") Address) (Tagged (SProxy "_lastTokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +constructor :: TransactionOptions NoPay -> HexString -> { _name :: String, _symbol :: String, _oldSuperRare :: Address, _lastTokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString +constructor x0 bc r = uncurryFields r $ constructor' x0 bc + where + constructor' :: TransactionOptions NoPay -> HexString -> (Tagged (SProxy "_name") String) -> (Tagged (SProxy "_symbol") String) -> (Tagged (SProxy "_oldSuperRare") Address) -> (Tagged (SProxy "_lastTokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString + constructor' y0 bc' y2 y3 y4 y5 = deployContract y0 bc' ((tagged $ Tuple4 y2 y3 y4 y5) :: ConstructorFn) + +-------------------------------------------------------------------------------- +-- | Approval +-------------------------------------------------------------------------------- + + +newtype Approval = Approval {owner :: Address,approved :: Address,tokenId :: (UIntN (D2 :& D5 :& DOne D6))} + +derive instance newtypeApproval :: Newtype Approval _ + +instance eventFilterApproval :: EventFilter Approval where + eventFilter _ addr = defaultFilter + # _address .~ Just addr + # _topics .~ Just [Just ( unsafePartial $ fromJust $ mkHexString "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"),Nothing,Nothing,Nothing] + +instance indexedEventApproval :: IndexedEvent (Tuple3 (Tagged (SProxy "owner") Address) (Tagged (SProxy "approved") Address) (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6)))) (Tuple0 ) Approval where + isAnonymous _ = false + +derive instance genericApproval :: Generic Approval _ + +instance eventGenericApprovalShow :: Show Approval where + show = genericShow + +instance eventGenericApprovaleq :: Eq Approval where + eq = genericEq + +-------------------------------------------------------------------------------- +-- | ApprovalForAll +-------------------------------------------------------------------------------- + + +newtype ApprovalForAll = ApprovalForAll {owner :: Address,operator :: Address,approved :: Boolean} + +derive instance newtypeApprovalForAll :: Newtype ApprovalForAll _ + +instance eventFilterApprovalForAll :: EventFilter ApprovalForAll where + eventFilter _ addr = defaultFilter + # _address .~ Just addr + # _topics .~ Just [Just ( unsafePartial $ fromJust $ mkHexString "17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31"),Nothing,Nothing] + +instance indexedEventApprovalForAll :: IndexedEvent (Tuple2 (Tagged (SProxy "owner") Address) (Tagged (SProxy "operator") Address)) (Tuple1 (Tagged (SProxy "approved") Boolean)) ApprovalForAll where + isAnonymous _ = false + +derive instance genericApprovalForAll :: Generic ApprovalForAll _ + +instance eventGenericApprovalForAllShow :: Show ApprovalForAll where + show = genericShow + +instance eventGenericApprovalForAlleq :: Eq ApprovalForAll where + eq = genericEq + +-------------------------------------------------------------------------------- +-- | OwnershipTransferred +-------------------------------------------------------------------------------- + + +newtype OwnershipTransferred = OwnershipTransferred {previousOwner :: Address,newOwner :: Address} + +derive instance newtypeOwnershipTransferred :: Newtype OwnershipTransferred _ + +instance eventFilterOwnershipTransferred :: EventFilter OwnershipTransferred where + eventFilter _ addr = defaultFilter + # _address .~ Just addr + # _topics .~ Just [Just ( unsafePartial $ fromJust $ mkHexString "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0"),Nothing,Nothing] + +instance indexedEventOwnershipTransferred :: IndexedEvent (Tuple2 (Tagged (SProxy "previousOwner") Address) (Tagged (SProxy "newOwner") Address)) (Tuple0 ) OwnershipTransferred where + isAnonymous _ = false + +derive instance genericOwnershipTransferred :: Generic OwnershipTransferred _ + +instance eventGenericOwnershipTransferredShow :: Show OwnershipTransferred where + show = genericShow + +instance eventGenericOwnershipTransferredeq :: Eq OwnershipTransferred where + eq = genericEq + +-------------------------------------------------------------------------------- +-- | Transfer +-------------------------------------------------------------------------------- + + +newtype Transfer = Transfer {from :: Address,to :: Address,tokenId :: (UIntN (D2 :& D5 :& DOne D6))} + +derive instance newtypeTransfer :: Newtype Transfer _ + +instance eventFilterTransfer :: EventFilter Transfer where + eventFilter _ addr = defaultFilter + # _address .~ Just addr + # _topics .~ Just [Just ( unsafePartial $ fromJust $ mkHexString "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"),Nothing,Nothing,Nothing] + +instance indexedEventTransfer :: IndexedEvent (Tuple3 (Tagged (SProxy "from") Address) (Tagged (SProxy "to") Address) (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6)))) (Tuple0 ) Transfer where + isAnonymous _ = false + +derive instance genericTransfer :: Generic Transfer _ + +instance eventGenericTransferShow :: Show Transfer where + show = genericShow + +instance eventGenericTransfereq :: Eq Transfer where + eq = genericEq + +-------------------------------------------------------------------------------- +-- | ApproveFn +-------------------------------------------------------------------------------- + + +type ApproveFn = Tagged (SProxy "approve(address,uint256)") (Tuple2 (Tagged (SProxy "to") Address) (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +approve :: TransactionOptions NoPay -> { to :: Address, tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString +approve x0 r = uncurryFields r $ approve' x0 + where + approve' :: TransactionOptions NoPay -> (Tagged (SProxy "to") Address) -> (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString + approve' y0 y1 y2 = sendTx y0 ((tagged $ Tuple2 y1 y2) :: ApproveFn) + +-------------------------------------------------------------------------------- +-- | BalanceOfFn +-------------------------------------------------------------------------------- + + +type BalanceOfFn = Tagged (SProxy "balanceOf(address)") (Tuple1 (Tagged (SProxy "owner") Address)) + +balanceOf :: TransactionOptions NoPay -> ChainCursor -> { owner :: Address } -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) +balanceOf x0 cm r = uncurryFields r $ balanceOf' x0 cm + where + balanceOf' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "owner") Address) -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) + balanceOf' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: BalanceOfFn) + +-------------------------------------------------------------------------------- +-- | BaseURIFn +-------------------------------------------------------------------------------- + + +type BaseURIFn = Tagged (SProxy "baseURI()") (Tuple0 ) + +baseURI :: TransactionOptions NoPay -> ChainCursor -> Web3 (Either CallError String) +baseURI x0 cm = map unTuple1 <$> call x0 cm ((tagged $ Tuple0 ) :: BaseURIFn) + +-------------------------------------------------------------------------------- +-- | GetApprovedFn +-------------------------------------------------------------------------------- + + +type GetApprovedFn = Tagged (SProxy "getApproved(uint256)") (Tuple1 (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +getApproved :: TransactionOptions NoPay -> ChainCursor -> { tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 (Either CallError Address) +getApproved x0 cm r = uncurryFields r $ getApproved' x0 cm + where + getApproved' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError Address) + getApproved' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: GetApprovedFn) + +-------------------------------------------------------------------------------- +-- | IsApprovedForAllFn +-------------------------------------------------------------------------------- + + +type IsApprovedForAllFn = Tagged (SProxy "isApprovedForAll(address,address)") (Tuple2 (Tagged (SProxy "owner") Address) (Tagged (SProxy "operator") Address)) + +isApprovedForAll :: TransactionOptions NoPay -> ChainCursor -> { owner :: Address, operator :: Address } -> Web3 (Either CallError Boolean) +isApprovedForAll x0 cm r = uncurryFields r $ isApprovedForAll' x0 cm + where + isApprovedForAll' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "owner") Address) -> (Tagged (SProxy "operator") Address) -> Web3 (Either CallError Boolean) + isApprovedForAll' y0 cm' y2 y3 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple2 y2 y3) :: IsApprovedForAllFn) + +-------------------------------------------------------------------------------- +-- | IsOwnerFn +-------------------------------------------------------------------------------- + + +type IsOwnerFn = Tagged (SProxy "isOwner()") (Tuple0 ) + +isOwner :: TransactionOptions NoPay -> ChainCursor -> Web3 (Either CallError Boolean) +isOwner x0 cm = map unTuple1 <$> call x0 cm ((tagged $ Tuple0 ) :: IsOwnerFn) + +-------------------------------------------------------------------------------- +-- | IsUpgradedFn +-------------------------------------------------------------------------------- + + +type IsUpgradedFn = Tagged (SProxy "isUpgraded(uint256)") (Tuple1 (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +isUpgraded :: TransactionOptions NoPay -> ChainCursor -> { _tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 (Either CallError Boolean) +isUpgraded x0 cm r = uncurryFields r $ isUpgraded' x0 cm + where + isUpgraded' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError Boolean) + isUpgraded' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: IsUpgradedFn) + +-------------------------------------------------------------------------------- +-- | NameFn +-------------------------------------------------------------------------------- + + +type NameFn = Tagged (SProxy "name()") (Tuple0 ) + +name :: TransactionOptions NoPay -> ChainCursor -> Web3 (Either CallError String) +name x0 cm = map unTuple1 <$> call x0 cm ((tagged $ Tuple0 ) :: NameFn) + +-------------------------------------------------------------------------------- +-- | OwnerFn +-------------------------------------------------------------------------------- + + +type OwnerFn = Tagged (SProxy "owner()") (Tuple0 ) + +owner :: TransactionOptions NoPay -> ChainCursor -> Web3 (Either CallError Address) +owner x0 cm = map unTuple1 <$> call x0 cm ((tagged $ Tuple0 ) :: OwnerFn) + +-------------------------------------------------------------------------------- +-- | OwnerOfFn +-------------------------------------------------------------------------------- + + +type OwnerOfFn = Tagged (SProxy "ownerOf(uint256)") (Tuple1 (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +ownerOf :: TransactionOptions NoPay -> ChainCursor -> { _tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 (Either CallError Address) +ownerOf x0 cm r = uncurryFields r $ ownerOf' x0 cm + where + ownerOf' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError Address) + ownerOf' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: OwnerOfFn) + +-------------------------------------------------------------------------------- +-- | PreUpgradeOwnerOfFn +-------------------------------------------------------------------------------- + + +type PreUpgradeOwnerOfFn = Tagged (SProxy "preUpgradeOwnerOf(uint256)") (Tuple1 (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +preUpgradeOwnerOf :: TransactionOptions NoPay -> ChainCursor -> { _tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 (Either CallError Address) +preUpgradeOwnerOf x0 cm r = uncurryFields r $ preUpgradeOwnerOf' x0 cm + where + preUpgradeOwnerOf' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError Address) + preUpgradeOwnerOf' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: PreUpgradeOwnerOfFn) + +-------------------------------------------------------------------------------- +-- | RefreshPreUpgradeOwnerOfFn +-------------------------------------------------------------------------------- + + +type RefreshPreUpgradeOwnerOfFn = Tagged (SProxy "refreshPreUpgradeOwnerOf(uint256)") (Tuple1 (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +refreshPreUpgradeOwnerOf :: TransactionOptions NoPay -> { _tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString +refreshPreUpgradeOwnerOf x0 r = uncurryFields r $ refreshPreUpgradeOwnerOf' x0 + where + refreshPreUpgradeOwnerOf' :: TransactionOptions NoPay -> (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString + refreshPreUpgradeOwnerOf' y0 y1 = sendTx y0 ((tagged $ Tuple1 y1) :: RefreshPreUpgradeOwnerOfFn) + +-------------------------------------------------------------------------------- +-- | RenounceOwnershipFn +-------------------------------------------------------------------------------- + + +type RenounceOwnershipFn = Tagged (SProxy "renounceOwnership()") (Tuple0 ) + +renounceOwnership :: TransactionOptions NoPay -> Web3 HexString +renounceOwnership x0 = sendTx x0 ((tagged $ Tuple0 ) :: RenounceOwnershipFn) + +-------------------------------------------------------------------------------- +-- | SafeTransferFrom4Fn +-------------------------------------------------------------------------------- + + +type SafeTransferFrom4Fn = Tagged (SProxy "safeTransferFrom4(address,address,uint256,bytes)") (Tuple4 (Tagged (SProxy "from") Address) (Tagged (SProxy "to") Address) (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6))) (Tagged (SProxy "_data") ByteString)) + +safeTransferFrom4 :: TransactionOptions NoPay -> { from :: Address, to :: Address, tokenId :: (UIntN (D2 :& D5 :& DOne D6)), _data :: ByteString } -> Web3 HexString +safeTransferFrom4 x0 r = uncurryFields r $ safeTransferFrom4' x0 + where + safeTransferFrom4' :: TransactionOptions NoPay -> (Tagged (SProxy "from") Address) -> (Tagged (SProxy "to") Address) -> (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> (Tagged (SProxy "_data") ByteString) -> Web3 HexString + safeTransferFrom4' y0 y1 y2 y3 y4 = sendTx y0 ((tagged $ Tuple4 y1 y2 y3 y4) :: SafeTransferFrom4Fn) + +-------------------------------------------------------------------------------- +-- | SafeTransferFrom3Fn +-------------------------------------------------------------------------------- + + +type SafeTransferFrom3Fn = Tagged (SProxy "safeTransferFrom3(address,address,uint256)") (Tuple3 (Tagged (SProxy "from") Address) (Tagged (SProxy "to") Address) (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +safeTransferFrom3 :: TransactionOptions NoPay -> { from :: Address, to :: Address, tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString +safeTransferFrom3 x0 r = uncurryFields r $ safeTransferFrom3' x0 + where + safeTransferFrom3' :: TransactionOptions NoPay -> (Tagged (SProxy "from") Address) -> (Tagged (SProxy "to") Address) -> (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString + safeTransferFrom3' y0 y1 y2 y3 = sendTx y0 ((tagged $ Tuple3 y1 y2 y3) :: SafeTransferFrom3Fn) + +-------------------------------------------------------------------------------- +-- | SetApprovalForAllFn +-------------------------------------------------------------------------------- + + +type SetApprovalForAllFn = Tagged (SProxy "setApprovalForAll(address,bool)") (Tuple2 (Tagged (SProxy "to") Address) (Tagged (SProxy "approved") Boolean)) + +setApprovalForAll :: TransactionOptions NoPay -> { to :: Address, approved :: Boolean } -> Web3 HexString +setApprovalForAll x0 r = uncurryFields r $ setApprovalForAll' x0 + where + setApprovalForAll' :: TransactionOptions NoPay -> (Tagged (SProxy "to") Address) -> (Tagged (SProxy "approved") Boolean) -> Web3 HexString + setApprovalForAll' y0 y1 y2 = sendTx y0 ((tagged $ Tuple2 y1 y2) :: SetApprovalForAllFn) + +-------------------------------------------------------------------------------- +-- | SupportsInterfaceFn +-------------------------------------------------------------------------------- + + +type SupportsInterfaceFn = Tagged (SProxy "supportsInterface(bytes4)") (Tuple1 (Tagged (SProxy "interfaceId") (BytesN (DOne D4)))) + +supportsInterface :: TransactionOptions NoPay -> ChainCursor -> { interfaceId :: (BytesN (DOne D4)) } -> Web3 (Either CallError Boolean) +supportsInterface x0 cm r = uncurryFields r $ supportsInterface' x0 cm + where + supportsInterface' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "interfaceId") (BytesN (DOne D4))) -> Web3 (Either CallError Boolean) + supportsInterface' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: SupportsInterfaceFn) + +-------------------------------------------------------------------------------- +-- | SymbolFn +-------------------------------------------------------------------------------- + + +type SymbolFn = Tagged (SProxy "symbol()") (Tuple0 ) + +symbol :: TransactionOptions NoPay -> ChainCursor -> Web3 (Either CallError String) +symbol x0 cm = map unTuple1 <$> call x0 cm ((tagged $ Tuple0 ) :: SymbolFn) + +-------------------------------------------------------------------------------- +-- | TokenByIndexFn +-------------------------------------------------------------------------------- + + +type TokenByIndexFn = Tagged (SProxy "tokenByIndex(uint256)") (Tuple1 (Tagged (SProxy "index") (UIntN (D2 :& D5 :& DOne D6)))) + +tokenByIndex :: TransactionOptions NoPay -> ChainCursor -> { index :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) +tokenByIndex x0 cm r = uncurryFields r $ tokenByIndex' x0 cm + where + tokenByIndex' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "index") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) + tokenByIndex' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: TokenByIndexFn) + +-------------------------------------------------------------------------------- +-- | TokenCreatorFn +-------------------------------------------------------------------------------- + + +type TokenCreatorFn = Tagged (SProxy "tokenCreator(uint256)") (Tuple1 (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +tokenCreator :: TransactionOptions NoPay -> ChainCursor -> { _tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 (Either CallError Address) +tokenCreator x0 cm r = uncurryFields r $ tokenCreator' x0 cm + where + tokenCreator' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError Address) + tokenCreator' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: TokenCreatorFn) + +-------------------------------------------------------------------------------- +-- | TokenOfOwnerByIndexFn +-------------------------------------------------------------------------------- + + +type TokenOfOwnerByIndexFn = Tagged (SProxy "tokenOfOwnerByIndex(address,uint256)") (Tuple2 (Tagged (SProxy "owner") Address) (Tagged (SProxy "index") (UIntN (D2 :& D5 :& DOne D6)))) + +tokenOfOwnerByIndex :: TransactionOptions NoPay -> ChainCursor -> { owner :: Address, index :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) +tokenOfOwnerByIndex x0 cm r = uncurryFields r $ tokenOfOwnerByIndex' x0 cm + where + tokenOfOwnerByIndex' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "owner") Address) -> (Tagged (SProxy "index") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) + tokenOfOwnerByIndex' y0 cm' y2 y3 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple2 y2 y3) :: TokenOfOwnerByIndexFn) + +-------------------------------------------------------------------------------- +-- | TokenURIFn +-------------------------------------------------------------------------------- + + +type TokenURIFn = Tagged (SProxy "tokenURI(uint256)") (Tuple1 (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +tokenURI :: TransactionOptions NoPay -> ChainCursor -> { tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 (Either CallError String) +tokenURI x0 cm r = uncurryFields r $ tokenURI' x0 cm + where + tokenURI' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError String) + tokenURI' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: TokenURIFn) + +-------------------------------------------------------------------------------- +-- | TotalSupplyFn +-------------------------------------------------------------------------------- + + +type TotalSupplyFn = Tagged (SProxy "totalSupply()") (Tuple0 ) + +totalSupply :: TransactionOptions NoPay -> ChainCursor -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) +totalSupply x0 cm = map unTuple1 <$> call x0 cm ((tagged $ Tuple0 ) :: TotalSupplyFn) + +-------------------------------------------------------------------------------- +-- | TransferFromFn +-------------------------------------------------------------------------------- + + +type TransferFromFn = Tagged (SProxy "transferFrom(address,address,uint256)") (Tuple3 (Tagged (SProxy "from") Address) (Tagged (SProxy "to") Address) (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6)))) + +transferFrom :: TransactionOptions NoPay -> { from :: Address, to :: Address, tokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString +transferFrom x0 r = uncurryFields r $ transferFrom' x0 + where + transferFrom' :: TransactionOptions NoPay -> (Tagged (SProxy "from") Address) -> (Tagged (SProxy "to") Address) -> (Tagged (SProxy "tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString + transferFrom' y0 y1 y2 y3 = sendTx y0 ((tagged $ Tuple3 y1 y2 y3) :: TransferFromFn) + +-------------------------------------------------------------------------------- +-- | TransferOwnershipFn +-------------------------------------------------------------------------------- + + +type TransferOwnershipFn = Tagged (SProxy "transferOwnership(address)") (Tuple1 (Tagged (SProxy "newOwner") Address)) + +transferOwnership :: TransactionOptions NoPay -> { newOwner :: Address } -> Web3 HexString +transferOwnership x0 r = uncurryFields r $ transferOwnership' x0 + where + transferOwnership' :: TransactionOptions NoPay -> (Tagged (SProxy "newOwner") Address) -> Web3 HexString + transferOwnership' y0 y1 = sendTx y0 ((tagged $ Tuple1 y1) :: TransferOwnershipFn) \ No newline at end of file diff --git a/purs-contracts/src/Contracts/V5/SuperRareMarketAuctionV2.purs b/purs-contracts/src/Contracts/V5/SuperRareMarketAuctionV2.purs index b69c22a..611eb4e 100644 --- a/purs-contracts/src/Contracts/V5/SuperRareMarketAuctionV2.purs +++ b/purs-contracts/src/Contracts/V5/SuperRareMarketAuctionV2.purs @@ -237,6 +237,29 @@ currentBidDetailsOfToken x0 cm r = uncurryFields r $ currentBidDetailsOfToken' currentBidDetailsOfToken' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "_originContract") Address) -> (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError (Tuple2 (UIntN (D2 :& D5 :& DOne D6)) Address)) currentBidDetailsOfToken' y0 cm' y2 y3 = call y0 cm' ((tagged $ Tuple2 y2 y3) :: CurrentBidDetailsOfTokenFn) +-------------------------------------------------------------------------------- +-- | DefaultRoyaltyFeeFn +-------------------------------------------------------------------------------- + + +type DefaultRoyaltyFeeFn = Tagged (SProxy "defaultRoyaltyFee()") (Tuple0 ) + +defaultRoyaltyFee :: TransactionOptions NoPay -> ChainCursor -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) +defaultRoyaltyFee x0 cm = map unTuple1 <$> call x0 cm ((tagged $ Tuple0 ) :: DefaultRoyaltyFeeFn) + +-------------------------------------------------------------------------------- +-- | GetERC721ContractRoyaltyFeeFn +-------------------------------------------------------------------------------- + + +type GetERC721ContractRoyaltyFeeFn = Tagged (SProxy "getERC721ContractRoyaltyFee(address)") (Tuple1 (Tagged (SProxy "_originContract") Address)) + +getERC721ContractRoyaltyFee :: TransactionOptions NoPay -> ChainCursor -> { _originContract :: Address } -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) +getERC721ContractRoyaltyFee x0 cm r = uncurryFields r $ getERC721ContractRoyaltyFee' x0 cm + where + getERC721ContractRoyaltyFee' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "_originContract") Address) -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) + getERC721ContractRoyaltyFee' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: GetERC721ContractRoyaltyFeeFn) + -------------------------------------------------------------------------------- -- | HasTokenBeenSoldFn -------------------------------------------------------------------------------- @@ -327,14 +350,30 @@ renounceOwnership :: TransactionOptions NoPay -> Web3 HexString renounceOwnership x0 = sendTx x0 ((tagged $ Tuple0 ) :: RenounceOwnershipFn) -------------------------------------------------------------------------------- --- | RoyaltyFeeFn +-- | SetDefaultRoyaltyFeeFn +-------------------------------------------------------------------------------- + + +type SetDefaultRoyaltyFeeFn = Tagged (SProxy "setDefaultRoyaltyFee(uint256)") (Tuple1 (Tagged (SProxy "_percentage") (UIntN (D2 :& D5 :& DOne D6)))) + +setDefaultRoyaltyFee :: TransactionOptions NoPay -> { _percentage :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString +setDefaultRoyaltyFee x0 r = uncurryFields r $ setDefaultRoyaltyFee' x0 + where + setDefaultRoyaltyFee' :: TransactionOptions NoPay -> (Tagged (SProxy "_percentage") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString + setDefaultRoyaltyFee' y0 y1 = sendTx y0 ((tagged $ Tuple1 y1) :: SetDefaultRoyaltyFeeFn) + +-------------------------------------------------------------------------------- +-- | SetERC721ContractRoyaltyFeeFn -------------------------------------------------------------------------------- -type RoyaltyFeeFn = Tagged (SProxy "royaltyFee()") (Tuple0 ) +type SetERC721ContractRoyaltyFeeFn = Tagged (SProxy "setERC721ContractRoyaltyFee(address,uint256)") (Tuple2 (Tagged (SProxy "_originContract") Address) (Tagged (SProxy "_percentage") (UIntN (D2 :& D5 :& DOne D6)))) -royaltyFee :: TransactionOptions NoPay -> ChainCursor -> Web3 (Either CallError (UIntN (D2 :& D5 :& DOne D6))) -royaltyFee x0 cm = map unTuple1 <$> call x0 cm ((tagged $ Tuple0 ) :: RoyaltyFeeFn) +setERC721ContractRoyaltyFee :: TransactionOptions NoPay -> { _originContract :: Address, _percentage :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString +setERC721ContractRoyaltyFee x0 r = uncurryFields r $ setERC721ContractRoyaltyFee' x0 + where + setERC721ContractRoyaltyFee' :: TransactionOptions NoPay -> (Tagged (SProxy "_originContract") Address) -> (Tagged (SProxy "_percentage") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString + setERC721ContractRoyaltyFee' y0 y1 y2 = sendTx y0 ((tagged $ Tuple2 y1 y2) :: SetERC721ContractRoyaltyFeeFn) -------------------------------------------------------------------------------- -- | SetMarketplaceFeeFn @@ -362,19 +401,6 @@ setPrimarySaleFee x0 r = uncurryFields r $ setPrimarySaleFee' x0 setPrimarySaleFee' :: TransactionOptions NoPay -> (Tagged (SProxy "_percentage") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString setPrimarySaleFee' y0 y1 = sendTx y0 ((tagged $ Tuple1 y1) :: SetPrimarySaleFeeFn) --------------------------------------------------------------------------------- --- | SetRoyaltyFeeFn --------------------------------------------------------------------------------- - - -type SetRoyaltyFeeFn = Tagged (SProxy "setRoyaltyFee(uint256)") (Tuple1 (Tagged (SProxy "_percentage") (UIntN (D2 :& D5 :& DOne D6)))) - -setRoyaltyFee :: TransactionOptions NoPay -> { _percentage :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString -setRoyaltyFee x0 r = uncurryFields r $ setRoyaltyFee' x0 - where - setRoyaltyFee' :: TransactionOptions NoPay -> (Tagged (SProxy "_percentage") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString - setRoyaltyFee' y0 y1 = sendTx y0 ((tagged $ Tuple1 y1) :: SetRoyaltyFeeFn) - -------------------------------------------------------------------------------- -- | SetSalePriceFn -------------------------------------------------------------------------------- diff --git a/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs b/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs new file mode 100644 index 0000000..70fa9eb --- /dev/null +++ b/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs @@ -0,0 +1,37 @@ +module Deploy.Contracts.SuperRareLegacy where + +import Prelude +import Chanterelle.Internal.Deploy (DeployReceipt) +import Chanterelle.Internal.Types (ContractConfig, DeployM) +import Contracts.V5.SuperRareLegacy as SuperRareLegacy +import Deploy.Utils (GasSettings, deployContractWithConfig) +import Migrations.Utils (emptyGasSettings) +import Network.Ethereum.Web3 (Address, UIntN) +import Network.Ethereum.Web3.Solidity.Sizes (S256) + +type SuperRareLegacy + = ( _lastTokenId :: UIntN S256, _name :: String, _symbol :: String, _oldSuperRare :: Address ) + +makeSuperRareLegacyConfig :: Record SuperRareLegacy -> ContractConfig SuperRareLegacy +makeSuperRareLegacyConfig { _name, _symbol, _oldSuperRare, _lastTokenId } = + { filepath: "./contracts/v5/build/SuperRareLegacy.json" + , name: "SuperRareLegacy" + , constructor: SuperRareLegacy.constructor + , unvalidatedArgs: pure { _lastTokenId, _name, _symbol, _oldSuperRare } + } + +type DeployResults + = ( superRareLegacy :: DeployReceipt SuperRareLegacy + ) + +deployScript :: Record SuperRareLegacy -> DeployM (Record DeployResults) +deployScript = deployScriptWithGasSettings emptyGasSettings + +deployScriptWithGasSettings :: GasSettings -> Record SuperRareLegacy -> DeployM (Record DeployResults) +deployScriptWithGasSettings gasSettings srl = do + superRareLegacy <- + deployContractWithConfig + { contractConfig: makeSuperRareLegacyConfig srl + , gasSettings + } + pure { superRareLegacy } diff --git a/purs-contracts/test/Main.purs b/purs-contracts/test/Main.purs index 0ada2ca..c7b1545 100644 --- a/purs-contracts/test/Main.purs +++ b/purs-contracts/test/Main.purs @@ -5,8 +5,9 @@ import Data.Maybe (Maybe(..)) import Effect (Effect) import Effect.Aff (Milliseconds(..), launchAff_) import Test.Spec.Contracts.SupeRare as SupeRare -import Test.Spec.Contracts.SuperRareV2 as SuperRareV2 +import Test.Spec.Contracts.SuperRareLegacy as SuperRareLegacy import Test.Spec.Contracts.SuperRareMarketAuctionV2 as SuperRareMarketAuctionV2 +import Test.Spec.Contracts.SuperRareV2 as SuperRareV2 import Test.Spec.Reporter.Console (consoleReporter) import Test.Spec.Runner (runSpecT, defaultConfig) @@ -21,3 +22,4 @@ main = SupeRare.spec SuperRareV2.spec SuperRareMarketAuctionV2.spec + SuperRareLegacy.spec diff --git a/purs-contracts/test/Spec/Contracts/SupeRare.purs b/purs-contracts/test/Spec/Contracts/SupeRare.purs index 0e658cd..7a4f10f 100644 --- a/purs-contracts/test/Spec/Contracts/SupeRare.purs +++ b/purs-contracts/test/Spec/Contracts/SupeRare.purs @@ -4,7 +4,7 @@ import Prelude import Chanterelle.Internal.Deploy (DeployReceipt) import Chanterelle.Internal.Types (NoArgs) import Chanterelle.Test (buildTestConfig) -import Contracts.V4.SupeRare (addNewToken, isWhitelisted, ownerOf, tokenURI, totalSupply, whitelistCreator) as SupeRare +import Contracts.V4.SupeRare (addNewToken, isWhitelisted, ownerOf, tokenURI, totalSupply, transfer, whitelistCreator) as SupeRare import Data.Array (drop, length, replicate, take, zipWith, (..)) import Data.Array.Partial (head) import Data.Lens ((?~)) @@ -14,7 +14,7 @@ import Deploy.Utils (awaitTxSuccessWeb3) import Effect.Aff (Aff) import Effect.Aff.Class (liftAff) import Network.Ethereum.Core.BigNumber (unsafeToInt) -import Network.Ethereum.Web3 (Address, ChainCursor(..), Provider, UIntN, Web3, _to, unUIntN) +import Network.Ethereum.Web3 (Address, ChainCursor(..), HexString, Provider, UIntN, Web3, _to, unUIntN) import Network.Ethereum.Web3.Solidity.Sizes (S256) import Partial.Unsafe (unsafePartial) import Test.Spec (SpecT, beforeAll, describe, it) @@ -110,3 +110,15 @@ totalSupply { supeRare: { deployAddress }, primaryAccount } = $ SupeRare.totalSupply (defaultTxOpts primaryAccount # _to ?~ deployAddress) Latest + +transfer :: + forall r. + TestEnv r -> + Address -> + Address -> UIntN S256 -> Web3 HexString +transfer testEnv@{ supeRare: { deployAddress } } from to _tokenId = do + txHash <- + SupeRare.transfer (defaultTxOpts from # _to ?~ deployAddress) + { _to: to, _tokenId } + awaitTxSuccessWeb3 txHash + pure txHash diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs new file mode 100644 index 0000000..bbe73ef --- /dev/null +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs @@ -0,0 +1,110 @@ +module Test.Spec.Contracts.SuperRareLegacy where + +import Prelude +import Chanterelle.Test (buildTestConfig) +import Data.Array (filter, (..)) +import Data.Array.Partial (head) +import Data.Either (isLeft) +import Data.Traversable (for) +import Deploy.Contracts.SuperRareLegacy (SuperRareLegacy) +import Deploy.Contracts.SuperRareLegacy (deployScript) as SuperRareLegacy +import Effect.Aff (Aff, try) +import Effect.Class.Console (logShow) +import Network.Ethereum.Web3 (embed) +import Partial.Unsafe (unsafePartial) +import Record as Record +import Test.Spec (SpecT, beforeAll, describe, describeOnly, it, pending) +import Test.Spec.Assertions (shouldEqual, shouldNotSatisfy, shouldSatisfy) +import Test.Spec.Contracts.SupeRare as SupeRare +import Test.Spec.Contracts.SupeRare as SupeRareSpec +import Test.Spec.Contracts.SuperRareLegacy.Actions (TestEnv, isUpgraded, ownerOf, preUpgradeOwnerOf, refreshPreUpgradeOwnerOf, totalSupply) +import Test.Spec.Contracts.Utils (createTokensWithFunction, intToUInt256, nullAddress, uInt256FromBigNumber, web3Test) + +spec :: SpecT Aff Unit Aff Unit +spec = + beforeAll init do + describeOnly "SuperRareLegacy" + $ do + it "should have correct total supply" \tenv@{ provider } -> + web3Test provider do + let + { numOldSuperRareTokens } = tenv + supply <- totalSupply tenv + supply `shouldEqual` intToUInt256 numOldSuperRareTokens + it "should have correct pre-upgrade token owners" \tenv@{ provider } -> + web3Test provider do + let + { numOldSuperRareTokens } = tenv + void + $ for (1 .. numOldSuperRareTokens) \tid -> do + owner <- SupeRare.ownerOf tenv (intToUInt256 tid) + preUpgradeOwner <- preUpgradeOwnerOf tenv (intToUInt256 tid) + owner `shouldEqual` preUpgradeOwner + it "should return false when calling `isUpgraded` on non-upgraded token" \tenv@{ provider } -> do + web3Test provider do + let + { numOldSuperRareTokens } = tenv + void + $ for (1 .. numOldSuperRareTokens) \tid -> do + upgraded <- isUpgraded tenv (intToUInt256 tid) + upgraded `shouldEqual` false + it "should get null address as token's owner if not upgraded" \tenv@{ provider } -> do + web3Test provider do + let + { numOldSuperRareTokens } = tenv + void + $ for (1 .. 1) \tid -> do + owner <- ownerOf tenv (intToUInt256 tid) + owner `shouldEqual` nullAddress + it "should fail to refresh a pre-upgrade owner when it needs no refreshing" \tenv@{ provider } -> do + res <- + try + $ web3Test provider do + let + { numOldSuperRareTokens } = tenv + void + $ for (1 .. 1) \tid -> do + void $ refreshPreUpgradeOwnerOf tenv (intToUInt256 tid) + res `shouldSatisfy` isLeft + it "should refresh a pre-upgrade owner" \tenv@{ provider } -> + web3Test provider do + let + { numOldSuperRareTokens, accounts } = tenv + void + $ for (1 .. 1) \tid -> do + owner <- SupeRare.ownerOf tenv (intToUInt256 tid) + let + to = unsafePartial head $ filter (\addr -> addr /= owner) accounts + void $ SupeRare.transfer tenv owner to $ intToUInt256 tid + void $ refreshPreUpgradeOwnerOf tenv $ intToUInt256 tid + pending "should upgrade a token" + pending "should find the correct creator for an upgraded token" + +----------------------------------------------------------------------------- +-- | Init +----------------------------------------------------------------------------- +init :: Aff (TestEnv ()) +init = do + tenv@{ provider, supeRare: { deployAddress: supeRare } } <- initSupeRare + let + numOldSuperRareTokens = 4 + web3Test provider $ createOldSupeRareTokens tenv numOldSuperRareTokens + { superRareLegacy } <- + buildTestConfig "http://localhost:8545" 60 + ( SuperRareLegacy.deployScript + { _name: "SupeRareLegacy" + , _symbol: "SUPR" + , _oldSuperRare: supeRare + , _lastTokenId: (uInt256FromBigNumber $ embed 4) + } + ) + pure $ Record.merge { superRareLegacy, numOldSuperRareTokens } tenv + where + initSupeRare = do + tenv@{ accounts, provider } <- SupeRareSpec.init + web3Test provider $ whitelistAddresses tenv + pure tenv + + createOldSupeRareTokens tenv n = void $ createTokensWithFunction tenv n (SupeRare.addNewToken tenv) + + whitelistAddresses tenv@{ accounts } = void $ for accounts (SupeRareSpec.whitelistAddress tenv) diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs new file mode 100644 index 0000000..d3a10df --- /dev/null +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs @@ -0,0 +1,113 @@ +module Test.Spec.Contracts.SuperRareLegacy.Actions where + +import Prelude +import Chanterelle.Internal.Deploy (DeployReceipt) +import Chanterelle.Internal.Types (NoArgs) +import Contracts.V5.SuperRareLegacy as SuperRareLegacy +import Data.Lens ((?~)) +import Deploy.Contracts.SuperRareLegacy (SuperRareLegacy) +import Deploy.Utils (awaitTxSuccessWeb3) +import Effect.Class.Console (logShow) +import Network.Ethereum.Web3 (Address, ChainCursor(..), HexString, Provider, UIntN, Web3, _to) +import Network.Ethereum.Web3.Solidity.Sizes (S256) +import Test.Spec.Contracts.Utils (defaultTxOpts, throwOnCallError) + +----------------------------------------------------------------------------- +-- | TestEnv +----------------------------------------------------------------------------- +type TestEnv r + = { supeRare :: DeployReceipt NoArgs + , superRareLegacy :: DeployReceipt SuperRareLegacy + , provider :: Provider + , accounts :: Array Address + , primaryAccount :: Address + , numOldSuperRareTokens :: Int + | r + } + +----------------------------------------------------------------------------- +-- | totalSupply +----------------------------------------------------------------------------- +totalSupply :: + forall r. TestEnv r -> Web3 (UIntN S256) +totalSupply tenv = + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + in + throwOnCallError + $ SuperRareLegacy.totalSupply + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + +----------------------------------------------------------------------------- +-- | preUpgradeOwnerOf +----------------------------------------------------------------------------- +preUpgradeOwnerOf :: + forall r. TestEnv r -> UIntN S256 -> Web3 Address +preUpgradeOwnerOf tenv _tokenId = + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + in + throwOnCallError + $ SuperRareLegacy.preUpgradeOwnerOf + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + { _tokenId } + +----------------------------------------------------------------------------- +-- | ownerOf +----------------------------------------------------------------------------- +ownerOf :: + forall r. TestEnv r -> UIntN S256 -> Web3 Address +ownerOf tenv _tokenId = + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + in + throwOnCallError + $ SuperRareLegacy.ownerOf + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + { _tokenId } + +----------------------------------------------------------------------------- +-- | isUpgraded +----------------------------------------------------------------------------- +isUpgraded :: + forall r. TestEnv r -> UIntN S256 -> Web3 Boolean +isUpgraded tenv _tokenId = + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + in + throwOnCallError + $ SuperRareLegacy.isUpgraded + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + { _tokenId } + +----------------------------------------------------------------------------- +-- | refreshPreUpgradeOwnerOf +----------------------------------------------------------------------------- +refreshPreUpgradeOwnerOf :: + forall r. TestEnv r -> UIntN S256 -> Web3 HexString +refreshPreUpgradeOwnerOf tenv _tokenId = do + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + txHash <- + SuperRareLegacy.refreshPreUpgradeOwnerOf + ( defaultTxOpts primaryAccount + # _to + ?~ deployAddress + ) + { _tokenId } + awaitTxSuccessWeb3 txHash + pure txHash diff --git a/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs b/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs index 5138e12..048f9fa 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs @@ -3,7 +3,7 @@ module Test.Spec.Contracts.SuperRareMarketAuctionV2.Actions where import Prelude import Chanterelle.Internal.Deploy (DeployReceipt) import Chanterelle.Internal.Types (NoArgs) -import Contracts.V5.SuperRareMarketAuctionV2 (acceptBid, bid, buy, cancelBid, currentBidDetailsOfToken, hasTokenBeenSold, markTokensAsSold, marketplaceFee, payments, primarySaleFee, royaltyFee, setSalePrice, tokenPrice) as SuperRareMarketAuctionV2 +import Contracts.V5.SuperRareMarketAuctionV2 (acceptBid, bid, buy, cancelBid, currentBidDetailsOfToken, getERC721ContractRoyaltyFee, hasTokenBeenSold, markTokensAsSold, marketplaceFee, payments, primarySaleFee, setERC721ContractRoyaltyFee, setSalePrice, tokenPrice) as SuperRareMarketAuctionV2 import Contracts.V5.TestAssertFailOnPay as TestAssertFailOnPay import Contracts.V5.TestExpensiveWallet as TestExpensiveWallet import Contracts.V5.TestRequireFailOnPay as TestRequireFailOnPay @@ -27,10 +27,10 @@ import Partial.Unsafe (unsafePartial) import Prim.Row (class Lacks) import Record as Record import Test.QuickCheck (arbitrary) -import Test.QuickCheck.Gen (randomSample') +import Test.QuickCheck.Gen (chooseInt, randomSample') import Test.Spec.Assertions (shouldEqual) import Test.Spec.Contracts.SuperRareV2 as SuperRareV2Spec -import Test.Spec.Contracts.Utils (defaultTxOpts, throwOnCallError, uInt256FromBigNumber) +import Test.Spec.Contracts.Utils (createTokensWithFunction, defaultTxOpts, throwOnCallError, uInt256FromBigNumber) ----------------------------------------------------------------------------- -- | TestEnv @@ -260,20 +260,56 @@ currentBidDetailsOfToken tenv _tokenId = do pure { price, bidder } ----------------------------------------------------------------------------- --- | marketplaceFee +-- | getERC721ContractRoyaltyFee +----------------------------------------------------------------------------- +getERC721ContractRoyaltyFee :: + forall r. TestEnv r -> Address -> Web3 (UIntN S256) +getERC721ContractRoyaltyFee tenv _originContract = + let + { v2Marketplace: { deployAddress } + , primaryAccount + } = tenv + in + throwOnCallError + $ SuperRareMarketAuctionV2.getERC721ContractRoyaltyFee + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + { _originContract } + +----------------------------------------------------------------------------- +-- | setERC721ContractRoyaltyFee +----------------------------------------------------------------------------- +setERC721ContractRoyaltyFee :: + forall r. TestEnv r -> Address -> UIntN S256 -> Web3 HexString +setERC721ContractRoyaltyFee tenv _originContract _percentage = do + let + { v2Marketplace: { deployAddress } + , primaryAccount + } = tenv + txHash <- + SuperRareMarketAuctionV2.setERC721ContractRoyaltyFee + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + { _originContract, _percentage } + awaitTxSuccessWeb3 txHash + pure txHash + +----------------------------------------------------------------------------- +-- | royaltyFee ----------------------------------------------------------------------------- royaltyFee :: forall r. TestEnv r -> Web3 (UIntN S256) royaltyFee tenv = let { v2Marketplace: { deployAddress } + , v2SuperRare: { deployAddress: _originContract } , primaryAccount } = tenv in throwOnCallError - $ SuperRareMarketAuctionV2.royaltyFee + $ SuperRareMarketAuctionV2.getERC721ContractRoyaltyFee (defaultTxOpts primaryAccount # _to ?~ deployAddress) Latest + { _originContract } ----------------------------------------------------------------------------- -- | primarySaleFee @@ -353,7 +389,7 @@ mkSuperRareTokens :: Int -> Web3 (Array { owner ∷ Address, tokenId ∷ UIntN S256, uri ∷ String }) mkSuperRareTokens tenv n = - SuperRareV2Spec.createTokensWithFunction + createTokensWithFunction tenv n (SuperRareV2Spec.addNewToken tenv) @@ -361,6 +397,14 @@ mkSuperRareTokens tenv n = ----------------------------------------------------------------------------- -- | genTokenPrices ----------------------------------------------------------------------------- +genPercentageLessThan :: forall m. MonadEffect m => Int -> m (UIntN S256) +genPercentageLessThan n = + liftEffect (randomSample' 1 $ chooseInt 1 n) + >>= \v -> pure $ uInt256FromBigNumber $ embed $ unsafePartial $ head v + +----------------------------------------------------------------------------- +-- | genPercentage +----------------------------------------------------------------------------- genTokenPrices :: forall m. MonadEffect m => Int -> m (Array (UIntN S256)) genTokenPrices n = liftEffect (randomSample' n arbitrary) diff --git a/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs b/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs index 8e920ed..3a4faa1 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs @@ -14,9 +14,9 @@ import Network.Ethereum.Core.HexString (nullWord, takeHex) import Network.Ethereum.Web3 (embed, mkAddress, unUIntN) import Partial.Unsafe (unsafePartial) import Record as Record -import Test.Spec (SpecT, beforeAll, describe, it) +import Test.Spec (SpecT, beforeAll, describe, it, itOnly) import Test.Spec.Assertions (shouldEqual) -import Test.Spec.Contracts.SuperRareMarketAuctionV2.Actions (TestEnv, acceptBid, assertFailBid, bid, buy, cancelBid, checkEthDifference, checkNewOwnerStatus, checkPayout, claimMoneyFromExpensiveWallet, currentBidDetailsOfToken, expensiveWalletBid, genPriceAndSet, genTokenPrices, hasTokenBeenSold, markTokensAsSold, mkPurchasePayload, mkSuperRareTokens, mkTokensAndSetForSale, payments, placeBid, requireFailBid, revertFailBid, setSalePrice, tokenPrice) +import Test.Spec.Contracts.SuperRareMarketAuctionV2.Actions (TestEnv, acceptBid, assertFailBid, bid, buy, cancelBid, checkEthDifference, checkNewOwnerStatus, checkPayout, claimMoneyFromExpensiveWallet, currentBidDetailsOfToken, expensiveWalletBid, genPercentageLessThan, genPriceAndSet, genTokenPrices, hasTokenBeenSold, markTokensAsSold, mkPurchasePayload, mkSuperRareTokens, mkTokensAndSetForSale, payments, placeBid, requireFailBid, revertFailBid, setERC721ContractRoyaltyFee, setSalePrice, tokenPrice) import Test.Spec.Contracts.SuperRareV2 as SuperRareV2Spec import Test.Spec.Contracts.Utils (intToUInt256, uInt256FromBigNumber, web3Test) @@ -337,6 +337,40 @@ spec = owedPayment <- unUIntN <$> payments tenv revertfailOnPayAddr checkEthDifference buyer (embed 0) purchaseTxHash owedPayment `shouldEqual` (price + buyerFee) + it "can modify the royalty percentage and accept a bid with appropriate royalty" \tenv@{ provider } -> + web3Test provider do + tokenDetails <- mkSuperRareTokens tenv 1 + newPerencetage <- genPercentageLessThan 20 + prices <- map unUIntN <$> genTokenPrices (length tokenDetails) + let + { accounts + , v2Marketplace: { deployAddress: marketAddr } + , v2SuperRare: { deployAddress: _originContract } + } = tenv + + tokensAndBids = zipWith (Record.insert (SProxy :: _ "price")) prices tokenDetails + void $ setERC721ContractRoyaltyFee tenv _originContract newPerencetage + bidRess <- for tokensAndBids (placeBid tenv) + acceptRess <- + for bidRess \abPayload -> do + txHash <- acceptBid tenv abPayload + pure abPayload { purchaseTxHash = txHash } + pricesSec <- map unUIntN <$> genTokenPrices (length acceptRess) + let + tokensAndBidsSec = + zipWith + (\price { buyer, tokenId, uri } -> { price, owner: buyer, tokenId, uri }) + pricesSec + acceptRess + bidRessSec <- for tokensAndBidsSec (placeBid tenv) + acceptRessSec <- + for bidRessSec \abPayload -> do + txHash <- acceptBid tenv abPayload + pure abPayload { purchaseTxHash = txHash } + void + $ for acceptRessSec \pd@{ owner, sellerFee, purchaseTxHash, price } -> do + checkNewOwnerStatus tenv pd + checkEthDifference owner (price - sellerFee) purchaseTxHash ----------------------------------------------------------------------------- -- | Init diff --git a/purs-contracts/test/Spec/Contracts/SuperRareV2.purs b/purs-contracts/test/Spec/Contracts/SuperRareV2.purs index abd8d8f..e6c5737 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareV2.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareV2.purs @@ -21,7 +21,7 @@ import Record as Record import Test.Spec (SpecT, beforeAll, describe, it) import Test.Spec.Assertions (shouldEqual) import Test.Spec.Contracts.SupeRare as SupeRare -import Test.Spec.Contracts.Utils (defaultTxOpts, intToUInt256, mkTokenUris, throwOnCallError, web3Test) +import Test.Spec.Contracts.Utils (defaultTxOpts, createTokensWithFunction, intToUInt256, mkTokenUris, throwOnCallError, web3Test) spec :: SpecT Aff Unit Aff Unit spec = @@ -108,18 +108,6 @@ init = do ----------------------------------------------------------------------------- -- | Utils ----------------------------------------------------------------------------- -createTokensWithFunction :: - forall r. - { accounts :: Array Address | r } -> - Int -> - (Address -> String -> Web3 (UIntN S256)) -> - Web3 (Array { tokenId :: UIntN S256, owner :: Address, uri :: String }) -createTokensWithFunction { accounts } amount f = do - tokenUris <- mkTokenUris amount - for (zipWith { acc: _, _uri: _ } accounts tokenUris) \{ acc, _uri } -> do - tokenId <- f acc _uri - pure { owner: acc, uri: _uri, tokenId } - addNewToken :: forall r. TestEnv r -> Address -> String -> Web3 (UIntN S256) addNewToken tenv@{ v2SuperRare: { deployAddress }, primaryAccount } from _uri = do SuperRareV2.addNewToken (defaultTxOpts from # _to ?~ deployAddress) diff --git a/purs-contracts/test/Spec/Contracts/Utils.purs b/purs-contracts/test/Spec/Contracts/Utils.purs index dbb206c..86fab65 100644 --- a/purs-contracts/test/Spec/Contracts/Utils.purs +++ b/purs-contracts/test/Spec/Contracts/Utils.purs @@ -2,16 +2,19 @@ module Test.Spec.Contracts.Utils where import Prelude import Control.Monad.Error.Class (class MonadThrow, throwError) +import Data.Array (zipWith) import Data.Either (Either(..)) import Data.Lens ((?~)) import Data.Maybe (Maybe(..), fromJust) +import Data.Traversable (for) import Effect.Aff (Error, error) import Effect.Aff.AVar (AVar, tryRead) import Effect.Aff.Class (class MonadAff, liftAff) import Effect.Class (class MonadEffect, liftEffect) import Effect.Exception.Unsafe (unsafeThrow) import Network.Ethereum.Core.BigNumber (BigNumber, decimal, embed, parseBigNumber) -import Network.Ethereum.Web3 (Address, CallError, Provider, TransactionOptions, UIntN, Web3, _from, _gas, _gasPrice, defaultTransactionOptions, runWeb3, uIntNFromBigNumber) +import Network.Ethereum.Core.HexString (nullWord, takeHex) +import Network.Ethereum.Web3 (Address, CallError, Provider, TransactionOptions, UIntN, Web3, _from, _gas, _gasPrice, defaultTransactionOptions, mkAddress, runWeb3, uIntNFromBigNumber) import Network.Ethereum.Web3.Solidity.Sizes (S256, s256) import Network.Ethereum.Web3.Types (NoPay) import Partial.Unsafe (unsafePartial) @@ -62,3 +65,18 @@ throwOnCallError f = >>= case _ of Left cerr -> throwError $ error $ show cerr Right x -> pure x + +createTokensWithFunction :: + forall r. + { accounts :: Array Address | r } -> + Int -> + (Address -> String -> Web3 (UIntN S256)) -> + Web3 (Array { tokenId :: UIntN S256, owner :: Address, uri :: String }) +createTokensWithFunction { accounts } amount f = do + tokenUris <- mkTokenUris amount + for (zipWith { acc: _, _uri: _ } accounts tokenUris) \{ acc, _uri } -> do + tokenId <- f acc _uri + pure { owner: acc, uri: _uri, tokenId } + +nullAddress :: Address +nullAddress = unsafePartial fromJust $ mkAddress $ takeHex 40 nullWord diff --git a/yarn.lock b/yarn.lock index c1dff7e..78be82f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3630,6 +3630,10 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +"openzeppelin-solidity-pixura@https://github.com/Pixura/openzeppelin-contracts#ec0e22b8060fb39ba7deced72bc745c4bdfafdec": + version "2.5.0" + resolved "https://github.com/Pixura/openzeppelin-contracts#ec0e22b8060fb39ba7deced72bc745c4bdfafdec" + "openzeppelin-solidity-solc4@https://github.com/OpenZeppelin/openzeppelin-contracts#v2.0.0": version "2.0.0" resolved "https://github.com/OpenZeppelin/openzeppelin-contracts#06e265b38d3e9daeaa7b33f9035c700d6bc0c6a0" @@ -5291,9 +5295,9 @@ web3-net@1.2.1: web3-core-method "1.2.1" web3-utils "1.2.1" -"web3-provider-engine@git+https://github.com/trufflesuite/provider-engine.git#web3-one": +"web3-provider-engine@https://github.com/trufflesuite/provider-engine#web3-one": version "14.0.6" - resolved "git+https://github.com/trufflesuite/provider-engine.git#3538c60bc4836b73ccae1ac3f64c8fed8ef19c1a" + resolved "https://github.com/trufflesuite/provider-engine#3538c60bc4836b73ccae1ac3f64c8fed8ef19c1a" dependencies: async "^2.5.0" backoff "^2.5.0" From 7020c7030bd3b1f2310ee1a51e884f43f6efd814 Mon Sep 17 00:00:00 2001 From: Charles Crain Date: Thu, 2 Apr 2020 18:55:16 -0700 Subject: [PATCH 2/6] approval test for legacy, migration for legacy --- contracts/v4/build/CryptoPunksMarket.json | 2 +- contracts/v4/build/ERC20CappedMetadata.json | 2 +- contracts/v4/build/ERC20Metadata.json | 2 +- contracts/v4/build/ERC20MintableMetadata.json | 2 +- contracts/v4/build/ERC721Market.json | 2 +- contracts/v4/build/ERC721Old.json | 2 +- contracts/v4/build/IERC721Creator.json | 2 +- contracts/v4/build/ISuperRare.json | 2 +- contracts/v4/build/Operated.json | 2 +- contracts/v4/build/PixuraNFT.json | 2 +- .../v4/build/PixuraNFTContractGenerator.json | 2 +- contracts/v4/build/SupeRare.json | 2 +- .../v4/build/SuperRareMarketAuction.json | 2 +- contracts/v4/build/SuperRareV2.json | 2 +- contracts/v4/build/Whitelist.json | 2 +- contracts/v5/build/MaybeSendValue.json | 2 +- contracts/v5/build/SendValueOrEscrow.json | 2 +- contracts/v5/build/SuperRareLegacy.json | 35 ++++-- .../v5/build/SuperRareMarketAuctionV2.json | 2 +- contracts/v5/build/TestAssertFailOnPay.json | 2 +- contracts/v5/build/TestExpensiveWallet.json | 2 +- contracts/v5/build/TestRequireFailOnPay.json | 2 +- contracts/v5/build/TestRevertOnPay.json | 2 +- contracts/v5/src/SuperRareLegacy.sol | 46 ++++++-- .../src/Contracts/V5/SuperRareLegacy.purs | 31 +++++- .../src/Deploy/Contracts/SuperRareLegacy.purs | 97 ++++++++++++++--- .../src/Migrations/SuperRareLegacy.purs | 100 ++++++++++++++++++ purs-contracts/test/Main.purs | 2 +- .../test/Spec/Contracts/SupeRare.purs | 11 +- .../test/Spec/Contracts/SuperRareLegacy.purs | 61 +++++++++-- .../Contracts/SuperRareLegacy/Actions.purs | 74 +++++++++++++ .../SuperRareMarkAuctionV2/Actions.purs | 1 + .../Contracts/SuperRareMarketAuctionV2.purs | 7 +- purs-contracts/test/Spec/Contracts/Utils.purs | 12 ++- 34 files changed, 453 insertions(+), 68 deletions(-) create mode 100644 purs-contracts/src/Migrations/SuperRareLegacy.purs diff --git a/contracts/v4/build/CryptoPunksMarket.json b/contracts/v4/build/CryptoPunksMarket.json index 8526217..66f804e 100644 --- a/contracts/v4/build/CryptoPunksMarket.json +++ b/contracts/v4/build/CryptoPunksMarket.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681876635, + "lastModified": 1585774623305, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20CappedMetadata.json b/contracts/v4/build/ERC20CappedMetadata.json index d83beec..1e7a8b5 100644 --- a/contracts/v4/build/ERC20CappedMetadata.json +++ b/contracts/v4/build/ERC20CappedMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681878016, + "lastModified": 1585774624773, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20Metadata.json b/contracts/v4/build/ERC20Metadata.json index b9b97ac..561992d 100644 --- a/contracts/v4/build/ERC20Metadata.json +++ b/contracts/v4/build/ERC20Metadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681878313, + "lastModified": 1585774625120, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20MintableMetadata.json b/contracts/v4/build/ERC20MintableMetadata.json index df6c8b8..e9ba600 100644 --- a/contracts/v4/build/ERC20MintableMetadata.json +++ b/contracts/v4/build/ERC20MintableMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681879058, + "lastModified": 1585774625888, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Market.json b/contracts/v4/build/ERC721Market.json index af6affd..4a5b817 100644 --- a/contracts/v4/build/ERC721Market.json +++ b/contracts/v4/build/ERC721Market.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681879231, + "lastModified": 1585774626079, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Old.json b/contracts/v4/build/ERC721Old.json index a14e417..bba7eb0 100644 --- a/contracts/v4/build/ERC721Old.json +++ b/contracts/v4/build/ERC721Old.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681879240, + "lastModified": 1585774626086, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/IERC721Creator.json b/contracts/v4/build/IERC721Creator.json index 2b04762..04a18d8 100644 --- a/contracts/v4/build/IERC721Creator.json +++ b/contracts/v4/build/IERC721Creator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681879257, + "lastModified": 1585774626104, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ISuperRare.json b/contracts/v4/build/ISuperRare.json index 7104e9e..63750fd 100644 --- a/contracts/v4/build/ISuperRare.json +++ b/contracts/v4/build/ISuperRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681879266, + "lastModified": 1585774626114, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Operated.json b/contracts/v4/build/Operated.json index d9fbc18..fc43e4f 100644 --- a/contracts/v4/build/Operated.json +++ b/contracts/v4/build/Operated.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681879350, + "lastModified": 1585774626211, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFT.json b/contracts/v4/build/PixuraNFT.json index 1c17e5c..0646472 100644 --- a/contracts/v4/build/PixuraNFT.json +++ b/contracts/v4/build/PixuraNFT.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681881243, + "lastModified": 1585774628159, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFTContractGenerator.json b/contracts/v4/build/PixuraNFTContractGenerator.json index 5f128fd..202fe12 100644 --- a/contracts/v4/build/PixuraNFTContractGenerator.json +++ b/contracts/v4/build/PixuraNFTContractGenerator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681884147, + "lastModified": 1585774631068, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SupeRare.json b/contracts/v4/build/SupeRare.json index fa26da5..62a6dba 100644 --- a/contracts/v4/build/SupeRare.json +++ b/contracts/v4/build/SupeRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681884783, + "lastModified": 1585774631748, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareMarketAuction.json b/contracts/v4/build/SuperRareMarketAuction.json index e3548cd..282f725 100644 --- a/contracts/v4/build/SuperRareMarketAuction.json +++ b/contracts/v4/build/SuperRareMarketAuction.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681885447, + "lastModified": 1585774632395, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareV2.json b/contracts/v4/build/SuperRareV2.json index 1a38493..f43cb47 100644 --- a/contracts/v4/build/SuperRareV2.json +++ b/contracts/v4/build/SuperRareV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681886822, + "lastModified": 1585774633760, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Whitelist.json b/contracts/v4/build/Whitelist.json index bb02564..d366782 100644 --- a/contracts/v4/build/Whitelist.json +++ b/contracts/v4/build/Whitelist.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585681886861, + "lastModified": 1585774633799, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/MaybeSendValue.json b/contracts/v5/build/MaybeSendValue.json index 0e7203d..10941e8 100644 --- a/contracts/v5/build/MaybeSendValue.json +++ b/contracts/v5/build/MaybeSendValue.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585703490966, + "lastModified": 1585774636206, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SendValueOrEscrow.json b/contracts/v5/build/SendValueOrEscrow.json index aa8c61f..99bf2c1 100644 --- a/contracts/v5/build/SendValueOrEscrow.json +++ b/contracts/v5/build/SendValueOrEscrow.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585703491645, + "lastModified": 1585774636977, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SuperRareLegacy.json b/contracts/v5/build/SuperRareLegacy.json index b5b0368..8ca7dbe 100644 --- a/contracts/v5/build/SuperRareLegacy.json +++ b/contracts/v5/build/SuperRareLegacy.json @@ -1,14 +1,14 @@ { "networks": {}, - "lastModified": 1585703501687, + "lastModified": 1585774647335, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101735760003560e01c80636c0360eb116100de57806395d89b4111610097578063c0b41dfa11610071578063c0b41dfa14610933578063c87b56dd146109a1578063e985e9c514610a48578063f2fde38b14610ac457610173565b806395d89b411461075b578063a22cb465146107de578063b88d4fde1461082e57610173565b80636c0360eb146105c457806370a0823114610647578063715018a61461069f57806382f11a1a146106a95780638da5cb5b146106ef5780638f32d59b1461073957610173565b80632f745c59116101305780632f745c59146103a857806340c1a0641461040a57806342842e0e146104785780634f6ccce7146104e65780636352211e14610528578063651bd4bb1461059657610173565b806301ffc9a71461017857806306fdde03146101dd578063081812fc14610260578063095ea7b3146102ce57806318160ddd1461031c57806323b872dd1461033a575b600080fd5b6101c36004803603602081101561018e57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b08565b604051808215151515815260200191505060405180910390f35b6101e5610b6f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022557808201518184015260208101905061020a565b50505050905090810190601f1680156102525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61028c6004803603602081101561027657600080fd5b8101908080359060200190929190505050610c11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031a600480360360408110156102e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cac565b005b610324610e93565b6040518082815260200191505060405180910390f35b6103a66004803603606081101561035057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ea0565b005b6103f4600480360360408110156103be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f16565b6040518082815260200191505060405180910390f35b6104366004803603602081101561042057600080fd5b8101908080359060200190929190505050610fd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e46004803603606081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108c565b005b610512600480360360208110156104fc57600080fd5b81019080803590602001909291905050506110ac565b6040518082815260200191505060405180910390f35b6105546004803603602081101561053e57600080fd5b810190808035906020019092919050505061112c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c2600480360360208110156105ac57600080fd5b810190808035906020019092919050505061120f565b005b6105cc611403565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060c5780820151818401526020810190506105f1565b50505050905090810190601f1680156106395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106896004803603602081101561065d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a5565b6040518082815260200191505060405180910390f35b6106a761157a565b005b6106d5600480360360208110156106bf57600080fd5b81019080803590602001909291905050506116b5565b604051808215151515815260200191505060405180910390f35b6106f761179f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107416117c9565b604051808215151515815260200191505060405180910390f35b610763611828565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107a3578082015181840152602081019050610788565b50505050905090810190601f1680156107d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61082c600480360360408110156107f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506118ca565b005b6109316004803603608081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611a82565b005b61095f6004803603602081101561094957600080fd5b8101908080359060200190929190505050611afa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109cd600480360360208110156109b757600080fd5b8101908080359060200190929190505050611bf5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0d5780820151818401526020810190506109f2565b50505050905090810190601f168015610a3a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aaa60048036036040811015610a5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df7565b604051808215151515815260200191505060405180910390f35b610b0660048036036020811015610ada57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8b565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050505050905090565b6000610c1c82611f11565b610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806131c4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cb78261112c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132486021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d5d611f83565b73ffffffffffffffffffffffffffffffffffffffff161480610d8c5750610d8b81610d86611f83565b611df7565b5b610de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806131396038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b610eb1610eab611f83565b82611f8b565b610f06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132696031913960400191505060405180910390fd5b610f1183838361207f565b505050565b6000610f21836114a5565b8210610f78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612f87602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610fc257fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561104a57600080fd5b505afa15801561105e573d6000803e3d6000fd5b505050506040513d602081101561107457600080fd5b81019080805190602001909291905050509050919050565b6110a783838360405180602001604052806000815250611a82565b505050565b60006110b6610e93565b821061110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061329a602c913960400191505060405180910390fd5b6007828154811061111a57fe5b90600052602060002001549050919050565b6000806111a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f77696c6c20616c77617973206661696c0000000000000000000000000000000081525060200191505060405180910390fd5b6111aa826116b5565b6111ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180612fe46033913960400191505060405180910390fd5b611208826120a3565b9050919050565b611218816116b5565b1561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061308d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156112e357600080fd5b505afa1580156112f7573d6000803e3d6000fd5b505050506040513d602081101561130d57600080fd5b8101908080519060200190929190505050905061132982611afa565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806130be603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561149b5780601f106114705761010080835404028352916020019161149b565b820191906000526020600020905b81548152906001019060200180831161147e57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613171602a913960400191505060405180910390fd5b611573600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061216b565b9050919050565b6115826117c9565b6115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d602081101561175557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661180c611f83565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118c05780601f10611895576101008083540402835291602001916118c0565b820191906000526020600020905b8154815290600101906020018083116118a357829003601f168201915b5050505050905090565b6118d2611f83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611973576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611980611f83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a2d611f83565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611a93611a8d611f83565b83611f8b565b611ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132696031913960400191505060405180910390fd5b611af484848484612179565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806130fb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611c0082611f11565b611c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613219602f913960400191505060405180910390fd5b6060600c60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cfe5780601f10611cd357610100808354040283529160200191611cfe565b820191906000526020600020905b815481529060010190602001808311611ce157829003601f168201915b50505050509050600081511415611d275760405180602001604052806000815250915050611df2565b600b816040516020018083805460018160011615610100020316600290048015611d885780601f10611d66576101008083540402835291820191611d88565b820191906000526020600020905b815481529060010190602001808311611d74575b505082805190602001908083835b60208310611db95780518252602082019150602081019050602083039250611d96565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e936117c9565b611f05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611f0e816121eb565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000611f9682611f11565b611feb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613061602c913960400191505060405180910390fd5b6000611ff68361112c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061206557508373ffffffffffffffffffffffffffffffffffffffff1661204d84610c11565b73ffffffffffffffffffffffffffffffffffffffff16145b8061207657506120758185611df7565b5b91505092915050565b61208a838383612331565b612094838261258c565b61209e828261272a565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061319b6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b61218484848461207f565b612190848484846127f1565b6121e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fb26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130176026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff166123518261112c565b73ffffffffffffffffffffffffffffffffffffffff16146123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131f06029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061303d6024913960400191505060405180910390fd5b61244c81612b2d565b612493600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612beb565b6124da600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0e565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006125e46001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612c2490919063ffffffff16565b90506000600660008481526020019081526020016000205490508181146126d1576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061265157fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106126a957fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036127239190612d79565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b60006128128473ffffffffffffffffffffffffffffffffffffffff16612c6e565b61281f5760019050612b25565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612863611f83565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156129135780820151818401526020810190506128f8565b50505050905090810190601f1680156129405780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106129d857805182526020820191506020810190506020830392506129b5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a3a576040519150601f19603f3d011682016040523d82523d6000602084013e612a3f565b606091505b509150915081612aad57600081511115612a5c5780518082602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fb26032913960400191505060405180910390fd5b6000818060200190516020811015612ac457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612be85760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b612c0360018260000154612c2490919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000612c6683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cb9565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015612cb057506000801b8214155b92505050919050565b6000838311158290612d66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d2b578082015181840152602081019050612d10565b50505050905090810190601f168015612d585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b815481835581811115612da057818360005260206000209182019101612d9f9190612da5565b5b505050565b612dc791905b80821115612dc3576000816000905550600101612dab565b5090565b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612e7681611f11565b15612ee9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f82600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0e565b505056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820d5c86d8d847b50bf319a8f778ef92f9ec1722f078d8ddd8f33f35ac8b2b6988d64736f6c63430005100032" + "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f5b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612058565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120ec565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612172565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613868602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139186021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121e4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121e4565b612058565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137dd6038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806135ec603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121ec565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121e4565b82612479565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139756031913960400191505060405180910390fd5b6110e883838361256d565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061362b602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806139a6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806136886033913960400191505060405180910390fd5b61136c82612591565b9050919050565b61137c81611819565b156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806137316031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613762603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613815602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612659565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121e4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121e4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121e4565b83612479565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139756031913960400191505060405180910390fd5b611c5884848484612667565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061379f603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612172565b611db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806138e9602f913960400191505060405180910390fd5b6060600c60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e625780601f10611e3757610100808354040283529160200191611e62565b820191906000526020600020905b815481529060010190602001808311611e4557829003601f168201915b50505050509050600081511415611e8b5760405180602001604052806000815250915050611f56565b600b816040516020018083805460018160011615610100020316600290048015611eec5780601f10611eca576101008083540402835291820191611eec565b820191906000526020600020905b815481529060010190602001808311611ed8575b505082805190602001908083835b60208310611f1d5780518252602082019150602081019050602083039250611efa565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b611f6361192d565b611fd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613939603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120f461192d565b612166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61216f816126d9565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561226157600080fd5b505afa158015612275573d6000803e3d6000fd5b505050506040513d602081101561228b57600080fd5b810190808051906020019092919050505090506060600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561231357600080fd5b505afa158015612327573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561235157600080fd5b810190808051604051939291908464010000000082111561237157600080fd5b8382019150602082018581111561238757600080fd5b82518660018202830111640100000000821117156123a457600080fd5b8083526020830192505050908051906020019080838360005b838110156123d85780820151818401526020810190506123bd565b50505050905090810190601f1680156124055780820380516001836020036101000a031916815260200191505b506040525050509050612418828461281f565b6124228382612840565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600061248482612172565b6124d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613705602c913960400191505060405180910390fd5b60006124e483611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061255357508373ffffffffffffffffffffffffffffffffffffffff1661253b84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b8061256457506125638185612058565b5b91505092915050565b6125788383836128ca565b6125828382612b25565b61258c8282612cc3565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061383f6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b61267284848461256d565b61267e84848484612d8a565b6126d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806136566032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561275f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136bb6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61282982826130c6565b6128338282612cc3565b61283c81613282565b5050565b61284982612172565b61289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613894602c913960400191505060405180910390fd5b80600c600084815260200190815260200160002090805190602001906128c592919061351a565b505050565b8273ffffffffffffffffffffffffffffffffffffffff166128ea82611303565b73ffffffffffffffffffffffffffffffffffffffff1614612956576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138c06029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806136e16024913960400191505060405180910390fd5b6129e5816132ce565b612a2c600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061338c565b612a73600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133af565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612b7d6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133c590919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612c6a576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612bea57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612c4257fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612cbc919061359a565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612dab8473ffffffffffffffffffffffffffffffffffffffff1661340f565b612db857600190506130be565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612dfc6121e4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612eac578082015181840152602081019050612e91565b50505050905090810190601f168015612ed95780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f715780518252602082019150602081019050602083039250612f4e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fd3576040519150601f19603f3d011682016040523d82523d6000602084013e612fd8565b606091505b50915091508161304657600081511115612ff55780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806136566032913960400191505060405180910390fd5b600081806020019051602081101561305d57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61317281612172565b156131e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061327e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133af565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133895760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133a4600182600001546133c590919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600061340783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061345a565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561345157506000801b8214155b92505050919050565b6000838311158290613507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134cc5780820151818401526020810190506134b1565b50505050905090810190601f1680156134f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061355b57805160ff1916838001178555613589565b82800160010185558215613589579182015b8281111561358857825182559160200191906001019061356d565b5b50905061359691906135c6565b5090565b8154818355818111156135c1578183600052602060002091820191016135c091906135c6565b5b505050565b6135e891905b808211156135e45760008160009055506001016135cc565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158203eaff52b7727cce8c45260c7cd3f8dd06cb9a8c6442876cb7a15f719f71f9b3864736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405162003f7238038062003f72833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291908051906020019092919050505083838181620001e86301ffc9a760e01b6200039160201b60201c565b620002006380ac58cd60e01b6200039160201b60201c565b6200021863780e9d6360e01b6200039160201b60201c565b81600990805190602001906200023092919062000b8d565b5080600a90805190602001906200024992919062000b8d565b5062000262635b5e139f60e01b6200039160201b60201c565b505050506000620002786200049a60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600190505b81811162000386576200037881620004a260201b60201c565b80806001019150506200035f565b505050505062000c3c565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200042e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156200051857600080fd5b505afa1580156200052d573d6000803e3d6000fd5b505050506040513d60208110156200054457600080fd5b810190808051906020019092919050505090506060600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015620005cd57600080fd5b505afa158015620005e2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156200060d57600080fd5b81019080805160405193929190846401000000008211156200062e57600080fd5b838201915060208201858111156200064557600080fd5b82518660018202830111640100000000821117156200066357600080fd5b8083526020830192505050908051906020019080838360005b83811015620006995780820151818401526020810190506200067c565b50505050905090810190601f168015620006c75780820380516001836020036101000a031916815260200191505b506040525050509050620006e282846200074b60201b60201c565b620006f483826200078960201b60201c565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6200076282826200081f60201b62002dca1760201c565b620007748282620009f260201b60201c565b620007858162000ab960201b60201c565b5050565b6200079a8262000b0560201b60201c565b620007f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018062003f46602c913960400191505060405180910390fd5b80600c600084815260200190815260200160002090805190602001906200081a92919062000b8d565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b620008d48162000b0560201b60201c565b1562000948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620009ee600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002062000b7760201b62002c0e1760201c565b5050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6001816000016000828254019250508190555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000bd057805160ff191683800117855562000c01565b8280016001018555821562000c01579182015b8281111562000c0057825182559160200191906001019062000be3565b5b50905062000c10919062000c14565b5090565b62000c3991905b8082111562000c3557600081600090555060010162000c1b565b5090565b90565b6132fa8062000c4c6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636c0360eb116100de57806395d89b4111610097578063c0b41dfa11610071578063c0b41dfa14610933578063c87b56dd146109a1578063e985e9c514610a48578063f2fde38b14610ac457610173565b806395d89b411461075b578063a22cb465146107de578063b88d4fde1461082e57610173565b80636c0360eb146105c457806370a0823114610647578063715018a61461069f57806382f11a1a146106a95780638da5cb5b146106ef5780638f32d59b1461073957610173565b80632f745c59116101305780632f745c59146103a857806340c1a0641461040a57806342842e0e146104785780634f6ccce7146104e65780636352211e14610528578063651bd4bb1461059657610173565b806301ffc9a71461017857806306fdde03146101dd578063081812fc14610260578063095ea7b3146102ce57806318160ddd1461031c57806323b872dd1461033a575b600080fd5b6101c36004803603602081101561018e57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b08565b604051808215151515815260200191505060405180910390f35b6101e5610b6f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022557808201518184015260208101905061020a565b50505050905090810190601f1680156102525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61028c6004803603602081101561027657600080fd5b8101908080359060200190929190505050610c11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031a600480360360408110156102e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cac565b005b610324610e93565b6040518082815260200191505060405180910390f35b6103a66004803603606081101561035057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ea0565b005b6103f4600480360360408110156103be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f16565b6040518082815260200191505060405180910390f35b6104366004803603602081101561042057600080fd5b8101908080359060200190929190505050610fd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e46004803603606081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108c565b005b610512600480360360208110156104fc57600080fd5b81019080803590602001909291905050506110ac565b6040518082815260200191505060405180910390f35b6105546004803603602081101561053e57600080fd5b810190808035906020019092919050505061112c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c2600480360360208110156105ac57600080fd5b810190808035906020019092919050505061120f565b005b6105cc611403565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060c5780820151818401526020810190506105f1565b50505050905090810190601f1680156106395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106896004803603602081101561065d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a5565b6040518082815260200191505060405180910390f35b6106a761157a565b005b6106d5600480360360208110156106bf57600080fd5b81019080803590602001909291905050506116b5565b604051808215151515815260200191505060405180910390f35b6106f761179f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107416117c9565b604051808215151515815260200191505060405180910390f35b610763611828565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107a3578082015181840152602081019050610788565b50505050905090810190601f1680156107d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61082c600480360360408110156107f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506118ca565b005b6109316004803603608081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611a82565b005b61095f6004803603602081101561094957600080fd5b8101908080359060200190929190505050611afa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109cd600480360360208110156109b757600080fd5b8101908080359060200190929190505050611bf5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0d5780820151818401526020810190506109f2565b50505050905090810190601f168015610a3a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aaa60048036036040811015610a5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df7565b604051808215151515815260200191505060405180910390f35b610b0660048036036020811015610ada57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8b565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050505050905090565b6000610c1c82611f11565b610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806131c4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cb78261112c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132486021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d5d611f83565b73ffffffffffffffffffffffffffffffffffffffff161480610d8c5750610d8b81610d86611f83565b611df7565b5b610de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806131396038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b610eb1610eab611f83565b82611f8b565b610f06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132696031913960400191505060405180910390fd5b610f1183838361207f565b505050565b6000610f21836114a5565b8210610f78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612f87602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610fc257fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561104a57600080fd5b505afa15801561105e573d6000803e3d6000fd5b505050506040513d602081101561107457600080fd5b81019080805190602001909291905050509050919050565b6110a783838360405180602001604052806000815250611a82565b505050565b60006110b6610e93565b821061110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061329a602c913960400191505060405180910390fd5b6007828154811061111a57fe5b90600052602060002001549050919050565b6000806111a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f77696c6c20616c77617973206661696c0000000000000000000000000000000081525060200191505060405180910390fd5b6111aa826116b5565b6111ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180612fe46033913960400191505060405180910390fd5b611208826120a3565b9050919050565b611218816116b5565b1561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061308d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156112e357600080fd5b505afa1580156112f7573d6000803e3d6000fd5b505050506040513d602081101561130d57600080fd5b8101908080519060200190929190505050905061132982611afa565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806130be603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561149b5780601f106114705761010080835404028352916020019161149b565b820191906000526020600020905b81548152906001019060200180831161147e57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613171602a913960400191505060405180910390fd5b611573600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061216b565b9050919050565b6115826117c9565b6115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d602081101561175557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661180c611f83565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118c05780601f10611895576101008083540402835291602001916118c0565b820191906000526020600020905b8154815290600101906020018083116118a357829003601f168201915b5050505050905090565b6118d2611f83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611973576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611980611f83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a2d611f83565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611a93611a8d611f83565b83611f8b565b611ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806132696031913960400191505060405180910390fd5b611af484848484612179565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806130fb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611c0082611f11565b611c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613219602f913960400191505060405180910390fd5b6060600c60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cfe5780601f10611cd357610100808354040283529160200191611cfe565b820191906000526020600020905b815481529060010190602001808311611ce157829003601f168201915b50505050509050600081511415611d275760405180602001604052806000815250915050611df2565b600b816040516020018083805460018160011615610100020316600290048015611d885780601f10611d66576101008083540402835291820191611d88565b820191906000526020600020905b815481529060010190602001808311611d74575b505082805190602001908083835b60208310611db95780518252602082019150602081019050602083039250611d96565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e936117c9565b611f05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611f0e816121eb565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000611f9682611f11565b611feb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613061602c913960400191505060405180910390fd5b6000611ff68361112c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061206557508373ffffffffffffffffffffffffffffffffffffffff1661204d84610c11565b73ffffffffffffffffffffffffffffffffffffffff16145b8061207657506120758185611df7565b5b91505092915050565b61208a838383612331565b612094838261258c565b61209e828261272a565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061319b6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b61218484848461207f565b612190848484846127f1565b6121e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fb26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130176026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff166123518261112c565b73ffffffffffffffffffffffffffffffffffffffff16146123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131f06029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061303d6024913960400191505060405180910390fd5b61244c81612b2d565b612493600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612beb565b6124da600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0e565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006125e46001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612c2490919063ffffffff16565b90506000600660008481526020019081526020016000205490508181146126d1576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061265157fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106126a957fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036127239190612d79565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b60006128128473ffffffffffffffffffffffffffffffffffffffff16612c6e565b61281f5760019050612b25565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612863611f83565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156129135780820151818401526020810190506128f8565b50505050905090810190601f1680156129405780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106129d857805182526020820191506020810190506020830392506129b5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a3a576040519150601f19603f3d011682016040523d82523d6000602084013e612a3f565b606091505b509150915081612aad57600081511115612a5c5780518082602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612fb26032913960400191505060405180910390fd5b6000818060200190516020811015612ac457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612be85760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b612c0360018260000154612c2490919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000612c6683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cb9565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015612cb057506000801b8214155b92505050919050565b6000838311158290612d66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d2b578082015181840152602081019050612d10565b50505050905090810190601f168015612d585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b815481835581811115612da057818360005260206000209182019101612d9f9190612da5565b5b505050565b612dc791905b80821115612dc3576000816000905550600101612dab565b5090565b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612e7681611f11565b15612ee9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f82600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0e565b505056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820d5c86d8d847b50bf319a8f778ef92f9ec1722f078d8ddd8f33f35ac8b2b6988d64736f6c634300051000324552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e" + "object": "60806040523480156200001157600080fd5b5060405162003f4838038062003f48833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b613a0680620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f5b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612058565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120ec565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612172565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613868602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139186021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121e4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121e4565b612058565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137dd6038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806135ec603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121ec565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121e4565b82612479565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139756031913960400191505060405180910390fd5b6110e883838361256d565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061362b602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806139a6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806136886033913960400191505060405180910390fd5b61136c82612591565b9050919050565b61137c81611819565b156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806137316031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613762603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613815602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612659565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121e4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121e4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121e4565b83612479565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139756031913960400191505060405180910390fd5b611c5884848484612667565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061379f603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612172565b611db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806138e9602f913960400191505060405180910390fd5b6060600c60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e625780601f10611e3757610100808354040283529160200191611e62565b820191906000526020600020905b815481529060010190602001808311611e4557829003601f168201915b50505050509050600081511415611e8b5760405180602001604052806000815250915050611f56565b600b816040516020018083805460018160011615610100020316600290048015611eec5780601f10611eca576101008083540402835291820191611eec565b820191906000526020600020905b815481529060010190602001808311611ed8575b505082805190602001908083835b60208310611f1d5780518252602082019150602081019050602083039250611efa565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b611f6361192d565b611fd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613939603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120f461192d565b612166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61216f816126d9565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561226157600080fd5b505afa158015612275573d6000803e3d6000fd5b505050506040513d602081101561228b57600080fd5b810190808051906020019092919050505090506060600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561231357600080fd5b505afa158015612327573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561235157600080fd5b810190808051604051939291908464010000000082111561237157600080fd5b8382019150602082018581111561238757600080fd5b82518660018202830111640100000000821117156123a457600080fd5b8083526020830192505050908051906020019080838360005b838110156123d85780820151818401526020810190506123bd565b50505050905090810190601f1680156124055780820380516001836020036101000a031916815260200191505b506040525050509050612418828461281f565b6124228382612840565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600061248482612172565b6124d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613705602c913960400191505060405180910390fd5b60006124e483611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061255357508373ffffffffffffffffffffffffffffffffffffffff1661253b84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b8061256457506125638185612058565b5b91505092915050565b6125788383836128ca565b6125828382612b25565b61258c8282612cc3565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061383f6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b61267284848461256d565b61267e84848484612d8a565b6126d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806136566032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561275f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136bb6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61282982826130c6565b6128338282612cc3565b61283c81613282565b5050565b61284982612172565b61289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613894602c913960400191505060405180910390fd5b80600c600084815260200190815260200160002090805190602001906128c592919061351a565b505050565b8273ffffffffffffffffffffffffffffffffffffffff166128ea82611303565b73ffffffffffffffffffffffffffffffffffffffff1614612956576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138c06029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806136e16024913960400191505060405180910390fd5b6129e5816132ce565b612a2c600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061338c565b612a73600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133af565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612b7d6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133c590919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612c6a576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612bea57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612c4257fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612cbc919061359a565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612dab8473ffffffffffffffffffffffffffffffffffffffff1661340f565b612db857600190506130be565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612dfc6121e4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612eac578082015181840152602081019050612e91565b50505050905090810190601f168015612ed95780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f715780518252602082019150602081019050602083039250612f4e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fd3576040519150601f19603f3d011682016040523d82523d6000602084013e612fd8565b606091505b50915091508161304657600081511115612ff55780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806136566032913960400191505060405180910390fd5b600081806020019051602081101561305d57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61317281612172565b156131e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061327e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133af565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133895760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133a4600182600001546133c590919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600061340783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061345a565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561345157506000801b8214155b92505050919050565b6000838311158290613507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134cc5780820151818401526020810190506134b1565b50505050905090810190601f1680156134f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061355b57805160ff1916838001178555613589565b82800160010185558215613589579182015b8281111561358857825182559160200191906001019061356d565b5b50905061359691906135c6565b5090565b8154818355818111156135c1578183600052602060002091820191016135c091906135c6565b5b505050565b6135e891905b808211156135e45760008160009055506001016135cc565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158203eaff52b7727cce8c45260c7cd3f8dd06cb9a8c6442876cb7a15f719f71f9b3864736f6c63430005100032" } }, "abi": [ @@ -28,11 +28,6 @@ "internalType": "address", "name": "_oldSuperRare", "type": "address" - }, - { - "internalType": "uint256", - "name": "_lastTokenId", - "type": "uint256" } ], "payable": false, @@ -272,6 +267,30 @@ "stateMutability": "view", "type": "function" }, + { + "constant": false, + "inputs": [], + "name": "markMintingCompleted", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256[]", + "name": "_tokenIds", + "type": "uint256[]" + } + ], + "name": "mintLegacyTokens", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { "constant": true, "inputs": [], diff --git a/contracts/v5/build/SuperRareMarketAuctionV2.json b/contracts/v5/build/SuperRareMarketAuctionV2.json index 91a93f8..b12ac34 100644 --- a/contracts/v5/build/SuperRareMarketAuctionV2.json +++ b/contracts/v5/build/SuperRareMarketAuctionV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585703493349, + "lastModified": 1585774638697, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestAssertFailOnPay.json b/contracts/v5/build/TestAssertFailOnPay.json index f5f9cd7..e286e43 100644 --- a/contracts/v5/build/TestAssertFailOnPay.json +++ b/contracts/v5/build/TestAssertFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585703494876, + "lastModified": 1585774640250, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestExpensiveWallet.json b/contracts/v5/build/TestExpensiveWallet.json index 84d0e2a..3e868d8 100644 --- a/contracts/v5/build/TestExpensiveWallet.json +++ b/contracts/v5/build/TestExpensiveWallet.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585703497875, + "lastModified": 1585774643235, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRequireFailOnPay.json b/contracts/v5/build/TestRequireFailOnPay.json index 5047bd1..8738dee 100644 --- a/contracts/v5/build/TestRequireFailOnPay.json +++ b/contracts/v5/build/TestRequireFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585703496377, + "lastModified": 1585774641722, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRevertOnPay.json b/contracts/v5/build/TestRevertOnPay.json index 20bf2dc..92c2f39 100644 --- a/contracts/v5/build/TestRevertOnPay.json +++ b/contracts/v5/build/TestRevertOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585703499298, + "lastModified": 1585774644710, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/src/SuperRareLegacy.sol b/contracts/v5/src/SuperRareLegacy.sol index f271afb..90be9f0 100644 --- a/contracts/v5/src/SuperRareLegacy.sol +++ b/contracts/v5/src/SuperRareLegacy.sol @@ -27,24 +27,59 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { // Mapping from token ID to the pre upgrade token owner. mapping(uint256 => address) private _tokenOwnerPreUpgrade; + // Boolean for when minting has completed. + bool private _mintingCompleted; + ///////////////////////////////////////////////////////////////////////// // Constructor ///////////////////////////////////////////////////////////////////////// constructor( string memory _name, string memory _symbol, - address _oldSuperRare, - uint256 _lastTokenId + address _oldSuperRare ) public ERC721Full(_name, _symbol) { // Set old SuperRare. oldSuperRare = ISupeRare(_oldSuperRare); - // Mint the legacy tokens. - for (uint256 i = 1; i <= _lastTokenId; i++) { - _createLegacyToken(i); + // Mark minting as not completed + _mintingCompleted = false; + } + + ///////////////////////////////////////////////////////////////////////// + // Admin Public Methods + ///////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////// + // mintLegacyTokens + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Mints the legacy tokens without emitting any events. + * @param _tokenIds uint256 array of token ids mint. + */ + function mintLegacyTokens(uint256[] calldata _tokenIds) external onlyOwner { + require( + !_mintingCompleted, + "SuperRareLegacy: Cannot mint tokens once minting has completed." + ); + for (uint256 i = 0; i < _tokenIds.length; i++) { + _createLegacyToken(_tokenIds[i]); } } + ///////////////////////////////////////////////////////////////////////// + // markMintingCompleted + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Marks _mintedCompleted as true which forever prevents any more minting. + */ + function markMintingCompleted() external onlyOwner { + require( + !_mintingCompleted, + "SuperRareLegacy: Cannot mark completed if already completed." + ); + _mintingCompleted = true; + } + ///////////////////////////////////////////////////////////////////////// // Public Methods ///////////////////////////////////////////////////////////////////////// @@ -58,7 +93,6 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { * @return address of the token owner. */ function ownerOf(uint256 _tokenId) public view returns (address owner) { - require(false, "will always fail"); require( isUpgraded(_tokenId), "SuperRareLegacy: owner query for non-upgraded token" diff --git a/purs-contracts/src/Contracts/V5/SuperRareLegacy.purs b/purs-contracts/src/Contracts/V5/SuperRareLegacy.purs index 810da12..a213524 100644 --- a/purs-contracts/src/Contracts/V5/SuperRareLegacy.purs +++ b/purs-contracts/src/Contracts/V5/SuperRareLegacy.purs @@ -26,13 +26,13 @@ import Partial.Unsafe (unsafePartial) -------------------------------------------------------------------------------- -type ConstructorFn = Tagged (SProxy "constructor(string,string,address,uint256)") (Tuple4 (Tagged (SProxy "_name") String) (Tagged (SProxy "_symbol") String) (Tagged (SProxy "_oldSuperRare") Address) (Tagged (SProxy "_lastTokenId") (UIntN (D2 :& D5 :& DOne D6)))) +type ConstructorFn = Tagged (SProxy "constructor(string,string,address)") (Tuple3 (Tagged (SProxy "_name") String) (Tagged (SProxy "_symbol") String) (Tagged (SProxy "_oldSuperRare") Address)) -constructor :: TransactionOptions NoPay -> HexString -> { _name :: String, _symbol :: String, _oldSuperRare :: Address, _lastTokenId :: (UIntN (D2 :& D5 :& DOne D6)) } -> Web3 HexString +constructor :: TransactionOptions NoPay -> HexString -> { _name :: String, _symbol :: String, _oldSuperRare :: Address } -> Web3 HexString constructor x0 bc r = uncurryFields r $ constructor' x0 bc where - constructor' :: TransactionOptions NoPay -> HexString -> (Tagged (SProxy "_name") String) -> (Tagged (SProxy "_symbol") String) -> (Tagged (SProxy "_oldSuperRare") Address) -> (Tagged (SProxy "_lastTokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 HexString - constructor' y0 bc' y2 y3 y4 y5 = deployContract y0 bc' ((tagged $ Tuple4 y2 y3 y4 y5) :: ConstructorFn) + constructor' :: TransactionOptions NoPay -> HexString -> (Tagged (SProxy "_name") String) -> (Tagged (SProxy "_symbol") String) -> (Tagged (SProxy "_oldSuperRare") Address) -> Web3 HexString + constructor' y0 bc' y2 y3 y4 = deployContract y0 bc' ((tagged $ Tuple3 y2 y3 y4) :: ConstructorFn) -------------------------------------------------------------------------------- -- | Approval @@ -219,6 +219,29 @@ isUpgraded x0 cm r = uncurryFields r $ isUpgraded' x0 cm isUpgraded' :: TransactionOptions NoPay -> ChainCursor -> (Tagged (SProxy "_tokenId") (UIntN (D2 :& D5 :& DOne D6))) -> Web3 (Either CallError Boolean) isUpgraded' y0 cm' y2 = map unTuple1 <$> call y0 cm' ((tagged $ Tuple1 y2) :: IsUpgradedFn) +-------------------------------------------------------------------------------- +-- | MarkMintingCompletedFn +-------------------------------------------------------------------------------- + + +type MarkMintingCompletedFn = Tagged (SProxy "markMintingCompleted()") (Tuple0 ) + +markMintingCompleted :: TransactionOptions NoPay -> Web3 HexString +markMintingCompleted x0 = sendTx x0 ((tagged $ Tuple0 ) :: MarkMintingCompletedFn) + +-------------------------------------------------------------------------------- +-- | MintLegacyTokensFn +-------------------------------------------------------------------------------- + + +type MintLegacyTokensFn = Tagged (SProxy "mintLegacyTokens(uint256[])") (Tuple1 (Tagged (SProxy "_tokenIds") (Array (UIntN (D2 :& D5 :& DOne D6))))) + +mintLegacyTokens :: TransactionOptions NoPay -> { _tokenIds :: (Array (UIntN (D2 :& D5 :& DOne D6))) } -> Web3 HexString +mintLegacyTokens x0 r = uncurryFields r $ mintLegacyTokens' x0 + where + mintLegacyTokens' :: TransactionOptions NoPay -> (Tagged (SProxy "_tokenIds") (Array (UIntN (D2 :& D5 :& DOne D6)))) -> Web3 HexString + mintLegacyTokens' y0 y1 = sendTx y0 ((tagged $ Tuple1 y1) :: MintLegacyTokensFn) + -------------------------------------------------------------------------------- -- | NameFn -------------------------------------------------------------------------------- diff --git a/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs b/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs index 70fa9eb..bfe58e8 100644 --- a/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs +++ b/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs @@ -2,36 +2,109 @@ module Deploy.Contracts.SuperRareLegacy where import Prelude import Chanterelle.Internal.Deploy (DeployReceipt) -import Chanterelle.Internal.Types (ContractConfig, DeployM) +import Chanterelle.Internal.Logging (LogLevel(..), log) +import Chanterelle.Internal.Types (ContractConfig, DeployConfig(..), DeployM) import Contracts.V5.SuperRareLegacy as SuperRareLegacy -import Deploy.Utils (GasSettings, deployContractWithConfig) +import Control.Monad.Reader (ask) +import Data.Array (drop, take, (:)) +import Data.Either (Either(..)) +import Data.Int (toNumber) +import Data.Lens ((?~)) +import Data.Maybe (Maybe(..)) +import Data.Traversable (for) +import Deploy.Utils (GasSettings(..), awaitTxSuccess, awaitTxSuccessWeb3, deployContractWithConfig, txOptsWithGasSettings) +import Effect.Aff.Class (liftAff) import Migrations.Utils (emptyGasSettings) -import Network.Ethereum.Web3 (Address, UIntN) -import Network.Ethereum.Web3.Solidity.Sizes (S256) +import Network.Ethereum.Core.BigNumber (decimal, divide, embed, parseBigNumber, pow, unsafeToInt) +import Network.Ethereum.Web3 (Address, ChainCursor(..), Ether, Transaction(..), TransactionReceipt(..), UIntN, Value, _from, _to, formatValue, mkValue, runWeb3, toMinorUnit, unAddress, unUIntN) +import Network.Ethereum.Web3.Api (eth_getBalance, eth_getTransaction, eth_getTransactionReceipt) +import Network.Ethereum.Web3.Solidity.Sizes (S256, s256) type SuperRareLegacy - = ( _lastTokenId :: UIntN S256, _name :: String, _symbol :: String, _oldSuperRare :: Address ) + = ( _name :: String + , _symbol :: String + , _oldSuperRare :: Address + ) makeSuperRareLegacyConfig :: Record SuperRareLegacy -> ContractConfig SuperRareLegacy -makeSuperRareLegacyConfig { _name, _symbol, _oldSuperRare, _lastTokenId } = +makeSuperRareLegacyConfig { _name, _symbol, _oldSuperRare } = { filepath: "./contracts/v5/build/SuperRareLegacy.json" , name: "SuperRareLegacy" , constructor: SuperRareLegacy.constructor - , unvalidatedArgs: pure { _lastTokenId, _name, _symbol, _oldSuperRare } + , unvalidatedArgs: pure { _name, _symbol, _oldSuperRare } } type DeployResults = ( superRareLegacy :: DeployReceipt SuperRareLegacy ) -deployScript :: Record SuperRareLegacy -> DeployM (Record DeployResults) -deployScript = deployScriptWithGasSettings emptyGasSettings +deployScript :: + Array (UIntN S256) -> + Record SuperRareLegacy -> + DeployM (Record DeployResults) +deployScript = + deployScriptWithGasSettings + ( GasSettings + { gasLimit: parseBigNumber decimal "107123880" + , gasPrice: parseBigNumber decimal "5000000000" + } + ) -deployScriptWithGasSettings :: GasSettings -> Record SuperRareLegacy -> DeployM (Record DeployResults) -deployScriptWithGasSettings gasSettings srl = do - superRareLegacy <- +deployScriptWithGasSettings :: + GasSettings -> + Array (UIntN S256) -> + Record SuperRareLegacy -> DeployM (Record DeployResults) +deployScriptWithGasSettings gasSettings tokenIds srl = do + superRareLegacy@{ deployAddress } <- deployContractWithConfig { contractConfig: makeSuperRareLegacyConfig srl , gasSettings } + mintLegacyTokens gasSettings tokenIds deployAddress pure { superRareLegacy } + +mintLegacyTokens :: GasSettings -> Array (UIntN S256) -> Address -> DeployM Unit +mintLegacyTokens gasSettings tokenIds addr = do + DeployConfig { primaryAccount, provider } <- ask + res <- + liftAff + $ runWeb3 provider do + let + txOpts = + txOptsWithGasSettings gasSettings + # _from + ?~ primaryAccount + # _to + ?~ addr + void + $ for (chunk 500 tokenIds) \_tokenIds -> do + logBalanceAndPrint primaryAccount + log Info $ "Minting Legacy tokens for:\n" <> show _tokenIds + txHash <- SuperRareLegacy.mintLegacyTokens txOpts { _tokenIds } + awaitTxSuccessWeb3 txHash + logEthSpentOnTx txHash + txHash <- SuperRareLegacy.markMintingCompleted txOpts + awaitTxSuccessWeb3 txHash + log Info $ "Minting completed and marked in smart contract" + case res of + Left err -> log Error (show err) + Right _ -> pure unit + where + chunk n [] = [] + + chunk n xs = take n xs : chunk n (drop n xs) + + logEthSpentOnTx txHash = do + Transaction { gasPrice } <- eth_getTransaction txHash + TransactionReceipt { gasUsed } <- eth_getTransactionReceipt txHash + let + weiSpent = gasPrice * gasUsed + log Info $ "Eth spent on Tx:" <> show ((toNumber $ unsafeToInt (weiSpent `divide` pow (embed 10) 14)) / 10000.0) + + logBalanceAndPrint primAddr = do + bal <- eth_getBalance primAddr Latest + log Info + $ "Current balance for address " + <> show (unAddress primAddr) + <> " is " + <> show (toNumber (unsafeToInt (bal `divide` pow (embed 10) 14)) / 10000.0) diff --git a/purs-contracts/src/Migrations/SuperRareLegacy.purs b/purs-contracts/src/Migrations/SuperRareLegacy.purs new file mode 100644 index 0000000..5cb57e5 --- /dev/null +++ b/purs-contracts/src/Migrations/SuperRareLegacy.purs @@ -0,0 +1,100 @@ +module Migrations.SuperRareMarketAuctionV2 where + +import Prelude +import Chanterelle.Internal.Logging (LogLevel(..), log) +import Chanterelle.Internal.Types (DeployConfig(..)) +import Control.Monad.Reader (ask) +import Data.Array (catMaybes, drop, nub, take, (:)) +import Data.Either (Either(..), either) +import Data.Lens ((?~)) +import Data.Maybe (Maybe(..), fromMaybe, maybe) +import Data.Traversable (for) +import Deploy.Contracts.SuperRareLegacy (deployScriptWithGasSettings) +import Deploy.Utils (GasSettings, awaitTxSuccessWeb3, txOptsWithGasSettings) +import Effect (Effect) +import Effect.Aff (joinFiber, launchAff, runAff_) +import Effect.Aff.Class (class MonadAff, liftAff) +import Effect.Class (liftEffect) +import Effect.Exception (throw, throwException) +import Migrations.Utils (emptyGasSettings, runMigration) +import Network.Ethereum.Web3 (Address, UIntN, _from, _to, embed, runWeb3, uIntNFromBigNumber) +import Network.Ethereum.Web3.Solidity.Sizes (S256, s256) +import Simple.Graphql.Query (runQuery) +import Simple.Graphql.Types (GraphQlQuery(..), runQueryT) + +type MigrationArgs + = { oldSuperRare :: Address + , pixuraApi :: { url :: String, apiKey :: String } + , tokenIds :: Maybe (Array Int) + } + +main :: Effect Unit +main = + runAff_ (either throwException (const $ log Info "Completed Migration")) + $ runMigration \(args :: { gasSettings :: Maybe GasSettings, migrationArgs :: MigrationArgs }) -> do + DeployConfig { provider, primaryAccount } <- ask + let + { migrationArgs + , gasSettings: mgs + } = args + + { oldSuperRare + , pixuraApi: { url, apiKey } + , tokenIds: mTokenIds + } = migrationArgs + + gasSettings = fromMaybe emptyGasSettings mgs + + txOpts = txOptsWithGasSettings gasSettings # _from ?~ primaryAccount + tokenIds <- case mTokenIds of + Nothing -> lookUpTokenIds { tokenContract: oldSuperRare, url, apiKey } + Just tids -> pure $ nub $ catMaybes $ tids <#> \tid -> uIntNFromBigNumber s256 (embed tid) + void + $ deployScriptWithGasSettings gasSettings tokenIds + { _name: "SuperRareLegacy" + , _symbol: "SUPR" + , _oldSuperRare: oldSuperRare + } + where + chunk n [] = [] + + chunk n xs = take n xs : chunk n (drop n xs) + +type LookUpTokenIdsRes + = { allNonFungibleTokens :: + { nodes :: Array { tokenId :: Int } + } + } + +lookUpTokenIds :: + forall m. + MonadAff m => + { tokenContract :: Address, url :: String, apiKey :: String } -> m (Array (UIntN S256)) +lookUpTokenIds { tokenContract, url, apiKey } = do + res <- liftAff $ runQueryT (runQuery url (Just apiKey) gqlQuery) + case res of + { data: Nothing, errors: Nothing } -> liftEffect $ throw $ "No response for query \n" <> show gqlQuery + { data: Nothing, errors: Just err } -> liftEffect $ throw $ show err + { data: Just { allNonFungibleTokens: { nodes } } } -> + pure $ nub $ catMaybes + $ nodes + <#> \{ tokenId } -> uIntNFromBigNumber s256 (embed tokenId) + where + gqlQuery :: GraphQlQuery { contractAddress :: Address } LookUpTokenIdsRes + gqlQuery = GraphQlQuery { query, variables: { contractAddress: tokenContract } } + + query = + """ + query getNft($contractAddress: String!) { + allNonFungibleTokens( + orderBy: TOKEN_ID_ASC + condition: { contractAddress: $contractAddress, burned:false } + ) { + totalCount + nodes { + tokenId + } + } + } + + """ diff --git a/purs-contracts/test/Main.purs b/purs-contracts/test/Main.purs index c7b1545..b4ef3e6 100644 --- a/purs-contracts/test/Main.purs +++ b/purs-contracts/test/Main.purs @@ -16,7 +16,7 @@ main = launchAff_ $ do let - specConfig = defaultConfig { timeout = Just (Milliseconds $ 120.0 * 1000.0) } + specConfig = defaultConfig { timeout = Just (Milliseconds $ 120.0 * 10000.0) } join $ runSpecT specConfig [ consoleReporter ] do SupeRare.spec diff --git a/purs-contracts/test/Spec/Contracts/SupeRare.purs b/purs-contracts/test/Spec/Contracts/SupeRare.purs index 7a4f10f..5c64f95 100644 --- a/purs-contracts/test/Spec/Contracts/SupeRare.purs +++ b/purs-contracts/test/Spec/Contracts/SupeRare.purs @@ -4,7 +4,7 @@ import Prelude import Chanterelle.Internal.Deploy (DeployReceipt) import Chanterelle.Internal.Types (NoArgs) import Chanterelle.Test (buildTestConfig) -import Contracts.V4.SupeRare (addNewToken, isWhitelisted, ownerOf, tokenURI, totalSupply, transfer, whitelistCreator) as SupeRare +import Contracts.V4.SupeRare (addNewToken, creatorOfToken, isWhitelisted, ownerOf, tokenURI, totalSupply, transfer, whitelistCreator) as SupeRare import Data.Array (drop, length, replicate, take, zipWith, (..)) import Data.Array.Partial (head) import Data.Lens ((?~)) @@ -13,6 +13,7 @@ import Deploy.Contracts.SupeRare (deployScript) as SupeRare import Deploy.Utils (awaitTxSuccessWeb3) import Effect.Aff (Aff) import Effect.Aff.Class (liftAff) +import Effect.Class.Console (logShow) import Network.Ethereum.Core.BigNumber (unsafeToInt) import Network.Ethereum.Web3 (Address, ChainCursor(..), HexString, Provider, UIntN, Web3, _to, unUIntN) import Network.Ethereum.Web3.Solidity.Sizes (S256) @@ -122,3 +123,11 @@ transfer testEnv@{ supeRare: { deployAddress } } from to _tokenId = do { _to: to, _tokenId } awaitTxSuccessWeb3 txHash pure txHash + +creatorOfToken :: forall r. TestEnv r -> UIntN S256 -> Web3 Address +creatorOfToken { supeRare: { deployAddress }, primaryAccount } _tokenId = + throwOnCallError + $ SupeRare.creatorOfToken + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + { _tokenId } diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs index bbe73ef..9f1c0c7 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs @@ -5,6 +5,7 @@ import Chanterelle.Test (buildTestConfig) import Data.Array (filter, (..)) import Data.Array.Partial (head) import Data.Either (isLeft) +import Data.Maybe (Maybe(..), maybe) import Data.Traversable (for) import Deploy.Contracts.SuperRareLegacy (SuperRareLegacy) import Deploy.Contracts.SuperRareLegacy (deployScript) as SuperRareLegacy @@ -17,12 +18,12 @@ import Test.Spec (SpecT, beforeAll, describe, describeOnly, it, pending) import Test.Spec.Assertions (shouldEqual, shouldNotSatisfy, shouldSatisfy) import Test.Spec.Contracts.SupeRare as SupeRare import Test.Spec.Contracts.SupeRare as SupeRareSpec -import Test.Spec.Contracts.SuperRareLegacy.Actions (TestEnv, isUpgraded, ownerOf, preUpgradeOwnerOf, refreshPreUpgradeOwnerOf, totalSupply) +import Test.Spec.Contracts.SuperRareLegacy.Actions (TestEnv, isApprovedForAll, isUpgraded, ownerOf, preUpgradeOwnerOf, refreshPreUpgradeOwnerOf, setApprovalForAll, tokenCreator, totalSupply, transferFrom) import Test.Spec.Contracts.Utils (createTokensWithFunction, intToUInt256, nullAddress, uInt256FromBigNumber, web3Test) spec :: SpecT Aff Unit Aff Unit spec = - beforeAll init do + beforeAll (init Nothing) do describeOnly "SuperRareLegacy" $ do it "should have correct total supply" \tenv@{ provider } -> @@ -77,25 +78,67 @@ spec = to = unsafePartial head $ filter (\addr -> addr /= owner) accounts void $ SupeRare.transfer tenv owner to $ intToUInt256 tid void $ refreshPreUpgradeOwnerOf tenv $ intToUInt256 tid - pending "should upgrade a token" - pending "should find the correct creator for an upgraded token" + preUpgradeOwner <- preUpgradeOwnerOf tenv (intToUInt256 tid) + to `shouldEqual` preUpgradeOwner + it "should upgrade a token" \tenv@{ provider } -> + web3Test provider do + let + { accounts, superRareLegacy: { deployAddress: legacyAddr } } = tenv + void + $ for (1 .. 2) \tid -> do + owner <- SupeRare.ownerOf tenv (intToUInt256 tid) + let + to = unsafePartial head $ filter (\addr -> addr /= owner) accounts + void $ SupeRare.transfer tenv owner legacyAddr $ intToUInt256 tid + upgraded <- isUpgraded tenv (intToUInt256 tid) + upgraded `shouldEqual` true + it "should find the correct creator for an upgraded token" \tenv@{ provider } -> + web3Test provider do + let + { accounts } = tenv + void + $ for (1 .. 2) \tid -> do + srCreator <- SupeRare.creatorOfToken tenv (intToUInt256 tid) + srlCreator <- tokenCreator tenv (intToUInt256 tid) + srlCreator `shouldEqual` srCreator + it "should find the upgraded tokens as upgraded" \tenv@{ provider } -> + web3Test provider + $ void + $ for (1 .. 2) \tid -> do + upgraded <- isUpgraded tenv (intToUInt256 tid) + upgraded `shouldEqual` true + it "can approve others to manage tokens" \tenv@{ provider, accounts } -> do + web3Test provider + $ void + $ for (1 .. 2) \tid -> do + owner <- ownerOf tenv (intToUInt256 tid) + let + approvedOperator = unsafePartial head $ filter ((/=) owner) accounts + void $ setApprovalForAll tenv owner approvedOperator true + approved <- isApprovedForAll tenv owner approvedOperator + approved `shouldEqual` true + void + $ transferFrom tenv owner approvedOperator (intToUInt256 tid) + newOwner <- ownerOf tenv (intToUInt256 tid) + newOwner `shouldEqual` approvedOperator ----------------------------------------------------------------------------- -- | Init ----------------------------------------------------------------------------- -init :: Aff (TestEnv ()) -init = do - tenv@{ provider, supeRare: { deployAddress: supeRare } } <- initSupeRare +init :: Maybe (SupeRare.TestEnv ()) -> Aff (TestEnv ()) +init mtenv = do + tenv@{ provider, supeRare: { deployAddress: supeRare } } <- + maybe initSupeRare pure mtenv let - numOldSuperRareTokens = 4 + numOldSuperRareTokens = 5 web3Test provider $ createOldSupeRareTokens tenv numOldSuperRareTokens { superRareLegacy } <- buildTestConfig "http://localhost:8545" 60 ( SuperRareLegacy.deployScript + ((1 .. numOldSuperRareTokens) <#> intToUInt256) { _name: "SupeRareLegacy" , _symbol: "SUPR" , _oldSuperRare: supeRare - , _lastTokenId: (uInt256FromBigNumber $ embed 4) } ) pure $ Record.merge { superRareLegacy, numOldSuperRareTokens } tenv diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs index d3a10df..757c967 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs @@ -111,3 +111,77 @@ refreshPreUpgradeOwnerOf tenv _tokenId = do { _tokenId } awaitTxSuccessWeb3 txHash pure txHash + +----------------------------------------------------------------------------- +-- | tokenCreator +----------------------------------------------------------------------------- +tokenCreator :: + forall r. TestEnv r -> UIntN S256 -> Web3 Address +tokenCreator tenv _tokenId = + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + in + throwOnCallError + $ SuperRareLegacy.tokenCreator + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + { _tokenId } + +----------------------------------------------------------------------------- +-- | setApprovalForAll +----------------------------------------------------------------------------- +setApprovalForAll :: + forall r. TestEnv r -> Address -> Address -> Boolean -> Web3 HexString +setApprovalForAll tenv owner operator approved = do + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + txHash <- + SuperRareLegacy.setApprovalForAll + ( defaultTxOpts owner + # _to + ?~ deployAddress + ) + { approved, to: operator } + awaitTxSuccessWeb3 txHash + pure txHash + +----------------------------------------------------------------------------- +-- | isApprovedForAll +----------------------------------------------------------------------------- +isApprovedForAll :: + forall r. TestEnv r -> Address -> Address -> Web3 Boolean +isApprovedForAll tenv owner operator = + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + in + throwOnCallError + $ SuperRareLegacy.isApprovedForAll + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + { operator, owner } + +----------------------------------------------------------------------------- +-- | transferFrom +----------------------------------------------------------------------------- +transferFrom :: + forall r. TestEnv r -> Address -> Address -> UIntN S256 -> Web3 HexString +transferFrom tenv from to tokenId = do + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + txHash <- + SuperRareLegacy.transferFrom + ( defaultTxOpts from + # _to + ?~ deployAddress + ) + { from, to, tokenId } + awaitTxSuccessWeb3 txHash + pure txHash diff --git a/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs b/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs index 048f9fa..b47212f 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs @@ -15,6 +15,7 @@ import Data.Maybe (fromJust) import Data.Ord (abs) import Data.Symbol (SProxy(..)) import Data.Traversable (for, traverse) +import Deploy.Contracts.SuperRareLegacy as SuperRareLegacy import Deploy.Contracts.SuperRareV2 (SuperRareV2) as SuperRareV2 import Deploy.Utils (awaitTxSuccessWeb3) import Effect.Class (class MonadEffect, liftEffect) diff --git a/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs b/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs index 3a4faa1..c967879 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs @@ -4,7 +4,7 @@ import Prelude import Chanterelle.Test (buildTestConfig) import Data.Array (filter, length, replicate, zipWith) import Data.Array.Partial (head) -import Data.Maybe (fromJust) +import Data.Maybe (Maybe(..), fromJust) import Data.Symbol (SProxy(..)) import Data.Traversable (for) import Deploy.Contracts.SuperRareMarketAuctionV2 (deployScript) as SuperRareMarketAuctionV2 @@ -16,6 +16,7 @@ import Partial.Unsafe (unsafePartial) import Record as Record import Test.Spec (SpecT, beforeAll, describe, it, itOnly) import Test.Spec.Assertions (shouldEqual) +import Test.Spec.Contracts.SuperRareLegacy as SuperRareLegacySpec import Test.Spec.Contracts.SuperRareMarketAuctionV2.Actions (TestEnv, acceptBid, assertFailBid, bid, buy, cancelBid, checkEthDifference, checkNewOwnerStatus, checkPayout, claimMoneyFromExpensiveWallet, currentBidDetailsOfToken, expensiveWalletBid, genPercentageLessThan, genPriceAndSet, genTokenPrices, hasTokenBeenSold, markTokensAsSold, mkPurchasePayload, mkSuperRareTokens, mkTokensAndSetForSale, payments, placeBid, requireFailBid, revertFailBid, setERC721ContractRoyaltyFee, setSalePrice, tokenPrice) import Test.Spec.Contracts.SuperRareV2 as SuperRareV2Spec import Test.Spec.Contracts.Utils (intToUInt256, uInt256FromBigNumber, web3Test) @@ -377,7 +378,7 @@ spec = ----------------------------------------------------------------------------- init :: Aff (TestEnv ()) init = do - tenv@{ provider } <- initSupeRareV2 + tenv@{ provider, primaryAccount } <- initSupeRareV2 { superRareMarketAuctionV2 } <- buildTestConfig "http://localhost:8545" 60 SuperRareMarketAuctionV2.deployScript @@ -405,6 +406,8 @@ init = do web3Test provider $ whitelistAddresses tenv pure tenv + initSupeRareLegacy = SuperRareLegacySpec.init + whitelistAddresses tenv@{ accounts } = void $ for accounts (SuperRareV2Spec.whitelistAddress tenv) approveMarketplace tenv@{ accounts } marketplace = diff --git a/purs-contracts/test/Spec/Contracts/Utils.purs b/purs-contracts/test/Spec/Contracts/Utils.purs index 86fab65..94db975 100644 --- a/purs-contracts/test/Spec/Contracts/Utils.purs +++ b/purs-contracts/test/Spec/Contracts/Utils.purs @@ -2,15 +2,18 @@ module Test.Spec.Contracts.Utils where import Prelude import Control.Monad.Error.Class (class MonadThrow, throwError) -import Data.Array (zipWith) +import Data.Array (length, zipWith) +import Data.Array.NonEmpty (NonEmptyArray, fromArray, toNonEmpty) import Data.Either (Either(..)) import Data.Lens ((?~)) import Data.Maybe (Maybe(..), fromJust) +import Data.NonEmpty (NonEmpty(..)) import Data.Traversable (for) import Effect.Aff (Error, error) import Effect.Aff.AVar (AVar, tryRead) import Effect.Aff.Class (class MonadAff, liftAff) import Effect.Class (class MonadEffect, liftEffect) +import Effect.Class.Console (logShow) import Effect.Exception.Unsafe (unsafeThrow) import Network.Ethereum.Core.BigNumber (BigNumber, decimal, embed, parseBigNumber) import Network.Ethereum.Core.HexString (nullWord, takeHex) @@ -19,7 +22,7 @@ import Network.Ethereum.Web3.Solidity.Sizes (S256, s256) import Network.Ethereum.Web3.Types (NoPay) import Partial.Unsafe (unsafePartial) import Test.QuickCheck (arbitrary) -import Test.QuickCheck.Gen (Gen, randomSample') +import Test.QuickCheck.Gen (Gen, elements, randomSample') import Test.Spec.Assertions (shouldEqual) readOrFail :: forall m a. (MonadAff m) => AVar a -> m a @@ -73,8 +76,11 @@ createTokensWithFunction :: (Address -> String -> Web3 (UIntN S256)) -> Web3 (Array { tokenId :: UIntN S256, owner :: Address, uri :: String }) createTokensWithFunction { accounts } amount f = do + let + accounts' = unsafePartial fromJust $ (toNonEmpty <$> fromArray accounts) tokenUris <- mkTokenUris amount - for (zipWith { acc: _, _uri: _ } accounts tokenUris) \{ acc, _uri } -> do + accs <- liftEffect $ randomSample' amount (elements accounts') + for (zipWith { acc: _, _uri: _ } accs tokenUris) \{ acc, _uri } -> do tokenId <- f acc _uri pure { owner: acc, uri: _uri, tokenId } From f033328a0e75829609479464fef1f71cbefdf150 Mon Sep 17 00:00:00 2001 From: Charles Crain Date: Tue, 7 Apr 2020 18:35:08 -0700 Subject: [PATCH 3/6] override tokenURI to save on storage in legacy, deployed ropsten contract --- contracts/v4/build/CryptoPunksMarket.json | 2 +- contracts/v4/build/ERC20CappedMetadata.json | 2 +- contracts/v4/build/ERC20Metadata.json | 2 +- contracts/v4/build/ERC20MintableMetadata.json | 2 +- contracts/v4/build/ERC721Market.json | 2 +- contracts/v4/build/ERC721Old.json | 2 +- contracts/v4/build/IERC721Creator.json | 2 +- contracts/v4/build/ISuperRare.json | 2 +- contracts/v4/build/Operated.json | 2 +- contracts/v4/build/PixuraNFT.json | 2 +- .../v4/build/PixuraNFTContractGenerator.json | 2 +- contracts/v4/build/SupeRare.json | 2 +- .../v4/build/SuperRareMarketAuction.json | 2 +- contracts/v4/build/SuperRareV2.json | 2 +- contracts/v4/build/Whitelist.json | 2 +- contracts/v5/build/MaybeSendValue.json | 2 +- contracts/v5/build/SendValueOrEscrow.json | 2 +- contracts/v5/build/SuperRareLegacy.json | 23 ++++++++++--- .../v5/build/SuperRareMarketAuctionV2.json | 2 +- contracts/v5/build/TestAssertFailOnPay.json | 2 +- contracts/v5/build/TestExpensiveWallet.json | 2 +- contracts/v5/build/TestRequireFailOnPay.json | 2 +- contracts/v5/build/TestRevertOnPay.json | 2 +- contracts/v5/src/SuperRareLegacy.sol | 20 +++++++++-- .../src/Deploy/Contracts/SuperRareLegacy.purs | 34 +++++++++---------- .../src/Migrations/SuperRareLegacy.purs | 23 ++++++++----- .../test/Spec/Contracts/SuperRareLegacy.purs | 29 +++++++++++++--- 27 files changed, 114 insertions(+), 59 deletions(-) diff --git a/contracts/v4/build/CryptoPunksMarket.json b/contracts/v4/build/CryptoPunksMarket.json index 66f804e..1b3173c 100644 --- a/contracts/v4/build/CryptoPunksMarket.json +++ b/contracts/v4/build/CryptoPunksMarket.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774623305, + "lastModified": 1585951810460, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20CappedMetadata.json b/contracts/v4/build/ERC20CappedMetadata.json index 1e7a8b5..ab8cec6 100644 --- a/contracts/v4/build/ERC20CappedMetadata.json +++ b/contracts/v4/build/ERC20CappedMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774624773, + "lastModified": 1585951811866, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20Metadata.json b/contracts/v4/build/ERC20Metadata.json index 561992d..de30aa9 100644 --- a/contracts/v4/build/ERC20Metadata.json +++ b/contracts/v4/build/ERC20Metadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774625120, + "lastModified": 1585951812168, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20MintableMetadata.json b/contracts/v4/build/ERC20MintableMetadata.json index e9ba600..fb20cb1 100644 --- a/contracts/v4/build/ERC20MintableMetadata.json +++ b/contracts/v4/build/ERC20MintableMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774625888, + "lastModified": 1585951813008, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Market.json b/contracts/v4/build/ERC721Market.json index 4a5b817..26833d8 100644 --- a/contracts/v4/build/ERC721Market.json +++ b/contracts/v4/build/ERC721Market.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774626079, + "lastModified": 1585951813196, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Old.json b/contracts/v4/build/ERC721Old.json index bba7eb0..80dbd09 100644 --- a/contracts/v4/build/ERC721Old.json +++ b/contracts/v4/build/ERC721Old.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774626086, + "lastModified": 1585951813204, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/IERC721Creator.json b/contracts/v4/build/IERC721Creator.json index 04a18d8..f21f410 100644 --- a/contracts/v4/build/IERC721Creator.json +++ b/contracts/v4/build/IERC721Creator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774626104, + "lastModified": 1585951813226, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ISuperRare.json b/contracts/v4/build/ISuperRare.json index 63750fd..5c0ad05 100644 --- a/contracts/v4/build/ISuperRare.json +++ b/contracts/v4/build/ISuperRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774626114, + "lastModified": 1585951813238, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Operated.json b/contracts/v4/build/Operated.json index fc43e4f..92bd3ce 100644 --- a/contracts/v4/build/Operated.json +++ b/contracts/v4/build/Operated.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774626211, + "lastModified": 1585951813344, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFT.json b/contracts/v4/build/PixuraNFT.json index 0646472..d2997f9 100644 --- a/contracts/v4/build/PixuraNFT.json +++ b/contracts/v4/build/PixuraNFT.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774628159, + "lastModified": 1585951815326, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFTContractGenerator.json b/contracts/v4/build/PixuraNFTContractGenerator.json index 202fe12..e264fe2 100644 --- a/contracts/v4/build/PixuraNFTContractGenerator.json +++ b/contracts/v4/build/PixuraNFTContractGenerator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774631068, + "lastModified": 1585951818244, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SupeRare.json b/contracts/v4/build/SupeRare.json index 62a6dba..5bca36b 100644 --- a/contracts/v4/build/SupeRare.json +++ b/contracts/v4/build/SupeRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774631748, + "lastModified": 1585951818868, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareMarketAuction.json b/contracts/v4/build/SuperRareMarketAuction.json index 282f725..e2cd420 100644 --- a/contracts/v4/build/SuperRareMarketAuction.json +++ b/contracts/v4/build/SuperRareMarketAuction.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774632395, + "lastModified": 1585951819513, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareV2.json b/contracts/v4/build/SuperRareV2.json index f43cb47..bb90b4e 100644 --- a/contracts/v4/build/SuperRareV2.json +++ b/contracts/v4/build/SuperRareV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774633760, + "lastModified": 1585951820889, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Whitelist.json b/contracts/v4/build/Whitelist.json index d366782..a10ddf2 100644 --- a/contracts/v4/build/Whitelist.json +++ b/contracts/v4/build/Whitelist.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774633799, + "lastModified": 1585951820932, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/MaybeSendValue.json b/contracts/v5/build/MaybeSendValue.json index 10941e8..2c5a43b 100644 --- a/contracts/v5/build/MaybeSendValue.json +++ b/contracts/v5/build/MaybeSendValue.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774636206, + "lastModified": 1585951823897, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SendValueOrEscrow.json b/contracts/v5/build/SendValueOrEscrow.json index 99bf2c1..514ffad 100644 --- a/contracts/v5/build/SendValueOrEscrow.json +++ b/contracts/v5/build/SendValueOrEscrow.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774636977, + "lastModified": 1585951824575, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SuperRareLegacy.json b/contracts/v5/build/SuperRareLegacy.json index 8ca7dbe..6c55a14 100644 --- a/contracts/v5/build/SuperRareLegacy.json +++ b/contracts/v5/build/SuperRareLegacy.json @@ -1,14 +1,29 @@ { - "networks": {}, - "lastModified": 1585774647335, + "networks": { + "3": { + "transactionHash": "0x1aca5c8a01ba50bdb77760d71d4f0b42bb1a20e9aadab953dc7e4642380a57ef", + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612028565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bc565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612142565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e3602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136386021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b4565b612028565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135286038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613337603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bc565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b4565b826122ce565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b6110e88383836123c2565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613376602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d36033913960400191505060405180910390fd5b61136c826123e6565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347c6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ad603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613590602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ae565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b4565b836122ce565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b611c58848484846124bc565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134ea603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612142565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135606030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b5060405250505050919050565b611f3361192d565b611fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613659603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c461192d565b612136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213f8161252e565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d602081101561225b57600080fd5b810190808051906020019092919050505090506122788183612674565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122d982612142565b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613450602c913960400191505060405180910390fd5b600061233983611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a857508373ffffffffffffffffffffffffffffffffffffffff1661239084610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b957506123b88185612028565b5b91505092915050565b6123cd838383612695565b6123d783826128f0565b6123e18282612a8e565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135ba6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c78484846123c2565b6124d384848484612b55565b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134066026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267e8282612e91565b6126888282612a8e565b6126918161304d565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611303565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061360f6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342c6024913960400191505060405180910390fd5b6127b081613099565b6127f7600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613157565b61283e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129486001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319090919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a35576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b557fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0d57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8791906132e5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b768473ffffffffffffffffffffffffffffffffffffffff166131da565b612b835760019050612e89565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc76121b4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c77578082015181840152602081019050612c5c565b50505050905090810190601f168015612ca45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3c5780518252602082019150602081019050602083039250612d19565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9e576040519150601f19603f3d011682016040523d82523d6000602084013e612da3565b606091505b509150915081612e1157600081511115612dc05780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b6000818060200190516020811015612e2857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3d81612142565b15612fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131545760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61316f6001826000015461319090919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321c57506000801b8214155b92505050919050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330c5781836000526020600020918201910161330b9190613311565b5b505050565b61333391905b8082111561332f576000816000905550600101613317565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a7231582076f253af4dfd7cb37b0e8a69fd9a3b30e9aae23631e93f631e78965ee56dba5464736f6c63430005100032" + }, + "bytecode": { + "linkReferences": {}, + "object": "60806040523480156200001157600080fd5b5060405162003c6838038062003c68833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61372680620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612028565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bc565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612142565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e3602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136386021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b4565b612028565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135286038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613337603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bc565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b4565b826122ce565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b6110e88383836123c2565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613376602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d36033913960400191505060405180910390fd5b61136c826123e6565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347c6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ad603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613590602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ae565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b4565b836122ce565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b611c58848484846124bc565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134ea603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612142565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135606030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b5060405250505050919050565b611f3361192d565b611fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613659603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c461192d565b612136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213f8161252e565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d602081101561225b57600080fd5b810190808051906020019092919050505090506122788183612674565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122d982612142565b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613450602c913960400191505060405180910390fd5b600061233983611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a857508373ffffffffffffffffffffffffffffffffffffffff1661239084610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b957506123b88185612028565b5b91505092915050565b6123cd838383612695565b6123d783826128f0565b6123e18282612a8e565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135ba6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c78484846123c2565b6124d384848484612b55565b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134066026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267e8282612e91565b6126888282612a8e565b6126918161304d565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611303565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061360f6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342c6024913960400191505060405180910390fd5b6127b081613099565b6127f7600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613157565b61283e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129486001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319090919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a35576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b557fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0d57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8791906132e5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b768473ffffffffffffffffffffffffffffffffffffffff166131da565b612b835760019050612e89565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc76121b4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c77578082015181840152602081019050612c5c565b50505050905090810190601f168015612ca45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3c5780518252602082019150602081019050602083039250612d19565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9e576040519150601f19603f3d011682016040523d82523d6000602084013e612da3565b606091505b509150915081612e1157600081511115612dc05780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b6000818060200190516020811015612e2857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3d81612142565b15612fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131545760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61316f6001826000015461319090919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321c57506000801b8214155b92505050919050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330c5781836000526020600020918201910161330b9190613311565b5b505050565b61333391905b8082111561332f576000816000905550600101613317565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a7231582076f253af4dfd7cb37b0e8a69fd9a3b30e9aae23631e93f631e78965ee56dba5464736f6c63430005100032" + }, + "blockNumber": "0x74fc49", + "blockHash": "0xb35bb91608d7491d17c9585b9a324f4b3edfa5313dd89091c3c0e1a56d3124aa", + "address": "0x0f601bc456ffb250af213997550908756087700b" + } + }, + "lastModified": 1586208359125, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f5b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612058565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120ec565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612172565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613868602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139186021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121e4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121e4565b612058565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137dd6038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806135ec603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121ec565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121e4565b82612479565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139756031913960400191505060405180910390fd5b6110e883838361256d565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061362b602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806139a6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806136886033913960400191505060405180910390fd5b61136c82612591565b9050919050565b61137c81611819565b156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806137316031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613762603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613815602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612659565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121e4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121e4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121e4565b83612479565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139756031913960400191505060405180910390fd5b611c5884848484612667565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061379f603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612172565b611db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806138e9602f913960400191505060405180910390fd5b6060600c60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e625780601f10611e3757610100808354040283529160200191611e62565b820191906000526020600020905b815481529060010190602001808311611e4557829003601f168201915b50505050509050600081511415611e8b5760405180602001604052806000815250915050611f56565b600b816040516020018083805460018160011615610100020316600290048015611eec5780601f10611eca576101008083540402835291820191611eec565b820191906000526020600020905b815481529060010190602001808311611ed8575b505082805190602001908083835b60208310611f1d5780518252602082019150602081019050602083039250611efa565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b611f6361192d565b611fd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613939603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120f461192d565b612166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61216f816126d9565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561226157600080fd5b505afa158015612275573d6000803e3d6000fd5b505050506040513d602081101561228b57600080fd5b810190808051906020019092919050505090506060600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561231357600080fd5b505afa158015612327573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561235157600080fd5b810190808051604051939291908464010000000082111561237157600080fd5b8382019150602082018581111561238757600080fd5b82518660018202830111640100000000821117156123a457600080fd5b8083526020830192505050908051906020019080838360005b838110156123d85780820151818401526020810190506123bd565b50505050905090810190601f1680156124055780820380516001836020036101000a031916815260200191505b506040525050509050612418828461281f565b6124228382612840565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600061248482612172565b6124d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613705602c913960400191505060405180910390fd5b60006124e483611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061255357508373ffffffffffffffffffffffffffffffffffffffff1661253b84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b8061256457506125638185612058565b5b91505092915050565b6125788383836128ca565b6125828382612b25565b61258c8282612cc3565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061383f6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b61267284848461256d565b61267e84848484612d8a565b6126d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806136566032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561275f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136bb6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61282982826130c6565b6128338282612cc3565b61283c81613282565b5050565b61284982612172565b61289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613894602c913960400191505060405180910390fd5b80600c600084815260200190815260200160002090805190602001906128c592919061351a565b505050565b8273ffffffffffffffffffffffffffffffffffffffff166128ea82611303565b73ffffffffffffffffffffffffffffffffffffffff1614612956576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138c06029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806136e16024913960400191505060405180910390fd5b6129e5816132ce565b612a2c600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061338c565b612a73600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133af565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612b7d6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133c590919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612c6a576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612bea57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612c4257fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612cbc919061359a565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612dab8473ffffffffffffffffffffffffffffffffffffffff1661340f565b612db857600190506130be565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612dfc6121e4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612eac578082015181840152602081019050612e91565b50505050905090810190601f168015612ed95780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f715780518252602082019150602081019050602083039250612f4e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fd3576040519150601f19603f3d011682016040523d82523d6000602084013e612fd8565b606091505b50915091508161304657600081511115612ff55780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806136566032913960400191505060405180910390fd5b600081806020019051602081101561305d57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61317281612172565b156131e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061327e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133af565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133895760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133a4600182600001546133c590919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600061340783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061345a565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561345157506000801b8214155b92505050919050565b6000838311158290613507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134cc5780820151818401526020810190506134b1565b50505050905090810190601f1680156134f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061355b57805160ff1916838001178555613589565b82800160010185558215613589579182015b8281111561358857825182559160200191906001019061356d565b5b50905061359691906135c6565b5090565b8154818355818111156135c1578183600052602060002091820191016135c091906135c6565b5b505050565b6135e891905b808211156135e45760008160009055506001016135cc565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158203eaff52b7727cce8c45260c7cd3f8dd06cb9a8c6442876cb7a15f719f71f9b3864736f6c63430005100032" + "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612028565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bc565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612142565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e3602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136386021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b4565b612028565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135286038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613337603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bc565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b4565b826122ce565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b6110e88383836123c2565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613376602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d36033913960400191505060405180910390fd5b61136c826123e6565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347c6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ad603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613590602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ae565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b4565b836122ce565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b611c58848484846124bc565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134ea603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612142565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135606030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b5060405250505050919050565b611f3361192d565b611fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613659603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c461192d565b612136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213f8161252e565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d602081101561225b57600080fd5b810190808051906020019092919050505090506122788183612674565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122d982612142565b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613450602c913960400191505060405180910390fd5b600061233983611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a857508373ffffffffffffffffffffffffffffffffffffffff1661239084610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b957506123b88185612028565b5b91505092915050565b6123cd838383612695565b6123d783826128f0565b6123e18282612a8e565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135ba6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c78484846123c2565b6124d384848484612b55565b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134066026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267e8282612e91565b6126888282612a8e565b6126918161304d565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611303565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061360f6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342c6024913960400191505060405180910390fd5b6127b081613099565b6127f7600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613157565b61283e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129486001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319090919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a35576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b557fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0d57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8791906132e5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b768473ffffffffffffffffffffffffffffffffffffffff166131da565b612b835760019050612e89565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc76121b4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c77578082015181840152602081019050612c5c565b50505050905090810190601f168015612ca45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3c5780518252602082019150602081019050602083039250612d19565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9e576040519150601f19603f3d011682016040523d82523d6000602084013e612da3565b606091505b509150915081612e1157600081511115612dc05780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b6000818060200190516020811015612e2857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3d81612142565b15612fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131545760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61316f6001826000015461319090919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321c57506000801b8214155b92505050919050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330c5781836000526020600020918201910161330b9190613311565b5b505050565b61333391905b8082111561332f576000816000905550600101613317565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a7231582076f253af4dfd7cb37b0e8a69fd9a3b30e9aae23631e93f631e78965ee56dba5464736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405162003f4838038062003f48833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b613a0680620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f5b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612058565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120ec565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612172565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613868602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139186021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121e4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121e4565b612058565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137dd6038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806135ec603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121ec565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121e4565b82612479565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139756031913960400191505060405180910390fd5b6110e883838361256d565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061362b602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806139a6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806136886033913960400191505060405180910390fd5b61136c82612591565b9050919050565b61137c81611819565b156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806137316031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613762603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613815602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612659565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121e4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121e4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121e4565b83612479565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806139756031913960400191505060405180910390fd5b611c5884848484612667565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061379f603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612172565b611db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806138e9602f913960400191505060405180910390fd5b6060600c60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e625780601f10611e3757610100808354040283529160200191611e62565b820191906000526020600020905b815481529060010190602001808311611e4557829003601f168201915b50505050509050600081511415611e8b5760405180602001604052806000815250915050611f56565b600b816040516020018083805460018160011615610100020316600290048015611eec5780601f10611eca576101008083540402835291820191611eec565b820191906000526020600020905b815481529060010190602001808311611ed8575b505082805190602001908083835b60208310611f1d5780518252602082019150602081019050602083039250611efa565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b611f6361192d565b611fd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613939603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120f461192d565b612166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61216f816126d9565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561226157600080fd5b505afa158015612275573d6000803e3d6000fd5b505050506040513d602081101561228b57600080fd5b810190808051906020019092919050505090506060600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561231357600080fd5b505afa158015612327573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561235157600080fd5b810190808051604051939291908464010000000082111561237157600080fd5b8382019150602082018581111561238757600080fd5b82518660018202830111640100000000821117156123a457600080fd5b8083526020830192505050908051906020019080838360005b838110156123d85780820151818401526020810190506123bd565b50505050905090810190601f1680156124055780820380516001836020036101000a031916815260200191505b506040525050509050612418828461281f565b6124228382612840565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600061248482612172565b6124d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613705602c913960400191505060405180910390fd5b60006124e483611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061255357508373ffffffffffffffffffffffffffffffffffffffff1661253b84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b8061256457506125638185612058565b5b91505092915050565b6125788383836128ca565b6125828382612b25565b61258c8282612cc3565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061383f6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b61267284848461256d565b61267e84848484612d8a565b6126d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806136566032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561275f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136bb6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61282982826130c6565b6128338282612cc3565b61283c81613282565b5050565b61284982612172565b61289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613894602c913960400191505060405180910390fd5b80600c600084815260200190815260200160002090805190602001906128c592919061351a565b505050565b8273ffffffffffffffffffffffffffffffffffffffff166128ea82611303565b73ffffffffffffffffffffffffffffffffffffffff1614612956576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138c06029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806136e16024913960400191505060405180910390fd5b6129e5816132ce565b612a2c600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061338c565b612a73600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133af565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612b7d6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133c590919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612c6a576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612bea57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612c4257fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612cbc919061359a565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612dab8473ffffffffffffffffffffffffffffffffffffffff1661340f565b612db857600190506130be565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612dfc6121e4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612eac578082015181840152602081019050612e91565b50505050905090810190601f168015612ed95780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f715780518252602082019150602081019050602083039250612f4e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fd3576040519150601f19603f3d011682016040523d82523d6000602084013e612fd8565b606091505b50915091508161304657600081511115612ff55780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806136566032913960400191505060405180910390fd5b600081806020019051602081101561305d57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61317281612172565b156131e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061327e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133af565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133895760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133a4600182600001546133c590919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600061340783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061345a565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561345157506000801b8214155b92505050919050565b6000838311158290613507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134cc5780820151818401526020810190506134b1565b50505050905090810190601f1680156134f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061355b57805160ff1916838001178555613589565b82800160010185558215613589579182015b8281111561358857825182559160200191906001019061356d565b5b50905061359691906135c6565b5090565b8154818355818111156135c1578183600052602060002091820191016135c091906135c6565b5b505050565b6135e891905b808211156135e45760008160009055506001016135cc565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158203eaff52b7727cce8c45260c7cd3f8dd06cb9a8c6442876cb7a15f719f71f9b3864736f6c63430005100032" + "object": "60806040523480156200001157600080fd5b5060405162003c6838038062003c68833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61372680620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612028565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bc565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612142565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e3602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136386021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b4565b612028565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135286038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613337603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bc565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b4565b826122ce565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b6110e88383836123c2565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613376602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d36033913960400191505060405180910390fd5b61136c826123e6565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347c6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ad603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613590602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ae565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b4565b836122ce565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b611c58848484846124bc565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134ea603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612142565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135606030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b5060405250505050919050565b611f3361192d565b611fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613659603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c461192d565b612136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213f8161252e565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d602081101561225b57600080fd5b810190808051906020019092919050505090506122788183612674565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122d982612142565b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613450602c913960400191505060405180910390fd5b600061233983611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a857508373ffffffffffffffffffffffffffffffffffffffff1661239084610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b957506123b88185612028565b5b91505092915050565b6123cd838383612695565b6123d783826128f0565b6123e18282612a8e565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135ba6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c78484846123c2565b6124d384848484612b55565b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134066026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267e8282612e91565b6126888282612a8e565b6126918161304d565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611303565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061360f6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342c6024913960400191505060405180910390fd5b6127b081613099565b6127f7600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613157565b61283e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129486001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319090919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a35576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b557fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0d57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8791906132e5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b768473ffffffffffffffffffffffffffffffffffffffff166131da565b612b835760019050612e89565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc76121b4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c77578082015181840152602081019050612c5c565b50505050905090810190601f168015612ca45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3c5780518252602082019150602081019050602083039250612d19565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9e576040519150601f19603f3d011682016040523d82523d6000602084013e612da3565b606091505b509150915081612e1157600081511115612dc05780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b6000818060200190516020811015612e2857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3d81612142565b15612fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131545760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61316f6001826000015461319090919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321c57506000801b8214155b92505050919050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330c5781836000526020600020918201910161330b9190613311565b5b505050565b61333391905b8082111561332f576000816000905550600101613317565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a7231582076f253af4dfd7cb37b0e8a69fd9a3b30e9aae23631e93f631e78965ee56dba5464736f6c63430005100032" } }, "abi": [ diff --git a/contracts/v5/build/SuperRareMarketAuctionV2.json b/contracts/v5/build/SuperRareMarketAuctionV2.json index b12ac34..89b4d82 100644 --- a/contracts/v5/build/SuperRareMarketAuctionV2.json +++ b/contracts/v5/build/SuperRareMarketAuctionV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774638697, + "lastModified": 1585951826274, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestAssertFailOnPay.json b/contracts/v5/build/TestAssertFailOnPay.json index e286e43..7868f6d 100644 --- a/contracts/v5/build/TestAssertFailOnPay.json +++ b/contracts/v5/build/TestAssertFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774640250, + "lastModified": 1585951827805, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestExpensiveWallet.json b/contracts/v5/build/TestExpensiveWallet.json index 3e868d8..d416288 100644 --- a/contracts/v5/build/TestExpensiveWallet.json +++ b/contracts/v5/build/TestExpensiveWallet.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774643235, + "lastModified": 1585951830801, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRequireFailOnPay.json b/contracts/v5/build/TestRequireFailOnPay.json index 8738dee..cde8260 100644 --- a/contracts/v5/build/TestRequireFailOnPay.json +++ b/contracts/v5/build/TestRequireFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774641722, + "lastModified": 1585951829283, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRevertOnPay.json b/contracts/v5/build/TestRevertOnPay.json index 92c2f39..9d97e17 100644 --- a/contracts/v5/build/TestRevertOnPay.json +++ b/contracts/v5/build/TestRevertOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585774644710, + "lastModified": 1585951832232, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/src/SuperRareLegacy.sol b/contracts/v5/src/SuperRareLegacy.sol index 90be9f0..31a18ed 100644 --- a/contracts/v5/src/SuperRareLegacy.sol +++ b/contracts/v5/src/SuperRareLegacy.sol @@ -163,6 +163,24 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { return oldSuperRare.creatorOfToken(_tokenId); } + ///////////////////////////////////////////////////////////////////////// + // tokenURI + ///////////////////////////////////////////////////////////////////////// + /** + * @dev Returns the URI for a given token ID. May return an empty string. + * If the token's URI is non-empty and a base URI was set + * Reverts if the token ID does not exist. + * @param tokenId uint256 token id to refresh the pre-upgrade token owner. + * @return string URI of the given token ID. + */ + function tokenURI(uint256 tokenId) external view returns (string memory) { + require( + _exists(tokenId), + "SuperRareLegacy: URI query for nonexistent token" + ); + oldSuperRare.tokenURI(tokenId); + } + ///////////////////////////////////////////////////////////////////////// // Internal Methods ///////////////////////////////////////////////////////////////////////// @@ -177,9 +195,7 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { */ function _createLegacyToken(uint256 _tokenId) internal { address ownerOnOldSuperRare = oldSuperRare.ownerOf(_tokenId); - string memory tokenURI = oldSuperRare.tokenURI(_tokenId); _mintWithNoEvent(ownerOnOldSuperRare, _tokenId); - _setTokenURI(_tokenId, tokenURI); _tokenOwnerPreUpgrade[_tokenId] = ownerOnOldSuperRare; } } diff --git a/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs b/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs index bfe58e8..cff6ad8 100644 --- a/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs +++ b/purs-contracts/src/Deploy/Contracts/SuperRareLegacy.purs @@ -13,11 +13,11 @@ import Data.Lens ((?~)) import Data.Maybe (Maybe(..)) import Data.Traversable (for) import Deploy.Utils (GasSettings(..), awaitTxSuccess, awaitTxSuccessWeb3, deployContractWithConfig, txOptsWithGasSettings) -import Effect.Aff.Class (liftAff) +import Effect.Aff.Class (class MonadAff, liftAff) import Migrations.Utils (emptyGasSettings) import Network.Ethereum.Core.BigNumber (decimal, divide, embed, parseBigNumber, pow, unsafeToInt) -import Network.Ethereum.Web3 (Address, ChainCursor(..), Ether, Transaction(..), TransactionReceipt(..), UIntN, Value, _from, _to, formatValue, mkValue, runWeb3, toMinorUnit, unAddress, unUIntN) -import Network.Ethereum.Web3.Api (eth_getBalance, eth_getTransaction, eth_getTransactionReceipt) +import Network.Ethereum.Web3 (Address, ChainCursor(..), Ether, Provider, Transaction(..), TransactionReceipt(..), UIntN, Value, _from, _to, formatValue, mkValue, runWeb3, toMinorUnit, unAddress, unUIntN) +import Network.Ethereum.Web3.Api (eth_estimateGas, eth_getBalance, eth_getTransaction, eth_getTransactionReceipt) import Network.Ethereum.Web3.Solidity.Sizes (S256, s256) type SuperRareLegacy @@ -39,33 +39,30 @@ type DeployResults ) deployScript :: - Array (UIntN S256) -> Record SuperRareLegacy -> DeployM (Record DeployResults) -deployScript = - deployScriptWithGasSettings - ( GasSettings - { gasLimit: parseBigNumber decimal "107123880" - , gasPrice: parseBigNumber decimal "5000000000" - } - ) +deployScript = deployScriptWithGasSettings emptyGasSettings deployScriptWithGasSettings :: GasSettings -> - Array (UIntN S256) -> Record SuperRareLegacy -> DeployM (Record DeployResults) -deployScriptWithGasSettings gasSettings tokenIds srl = do +deployScriptWithGasSettings gasSettings srl = do superRareLegacy@{ deployAddress } <- deployContractWithConfig { contractConfig: makeSuperRareLegacyConfig srl , gasSettings } - mintLegacyTokens gasSettings tokenIds deployAddress pure { superRareLegacy } -mintLegacyTokens :: GasSettings -> Array (UIntN S256) -> Address -> DeployM Unit -mintLegacyTokens gasSettings tokenIds addr = do - DeployConfig { primaryAccount, provider } <- ask +mintLegacyTokens :: + forall m r. + MonadAff m => + { primaryAccount :: Address, provider :: Provider | r } -> + GasSettings -> + Array (UIntN S256) -> + Address -> + m Unit +mintLegacyTokens { primaryAccount, provider } gasSettings tokenIds addr = do res <- liftAff $ runWeb3 provider do @@ -77,10 +74,11 @@ mintLegacyTokens gasSettings tokenIds addr = do # _to ?~ addr void - $ for (chunk 500 tokenIds) \_tokenIds -> do + $ for (chunk 20 tokenIds) \_tokenIds -> do logBalanceAndPrint primaryAccount log Info $ "Minting Legacy tokens for:\n" <> show _tokenIds txHash <- SuperRareLegacy.mintLegacyTokens txOpts { _tokenIds } + log Info $ "Hash is: " <> show txHash awaitTxSuccessWeb3 txHash logEthSpentOnTx txHash txHash <- SuperRareLegacy.markMintingCompleted txOpts diff --git a/purs-contracts/src/Migrations/SuperRareLegacy.purs b/purs-contracts/src/Migrations/SuperRareLegacy.purs index 5cb57e5..004cf74 100644 --- a/purs-contracts/src/Migrations/SuperRareLegacy.purs +++ b/purs-contracts/src/Migrations/SuperRareLegacy.purs @@ -1,4 +1,4 @@ -module Migrations.SuperRareMarketAuctionV2 where +module Migrations.SuperRareLegacy where import Prelude import Chanterelle.Internal.Logging (LogLevel(..), log) @@ -9,7 +9,7 @@ import Data.Either (Either(..), either) import Data.Lens ((?~)) import Data.Maybe (Maybe(..), fromMaybe, maybe) import Data.Traversable (for) -import Deploy.Contracts.SuperRareLegacy (deployScriptWithGasSettings) +import Deploy.Contracts.SuperRareLegacy (deployScriptWithGasSettings, mintLegacyTokens) import Deploy.Utils (GasSettings, awaitTxSuccessWeb3, txOptsWithGasSettings) import Effect (Effect) import Effect.Aff (joinFiber, launchAff, runAff_) @@ -26,6 +26,7 @@ type MigrationArgs = { oldSuperRare :: Address , pixuraApi :: { url :: String, apiKey :: String } , tokenIds :: Maybe (Array Int) + , existingSuperRareLegacy :: Maybe Address } main :: Effect Unit @@ -41,6 +42,7 @@ main = { oldSuperRare , pixuraApi: { url, apiKey } , tokenIds: mTokenIds + , existingSuperRareLegacy } = migrationArgs gasSettings = fromMaybe emptyGasSettings mgs @@ -49,12 +51,16 @@ main = tokenIds <- case mTokenIds of Nothing -> lookUpTokenIds { tokenContract: oldSuperRare, url, apiKey } Just tids -> pure $ nub $ catMaybes $ tids <#> \tid -> uIntNFromBigNumber s256 (embed tid) - void - $ deployScriptWithGasSettings gasSettings tokenIds - { _name: "SuperRareLegacy" - , _symbol: "SUPR" - , _oldSuperRare: oldSuperRare - } + case existingSuperRareLegacy of + Just srl -> mintLegacyTokens { primaryAccount, provider } gasSettings tokenIds srl + Nothing -> do + { superRareLegacy: { deployAddress } } <- + deployScriptWithGasSettings gasSettings + { _name: "SuperRareLegacy" + , _symbol: "SUPR" + , _oldSuperRare: oldSuperRare + } + mintLegacyTokens { primaryAccount, provider } gasSettings tokenIds deployAddress where chunk n [] = [] @@ -96,5 +102,4 @@ lookUpTokenIds { tokenContract, url, apiKey } = do } } } - """ diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs index 9f1c0c7..095205e 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs @@ -7,10 +7,12 @@ import Data.Array.Partial (head) import Data.Either (isLeft) import Data.Maybe (Maybe(..), maybe) import Data.Traversable (for) -import Deploy.Contracts.SuperRareLegacy (SuperRareLegacy) +import Deploy.Contracts.SuperRareLegacy (SuperRareLegacy, mintLegacyTokens) import Deploy.Contracts.SuperRareLegacy (deployScript) as SuperRareLegacy +import Deploy.Utils (GasSettings(..)) import Effect.Aff (Aff, try) import Effect.Class.Console (logShow) +import Network.Ethereum.Core.BigNumber (decimal, parseBigNumber) import Network.Ethereum.Web3 (embed) import Partial.Unsafe (unsafePartial) import Record as Record @@ -127,21 +129,28 @@ spec = ----------------------------------------------------------------------------- init :: Maybe (SupeRare.TestEnv ()) -> Aff (TestEnv ()) init mtenv = do - tenv@{ provider, supeRare: { deployAddress: supeRare } } <- + tenv@{ provider + , supeRare: { deployAddress: supeRare } + , primaryAccount + } <- maybe initSupeRare pure mtenv let numOldSuperRareTokens = 5 + + tids = (1 .. numOldSuperRareTokens) <#> intToUInt256 web3Test provider $ createOldSupeRareTokens tenv numOldSuperRareTokens { superRareLegacy } <- buildTestConfig "http://localhost:8545" 60 ( SuperRareLegacy.deployScript - ((1 .. numOldSuperRareTokens) <#> intToUInt256) { _name: "SupeRareLegacy" , _symbol: "SUPR" , _oldSuperRare: supeRare } ) - pure $ Record.merge { superRareLegacy, numOldSuperRareTokens } tenv + let + tenv' = Record.merge { superRareLegacy, numOldSuperRareTokens } tenv + mintLegacyTokens' tenv' tids + pure tenv' where initSupeRare = do tenv@{ accounts, provider } <- SupeRareSpec.init @@ -151,3 +160,15 @@ init mtenv = do createOldSupeRareTokens tenv n = void $ createTokensWithFunction tenv n (SupeRare.addNewToken tenv) whitelistAddresses tenv@{ accounts } = void $ for accounts (SupeRareSpec.whitelistAddress tenv) + + mintLegacyTokens' tenv tids = + let + gs = + GasSettings + { gasLimit: parseBigNumber decimal "60000000" + , gasPrice: parseBigNumber decimal "5000000000" + } + + { superRareLegacy: { deployAddress } } = tenv + in + mintLegacyTokens tenv gs tids deployAddress From 425a283e7e8cf9de7fd42e5a970ce8a8d16d9197 Mon Sep 17 00:00:00 2001 From: Charles Crain Date: Wed, 8 Apr 2020 10:08:07 -0700 Subject: [PATCH 4/6] fixed bug querying for tokenURIs returned empty string --- Makefile | 5 + contracts/v5/build/MaybeSendValue.json | 2 +- contracts/v5/build/SendValueOrEscrow.json | 2 +- contracts/v5/build/SuperRareLegacy.json | 1218 ++++++++--------- .../v5/build/SuperRareMarketAuctionV2.json | 2 +- contracts/v5/build/TestAssertFailOnPay.json | 2 +- contracts/v5/build/TestExpensiveWallet.json | 2 +- contracts/v5/build/TestRequireFailOnPay.json | 2 +- contracts/v5/build/TestRevertOnPay.json | 2 +- contracts/v5/src/SuperRareLegacy.sol | 2 +- .../test/Spec/Contracts/SuperRareLegacy.purs | 11 +- .../Contracts/SuperRareLegacy/Actions.purs | 17 + 12 files changed, 649 insertions(+), 618 deletions(-) diff --git a/Makefile b/Makefile index 6c0d5fb..b20ae2a 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ #### Env ###################################################### MARKETPLACEV2_CONFIG ?= "./deploy-configs/marketplacev2.json" +SUPERRARE_LEGACY_CONFIG ?= "./deploy-configs/superrareLegacy.json" ###################################################### #### Utils @@ -76,6 +77,10 @@ migrate-marketplaceV2: ## Deploy test environment and run contract tests CONFIG=$(MARKETPLACEV2_CONFIG) \ yarn spago run --main Migrations.SuperRareMarketAuctionV2 +migrate-legacy: ## Deploy test environment and run contract tests + CONFIG=$(SUPERRARE_LEGACY_CONFIG) \ + yarn spago run --main Migrations.SuperRareLegacy + ###################################################### #### Test ###################################################### diff --git a/contracts/v5/build/MaybeSendValue.json b/contracts/v5/build/MaybeSendValue.json index 2c5a43b..ecbf246 100644 --- a/contracts/v5/build/MaybeSendValue.json +++ b/contracts/v5/build/MaybeSendValue.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951823897, + "lastModified": 1586310344364, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SendValueOrEscrow.json b/contracts/v5/build/SendValueOrEscrow.json index 514ffad..57aa7eb 100644 --- a/contracts/v5/build/SendValueOrEscrow.json +++ b/contracts/v5/build/SendValueOrEscrow.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951824575, + "lastModified": 1586310345024, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SuperRareLegacy.json b/contracts/v5/build/SuperRareLegacy.json index 6c55a14..ee7dc55 100644 --- a/contracts/v5/build/SuperRareLegacy.json +++ b/contracts/v5/build/SuperRareLegacy.json @@ -1,661 +1,661 @@ { - "networks": { - "3": { - "transactionHash": "0x1aca5c8a01ba50bdb77760d71d4f0b42bb1a20e9aadab953dc7e4642380a57ef", - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612028565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bc565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612142565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e3602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136386021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b4565b612028565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135286038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613337603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bc565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b4565b826122ce565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b6110e88383836123c2565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613376602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d36033913960400191505060405180910390fd5b61136c826123e6565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347c6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ad603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613590602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ae565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b4565b836122ce565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b611c58848484846124bc565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134ea603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612142565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135606030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b5060405250505050919050565b611f3361192d565b611fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613659603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c461192d565b612136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213f8161252e565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d602081101561225b57600080fd5b810190808051906020019092919050505090506122788183612674565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122d982612142565b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613450602c913960400191505060405180910390fd5b600061233983611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a857508373ffffffffffffffffffffffffffffffffffffffff1661239084610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b957506123b88185612028565b5b91505092915050565b6123cd838383612695565b6123d783826128f0565b6123e18282612a8e565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135ba6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c78484846123c2565b6124d384848484612b55565b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134066026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267e8282612e91565b6126888282612a8e565b6126918161304d565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611303565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061360f6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342c6024913960400191505060405180910390fd5b6127b081613099565b6127f7600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613157565b61283e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129486001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319090919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a35576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b557fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0d57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8791906132e5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b768473ffffffffffffffffffffffffffffffffffffffff166131da565b612b835760019050612e89565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc76121b4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c77578082015181840152602081019050612c5c565b50505050905090810190601f168015612ca45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3c5780518252602082019150602081019050602083039250612d19565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9e576040519150601f19603f3d011682016040523d82523d6000602084013e612da3565b606091505b509150915081612e1157600081511115612dc05780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b6000818060200190516020811015612e2857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3d81612142565b15612fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131545760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61316f6001826000015461319090919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321c57506000801b8214155b92505050919050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330c5781836000526020600020918201910161330b9190613311565b5b505050565b61333391905b8082111561332f576000816000905550600101613317565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a7231582076f253af4dfd7cb37b0e8a69fd9a3b30e9aae23631e93f631e78965ee56dba5464736f6c63430005100032" - }, - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405162003c6838038062003c68833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61372680620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612028565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bc565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612142565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e3602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136386021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b4565b612028565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135286038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613337603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bc565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b4565b826122ce565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b6110e88383836123c2565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613376602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d36033913960400191505060405180910390fd5b61136c826123e6565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347c6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ad603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613590602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ae565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b4565b836122ce565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b611c58848484846124bc565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134ea603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612142565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135606030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b5060405250505050919050565b611f3361192d565b611fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613659603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c461192d565b612136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213f8161252e565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d602081101561225b57600080fd5b810190808051906020019092919050505090506122788183612674565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122d982612142565b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613450602c913960400191505060405180910390fd5b600061233983611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a857508373ffffffffffffffffffffffffffffffffffffffff1661239084610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b957506123b88185612028565b5b91505092915050565b6123cd838383612695565b6123d783826128f0565b6123e18282612a8e565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135ba6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c78484846123c2565b6124d384848484612b55565b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134066026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267e8282612e91565b6126888282612a8e565b6126918161304d565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611303565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061360f6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342c6024913960400191505060405180910390fd5b6127b081613099565b6127f7600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613157565b61283e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129486001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319090919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a35576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b557fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0d57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8791906132e5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b768473ffffffffffffffffffffffffffffffffffffffff166131da565b612b835760019050612e89565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc76121b4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c77578082015181840152602081019050612c5c565b50505050905090810190601f168015612ca45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3c5780518252602082019150602081019050602083039250612d19565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9e576040519150601f19603f3d011682016040523d82523d6000602084013e612da3565b606091505b509150915081612e1157600081511115612dc05780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b6000818060200190516020811015612e2857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3d81612142565b15612fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131545760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61316f6001826000015461319090919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321c57506000801b8214155b92505050919050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330c5781836000526020600020918201910161330b9190613311565b5b505050565b61333391905b8082111561332f576000816000905550600101613317565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a7231582076f253af4dfd7cb37b0e8a69fd9a3b30e9aae23631e93f631e78965ee56dba5464736f6c63430005100032" - }, - "blockNumber": "0x74fc49", - "blockHash": "0xb35bb91608d7491d17c9585b9a324f4b3edfa5313dd89091c3c0e1a56d3124aa", - "address": "0x0f601bc456ffb250af213997550908756087700b" - } - }, - "lastModified": 1586208359125, - "code": { - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612028565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bc565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612142565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e3602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136386021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b4565b612028565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135286038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613337603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bc565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b4565b826122ce565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b6110e88383836123c2565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613376602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d36033913960400191505060405180910390fd5b61136c826123e6565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347c6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ad603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613590602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ae565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b4565b836122ce565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b611c58848484846124bc565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134ea603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612142565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135606030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b5060405250505050919050565b611f3361192d565b611fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613659603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c461192d565b612136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213f8161252e565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d602081101561225b57600080fd5b810190808051906020019092919050505090506122788183612674565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122d982612142565b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613450602c913960400191505060405180910390fd5b600061233983611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a857508373ffffffffffffffffffffffffffffffffffffffff1661239084610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b957506123b88185612028565b5b91505092915050565b6123cd838383612695565b6123d783826128f0565b6123e18282612a8e565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135ba6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c78484846123c2565b6124d384848484612b55565b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134066026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267e8282612e91565b6126888282612a8e565b6126918161304d565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611303565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061360f6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342c6024913960400191505060405180910390fd5b6127b081613099565b6127f7600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613157565b61283e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129486001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319090919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a35576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b557fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0d57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8791906132e5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b768473ffffffffffffffffffffffffffffffffffffffff166131da565b612b835760019050612e89565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc76121b4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c77578082015181840152602081019050612c5c565b50505050905090810190601f168015612ca45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3c5780518252602082019150602081019050602083039250612d19565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9e576040519150601f19603f3d011682016040523d82523d6000602084013e612da3565b606091505b509150915081612e1157600081511115612dc05780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b6000818060200190516020811015612e2857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3d81612142565b15612fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131545760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61316f6001826000015461319090919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321c57506000801b8214155b92505050919050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330c5781836000526020600020918201910161330b9190613311565b5b505050565b61333391905b8082111561332f576000816000905550600101613317565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a7231582076f253af4dfd7cb37b0e8a69fd9a3b30e9aae23631e93f631e78965ee56dba5464736f6c63430005100032" - }, - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405162003c6838038062003c68833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61372680620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2b565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612028565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bc565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612142565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e3602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136386021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b4565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b4565b612028565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135286038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613337603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bc565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b4565b826122ce565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b6110e88383836123c2565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613376602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c6602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d36033913960400191505060405180910390fd5b61136c826123e6565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347c6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ad603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613590602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ae565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b4565b836122ce565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136956031913960400191505060405180910390fd5b611c58848484846124bc565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134ea603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612142565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135606030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b5060405250505050919050565b611f3361192d565b611fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613659603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c461192d565b612136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213f8161252e565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d602081101561225b57600080fd5b810190808051906020019092919050505090506122788183612674565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122d982612142565b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613450602c913960400191505060405180910390fd5b600061233983611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a857508373ffffffffffffffffffffffffffffffffffffffff1661239084610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b957506123b88185612028565b5b91505092915050565b6123cd838383612695565b6123d783826128f0565b6123e18282612a8e565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135ba6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c78484846123c2565b6124d384848484612b55565b612528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134066026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267e8282612e91565b6126888282612a8e565b6126918161304d565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611303565b73ffffffffffffffffffffffffffffffffffffffff1614612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061360f6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342c6024913960400191505060405180910390fd5b6127b081613099565b6127f7600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613157565b61283e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129486001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319090919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a35576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b557fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0d57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8791906132e5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b768473ffffffffffffffffffffffffffffffffffffffff166131da565b612b835760019050612e89565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc76121b4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c77578082015181840152602081019050612c5c565b50505050905090810190601f168015612ca45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3c5780518252602082019150602081019050602083039250612d19565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9e576040519150601f19603f3d011682016040523d82523d6000602084013e612da3565b606091505b509150915081612e1157600081511115612dc05780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a16032913960400191505060405180910390fd5b6000818060200190516020811015612e2857600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3d81612142565b15612fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317a565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131545760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61316f6001826000015461319090919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321c57506000801b8214155b92505050919050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330c5781836000526020600020918201910161330b9190613311565b5b505050565b61333391905b8082111561332f576000816000905550600101613317565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a7231582076f253af4dfd7cb37b0e8a69fd9a3b30e9aae23631e93f631e78965ee56dba5464736f6c63430005100032" - } - }, - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_oldSuperRare", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, + "networks": { + "3": { + "transactionHash": "0x7c3a5284f6d570053531c38225e31b239d697d28d9a6cf67cc234ec1c9b9da93", + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2c565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612143565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136396021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b5565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b5565b612029565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135296038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613338603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bd565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b5565b826122cf565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b6110e88383836123c3565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613377602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c7602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d46033913960400191505060405180910390fd5b61136c826123e7565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ae603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613591602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124af565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b5565b836122cf565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b611c58848484846124bd565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134eb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612143565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135616030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f3461192d565b611fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061365a603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c561192d565b612137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121408161252f565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b810190808051906020019092919050505090506122798183612675565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122da82612143565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613451602c913960400191505060405180910390fd5b600061233a83611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a957508373ffffffffffffffffffffffffffffffffffffffff1661239184610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ba57506123b98185612029565b5b91505092915050565b6123ce838383612696565b6123d883826128f1565b6123e28282612a8f565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135bb6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c88484846123c3565b6124d484848484612b56565b612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267f8282612e92565b6126898282612a8f565b6126928161304e565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b682611303565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136106029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342d6024913960400191505060405180910390fd5b6127b18161309a565b6127f8600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613158565b61283f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129496001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319190919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a36576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b657fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0e57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8891906132e6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b778473ffffffffffffffffffffffffffffffffffffffff166131db565b612b845760019050612e8a565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc86121b5565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c78578082015181840152602081019050612c5d565b50505050905090810190601f168015612ca55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3d5780518252602082019150602081019050602083039250612d1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9f576040519150601f19603f3d011682016040523d82523d6000602084013e612da4565b606091505b509150915081612e1257600081511115612dc15780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b6000818060200190516020811015612e2957600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3e81612143565b15612fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061304a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131555760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6131706001826000015461319190919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613226565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321d57506000801b8214155b92505050919050565b60008383111582906132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329857808201518184015260208101905061327d565b50505050905090810190601f1680156132c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330d5781836000526020600020918201910161330c9190613312565b5b505050565b61333491905b80821115613330576000816000905550600101613318565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820dfb32c517206f59a84dbfe46806261d27ddf11c43add180c3e820aabb33f48fc64736f6c63430005100032" + }, + "bytecode": { + "linkReferences": {}, + "object": "60806040523480156200001157600080fd5b5060405162003c6938038062003c69833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61372780620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2c565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612143565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136396021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b5565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b5565b612029565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135296038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613338603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bd565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b5565b826122cf565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b6110e88383836123c3565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613377602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c7602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d46033913960400191505060405180910390fd5b61136c826123e7565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ae603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613591602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124af565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b5565b836122cf565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b611c58848484846124bd565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134eb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612143565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135616030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f3461192d565b611fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061365a603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c561192d565b612137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121408161252f565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b810190808051906020019092919050505090506122798183612675565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122da82612143565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613451602c913960400191505060405180910390fd5b600061233a83611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a957508373ffffffffffffffffffffffffffffffffffffffff1661239184610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ba57506123b98185612029565b5b91505092915050565b6123ce838383612696565b6123d883826128f1565b6123e28282612a8f565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135bb6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c88484846123c3565b6124d484848484612b56565b612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267f8282612e92565b6126898282612a8f565b6126928161304e565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b682611303565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136106029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342d6024913960400191505060405180910390fd5b6127b18161309a565b6127f8600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613158565b61283f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129496001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319190919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a36576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b657fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0e57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8891906132e6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b778473ffffffffffffffffffffffffffffffffffffffff166131db565b612b845760019050612e8a565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc86121b5565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c78578082015181840152602081019050612c5d565b50505050905090810190601f168015612ca55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3d5780518252602082019150602081019050602083039250612d1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9f576040519150601f19603f3d011682016040523d82523d6000602084013e612da4565b606091505b509150915081612e1257600081511115612dc15780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b6000818060200190516020811015612e2957600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3e81612143565b15612fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061304a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131555760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6131706001826000015461319190919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613226565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321d57506000801b8214155b92505050919050565b60008383111582906132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329857808201518184015260208101905061327d565b50505050905090810190601f1680156132c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330d5781836000526020600020918201910161330c9190613312565b5b505050565b61333491905b80821115613330576000816000905550600101613318565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820dfb32c517206f59a84dbfe46806261d27ddf11c43add180c3e820aabb33f48fc64736f6c63430005100032" + }, + "blockNumber": "0x7518d6", + "blockHash": "0xc4378a12dc0cb62da98ce9b091b15fae965deff419f5de6794ccf2deef2d633d", + "address": "0x65b253699adee71970fcec5b27f0fa2bbe6b3f0b" + } + }, + "lastModified": 1586358314809, + "code": { + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2c565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612143565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136396021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b5565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b5565b612029565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135296038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613338603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bd565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b5565b826122cf565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b6110e88383836123c3565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613377602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c7602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d46033913960400191505060405180910390fd5b61136c826123e7565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ae603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613591602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124af565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b5565b836122cf565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b611c58848484846124bd565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134eb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612143565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135616030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f3461192d565b611fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061365a603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c561192d565b612137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121408161252f565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b810190808051906020019092919050505090506122798183612675565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122da82612143565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613451602c913960400191505060405180910390fd5b600061233a83611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a957508373ffffffffffffffffffffffffffffffffffffffff1661239184610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ba57506123b98185612029565b5b91505092915050565b6123ce838383612696565b6123d883826128f1565b6123e28282612a8f565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135bb6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c88484846123c3565b6124d484848484612b56565b612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267f8282612e92565b6126898282612a8f565b6126928161304e565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b682611303565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136106029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342d6024913960400191505060405180910390fd5b6127b18161309a565b6127f8600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613158565b61283f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129496001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319190919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a36576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b657fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0e57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8891906132e6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b778473ffffffffffffffffffffffffffffffffffffffff166131db565b612b845760019050612e8a565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc86121b5565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c78578082015181840152602081019050612c5d565b50505050905090810190601f168015612ca55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3d5780518252602082019150602081019050602083039250612d1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9f576040519150601f19603f3d011682016040523d82523d6000602084013e612da4565b606091505b509150915081612e1257600081511115612dc15780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b6000818060200190516020811015612e2957600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3e81612143565b15612fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061304a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131555760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6131706001826000015461319190919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613226565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321d57506000801b8214155b92505050919050565b60008383111582906132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329857808201518184015260208101905061327d565b50505050905090810190601f1680156132c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330d5781836000526020600020918201910161330c9190613312565b5b505050565b61333491905b80821115613330576000816000905550600101613318565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820dfb32c517206f59a84dbfe46806261d27ddf11c43add180c3e820aabb33f48fc64736f6c63430005100032" + }, + "bytecode": { + "linkReferences": {}, + "object": "60806040523480156200001157600080fd5b5060405162003c6938038062003c69833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61372780620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2c565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612143565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136396021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b5565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b5565b612029565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135296038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613338603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bd565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b5565b826122cf565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b6110e88383836123c3565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613377602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c7602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d46033913960400191505060405180910390fd5b61136c826123e7565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ae603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613591602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124af565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b5565b836122cf565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b611c58848484846124bd565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134eb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612143565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135616030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f3461192d565b611fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061365a603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c561192d565b612137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121408161252f565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b810190808051906020019092919050505090506122798183612675565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122da82612143565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613451602c913960400191505060405180910390fd5b600061233a83611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a957508373ffffffffffffffffffffffffffffffffffffffff1661239184610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ba57506123b98185612029565b5b91505092915050565b6123ce838383612696565b6123d883826128f1565b6123e28282612a8f565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135bb6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c88484846123c3565b6124d484848484612b56565b612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267f8282612e92565b6126898282612a8f565b6126928161304e565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b682611303565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136106029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342d6024913960400191505060405180910390fd5b6127b18161309a565b6127f8600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613158565b61283f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129496001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319190919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a36576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b657fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0e57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8891906132e6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b778473ffffffffffffffffffffffffffffffffffffffff166131db565b612b845760019050612e8a565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc86121b5565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c78578082015181840152602081019050612c5d565b50505050905090810190601f168015612ca55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3d5780518252602082019150602081019050602083039250612d1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9f576040519150601f19603f3d011682016040523d82523d6000602084013e612da4565b606091505b509150915081612e1257600081511115612dc15780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b6000818060200190516020811015612e2957600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3e81612143565b15612fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061304a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131555760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6131706001826000015461319190919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613226565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321d57506000801b8214155b92505050919050565b60008383111582906132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329857808201518184015260208101905061327d565b50505050905090810190601f1680156132c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330d5781836000526020600020918201910161330c9190613312565b5b505050565b61333491905b80821115613330576000816000905550600101613318565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820dfb32c517206f59a84dbfe46806261d27ddf11c43add180c3e820aabb33f48fc64736f6c63430005100032" + } + }, + "abi": [ + { + "inputs": [ { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" + "internalType": "string", + "name": "_name", + "type": "string" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" + "internalType": "string", + "name": "_symbol", + "type": "string" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, + "internalType": "address", + "name": "_oldSuperRare", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" }, { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "constant": true, - "inputs": [], - "name": "baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "constant": true, - "inputs": [], - "name": "isOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "isUpgraded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "constant": false, - "inputs": [], - "name": "markMintingCompleted", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" }, { - "constant": false, - "inputs": [ - { - "internalType": "uint256[]", - "name": "_tokenIds", - "type": "uint256[]" - } - ], - "name": "mintLegacyTokens", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" }, { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": false, + "inputs": [ { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "internalType": "address", + "name": "to", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "preUpgradeOwnerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "refreshPreUpgradeOwnerOf", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ { - "constant": false, - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" + "internalType": "address", + "name": "owner", + "type": "address" }, { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isOwner", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "isUpgraded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "markMintingCompleted", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256[]", + "name": "_tokenIds", + "type": "uint256[]" + } + ], + "name": "mintLegacyTokens", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "preUpgradeOwnerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "refreshPreUpgradeOwnerOf", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "internalType": "address", + "name": "to", + "type": "address" }, { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "internalType": "address", + "name": "to", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "tokenCreator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" }, { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" }, { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "tokenCreator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" }, { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" }, { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" + "internalType": "address", + "name": "to", + "type": "address" }, { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ] -} \ No newline at end of file + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] +} diff --git a/contracts/v5/build/SuperRareMarketAuctionV2.json b/contracts/v5/build/SuperRareMarketAuctionV2.json index 89b4d82..c944eee 100644 --- a/contracts/v5/build/SuperRareMarketAuctionV2.json +++ b/contracts/v5/build/SuperRareMarketAuctionV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951826274, + "lastModified": 1586310346706, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestAssertFailOnPay.json b/contracts/v5/build/TestAssertFailOnPay.json index 7868f6d..58a44dc 100644 --- a/contracts/v5/build/TestAssertFailOnPay.json +++ b/contracts/v5/build/TestAssertFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951827805, + "lastModified": 1586310348398, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestExpensiveWallet.json b/contracts/v5/build/TestExpensiveWallet.json index d416288..715f745 100644 --- a/contracts/v5/build/TestExpensiveWallet.json +++ b/contracts/v5/build/TestExpensiveWallet.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951830801, + "lastModified": 1586310351623, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRequireFailOnPay.json b/contracts/v5/build/TestRequireFailOnPay.json index cde8260..dfe88d0 100644 --- a/contracts/v5/build/TestRequireFailOnPay.json +++ b/contracts/v5/build/TestRequireFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951829283, + "lastModified": 1586310349929, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRevertOnPay.json b/contracts/v5/build/TestRevertOnPay.json index 9d97e17..d716d2d 100644 --- a/contracts/v5/build/TestRevertOnPay.json +++ b/contracts/v5/build/TestRevertOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951832232, + "lastModified": 1586310353120, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/src/SuperRareLegacy.sol b/contracts/v5/src/SuperRareLegacy.sol index 31a18ed..147a708 100644 --- a/contracts/v5/src/SuperRareLegacy.sol +++ b/contracts/v5/src/SuperRareLegacy.sol @@ -178,7 +178,7 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { _exists(tokenId), "SuperRareLegacy: URI query for nonexistent token" ); - oldSuperRare.tokenURI(tokenId); + return oldSuperRare.tokenURI(tokenId); } ///////////////////////////////////////////////////////////////////////// diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs index 095205e..11374a6 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs @@ -20,7 +20,7 @@ import Test.Spec (SpecT, beforeAll, describe, describeOnly, it, pending) import Test.Spec.Assertions (shouldEqual, shouldNotSatisfy, shouldSatisfy) import Test.Spec.Contracts.SupeRare as SupeRare import Test.Spec.Contracts.SupeRare as SupeRareSpec -import Test.Spec.Contracts.SuperRareLegacy.Actions (TestEnv, isApprovedForAll, isUpgraded, ownerOf, preUpgradeOwnerOf, refreshPreUpgradeOwnerOf, setApprovalForAll, tokenCreator, totalSupply, transferFrom) +import Test.Spec.Contracts.SuperRareLegacy.Actions (TestEnv, isApprovedForAll, isUpgraded, ownerOf, preUpgradeOwnerOf, refreshPreUpgradeOwnerOf, setApprovalForAll, tokenCreator, tokenURI, totalSupply, transferFrom) import Test.Spec.Contracts.Utils (createTokensWithFunction, intToUInt256, nullAddress, uInt256FromBigNumber, web3Test) spec :: SpecT Aff Unit Aff Unit @@ -34,6 +34,15 @@ spec = { numOldSuperRareTokens } = tenv supply <- totalSupply tenv supply `shouldEqual` intToUInt256 numOldSuperRareTokens + it "should have same token uris as old tokens" \tenv@{ provider } -> + web3Test provider do + let + { numOldSuperRareTokens } = tenv + void + $ for (1 .. numOldSuperRareTokens) \tid -> do + oldUri <- SupeRare.tokenURI tenv (intToUInt256 tid) + uri <- tokenURI tenv (intToUInt256 tid) + uri `shouldEqual` oldUri it "should have correct pre-upgrade token owners" \tenv@{ provider } -> web3Test provider do let diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs index 757c967..cbe1d86 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy/Actions.purs @@ -75,6 +75,23 @@ ownerOf tenv _tokenId = Latest { _tokenId } +----------------------------------------------------------------------------- +-- | tokenURI +----------------------------------------------------------------------------- +tokenURI :: + forall r. TestEnv r -> UIntN S256 -> Web3 String +tokenURI tenv tokenId = + let + { superRareLegacy: { deployAddress } + , primaryAccount + } = tenv + in + throwOnCallError + $ SuperRareLegacy.tokenURI + (defaultTxOpts primaryAccount # _to ?~ deployAddress) + Latest + { tokenId } + ----------------------------------------------------------------------------- -- | isUpgraded ----------------------------------------------------------------------------- From 2cb78dcf71d2981331f0c643b2f2f27e3799c677 Mon Sep 17 00:00:00 2001 From: Charles Crain Date: Wed, 8 Apr 2020 18:56:30 -0700 Subject: [PATCH 5/6] refreshUpgrade after transfer now updating --- Makefile | 4 +- cliquebait.json | 18 +- contracts/v4/build/CryptoPunksMarket.json | 2 +- contracts/v4/build/ERC20CappedMetadata.json | 2 +- contracts/v4/build/ERC20Metadata.json | 2 +- contracts/v4/build/ERC20MintableMetadata.json | 2 +- contracts/v4/build/ERC721Market.json | 2 +- contracts/v4/build/ERC721Old.json | 2 +- contracts/v4/build/IERC721Creator.json | 2 +- contracts/v4/build/ISuperRare.json | 2 +- contracts/v4/build/Operated.json | 2 +- contracts/v4/build/PixuraNFT.json | 2 +- .../v4/build/PixuraNFTContractGenerator.json | 2 +- contracts/v4/build/SupeRare.json | 2 +- .../v4/build/SuperRareMarketAuction.json | 2 +- contracts/v4/build/SuperRareV2.json | 2 +- contracts/v4/build/Whitelist.json | 2 +- contracts/v5/build/MaybeSendValue.json | 2 +- contracts/v5/build/SendValueOrEscrow.json | 2 +- contracts/v5/build/SuperRareLegacy.json | 1203 ++++++++--------- .../v5/build/SuperRareMarketAuctionV2.json | 2 +- contracts/v5/build/TestAssertFailOnPay.json | 2 +- contracts/v5/build/TestExpensiveWallet.json | 2 +- contracts/v5/build/TestRequireFailOnPay.json | 2 +- contracts/v5/build/TestRevertOnPay.json | 2 +- contracts/v5/src/SuperRareLegacy.sol | 4 +- package.json | 2 +- .../test/Spec/Contracts/SuperRareLegacy.purs | 18 +- yarn.lock | 4 +- 29 files changed, 649 insertions(+), 648 deletions(-) diff --git a/Makefile b/Makefile index b20ae2a..0c3e7fa 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,8 @@ stylish: ## stylish all init: ## install node files yarn && \ + [ -d contracts/v4/node_modules ] || ( cp -r node_modules contracts/v4/node_modules ) && \ + [ -d contracts/v5/node_modules ] || ( cp -r node_modules contracts/v5/node_modules ) && \ yarn spago install && \ yarn spago build -d @@ -32,11 +34,9 @@ init: ## install node files #### Smart Contract / Solidity related commands ###################################################### compile-contracts-v4: ## compiles contracts solc v4 - @[ -d contracts/v4/node_modules ] || ( cp -r node_modules contracts/v4/node_modules ) && \ yarn chanterelle -r contracts/v4 compile compile-contracts-v5: ## compiles contracts solc v5 - @[ -d contracts/v5/node_modules ] || ( cp -r node_modules contracts/v5/node_modules ) && \ yarn chanterelle -r contracts/v5 compile compile-contracts: ## compiles contracts diff --git a/cliquebait.json b/cliquebait.json index 670376e..429a510 100644 --- a/cliquebait.json +++ b/cliquebait.json @@ -1,16 +1,16 @@ { "config": { "chainId": 420123, - "homesteadBlock": 1, - "eip150Block": 1, + "homesteadBlock": 0, + "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "eip155Block": 1, - "eip158Block": 1, - "byzantiumBlock": 1, - "constantinopleBlock": 1, - "petersburgBlock": 1, - "istanbulBlock": 1, - "muirGlacierBlock": 1, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, "clique": { "period": 0, "epoch": 30000 diff --git a/contracts/v4/build/CryptoPunksMarket.json b/contracts/v4/build/CryptoPunksMarket.json index 1b3173c..f8f277d 100644 --- a/contracts/v4/build/CryptoPunksMarket.json +++ b/contracts/v4/build/CryptoPunksMarket.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951810460, + "lastModified": 1586396992479, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20CappedMetadata.json b/contracts/v4/build/ERC20CappedMetadata.json index ab8cec6..7c7b8fa 100644 --- a/contracts/v4/build/ERC20CappedMetadata.json +++ b/contracts/v4/build/ERC20CappedMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951811866, + "lastModified": 1586396993863, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20Metadata.json b/contracts/v4/build/ERC20Metadata.json index de30aa9..8791d06 100644 --- a/contracts/v4/build/ERC20Metadata.json +++ b/contracts/v4/build/ERC20Metadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951812168, + "lastModified": 1586396994184, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20MintableMetadata.json b/contracts/v4/build/ERC20MintableMetadata.json index fb20cb1..50791be 100644 --- a/contracts/v4/build/ERC20MintableMetadata.json +++ b/contracts/v4/build/ERC20MintableMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951813008, + "lastModified": 1586396994930, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Market.json b/contracts/v4/build/ERC721Market.json index 26833d8..b14dc9b 100644 --- a/contracts/v4/build/ERC721Market.json +++ b/contracts/v4/build/ERC721Market.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951813196, + "lastModified": 1586396995107, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Old.json b/contracts/v4/build/ERC721Old.json index 80dbd09..1edd68d 100644 --- a/contracts/v4/build/ERC721Old.json +++ b/contracts/v4/build/ERC721Old.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951813204, + "lastModified": 1586396995116, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/IERC721Creator.json b/contracts/v4/build/IERC721Creator.json index f21f410..475fc08 100644 --- a/contracts/v4/build/IERC721Creator.json +++ b/contracts/v4/build/IERC721Creator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951813226, + "lastModified": 1586396995135, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ISuperRare.json b/contracts/v4/build/ISuperRare.json index 5c0ad05..02ae84d 100644 --- a/contracts/v4/build/ISuperRare.json +++ b/contracts/v4/build/ISuperRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951813238, + "lastModified": 1586396995145, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Operated.json b/contracts/v4/build/Operated.json index 92bd3ce..4058e23 100644 --- a/contracts/v4/build/Operated.json +++ b/contracts/v4/build/Operated.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951813344, + "lastModified": 1586396995242, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFT.json b/contracts/v4/build/PixuraNFT.json index d2997f9..1dfdd2d 100644 --- a/contracts/v4/build/PixuraNFT.json +++ b/contracts/v4/build/PixuraNFT.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951815326, + "lastModified": 1586396997125, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFTContractGenerator.json b/contracts/v4/build/PixuraNFTContractGenerator.json index e264fe2..8cca767 100644 --- a/contracts/v4/build/PixuraNFTContractGenerator.json +++ b/contracts/v4/build/PixuraNFTContractGenerator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951818244, + "lastModified": 1586397000057, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SupeRare.json b/contracts/v4/build/SupeRare.json index 5bca36b..78aef4a 100644 --- a/contracts/v4/build/SupeRare.json +++ b/contracts/v4/build/SupeRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951818868, + "lastModified": 1586397000690, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareMarketAuction.json b/contracts/v4/build/SuperRareMarketAuction.json index e2cd420..6043aaa 100644 --- a/contracts/v4/build/SuperRareMarketAuction.json +++ b/contracts/v4/build/SuperRareMarketAuction.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951819513, + "lastModified": 1586397001339, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareV2.json b/contracts/v4/build/SuperRareV2.json index bb90b4e..d1a277d 100644 --- a/contracts/v4/build/SuperRareV2.json +++ b/contracts/v4/build/SuperRareV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951820889, + "lastModified": 1586397002734, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Whitelist.json b/contracts/v4/build/Whitelist.json index a10ddf2..51afb36 100644 --- a/contracts/v4/build/Whitelist.json +++ b/contracts/v4/build/Whitelist.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1585951820932, + "lastModified": 1586397002773, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/MaybeSendValue.json b/contracts/v5/build/MaybeSendValue.json index ecbf246..890d8b9 100644 --- a/contracts/v5/build/MaybeSendValue.json +++ b/contracts/v5/build/MaybeSendValue.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586310344364, + "lastModified": 1586397010125, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SendValueOrEscrow.json b/contracts/v5/build/SendValueOrEscrow.json index 57aa7eb..f5d7939 100644 --- a/contracts/v5/build/SendValueOrEscrow.json +++ b/contracts/v5/build/SendValueOrEscrow.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586310345024, + "lastModified": 1586397010797, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SuperRareLegacy.json b/contracts/v5/build/SuperRareLegacy.json index ee7dc55..fe173ae 100644 --- a/contracts/v5/build/SuperRareLegacy.json +++ b/contracts/v5/build/SuperRareLegacy.json @@ -1,661 +1,646 @@ { - "networks": { - "3": { - "transactionHash": "0x7c3a5284f6d570053531c38225e31b239d697d28d9a6cf67cc234ec1c9b9da93", - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2c565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612143565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136396021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b5565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b5565b612029565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135296038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613338603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bd565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b5565b826122cf565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b6110e88383836123c3565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613377602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c7602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d46033913960400191505060405180910390fd5b61136c826123e7565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ae603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613591602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124af565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b5565b836122cf565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b611c58848484846124bd565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134eb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612143565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135616030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f3461192d565b611fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061365a603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c561192d565b612137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121408161252f565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b810190808051906020019092919050505090506122798183612675565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122da82612143565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613451602c913960400191505060405180910390fd5b600061233a83611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a957508373ffffffffffffffffffffffffffffffffffffffff1661239184610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ba57506123b98185612029565b5b91505092915050565b6123ce838383612696565b6123d883826128f1565b6123e28282612a8f565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135bb6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c88484846123c3565b6124d484848484612b56565b612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267f8282612e92565b6126898282612a8f565b6126928161304e565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b682611303565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136106029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342d6024913960400191505060405180910390fd5b6127b18161309a565b6127f8600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613158565b61283f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129496001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319190919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a36576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b657fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0e57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8891906132e6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b778473ffffffffffffffffffffffffffffffffffffffff166131db565b612b845760019050612e8a565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc86121b5565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c78578082015181840152602081019050612c5d565b50505050905090810190601f168015612ca55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3d5780518252602082019150602081019050602083039250612d1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9f576040519150601f19603f3d011682016040523d82523d6000602084013e612da4565b606091505b509150915081612e1257600081511115612dc15780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b6000818060200190516020811015612e2957600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3e81612143565b15612fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061304a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131555760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6131706001826000015461319190919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613226565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321d57506000801b8214155b92505050919050565b60008383111582906132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329857808201518184015260208101905061327d565b50505050905090810190601f1680156132c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330d5781836000526020600020918201910161330c9190613312565b5b505050565b61333491905b80821115613330576000816000905550600101613318565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820dfb32c517206f59a84dbfe46806261d27ddf11c43add180c3e820aabb33f48fc64736f6c63430005100032" - }, - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405162003c6938038062003c69833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61372780620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2c565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612143565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136396021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b5565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b5565b612029565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135296038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613338603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bd565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b5565b826122cf565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b6110e88383836123c3565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613377602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c7602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d46033913960400191505060405180910390fd5b61136c826123e7565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ae603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613591602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124af565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b5565b836122cf565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b611c58848484846124bd565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134eb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612143565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135616030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f3461192d565b611fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061365a603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c561192d565b612137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121408161252f565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b810190808051906020019092919050505090506122798183612675565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122da82612143565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613451602c913960400191505060405180910390fd5b600061233a83611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a957508373ffffffffffffffffffffffffffffffffffffffff1661239184610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ba57506123b98185612029565b5b91505092915050565b6123ce838383612696565b6123d883826128f1565b6123e28282612a8f565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135bb6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c88484846123c3565b6124d484848484612b56565b612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267f8282612e92565b6126898282612a8f565b6126928161304e565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b682611303565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136106029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342d6024913960400191505060405180910390fd5b6127b18161309a565b6127f8600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613158565b61283f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129496001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319190919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a36576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b657fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0e57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8891906132e6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b778473ffffffffffffffffffffffffffffffffffffffff166131db565b612b845760019050612e8a565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc86121b5565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c78578082015181840152602081019050612c5d565b50505050905090810190601f168015612ca55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3d5780518252602082019150602081019050602083039250612d1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9f576040519150601f19603f3d011682016040523d82523d6000602084013e612da4565b606091505b509150915081612e1257600081511115612dc15780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b6000818060200190516020811015612e2957600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3e81612143565b15612fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061304a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131555760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6131706001826000015461319190919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613226565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321d57506000801b8214155b92505050919050565b60008383111582906132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329857808201518184015260208101905061327d565b50505050905090810190601f1680156132c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330d5781836000526020600020918201910161330c9190613312565b5b505050565b61333491905b80821115613330576000816000905550600101613318565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820dfb32c517206f59a84dbfe46806261d27ddf11c43add180c3e820aabb33f48fc64736f6c63430005100032" - }, - "blockNumber": "0x7518d6", - "blockHash": "0xc4378a12dc0cb62da98ce9b091b15fae965deff419f5de6794ccf2deef2d633d", - "address": "0x65b253699adee71970fcec5b27f0fa2bbe6b3f0b" - } - }, - "lastModified": 1586358314809, - "code": { - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2c565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612143565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136396021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b5565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b5565b612029565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135296038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613338603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bd565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b5565b826122cf565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b6110e88383836123c3565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613377602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c7602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d46033913960400191505060405180910390fd5b61136c826123e7565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ae603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613591602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124af565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b5565b836122cf565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b611c58848484846124bd565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134eb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612143565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135616030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f3461192d565b611fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061365a603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c561192d565b612137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121408161252f565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b810190808051906020019092919050505090506122798183612675565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122da82612143565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613451602c913960400191505060405180910390fd5b600061233a83611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a957508373ffffffffffffffffffffffffffffffffffffffff1661239184610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ba57506123b98185612029565b5b91505092915050565b6123ce838383612696565b6123d883826128f1565b6123e28282612a8f565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135bb6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c88484846123c3565b6124d484848484612b56565b612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267f8282612e92565b6126898282612a8f565b6126928161304e565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b682611303565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136106029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342d6024913960400191505060405180910390fd5b6127b18161309a565b6127f8600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613158565b61283f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129496001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319190919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a36576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b657fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0e57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8891906132e6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b778473ffffffffffffffffffffffffffffffffffffffff166131db565b612b845760019050612e8a565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc86121b5565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c78578082015181840152602081019050612c5d565b50505050905090810190601f168015612ca55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3d5780518252602082019150602081019050602083039250612d1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9f576040519150601f19603f3d011682016040523d82523d6000602084013e612da4565b606091505b509150915081612e1257600081511115612dc15780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b6000818060200190516020811015612e2957600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3e81612143565b15612fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061304a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131555760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6131706001826000015461319190919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613226565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321d57506000801b8214155b92505050919050565b60008383111582906132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329857808201518184015260208101905061327d565b50505050905090810190601f1680156132c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330d5781836000526020600020918201910161330c9190613312565b5b505050565b61333491905b80821115613330576000816000905550600101613318565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820dfb32c517206f59a84dbfe46806261d27ddf11c43add180c3e820aabb33f48fc64736f6c63430005100032" - }, - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405162003c6938038062003c69833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61372780620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611567565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611609565b6040518082815260200191505060405180910390f35b6107566116de565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611819565b604051808215151515815260200191505060405180910390f35b6107a6611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061192d565b604051808215151515815260200191505060405180910390f35b61081261198c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a2e565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611be6565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d59565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f2c565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612143565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135e4602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136396021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121b5565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121b5565b612029565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806135296038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461192d565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613338603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121bd565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121b5565b826122cf565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b6110e88383836123c3565b505050565b60006110f883611609565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613377602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611be6565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806136c7602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611819565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806133d46033913960400191505060405180910390fd5b61136c826123e7565b9050919050565b61137c81611819565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061347d6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b8101908080519060200190929190505050905061148d82611c5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806134ae603d913960400191505060405180910390fd5b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613591602a913960400191505060405180910390fd5b6116d7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124af565b9050919050565b6116e661192d565b611758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119706121b5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a245780601f106119f957610100808354040283529160200191611a24565b820191906000526020600020905b815481529060010190602001808311611a0757829003601f168201915b5050505050905090565b611a366121b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611ae46121b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b916121b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bf7611bf16121b5565b836122cf565b611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136966031913960400191505060405180910390fd5b611c58848484846124bd565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806134eb603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d6482612143565b611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806135616030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e6a57600080fd5b8101908080516040519392919084640100000000821115611e8a57600080fd5b83820191506020820185811115611ea057600080fd5b8251866001820283011164010000000082111715611ebd57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ef1578082015181840152602081019050611ed6565b50505050905090810190601f168015611f1e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f3461192d565b611fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061365a603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120c561192d565b612137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121408161252f565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b810190808051906020019092919050505090506122798183612675565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122da82612143565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613451602c913960400191505060405180910390fd5b600061233a83611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a957508373ffffffffffffffffffffffffffffffffffffffff1661239184610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ba57506123b98185612029565b5b91505092915050565b6123ce838383612696565b6123d883826128f1565b6123e28282612a8f565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135bb6029913960400191505060405180910390fd5b80915050919050565b600081600001549050919050565b6124c88484846123c3565b6124d484848484612b56565b612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267f8282612e92565b6126898282612a8f565b6126928161304e565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b682611303565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136106029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061342d6024913960400191505060405180910390fd5b6127b18161309a565b6127f8600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613158565b61283f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129496001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061319190919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a36576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b657fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a0e57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8891906132e6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612b778473ffffffffffffffffffffffffffffffffffffffff166131db565b612b845760019050612e8a565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612bc86121b5565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c78578082015181840152602081019050612c5d565b50505050905090810190601f168015612ca55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612d3d5780518252602082019150602081019050602083039250612d1a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d9f576040519150601f19603f3d011682016040523d82523d6000602084013e612da4565b606091505b509150915081612e1257600081511115612dc15780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806133a26032913960400191505060405180910390fd5b6000818060200190516020811015612e2957600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612f3e81612143565b15612fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061304a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061317b565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131555760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6131706001826000015461319190919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006131d383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613226565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561321d57506000801b8214155b92505050919050565b60008383111582906132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329857808201518184015260208101905061327d565b50505050905090810190601f1680156132c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561330d5781836000526020600020918201910161330c9190613312565b5b505050565b61333491905b80821115613330576000816000905550600101613318565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820dfb32c517206f59a84dbfe46806261d27ddf11c43add180c3e820aabb33f48fc64736f6c63430005100032" - } - }, - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" + "networks": {}, + "lastModified": 1586397021020, + "code": { + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611580565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611622565b6040518082815260200191505060405180910390f35b6107566116f7565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611832565b604051808215151515815260200191505060405180910390f35b6107a661191c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f0611946565b604051808215151515815260200191505060405180910390f35b6108126119a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a47565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bff565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c77565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d72565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f45565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612042565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d6565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd58261215c565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613821602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806138766021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121ce565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121ce565b612042565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137666038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f54611946565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613575603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121d6565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121ce565b826122e8565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138d36031913960400191505060405180910390fd5b6110e88383836123dc565b505050565b60006110f883611622565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806135b4602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611bff565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613904602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611832565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806136116033913960400191505060405180910390fd5b61136c82612400565b9050919050565b61137c81611832565b156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136ba6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b81019080805190602001909291905050509050600061148f83611c77565b905061149a83611c77565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806136eb603d913960400191505060405180910390fd5b6115298183856124c8565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116185780601f106115ed57610100808354040283529160200191611618565b820191906000526020600020905b8154815290600101906020018083116115fb57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806137ce602a913960400191505060405180910390fd5b6116f0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ec565b9050919050565b6116ff611946565b611771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156118a857600080fd5b505afa1580156118bc573d6000803e3d6000fd5b505050506040513d60208110156118d257600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119896121ce565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a3d5780601f10611a1257610100808354040283529160200191611a3d565b820191906000526020600020905b815481529060010190602001808311611a2057829003601f168201915b5050505050905090565b611a4f6121ce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611afd6121ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611baa6121ce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611c10611c0a6121ce565b836122e8565b611c65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138d36031913960400191505060405180910390fd5b611c71848484846124fa565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613728603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d7d8261215c565b611dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061379e6030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e4557600080fd5b505afa158015611e59573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e8357600080fd5b8101908080516040519392919084640100000000821115611ea357600080fd5b83820191506020820185811115611eb957600080fd5b8251866001820283011164010000000082111715611ed657600080fd5b8083526020830192505050908051906020019080838360005b83811015611f0a578082015181840152602081019050611eef565b50505050905090810190601f168015611f375780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f4d611946565b611fbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff1615612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613897603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120de611946565b612150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121598161256c565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561224b57600080fd5b505afa15801561225f573d6000803e3d6000fd5b505050506040513d602081101561227557600080fd5b8101908080519060200190929190505050905061229281836126b2565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122f38261215c565b612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061368e602c913960400191505060405180910390fd5b600061235383611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123c257508373ffffffffffffffffffffffffffffffffffffffff166123aa84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123d357506123d28185612042565b5b91505092915050565b6123e78383836126d3565b6123f1838261292e565b6123fb8282612acc565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137f86029913960400191505060405180910390fd5b80915050919050565b6124d3838383612b93565b6124dd838261292e565b6124e78282612acc565b505050565b600081600001549050919050565b6125058484846123dc565b61251184848484612d93565b612566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135df6032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136446026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126bc82826130cf565b6126c68282612acc565b6126cf8161328b565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126f382611303565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061384d6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061366a6024913960400191505060405180910390fd5b6127ee816132d7565b612835600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613395565b61287c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129866001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133ce90919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a73576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129f357fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a4b57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612ac59190613523565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b8273ffffffffffffffffffffffffffffffffffffffff16612bb382612400565b73ffffffffffffffffffffffffffffffffffffffff1614612c1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061384d6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061366a6024913960400191505060405180910390fd5b612cae816132d7565b612cf5600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613395565b612d3c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000612db48473ffffffffffffffffffffffffffffffffffffffff16613418565b612dc157600190506130c7565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612e056121ce565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612eb5578082015181840152602081019050612e9a565b50505050905090810190601f168015612ee25780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f7a5780518252602082019150602081019050602083039250612f57565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fdc576040519150601f19603f3d011682016040523d82523d6000602084013e612fe1565b606091505b50915091508161304f57600081511115612ffe5780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135df6032913960400191505060405180910390fd5b600081806020019051602081101561306657600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61317b8161215c565b156131ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613287600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133925760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133ad600182600001546133ce90919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600061341083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613463565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561345a57506000801b8214155b92505050919050565b6000838311158290613510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134d55780820151818401526020810190506134ba565b50505050905090810190601f1680156135025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561354a57818360005260206000209182019101613549919061354f565b5b505050565b61357191905b8082111561356d576000816000905550600101613555565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158202387ca0fef32d43b0c27628218c08820c3a386e86333911c3f7cb31c5ee8f46f64736f6c63430005100032" }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" + "bytecode": { + "linkReferences": {}, + "object": "60806040523480156200001157600080fd5b5060405162003ea638038062003ea6833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61396480620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611580565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611622565b6040518082815260200191505060405180910390f35b6107566116f7565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611832565b604051808215151515815260200191505060405180910390f35b6107a661191c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f0611946565b604051808215151515815260200191505060405180910390f35b6108126119a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a47565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bff565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c77565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d72565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f45565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612042565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d6565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd58261215c565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613821602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806138766021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121ce565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121ce565b612042565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137666038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f54611946565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613575603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121d6565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121ce565b826122e8565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138d36031913960400191505060405180910390fd5b6110e88383836123dc565b505050565b60006110f883611622565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806135b4602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611bff565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613904602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611832565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806136116033913960400191505060405180910390fd5b61136c82612400565b9050919050565b61137c81611832565b156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136ba6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b81019080805190602001909291905050509050600061148f83611c77565b905061149a83611c77565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806136eb603d913960400191505060405180910390fd5b6115298183856124c8565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116185780601f106115ed57610100808354040283529160200191611618565b820191906000526020600020905b8154815290600101906020018083116115fb57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806137ce602a913960400191505060405180910390fd5b6116f0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ec565b9050919050565b6116ff611946565b611771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156118a857600080fd5b505afa1580156118bc573d6000803e3d6000fd5b505050506040513d60208110156118d257600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119896121ce565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a3d5780601f10611a1257610100808354040283529160200191611a3d565b820191906000526020600020905b815481529060010190602001808311611a2057829003601f168201915b5050505050905090565b611a4f6121ce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611afd6121ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611baa6121ce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611c10611c0a6121ce565b836122e8565b611c65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138d36031913960400191505060405180910390fd5b611c71848484846124fa565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613728603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d7d8261215c565b611dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061379e6030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e4557600080fd5b505afa158015611e59573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e8357600080fd5b8101908080516040519392919084640100000000821115611ea357600080fd5b83820191506020820185811115611eb957600080fd5b8251866001820283011164010000000082111715611ed657600080fd5b8083526020830192505050908051906020019080838360005b83811015611f0a578082015181840152602081019050611eef565b50505050905090810190601f168015611f375780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f4d611946565b611fbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff1615612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613897603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120de611946565b612150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121598161256c565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561224b57600080fd5b505afa15801561225f573d6000803e3d6000fd5b505050506040513d602081101561227557600080fd5b8101908080519060200190929190505050905061229281836126b2565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122f38261215c565b612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061368e602c913960400191505060405180910390fd5b600061235383611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123c257508373ffffffffffffffffffffffffffffffffffffffff166123aa84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123d357506123d28185612042565b5b91505092915050565b6123e78383836126d3565b6123f1838261292e565b6123fb8282612acc565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137f86029913960400191505060405180910390fd5b80915050919050565b6124d3838383612b93565b6124dd838261292e565b6124e78282612acc565b505050565b600081600001549050919050565b6125058484846123dc565b61251184848484612d93565b612566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135df6032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136446026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126bc82826130cf565b6126c68282612acc565b6126cf8161328b565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126f382611303565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061384d6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061366a6024913960400191505060405180910390fd5b6127ee816132d7565b612835600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613395565b61287c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129866001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133ce90919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a73576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129f357fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a4b57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612ac59190613523565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b8273ffffffffffffffffffffffffffffffffffffffff16612bb382612400565b73ffffffffffffffffffffffffffffffffffffffff1614612c1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061384d6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061366a6024913960400191505060405180910390fd5b612cae816132d7565b612cf5600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613395565b612d3c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000612db48473ffffffffffffffffffffffffffffffffffffffff16613418565b612dc157600190506130c7565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612e056121ce565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612eb5578082015181840152602081019050612e9a565b50505050905090810190601f168015612ee25780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f7a5780518252602082019150602081019050602083039250612f57565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fdc576040519150601f19603f3d011682016040523d82523d6000602084013e612fe1565b606091505b50915091508161304f57600081511115612ffe5780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135df6032913960400191505060405180910390fd5b600081806020019051602081101561306657600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61317b8161215c565b156131ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613287600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133925760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133ad600182600001546133ce90919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600061341083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613463565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561345a57506000801b8214155b92505050919050565b6000838311158290613510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134d55780820151818401526020810190506134ba565b50505050905090810190601f1680156135025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561354a57818360005260206000209182019101613549919061354f565b5b505050565b61357191905b8082111561356d576000816000905550600101613555565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158202387ca0fef32d43b0c27628218c08820c3a386e86333911c3f7cb31c5ee8f46f64736f6c63430005100032" + } + }, + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "address", + "name": "_oldSuperRare", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" }, { - "internalType": "address", - "name": "_oldSuperRare", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" }, { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" }, { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" }, { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" }, { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" }, { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" + "constant": true, + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "isUpgraded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "markMintingCompleted", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256[]", - "name": "_tokenIds", - "type": "uint256[]" - } - ], - "name": "mintLegacyTokens", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "preUpgradeOwnerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "refreshPreUpgradeOwnerOf", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" + "constant": true, + "inputs": [], + "name": "isOwner", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "address", - "name": "to", - "type": "address" + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "isUpgraded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" + "constant": false, + "inputs": [], + "name": "markMintingCompleted", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" }, { - "internalType": "address", - "name": "to", - "type": "address" + "constant": false, + "inputs": [ + { + "internalType": "uint256[]", + "name": "_tokenIds", + "type": "uint256[]" + } + ], + "name": "mintLegacyTokens", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" }, { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "preUpgradeOwnerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "refreshPreUpgradeOwnerOf", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "tokenCreator", - "outputs": [ + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { - "internalType": "address", - "name": "owner", - "type": "address" + "constant": true, + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "tokenCreator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { - "internalType": "address", - "name": "from", - "type": "address" + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "address", - "name": "to", - "type": "address" + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ] -} + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/v5/build/SuperRareMarketAuctionV2.json b/contracts/v5/build/SuperRareMarketAuctionV2.json index c944eee..be1eb72 100644 --- a/contracts/v5/build/SuperRareMarketAuctionV2.json +++ b/contracts/v5/build/SuperRareMarketAuctionV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586310346706, + "lastModified": 1586397012503, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestAssertFailOnPay.json b/contracts/v5/build/TestAssertFailOnPay.json index 58a44dc..955b6ac 100644 --- a/contracts/v5/build/TestAssertFailOnPay.json +++ b/contracts/v5/build/TestAssertFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586310348398, + "lastModified": 1586397014097, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestExpensiveWallet.json b/contracts/v5/build/TestExpensiveWallet.json index 715f745..fdb5d87 100644 --- a/contracts/v5/build/TestExpensiveWallet.json +++ b/contracts/v5/build/TestExpensiveWallet.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586310351623, + "lastModified": 1586397017070, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRequireFailOnPay.json b/contracts/v5/build/TestRequireFailOnPay.json index dfe88d0..b388514 100644 --- a/contracts/v5/build/TestRequireFailOnPay.json +++ b/contracts/v5/build/TestRequireFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586310349929, + "lastModified": 1586397015569, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRevertOnPay.json b/contracts/v5/build/TestRevertOnPay.json index d716d2d..1709b46 100644 --- a/contracts/v5/build/TestRevertOnPay.json +++ b/contracts/v5/build/TestRevertOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586310353120, + "lastModified": 1586397018521, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/src/SuperRareLegacy.sol b/contracts/v5/src/SuperRareLegacy.sol index 147a708..816a283 100644 --- a/contracts/v5/src/SuperRareLegacy.sol +++ b/contracts/v5/src/SuperRareLegacy.sol @@ -46,7 +46,7 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { } ///////////////////////////////////////////////////////////////////////// - // Admin Public Methods + // Admin Methods ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// @@ -144,10 +144,12 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { "SuperRareLegacy: cannot refresh an upgraded token" ); address ownerOnOldSuperRare = oldSuperRare.ownerOf(_tokenId); + address outdatedOwner = preUpgradeOwnerOf(_tokenId); require( ownerOnOldSuperRare != preUpgradeOwnerOf(_tokenId), "SuperRareLegacy: cannot refresh when pre-upgrade owners match" ); + _transferFromNoEvent(outdatedOwner, ownerOnOldSuperRare, _tokenId); _tokenOwnerPreUpgrade[_tokenId] = ownerOnOldSuperRare; } diff --git a/package.json b/package.json index 1b06aa9..143f3f9 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "openzeppelin-solidity": "2.5.0", "openzeppelin-solidity-solc4": "https://github.com/OpenZeppelin/openzeppelin-contracts#v2.0.0", - "openzeppelin-solidity-pixura": "https://github.com/Pixura/openzeppelin-contracts#ec0e22b8060fb39ba7deced72bc745c4bdfafdec", + "openzeppelin-solidity-pixura": "https://github.com/Pixura/openzeppelin-contracts#dfe6042523498c97f88db2c1a9e9fa3b27b9ced7", "rlp": "^2.2.4", "secp256k1": "^4.0.0", "zeppelin-solidity": "1.6.0", diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs index 11374a6..50948ee 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs @@ -16,7 +16,7 @@ import Network.Ethereum.Core.BigNumber (decimal, parseBigNumber) import Network.Ethereum.Web3 (embed) import Partial.Unsafe (unsafePartial) import Record as Record -import Test.Spec (SpecT, beforeAll, describe, describeOnly, it, pending) +import Test.Spec (SpecT, beforeAll, describe, describeOnly, it, itOnly, pending) import Test.Spec.Assertions (shouldEqual, shouldNotSatisfy, shouldSatisfy) import Test.Spec.Contracts.SupeRare as SupeRare import Test.Spec.Contracts.SupeRare as SupeRareSpec @@ -118,7 +118,7 @@ spec = $ for (1 .. 2) \tid -> do upgraded <- isUpgraded tenv (intToUInt256 tid) upgraded `shouldEqual` true - it "can approve others to manage tokens" \tenv@{ provider, accounts } -> do + it "should be able to approve others to manage tokens" \tenv@{ provider, accounts } -> do web3Test provider $ void $ for (1 .. 2) \tid -> do @@ -132,6 +132,20 @@ spec = $ transferFrom tenv owner approvedOperator (intToUInt256 tid) newOwner <- ownerOf tenv (intToUInt256 tid) newOwner `shouldEqual` approvedOperator + it "should refresh a pre-upgrade owner and have correct owner after upgrading" \tenv@{ provider } -> + web3Test provider do + let + { numOldSuperRareTokens, accounts, superRareLegacy: { deployAddress: legacyAddr } } = tenv + void + $ for (3 .. 3) \tid -> do + owner <- SupeRare.ownerOf tenv (intToUInt256 tid) + let + to = unsafePartial head $ filter (\addr -> addr /= owner) accounts + void $ SupeRare.transfer tenv owner to $ intToUInt256 tid + void $ refreshPreUpgradeOwnerOf tenv $ intToUInt256 tid + void $ SupeRare.transfer tenv to legacyAddr $ intToUInt256 tid + newOwner <- ownerOf tenv (intToUInt256 tid) + to `shouldEqual` newOwner ----------------------------------------------------------------------------- -- | Init diff --git a/yarn.lock b/yarn.lock index 78be82f..ef3dc68 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3630,9 +3630,9 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -"openzeppelin-solidity-pixura@https://github.com/Pixura/openzeppelin-contracts#ec0e22b8060fb39ba7deced72bc745c4bdfafdec": +"openzeppelin-solidity-pixura@https://github.com/Pixura/openzeppelin-contracts#dfe6042523498c97f88db2c1a9e9fa3b27b9ced7": version "2.5.0" - resolved "https://github.com/Pixura/openzeppelin-contracts#ec0e22b8060fb39ba7deced72bc745c4bdfafdec" + resolved "https://github.com/Pixura/openzeppelin-contracts#dfe6042523498c97f88db2c1a9e9fa3b27b9ced7" "openzeppelin-solidity-solc4@https://github.com/OpenZeppelin/openzeppelin-contracts#v2.0.0": version "2.0.0" From e13d0cf9d3564db825905fe6152ac008c60815b2 Mon Sep 17 00:00:00 2001 From: Charles Crain Date: Thu, 9 Apr 2020 16:45:26 -0700 Subject: [PATCH 6/6] legacy passing all test --- cliquebait.json | 20 ++++++++--------- contracts/v4/build/CryptoPunksMarket.json | 2 +- contracts/v4/build/ERC20CappedMetadata.json | 2 +- contracts/v4/build/ERC20Metadata.json | 2 +- contracts/v4/build/ERC20MintableMetadata.json | 2 +- contracts/v4/build/ERC721Market.json | 2 +- contracts/v4/build/ERC721Old.json | 2 +- contracts/v4/build/IERC721Creator.json | 2 +- contracts/v4/build/ISuperRare.json | 2 +- contracts/v4/build/Operated.json | 2 +- contracts/v4/build/PixuraNFT.json | 2 +- .../v4/build/PixuraNFTContractGenerator.json | 2 +- contracts/v4/build/SupeRare.json | 2 +- .../v4/build/SuperRareMarketAuction.json | 2 +- contracts/v4/build/SuperRareV2.json | 2 +- contracts/v4/build/Whitelist.json | 2 +- contracts/v5/build/MaybeSendValue.json | 2 +- contracts/v5/build/SendValueOrEscrow.json | 2 +- contracts/v5/build/SuperRareLegacy.json | 6 ++--- .../v5/build/SuperRareMarketAuctionV2.json | 2 +- contracts/v5/build/TestAssertFailOnPay.json | 2 +- contracts/v5/build/TestExpensiveWallet.json | 2 +- contracts/v5/build/TestRequireFailOnPay.json | 2 +- contracts/v5/build/TestRevertOnPay.json | 2 +- contracts/v5/src/SuperRareLegacy.sol | 22 ++++++++++++++----- purs-contracts/src/Main.purs | 9 -------- .../test/Spec/Contracts/SuperRareLegacy.purs | 12 +++++----- .../SuperRareMarkAuctionV2/Actions.purs | 1 - .../Contracts/SuperRareMarketAuctionV2.purs | 4 ++-- .../test/Spec/Contracts/SuperRareV2.purs | 4 ++-- 30 files changed, 60 insertions(+), 62 deletions(-) delete mode 100644 purs-contracts/src/Main.purs diff --git a/cliquebait.json b/cliquebait.json index 429a510..8aabaeb 100644 --- a/cliquebait.json +++ b/cliquebait.json @@ -1,18 +1,18 @@ { "config": { "chainId": 420123, - "homesteadBlock": 0, - "eip150Block": 0, + "homesteadBlock": 1, + "eip150Block": 1, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "muirGlacierBlock": 0, + "eip155Block": 1, + "eip158Block": 1, + "byzantiumBlock": 1, + "constantinopleBlock": 1, + "petersburgBlock": 1, + "istanbulBlock": 1, + "muirGlacierBlock": 1, "clique": { - "period": 0, + "period": 1, "epoch": 30000 } }, diff --git a/contracts/v4/build/CryptoPunksMarket.json b/contracts/v4/build/CryptoPunksMarket.json index f8f277d..3bb333b 100644 --- a/contracts/v4/build/CryptoPunksMarket.json +++ b/contracts/v4/build/CryptoPunksMarket.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396992479, + "lastModified": 1586471674282, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20CappedMetadata.json b/contracts/v4/build/ERC20CappedMetadata.json index 7c7b8fa..4e34b58 100644 --- a/contracts/v4/build/ERC20CappedMetadata.json +++ b/contracts/v4/build/ERC20CappedMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396993863, + "lastModified": 1586471675816, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20Metadata.json b/contracts/v4/build/ERC20Metadata.json index 8791d06..08d6584 100644 --- a/contracts/v4/build/ERC20Metadata.json +++ b/contracts/v4/build/ERC20Metadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396994184, + "lastModified": 1586471676136, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC20MintableMetadata.json b/contracts/v4/build/ERC20MintableMetadata.json index 50791be..158426b 100644 --- a/contracts/v4/build/ERC20MintableMetadata.json +++ b/contracts/v4/build/ERC20MintableMetadata.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396994930, + "lastModified": 1586471676925, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Market.json b/contracts/v4/build/ERC721Market.json index b14dc9b..8f7c58f 100644 --- a/contracts/v4/build/ERC721Market.json +++ b/contracts/v4/build/ERC721Market.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396995107, + "lastModified": 1586471677114, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ERC721Old.json b/contracts/v4/build/ERC721Old.json index 1edd68d..bc57f1a 100644 --- a/contracts/v4/build/ERC721Old.json +++ b/contracts/v4/build/ERC721Old.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396995116, + "lastModified": 1586471677124, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/IERC721Creator.json b/contracts/v4/build/IERC721Creator.json index 475fc08..a0fd8d9 100644 --- a/contracts/v4/build/IERC721Creator.json +++ b/contracts/v4/build/IERC721Creator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396995135, + "lastModified": 1586471677144, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/ISuperRare.json b/contracts/v4/build/ISuperRare.json index 02ae84d..68b59ce 100644 --- a/contracts/v4/build/ISuperRare.json +++ b/contracts/v4/build/ISuperRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396995145, + "lastModified": 1586471677152, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Operated.json b/contracts/v4/build/Operated.json index 4058e23..8f95653 100644 --- a/contracts/v4/build/Operated.json +++ b/contracts/v4/build/Operated.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396995242, + "lastModified": 1586471677251, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFT.json b/contracts/v4/build/PixuraNFT.json index 1dfdd2d..93d733f 100644 --- a/contracts/v4/build/PixuraNFT.json +++ b/contracts/v4/build/PixuraNFT.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586396997125, + "lastModified": 1586471679245, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/PixuraNFTContractGenerator.json b/contracts/v4/build/PixuraNFTContractGenerator.json index 8cca767..63fde4b 100644 --- a/contracts/v4/build/PixuraNFTContractGenerator.json +++ b/contracts/v4/build/PixuraNFTContractGenerator.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397000057, + "lastModified": 1586471682312, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SupeRare.json b/contracts/v4/build/SupeRare.json index 78aef4a..7c75385 100644 --- a/contracts/v4/build/SupeRare.json +++ b/contracts/v4/build/SupeRare.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397000690, + "lastModified": 1586471682984, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareMarketAuction.json b/contracts/v4/build/SuperRareMarketAuction.json index 6043aaa..745d6b7 100644 --- a/contracts/v4/build/SuperRareMarketAuction.json +++ b/contracts/v4/build/SuperRareMarketAuction.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397001339, + "lastModified": 1586471683690, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/SuperRareV2.json b/contracts/v4/build/SuperRareV2.json index d1a277d..bfa74ff 100644 --- a/contracts/v4/build/SuperRareV2.json +++ b/contracts/v4/build/SuperRareV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397002734, + "lastModified": 1586471685165, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v4/build/Whitelist.json b/contracts/v4/build/Whitelist.json index 51afb36..ebf2e7e 100644 --- a/contracts/v4/build/Whitelist.json +++ b/contracts/v4/build/Whitelist.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397002773, + "lastModified": 1586471685207, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/MaybeSendValue.json b/contracts/v5/build/MaybeSendValue.json index 890d8b9..9156846 100644 --- a/contracts/v5/build/MaybeSendValue.json +++ b/contracts/v5/build/MaybeSendValue.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397010125, + "lastModified": 1586471688232, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SendValueOrEscrow.json b/contracts/v5/build/SendValueOrEscrow.json index f5d7939..ef0829c 100644 --- a/contracts/v5/build/SendValueOrEscrow.json +++ b/contracts/v5/build/SendValueOrEscrow.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397010797, + "lastModified": 1586471689011, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/SuperRareLegacy.json b/contracts/v5/build/SuperRareLegacy.json index fe173ae..3bb6562 100644 --- a/contracts/v5/build/SuperRareLegacy.json +++ b/contracts/v5/build/SuperRareLegacy.json @@ -1,14 +1,14 @@ { "networks": {}, - "lastModified": 1586397021020, + "lastModified": 1586471700054, "code": { "deployedBytecode": { "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611580565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611622565b6040518082815260200191505060405180910390f35b6107566116f7565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611832565b604051808215151515815260200191505060405180910390f35b6107a661191c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f0611946565b604051808215151515815260200191505060405180910390f35b6108126119a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a47565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bff565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c77565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d72565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f45565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612042565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d6565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd58261215c565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613821602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806138766021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121ce565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121ce565b612042565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137666038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f54611946565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613575603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121d6565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121ce565b826122e8565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138d36031913960400191505060405180910390fd5b6110e88383836123dc565b505050565b60006110f883611622565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806135b4602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611bff565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613904602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611832565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806136116033913960400191505060405180910390fd5b61136c82612400565b9050919050565b61137c81611832565b156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136ba6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b81019080805190602001909291905050509050600061148f83611c77565b905061149a83611c77565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806136eb603d913960400191505060405180910390fd5b6115298183856124c8565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116185780601f106115ed57610100808354040283529160200191611618565b820191906000526020600020905b8154815290600101906020018083116115fb57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806137ce602a913960400191505060405180910390fd5b6116f0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ec565b9050919050565b6116ff611946565b611771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156118a857600080fd5b505afa1580156118bc573d6000803e3d6000fd5b505050506040513d60208110156118d257600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119896121ce565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a3d5780601f10611a1257610100808354040283529160200191611a3d565b820191906000526020600020905b815481529060010190602001808311611a2057829003601f168201915b5050505050905090565b611a4f6121ce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611afd6121ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611baa6121ce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611c10611c0a6121ce565b836122e8565b611c65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138d36031913960400191505060405180910390fd5b611c71848484846124fa565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613728603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d7d8261215c565b611dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061379e6030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e4557600080fd5b505afa158015611e59573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e8357600080fd5b8101908080516040519392919084640100000000821115611ea357600080fd5b83820191506020820185811115611eb957600080fd5b8251866001820283011164010000000082111715611ed657600080fd5b8083526020830192505050908051906020019080838360005b83811015611f0a578082015181840152602081019050611eef565b50505050905090810190601f168015611f375780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f4d611946565b611fbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff1615612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613897603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120de611946565b612150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121598161256c565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561224b57600080fd5b505afa15801561225f573d6000803e3d6000fd5b505050506040513d602081101561227557600080fd5b8101908080519060200190929190505050905061229281836126b2565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122f38261215c565b612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061368e602c913960400191505060405180910390fd5b600061235383611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123c257508373ffffffffffffffffffffffffffffffffffffffff166123aa84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123d357506123d28185612042565b5b91505092915050565b6123e78383836126d3565b6123f1838261292e565b6123fb8282612acc565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137f86029913960400191505060405180910390fd5b80915050919050565b6124d3838383612b93565b6124dd838261292e565b6124e78282612acc565b505050565b600081600001549050919050565b6125058484846123dc565b61251184848484612d93565b612566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135df6032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136446026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126bc82826130cf565b6126c68282612acc565b6126cf8161328b565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126f382611303565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061384d6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061366a6024913960400191505060405180910390fd5b6127ee816132d7565b612835600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613395565b61287c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129866001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133ce90919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a73576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129f357fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a4b57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612ac59190613523565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b8273ffffffffffffffffffffffffffffffffffffffff16612bb382612400565b73ffffffffffffffffffffffffffffffffffffffff1614612c1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061384d6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061366a6024913960400191505060405180910390fd5b612cae816132d7565b612cf5600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613395565b612d3c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000612db48473ffffffffffffffffffffffffffffffffffffffff16613418565b612dc157600190506130c7565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612e056121ce565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612eb5578082015181840152602081019050612e9a565b50505050905090810190601f168015612ee25780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f7a5780518252602082019150602081019050602083039250612f57565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fdc576040519150601f19603f3d011682016040523d82523d6000602084013e612fe1565b606091505b50915091508161304f57600081511115612ffe5780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135df6032913960400191505060405180910390fd5b600081806020019051602081101561306657600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61317b8161215c565b156131ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613287600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133925760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133ad600182600001546133ce90919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600061341083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613463565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561345a57506000801b8214155b92505050919050565b6000838311158290613510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134d55780820151818401526020810190506134ba565b50505050905090810190601f1680156135025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561354a57818360005260206000209182019101613549919061354f565b5b505050565b61357191905b8082111561356d576000816000905550600101613555565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158202387ca0fef32d43b0c27628218c08820c3a386e86333911c3f7cb31c5ee8f46f64736f6c63430005100032" + "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611578565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061161a565b6040518082815260200191505060405180910390f35b6107566116ef565b005b6107846004803603602081101561076e57600080fd5b810190808035906020019092919050505061182a565b604051808215151515815260200191505060405180910390f35b6107a6611914565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061193e565b604051808215151515815260200191505060405180910390f35b61081261199d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a3f565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bf7565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c6f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d37565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f0a565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612007565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209b565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612121565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806137e6602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061383b6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e16612193565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f612193565b612007565b5b610e9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061372b6038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461193e565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f81526020018061353a603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b9050602002013561219b565b8080600101915050611032565b505050565b6000600780549050905090565b611088611082612193565b826122ad565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138986031913960400191505060405180910390fd5b6110e88383836123a1565b505050565b60006110f88361161a565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613579602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611bf7565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806138c9602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e8261182a565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806135d66033913960400191505060405180910390fd5b61136c826123c5565b9050919050565b61137c8161182a565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061367f6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b81019080805190602001909291905050509050600061148f83611c6f565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806136b0603d913960400191505060405180910390fd5b61152181838561248d565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116105780601f106115e557610100808354040283529160200191611610565b820191906000526020600020905b8154815290600101906020018083116115f357829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613793602a913960400191505060405180910390fd5b6116e8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124b1565b9050919050565b6116f761193e565b611769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d60208110156118ca57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611981612193565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a355780601f10611a0a57610100808354040283529160200191611a35565b820191906000526020600020905b815481529060010190602001808311611a1857829003601f168201915b5050505050905090565b611a47612193565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611af5612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ba2612193565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611c08611c02612193565b836122ad565b611c5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138986031913960400191505060405180910390fd5b611c69848484846124bf565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806136ed603e913960400191505060405180910390fd5b80915050919050565b6060611d4282612121565b611d97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806137636030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e0a57600080fd5b505afa158015611e1e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e4857600080fd5b8101908080516040519392919084640100000000821115611e6857600080fd5b83820191506020820185811115611e7e57600080fd5b8251866001820283011164010000000082111715611e9b57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ecf578082015181840152602081019050611eb4565b50505050905090810190601f168015611efc5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f1261193e565b611f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff1615611fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061385c603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120a361193e565b612115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61211e81612531565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561221057600080fd5b505afa158015612224573d6000803e3d6000fd5b505050506040513d602081101561223a57600080fd5b810190808051906020019092919050505090506122578183612677565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122b882612121565b61230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613653602c913960400191505060405180910390fd5b600061231883611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238757508373ffffffffffffffffffffffffffffffffffffffff1661236f84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b8061239857506123978185612007565b5b91505092915050565b6123ac838383612698565b6123b683826128f3565b6123c08282612a91565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612484576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137bd6029913960400191505060405180910390fd5b80915050919050565b612498838383612b58565b6124a283826128f3565b6124ac8282612a91565b505050565b600081600001549050919050565b6124ca8484846123a1565b6124d684848484612d58565b61252b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135a46032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136096026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126818282613094565b61268b8282612a91565b61269481613250565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b882611303565b73ffffffffffffffffffffffffffffffffffffffff1614612724576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138126029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061362f6024913960400191505060405180910390fd5b6127b38161329c565b6127fa600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061335a565b612841600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061337d565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061294b6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061339390919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a38576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b857fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a1057fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8a91906134e8565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b8273ffffffffffffffffffffffffffffffffffffffff16612b78826123c5565b73ffffffffffffffffffffffffffffffffffffffff1614612be4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138126029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061362f6024913960400191505060405180910390fd5b612c738161329c565b612cba600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061335a565b612d01600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061337d565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000612d798473ffffffffffffffffffffffffffffffffffffffff166133dd565b612d86576001905061308c565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612dca612193565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612e7a578082015181840152602081019050612e5f565b50505050905090810190601f168015612ea75780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f3f5780518252602082019150602081019050602083039250612f1c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fa1576040519150601f19603f3d011682016040523d82523d6000602084013e612fa6565b606091505b50915091508161301457600081511115612fc35780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135a46032913960400191505060405180910390fd5b600081806020019051602081101561302b57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61314081612121565b156131b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061324c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061337d565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133575760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133726001826000015461339390919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006133d583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613428565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561341f57506000801b8214155b92505050919050565b60008383111582906134d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561349a57808201518184015260208101905061347f565b50505050905090810190601f1680156134c75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561350f5781836000526020600020918201910161350e9190613514565b5b505050565b61353691905b8082111561353257600081600090555060010161351a565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820292a938fbd825f40473a73a45ace0248b4cd52bf29ae1d0f05569dab28fd90de64736f6c63430005100032" }, "bytecode": { "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405162003ea638038062003ea6833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61396480620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611580565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611622565b6040518082815260200191505060405180910390f35b6107566116f7565b005b6107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611832565b604051808215151515815260200191505060405180910390f35b6107a661191c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f0611946565b604051808215151515815260200191505060405180910390f35b6108126119a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a47565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bff565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c77565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d72565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f45565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612042565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d6565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd58261215c565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613821602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806138766021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e166121ce565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f6121ce565b612042565b5b610e9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806137666038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f54611946565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613575603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b905060200201356121d6565b8080600101915050611032565b505050565b6000600780549050905090565b6110886110826121ce565b826122e8565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138d36031913960400191505060405180910390fd5b6110e88383836123dc565b505050565b60006110f883611622565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806135b4602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611bff565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613904602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e82611832565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806136116033913960400191505060405180910390fd5b61136c82612400565b9050919050565b61137c81611832565b156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806136ba6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b81019080805190602001909291905050509050600061148f83611c77565b905061149a83611c77565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806136eb603d913960400191505060405180910390fd5b6115298183856124c8565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116185780601f106115ed57610100808354040283529160200191611618565b820191906000526020600020905b8154815290600101906020018083116115fb57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806137ce602a913960400191505060405180910390fd5b6116f0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124ec565b9050919050565b6116ff611946565b611771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156118a857600080fd5b505afa1580156118bc573d6000803e3d6000fd5b505050506040513d60208110156118d257600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119896121ce565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a3d5780601f10611a1257610100808354040283529160200191611a3d565b820191906000526020600020905b815481529060010190602001808311611a2057829003601f168201915b5050505050905090565b611a4f6121ce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611afd6121ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611baa6121ce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611c10611c0a6121ce565b836122e8565b611c65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138d36031913960400191505060405180910390fd5b611c71848484846124fa565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613728603e913960400191505060405180910390fd5b600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6060611d7d8261215c565b611dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061379e6030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e4557600080fd5b505afa158015611e59573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e8357600080fd5b8101908080516040519392919084640100000000821115611ea357600080fd5b83820191506020820185811115611eb957600080fd5b8251866001820283011164010000000082111715611ed657600080fd5b8083526020830192505050908051906020019080838360005b83811015611f0a578082015181840152602081019050611eef565b50505050905090810190601f168015611f375780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f4d611946565b611fbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff1615612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613897603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120de611946565b612150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121598161256c565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561224b57600080fd5b505afa15801561225f573d6000803e3d6000fd5b505050506040513d602081101561227557600080fd5b8101908080519060200190929190505050905061229281836126b2565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122f38261215c565b612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061368e602c913960400191505060405180910390fd5b600061235383611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123c257508373ffffffffffffffffffffffffffffffffffffffff166123aa84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b806123d357506123d28185612042565b5b91505092915050565b6123e78383836126d3565b6123f1838261292e565b6123fb8282612acc565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137f86029913960400191505060405180910390fd5b80915050919050565b6124d3838383612b93565b6124dd838261292e565b6124e78282612acc565b505050565b600081600001549050919050565b6125058484846123dc565b61251184848484612d93565b612566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135df6032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136446026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126bc82826130cf565b6126c68282612acc565b6126cf8161328b565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126f382611303565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061384d6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061366a6024913960400191505060405180910390fd5b6127ee816132d7565b612835600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613395565b61287c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129866001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133ce90919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a73576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129f357fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a4b57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612ac59190613523565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b8273ffffffffffffffffffffffffffffffffffffffff16612bb382612400565b73ffffffffffffffffffffffffffffffffffffffff1614612c1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061384d6029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061366a6024913960400191505060405180910390fd5b612cae816132d7565b612cf5600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613395565b612d3c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000612db48473ffffffffffffffffffffffffffffffffffffffff16613418565b612dc157600190506130c7565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612e056121ce565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612eb5578082015181840152602081019050612e9a565b50505050905090810190601f168015612ee25780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f7a5780518252602082019150602081019050602083039250612f57565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fdc576040519150601f19603f3d011682016040523d82523d6000602084013e612fe1565b606091505b50915091508161304f57600081511115612ffe5780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135df6032913960400191505060405180910390fd5b600081806020019051602081101561306657600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61317b8161215c565b156131ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613287600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133b8565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133925760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133ad600182600001546133ce90919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600061341083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613463565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561345a57506000801b8214155b92505050919050565b6000838311158290613510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134d55780820151818401526020810190506134ba565b50505050905090810190601f1680156135025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561354a57818360005260206000209182019101613549919061354f565b5b505050565b61357191905b8082111561356d576000816000905550600101613555565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158202387ca0fef32d43b0c27628218c08820c3a386e86333911c3f7cb31c5ee8f46f64736f6c63430005100032" + "object": "60806040523480156200001157600080fd5b5060405162003e6b38038062003e6b833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828181620001de6301ffc9a760e01b6200037260201b60201c565b620001f66380ac58cd60e01b6200037260201b60201c565b6200020e63780e9d6360e01b6200037260201b60201c565b81600990805190602001906200022692919062000483565b5080600a90805190602001906200023f92919062000483565b5062000258635b5e139f60e01b6200037260201b60201c565b5050505060006200026e6200047b60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060006101000a81548160ff02191690831515021790555050505062000532565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f7565b82800160010185558215620004f7579182015b82811115620004f6578251825591602001919060010190620004d9565b5b5090506200050691906200050a565b5090565b6200052f91905b808211156200052b57600081600090555060010162000511565b5090565b90565b61392980620005426000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd14610a50578063e79c788414610af7578063e985e9c514610b01578063f2fde38b14610b7d576101a9565b8063a22cb4651461088d578063b88d4fde146108dd578063c0b41dfa146109e2576101a9565b806382f11a1a116100d357806382f11a1a146107585780638da5cb5b1461079e5780638f32d59b146107e857806395d89b411461080a576101a9565b80636c0360eb1461067357806370a08231146106f6578063715018a61461074e576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146105275780634f6ccce7146105955780636352211e146105d7578063651bd4bb14610645576101a9565b806323b872dd146103e95780632f745c591461045757806340c1a064146104b9576101a9565b806301ffc9a7146101ae57806306fdde0314610213578063081812fc14610296578063095ea7b3146103045780630ba4ea4b1461035257806318160ddd146103cb575b600080fd5b6101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61021b610c28565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025b578082015181840152602081019050610240565b50505050905090810190601f1680156102885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2600480360360208110156102ac57600080fd5b8101908080359060200190929190505050610cca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d65565b005b6103c96004803603602081101561036857600080fd5b810190808035906020019064010000000081111561038557600080fd5b82018360208201111561039757600080fd5b803590602001918460208302840111640100000000831117156103b957600080fd5b9091929391929390505050610f4c565b005b6103d361106a565b6040518082815260200191505060405180910390f35b610455600480360360608110156103ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611077565b005b6104a36004803603604081101561046d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ed565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b81019080803590602001909291905050506111ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105936004803603606081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b005b6105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050611283565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b8101908080359060200190929190505050611303565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716004803603602081101561065b57600080fd5b8101908080359060200190929190505050611373565b005b61067b611578565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5780820151818401526020810190506106a0565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061161a565b6040518082815260200191505060405180910390f35b6107566116ef565b005b6107846004803603602081101561076e57600080fd5b810190808035906020019092919050505061182a565b604051808215151515815260200191505060405180910390f35b6107a6611914565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f061193e565b604051808215151515815260200191505060405180910390f35b61081261199d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610852578082015181840152602081019050610837565b50505050905090810190601f16801561087f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108db600480360360408110156108a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a3f565b005b6109e0600480360360808110156108f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184600183028401116401000000008311171561098e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bf7565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611c6f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050611d37565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610abc578082015181840152602081019050610aa1565b50505050905090810190601f168015610ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aff611f0a565b005b610b6360048036036040811015610b1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612007565b604051808215151515815260200191505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209b565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050905090565b6000610cd582612121565b610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806137e6602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7082611303565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061383b6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e16612193565b73ffffffffffffffffffffffffffffffffffffffff161480610e455750610e4481610e3f612193565b612007565b5b610e9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061372b6038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610f5461193e565b610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff161561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f81526020018061353a603f913960400191505060405180910390fd5b60008090505b828290508110156110655761105883838381811061104c57fe5b9050602002013561219b565b8080600101915050611032565b505050565b6000600780549050905090565b611088611082612193565b826122ad565b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138986031913960400191505060405180910390fd5b6110e88383836123a1565b505050565b60006110f88361161a565b821061114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613579602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061119957fe5b9060005260206000200154905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5da8d44836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561122157600080fd5b505afa158015611235573d6000803e3d6000fd5b505050506040513d602081101561124b57600080fd5b81019080805190602001909291905050509050919050565b61127e83838360405180602001604052806000815250611bf7565b505050565b600061128d61106a565b82106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806138c9602c913960400191505060405180910390fd5b600782815481106112f157fe5b90600052602060002001549050919050565b600061130e8261182a565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806135d66033913960400191505060405180910390fd5b61136c826123c5565b9050919050565b61137c8161182a565b156113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061367f6031913960400191505060405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b81019080805190602001909291905050509050600061148f83611c6f565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806136b0603d913960400191505060405180910390fd5b61152181838561248d565b81600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116105780601f106115e557610100808354040283529160200191611610565b820191906000526020600020905b8154815290600101906020018083116115f357829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613793602a913960400191505060405180910390fd5b6116e8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124b1565b9050919050565b6116f761193e565b611769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d60208110156118ca57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614915050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611981612193565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a355780601f10611a0a57610100808354040283529160200191611a35565b820191906000526020600020905b815481529060010190602001808311611a1857829003601f168201915b5050505050905090565b611a47612193565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060046000611af5612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ba2612193565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611c08611c02612193565b836122ad565b611c5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138986031913960400191505060405180910390fd5b611c69848484846124bf565b50505050565b600080600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806136ed603e913960400191505060405180910390fd5b80915050919050565b6060611d4282612121565b611d97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806137636030913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611e0a57600080fd5b505afa158015611e1e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611e4857600080fd5b8101908080516040519392919084640100000000821115611e6857600080fd5b83820191506020820185811115611e7e57600080fd5b8251866001820283011164010000000082111715611e9b57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ecf578082015181840152602081019050611eb4565b50505050905090810190601f168015611efc5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b611f1261193e565b611f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060009054906101000a900460ff1615611fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061385c603c913960400191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120a361193e565b612115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61211e81612531565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561221057600080fd5b505afa158015612224573d6000803e3d6000fd5b505050506040513d602081101561223a57600080fd5b810190808051906020019092919050505090506122578183612677565b80600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122b882612121565b61230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613653602c913960400191505060405180910390fd5b600061231883611303565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238757508373ffffffffffffffffffffffffffffffffffffffff1661236f84610cca565b73ffffffffffffffffffffffffffffffffffffffff16145b8061239857506123978185612007565b5b91505092915050565b6123ac838383612698565b6123b683826128f3565b6123c08282612a91565b505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612484576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137bd6029913960400191505060405180910390fd5b80915050919050565b612498838383612b58565b6124a283826128f3565b6124ac8282612a91565b505050565b600081600001549050919050565b6124ca8484846123a1565b6124d684848484612d58565b61252b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135a46032913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136096026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126818282613094565b61268b8282612a91565b61269481613250565b5050565b8273ffffffffffffffffffffffffffffffffffffffff166126b882611303565b73ffffffffffffffffffffffffffffffffffffffff1614612724576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138126029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061362f6024913960400191505060405180910390fd5b6127b38161329c565b6127fa600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061335a565b612841600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061337d565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061294b6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061339390919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114612a38576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106129b857fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a1057fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612a8a91906134e8565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b8273ffffffffffffffffffffffffffffffffffffffff16612b78826123c5565b73ffffffffffffffffffffffffffffffffffffffff1614612be4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138126029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061362f6024913960400191505060405180910390fd5b612c738161329c565b612cba600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061335a565b612d01600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061337d565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000612d798473ffffffffffffffffffffffffffffffffffffffff166133dd565b612d86576001905061308c565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612dca612193565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612e7a578082015181840152602081019050612e5f565b50505050905090810190601f168015612ea75780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f3f5780518252602082019150602081019050602083039250612f1c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fa1576040519150601f19603f3d011682016040523d82523d6000602084013e612fa6565b606091505b50915091508161301457600081511115612fc35780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135a46032913960400191505060405180910390fd5b600081806020019051602081101561302b57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61314081612121565b156131b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061324c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061337d565b5050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133575760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6133726001826000015461339390919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60006133d583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613428565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561341f57506000801b8214155b92505050919050565b60008383111582906134d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561349a57808201518184015260208101905061347f565b50505050905090810190601f1680156134c75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b81548183558181111561350f5781836000526020600020918201910161350e9190613514565b5b505050565b61353691905b8082111561353257600081600090555060010161351a565b5090565b9056fe5375706572526172654c65676163793a2043616e6e6f74206d696e7420746f6b656e73206f6e6365206d696e74696e672068617320636f6d706c657465642e455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465725375706572526172654c65676163793a206f776e657220717565727920666f72206e6f6e2d757067726164656420746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e5375706572526172654c65676163793a2063616e6e6f74207265667265736820616e20757067726164656420746f6b656e5375706572526172654c65676163793a2063616e6e6f742072656672657368207768656e207072652d75706772616465206f776e657273206d617463685375706572526172654c65676163793a207072652d75706772616465206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c5375706572526172654c65676163793a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725375706572526172654c65676163793a2043616e6e6f74206d61726b20636f6d706c6574656420696620616c726561647920636f6d706c657465642e4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820292a938fbd825f40473a73a45ace0248b4cd52bf29ae1d0f05569dab28fd90de64736f6c63430005100032" } }, "abi": [ diff --git a/contracts/v5/build/SuperRareMarketAuctionV2.json b/contracts/v5/build/SuperRareMarketAuctionV2.json index be1eb72..6dc7522 100644 --- a/contracts/v5/build/SuperRareMarketAuctionV2.json +++ b/contracts/v5/build/SuperRareMarketAuctionV2.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397012503, + "lastModified": 1586471690863, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestAssertFailOnPay.json b/contracts/v5/build/TestAssertFailOnPay.json index 955b6ac..92e1534 100644 --- a/contracts/v5/build/TestAssertFailOnPay.json +++ b/contracts/v5/build/TestAssertFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397014097, + "lastModified": 1586471692522, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestExpensiveWallet.json b/contracts/v5/build/TestExpensiveWallet.json index fdb5d87..81da9b4 100644 --- a/contracts/v5/build/TestExpensiveWallet.json +++ b/contracts/v5/build/TestExpensiveWallet.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397017070, + "lastModified": 1586471695701, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRequireFailOnPay.json b/contracts/v5/build/TestRequireFailOnPay.json index b388514..c3484d6 100644 --- a/contracts/v5/build/TestRequireFailOnPay.json +++ b/contracts/v5/build/TestRequireFailOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397015569, + "lastModified": 1586471694089, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/build/TestRevertOnPay.json b/contracts/v5/build/TestRevertOnPay.json index 1709b46..a7e16dc 100644 --- a/contracts/v5/build/TestRevertOnPay.json +++ b/contracts/v5/build/TestRevertOnPay.json @@ -1,6 +1,6 @@ { "networks": {}, - "lastModified": 1586397018521, + "lastModified": 1586471697398, "code": { "deployedBytecode": { "linkReferences": {}, diff --git a/contracts/v5/src/SuperRareLegacy.sol b/contracts/v5/src/SuperRareLegacy.sol index 816a283..10fcc9c 100644 --- a/contracts/v5/src/SuperRareLegacy.sol +++ b/contracts/v5/src/SuperRareLegacy.sol @@ -13,6 +13,11 @@ import "./IERC721Creator.sol"; * @dev This contract acts the new SuperRare Legacy contract (formerly known as SupeRare). * It is used to upgrade SupeRare tokens to make them fully ERC721 compliant. * + * Steps for upgrading: + * 1.) As the token owner, make sure you are the `preUpgradeOwner` to ensure you are the receiver of the new token. + * 2.) Transfer your old token to this contract's address. + * 3.) Boom! You're now the owner of the upgraded token. + * */ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { using SafeMath for uint256; @@ -54,7 +59,7 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { ///////////////////////////////////////////////////////////////////////// /** * @dev Mints the legacy tokens without emitting any events. - * @param _tokenIds uint256 array of token ids mint. + * @param _tokenIds uint256 array of token ids to mint. */ function mintLegacyTokens(uint256[] calldata _tokenIds) external onlyOwner { require( @@ -104,7 +109,8 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { // preUpgradeOwnerOf ///////////////////////////////////////////////////////////////////////// /** - * @dev Returns the pre-upgrade token owner of the NFT specified by `tokenId`. This owner will become the owner of the upgrade legacy token. Throws if + * @dev Returns the pre-upgrade token owner of the NFT specified by `tokenId`. + * This owner will become the owner of the upgraded token. * @param _tokenId uint256 token id to get the pre-upgrade owner of. * @return address of the token pre-upgrade owner. */ @@ -114,7 +120,7 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { preUpgradeOwner != address(0), "SuperRareLegacy: pre-upgrade owner query for nonexistent token" ); - return _tokenOwnerPreUpgrade[_tokenId]; + return preUpgradeOwner; } ///////////////////////////////////////////////////////////////////////// @@ -134,7 +140,9 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { // refreshPreUpgradeOwnerOf ///////////////////////////////////////////////////////////////////////// /** - * @dev Refreshes the pre-upgrade token owner. Useful in the event of a non-upgraded token transferring ownership. Throws if token has upgraded or if there is nothing to refresh. + * @dev Refreshes the pre-upgrade token owner. Useful in the event of a + * non-upgraded token transferring ownership. Throws if token has upgraded + * or if there is nothing to refresh. * @param _tokenId uint256 token id to refresh the pre-upgrade token owner. * @return address of the token pre-upgrade owner. */ @@ -146,7 +154,7 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { address ownerOnOldSuperRare = oldSuperRare.ownerOf(_tokenId); address outdatedOwner = preUpgradeOwnerOf(_tokenId); require( - ownerOnOldSuperRare != preUpgradeOwnerOf(_tokenId), + ownerOnOldSuperRare != outdatedOwner, "SuperRareLegacy: cannot refresh when pre-upgrade owners match" ); _transferFromNoEvent(outdatedOwner, ownerOnOldSuperRare, _tokenId); @@ -157,7 +165,9 @@ contract SuperRareLegacy is ERC721Full, IERC721Creator, Ownable { // tokenCreator ///////////////////////////////////////////////////////////////////////// /** - * @dev Refreshes the pre-upgrade token owner. Useful in the event of a non-upgraded token transferring ownership. Throws if token has upgraded or if there is nothing to refresh. + * @dev Refreshes the pre-upgrade token owner. Useful in the event of a + * non-upgraded token transferring ownership. Throws if token has upgraded + * or if there is nothing to refresh. * @param _tokenId uint256 token id to refresh the pre-upgrade token owner. * @return address of the token pre-upgrade owner. */ diff --git a/purs-contracts/src/Main.purs b/purs-contracts/src/Main.purs deleted file mode 100644 index 8e8a8b7..0000000 --- a/purs-contracts/src/Main.purs +++ /dev/null @@ -1,9 +0,0 @@ -module Main where - -import Prelude -import Effect (Effect) -import Effect.Console (log) - -main :: Effect Unit -main = do - log "🍝" diff --git a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs index 50948ee..d21b645 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareLegacy.purs @@ -7,26 +7,24 @@ import Data.Array.Partial (head) import Data.Either (isLeft) import Data.Maybe (Maybe(..), maybe) import Data.Traversable (for) -import Deploy.Contracts.SuperRareLegacy (SuperRareLegacy, mintLegacyTokens) +import Deploy.Contracts.SuperRareLegacy (mintLegacyTokens) import Deploy.Contracts.SuperRareLegacy (deployScript) as SuperRareLegacy import Deploy.Utils (GasSettings(..)) import Effect.Aff (Aff, try) -import Effect.Class.Console (logShow) import Network.Ethereum.Core.BigNumber (decimal, parseBigNumber) -import Network.Ethereum.Web3 (embed) import Partial.Unsafe (unsafePartial) import Record as Record -import Test.Spec (SpecT, beforeAll, describe, describeOnly, it, itOnly, pending) -import Test.Spec.Assertions (shouldEqual, shouldNotSatisfy, shouldSatisfy) +import Test.Spec (SpecT, beforeAll, describe, it) +import Test.Spec.Assertions (shouldEqual, shouldSatisfy) import Test.Spec.Contracts.SupeRare as SupeRare import Test.Spec.Contracts.SupeRare as SupeRareSpec import Test.Spec.Contracts.SuperRareLegacy.Actions (TestEnv, isApprovedForAll, isUpgraded, ownerOf, preUpgradeOwnerOf, refreshPreUpgradeOwnerOf, setApprovalForAll, tokenCreator, tokenURI, totalSupply, transferFrom) -import Test.Spec.Contracts.Utils (createTokensWithFunction, intToUInt256, nullAddress, uInt256FromBigNumber, web3Test) +import Test.Spec.Contracts.Utils (createTokensWithFunction, intToUInt256, nullAddress, web3Test) spec :: SpecT Aff Unit Aff Unit spec = beforeAll (init Nothing) do - describeOnly "SuperRareLegacy" + describe "SuperRareLegacy" $ do it "should have correct total supply" \tenv@{ provider } -> web3Test provider do diff --git a/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs b/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs index b47212f..048f9fa 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareMarkAuctionV2/Actions.purs @@ -15,7 +15,6 @@ import Data.Maybe (fromJust) import Data.Ord (abs) import Data.Symbol (SProxy(..)) import Data.Traversable (for, traverse) -import Deploy.Contracts.SuperRareLegacy as SuperRareLegacy import Deploy.Contracts.SuperRareV2 (SuperRareV2) as SuperRareV2 import Deploy.Utils (awaitTxSuccessWeb3) import Effect.Class (class MonadEffect, liftEffect) diff --git a/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs b/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs index c967879..0ca7de7 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareMarketAuctionV2.purs @@ -4,7 +4,7 @@ import Prelude import Chanterelle.Test (buildTestConfig) import Data.Array (filter, length, replicate, zipWith) import Data.Array.Partial (head) -import Data.Maybe (Maybe(..), fromJust) +import Data.Maybe (fromJust) import Data.Symbol (SProxy(..)) import Data.Traversable (for) import Deploy.Contracts.SuperRareMarketAuctionV2 (deployScript) as SuperRareMarketAuctionV2 @@ -14,7 +14,7 @@ import Network.Ethereum.Core.HexString (nullWord, takeHex) import Network.Ethereum.Web3 (embed, mkAddress, unUIntN) import Partial.Unsafe (unsafePartial) import Record as Record -import Test.Spec (SpecT, beforeAll, describe, it, itOnly) +import Test.Spec (SpecT, beforeAll, describe, it) import Test.Spec.Assertions (shouldEqual) import Test.Spec.Contracts.SuperRareLegacy as SuperRareLegacySpec import Test.Spec.Contracts.SuperRareMarketAuctionV2.Actions (TestEnv, acceptBid, assertFailBid, bid, buy, cancelBid, checkEthDifference, checkNewOwnerStatus, checkPayout, claimMoneyFromExpensiveWallet, currentBidDetailsOfToken, expensiveWalletBid, genPercentageLessThan, genPriceAndSet, genTokenPrices, hasTokenBeenSold, markTokensAsSold, mkPurchasePayload, mkSuperRareTokens, mkTokensAndSetForSale, payments, placeBid, requireFailBid, revertFailBid, setERC721ContractRoyaltyFee, setSalePrice, tokenPrice) diff --git a/purs-contracts/test/Spec/Contracts/SuperRareV2.purs b/purs-contracts/test/Spec/Contracts/SuperRareV2.purs index e6c5737..2931144 100644 --- a/purs-contracts/test/Spec/Contracts/SuperRareV2.purs +++ b/purs-contracts/test/Spec/Contracts/SuperRareV2.purs @@ -5,7 +5,7 @@ import Chanterelle.Internal.Deploy (DeployReceipt) import Chanterelle.Internal.Types (NoArgs) import Chanterelle.Test (buildTestConfig) import Contracts.V4.SuperRareV2 (addNewToken, addToWhitelist, isApprovedForAll, isWhitelisted, ownerOf, setApprovalForAll, tokenByIndex, tokenURI, totalSupply, transferFrom) as SuperRareV2 -import Data.Array (filter, length, replicate, zipWith) +import Data.Array (filter, length, replicate) import Data.Array.Partial (head) import Data.Lens ((?~)) import Data.Symbol (SProxy(..)) @@ -21,7 +21,7 @@ import Record as Record import Test.Spec (SpecT, beforeAll, describe, it) import Test.Spec.Assertions (shouldEqual) import Test.Spec.Contracts.SupeRare as SupeRare -import Test.Spec.Contracts.Utils (defaultTxOpts, createTokensWithFunction, intToUInt256, mkTokenUris, throwOnCallError, web3Test) +import Test.Spec.Contracts.Utils (createTokensWithFunction, defaultTxOpts, intToUInt256, throwOnCallError, web3Test) spec :: SpecT Aff Unit Aff Unit spec =